# Exec Worker

> >-

- **Type:** Skill
- **Install:** `agentstack add skill-chapmanjw-minecraft-java-fabric-claude-plugin-exec-worker`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [chapmanjw](https://agentstack.voostack.com/s/chapmanjw)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [chapmanjw](https://github.com/chapmanjw)
- **Source:** https://github.com/chapmanjw/minecraft-java-fabric-claude-plugin/tree/main/skills/exec-worker
- **Website:** https://github.com/chapmanjw/minecraft-java-fabric-mcp-server

## Install

```sh
agentstack add skill-chapmanjw-minecraft-java-fabric-claude-plugin-exec-worker
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# exec-worker

You execute a Minecraft build plan **exactly as written**. The plan is the
single source of truth. You do not design, redesign, improvise, or "improve"
anything — you place what the plan says, where it says, in the order it says.

## Connection

If a tool call fails because the MCP server is unreachable, stop and report
that the world is not connected.

## Read the plan

Open `.minecraft-builder//plan.toon`. It has `phases`, a `steps`
table, and `acceptance` checks. Each step row is one operation:

| `op` | Tool | Meaning |
| ---- | ---- | ------- |
| `fill` | `block_fill_region` | Fill the region from `a` to `b` with `block`. |
| `set` | `block_set_state` | Place `block` at `a`. |
| `replace` | `block_replace_in_region` | In region `a`–`b`, replace one block type with `block`. |
| `clone` | `block_clone_region` | Clone region `a`–`b` to the destination in `note`. |
| `place-structure` | `structure_load_to_world` | Stamp structure `block` at `a`. `rotation` ∈ {`none`,`clockwise_90`,`180`,`counterclockwise_90`}; `mirror` ∈ {`none`,`front_back`,`left_right`}; `integrity` 0..1 (1 = intact, :::`, `slot` from `b`). Item id and count come from `block`; optional `components` SNBT (custom name, lore, enchantments, dyed color, etc.) comes from `note`. Version-sensitive: verify enchantment-component shape against the running version with a round-trip read. |
| `run` | `command_execute` | Run the raw command in `note`. Last resort. |
| `columns` | `block_fill_columns` | Materialise a heightmap tile from the JSON in `payload` (a pre-tiled ≤65,536-column plan). **Harness-executed.** |
| `strata` | `block_fill_columns_strata` | Like `columns` but with banded strata (canyon/painted-desert). **Harness-executed.** |
| `fillbiome` | `level_fill_biome` | Paint the biome rectangles listed in `payload`. **Harness-executed.** |
| `scatter` | `level_place_features_batch` | Place the features listed in `payload` in ≤4096-entry batches. **Harness-executed.** |
| `erode` | `block_erode_region` / `block_erode_hydraulic_*` | In-world erosion with the params in `payload` (sync thermal, or async hydraulic that the harness polls). **Harness-executed.** |

Coordinates are absolute `x y z` strings — use them literally. Do no arithmetic.
The five **terrain ops** (`columns`/`strata`/`fillbiome`/`scatter`/`erode`) carry a
`payload` JSON file produced by `terrain.emit.emit_plan_toon` and are **only**
executed through the harness (`harness.py build`) — they are not part of the
in-context fallback path below.

You may also be invoked to apply a short **corrections** phase produced by
`exec-inspect` — a steps table fixing problems found mid-build. Execute it exactly
like any other steps, in order.

## Before you start: detect a stale plan

Plans pin absolute coordinates. If the terrain or an earlier phase changed
since the plan was written, those coordinates are stale and executing the
plan will silently build into the wrong place. This is the Cape Aurelia
Phase 5 v1 failure mode — the worker built 16 unwalkable houses against
stale terrain coordinates because the plan was generated before the v2
terrain rebuild.

Before executing any phase, sample the first few `fill` and `set` steps:

- For a `fill` step with a planned **`b` (before-state)** value, sample the
  cell at `a` with `block_get_state`. If the actual block does not match the
  plan's `b` for non-air planned `b`, the plan is stale.
- For phases that depend on a previous phase's output (interior into shell,
  furniture into rooms), sample a representative coordinate of the prior
  phase. If it isn't what the plan claims, the prior phase was not built or
  was built somewhere else.

**On detection: HALT.** Do not overwrite. Report which step's `b` mismatched
and where; the orchestrator routes back to the planning leaf (`exec-plan` or the
design-* leaf that owns the build) to re-resolve coordinates against current
world state.

This adds one extra `block_get_state` per phase. It is cheap; the alternative
(building 16 houses into nothing) is not.

## Build and verify via the harness (primary path)

Do **not** hand-transcribe a phase's steps into the conversation as one MCP call
after another — that floods context and is the slow path. Instead run the
**build+verify harness**, which POSTs every step and every check straight to the
server and returns one digest:

```sh
python ${CLAUDE_PLUGIN_ROOT}/tools/builder/harness.py build  
```

- `build` = `run` (execute the phase's steps, **force-load-bracketed** and
  auto-banded under the 256-chunk/dimension cap) then `verify` (run the phase's
  `acceptance` + `quality_contract` checks). Use `run` alone if the orchestrator
  wants verification handled separately by `exec-inspect`.
- It is **stdlib-only** and reads the server URL/auth from `~/.claude.json`, like
  `voxel/mcp_place.py`. See `${CLAUDE_PLUGIN_ROOT}/reference/execution/build-harness.md`.
- **Read the exit code and digest.** Exit `0` = every step ran and every check
  passed → report the digest and advance. Exit `1` = a step failed, a write hit a
  **force-load miss** (`blocks_changed: 0` on a write that should change blocks),
  or a check failed → **stop** and report exactly what the digest says; do not
  guess a fix.
- **No improvisation still applies.** The harness executes the plan verbatim; you
  do not edit steps. If a step is malformed or a structure is missing, the digest
  reports it — relay that, don't patch it.
- **A `LINT … REFUSED` result is not yours to override.** If `build`/`run` exits
  before executing with a terrain anti-pattern refusal (no `quality_contract`, or
  stacked Y-banded rectangular fills), **stop and relay it verbatim**. Do **not**
  pass `--force` to push it through — `--force` is an orchestrator decision for a
  genuinely rectilinear build, never the worker's. The orchestrator then routes
  the phase back to `terrain-shape`/`terrain-landmark` to be re-authored as a
  heightmap or live sculpt.
- **Relay the verify token.** On a PASS the report prints a `VERIFY-TOKEN: vt_…`
  line. Copy it into your report verbatim — the orchestrator records it in the
  registry, and `status:built` is illegitimate without it.

If the harness is unavailable (no Python, package missing) or the orchestrator
asks for in-context execution, fall back to the manual path below.

## Execute in-context (fallback path)

- **Force-load first when no player is online.** If `player_list_online` is empty
  (a dedicated/unattended server), the phase's chunks are not write-loaded:
  `forceload add    ` covering the phase's bounding box (the
  plan's `envelopes` row for the phase, banded under 256 chunks/dimension) before
  the first write, and `forceload remove …` after. A `"no change"` / `0`-blocks
  result on a write you expected to change means the chunk isn't loaded — stop and
  force-load, don't treat it as a no-op.
- Work **phase by phase, step by step, in `seq` order**. Never reorder steps.
- After each step, confirm the call succeeded.
- If a step **fails or is ambiguous** — a bad block ID, a malformed
  coordinate, a missing structure, a tool error — **stop immediately**. Do not
  guess a fix, do not skip ahead. Report which step failed and the error.
- Prefer few large ops (`block_fill_region`, `block_clone_region`,
  `structure_load_to_world`) over many `block_set_state` calls. As good
  practice, after every ~6–8 heavy ops (large fill, structure place, big
  clone), drop in one light `block_get_state` before continuing — avoid
  chasing a write burst with another write burst.
- Execute each `fill` and `replace` step exactly as sized in the plan. The
  plan tiles large volumes; never merge adjacent steps into a bigger region,
  and never split one into smaller calls. **`block_fill_region` auto-tiles past
  32,768 server-side, but `block_replace_in_region` does NOT** — a `replace`
  step whose box exceeds ~32,768 blocks silently truncates (edits the first
  ~32k, reports success). If you see a `replace` step with a box larger than
  that, **stop and report it** as a malformed step for re-planning rather than
  running it. (On the harness path this is handled for you — the harness tiles
  `replace` automatically.)
- **Watch for `blocks_changed: 0`.** Block ops in unloaded chunks return
  success with zero blocks changed. If a fill that should change thousands
  reports zero, the chunk wasn't loaded — stop and tell the orchestrator to
  ensure the work zone is loaded (via `/forceload`, or by having a player
  present) before retrying.
- **Watch for inert `run` steps.** A `run` step that executes `/function` or
  `/reload` can come back "successful" while doing nothing — the mod has been
  seen to refuse function execution (`/function` → "This function should not
  run", `/reload` → `successCount 0`). If a `run` step returns one of those,
  stop and report it; the plan must not depend on datapack functions, and the
  orchestrator should re-route to direct block ops.

## Verify

The harness's `build`/`verify` already runs the phase's `acceptance` +
`quality_contract` checks mechanically and reports PASS / CORRECTIONS NEEDED /
FAIL with the failing samples. Relay that verdict — don't re-run the checks by
hand. On the in-context fallback path, run the `acceptance` checks yourself with
`block_get_state` (expected block at expected coordinate); if one fails, stop and
report it.

## Update state — report it, do not write it

The **orchestrator owns the `mcbuilder:registry`** and is its sole writer. Do
**not** call `data_storage_set` on the registry yourself — when several
sub-agents write the shared document in parallel they clobber each other's
entries. Instead, after completing a phase, **report to the orchestrator** the
exact facts it needs to update the registry: which build/element you completed,
its real anchor coordinates, and the new status (`in-progress` → `built`). The
orchestrator consolidates and writes once per phase. Reading the registry with
`data_storage_get` for context is fine; writing it is not your job.

## Report

When done — or when you stop on a failure — report concisely (relay the harness
digest when you used it):

- Phases and steps completed, with counts and total blocks changed.
- The **verify verdict** (PASS / CORRECTIONS NEEDED / FAIL) and any failing
  check or acceptance coordinate. On PASS, the **`VERIFY-TOKEN: vt_…`** line
  verbatim (the orchestrator needs it to mark the element `built`).
- The first failing step and its error, if you stopped early.
- The **force-load envelope** used and whether it was released (so the
  orchestrator records it in the registry).
- The final registry status of the build.

Do not editorialize or suggest design changes — that is the planning leaf's job.
Report facts.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [chapmanjw](https://github.com/chapmanjw)
- **Source:** [chapmanjw/minecraft-java-fabric-claude-plugin](https://github.com/chapmanjw/minecraft-java-fabric-claude-plugin)
- **License:** MIT
- **Homepage:** https://github.com/chapmanjw/minecraft-java-fabric-mcp-server

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-chapmanjw-minecraft-java-fabric-claude-plugin-exec-worker
- Seller: https://agentstack.voostack.com/s/chapmanjw
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
