agentleFS
chapmanjwchapmanjw/minecraft-java-fabric-claude-plugin/skills/exec-worker/SKILL.md

exec-worker

Skill9 starsChanged 4 months agoMITView on GitHub

Executes a detailed Minecraft build plan step by step — placing, filling, cloning blocks and stamping structures exactly as specified, with no redesign or improvisation. Use to carry out a plan.toon produced by exec-plan once it is detailed enough to follow mechanically. Part of the minecraft-builder workflow.

The file

Show its rules and text

We split this skill into the rules it gives an agent

13 rules. About 0 are common, 7 are distinctive, and 6 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈7

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 6

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

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

    line 23
  2. Very specific:

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

    line 67
  3. Very specific:

    On detection: HALT: Do not overwrite. Report which step's b mismatched and where.

    line 77
  4. Distinctive:

    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.

    line 87
  5. Very specific:

    A LINT … REFUSED result is not yours to override: If build/run exits before executing with a terrain anti-pattern refusal (no …

    line 110
  6. Distinctive:

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

    line 121
  7. Very specific:

    Force-load first when no player is online: If player_list_online is empty (a dedicated/unattended server), the phase's chunks are not …

    line 126
  8. Distinctive:

    After each step, confirm the call succeeded.

    line 134
  9. Distinctive:

    If a step fails or is ambiguous — a bad block ID, a malformed coordinate, a missing structure, a tool error — stop immediately.

    line 135
  10. Very specific:

    Prefer few large ops (block_fill_region, block_clone_region, structure_load_to_world) over many block_set_state calls.

    line 138
  11. Very specific:

    not: call data_storage_set on the registry yourself — when several sub-agents write the shared document in parallel they clobber each …

    line 176
  12. Distinctive:

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

    line 186
  13. Distinctive:

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

    line 198

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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/<project>/plan.toon. It has phases, a steps table, and acceptance checks. Each step row is one operation:

opToolMeaning
fillblock_fill_regionFill the region from a to b with block.
setblock_set_statePlace block at a.
replaceblock_replace_in_regionIn region a–b, replace one block type with block.
cloneblock_clone_regionClone region a–b to the destination in note.
place-structurestructure_load_to_worldStamp structure block at a. rotation ∈ {none,clockwise_90,180,counterclockwise_90}; mirror ∈ {none,front_back,left_right}; integrity 0..1 (1 = intact, <1 = random decay/weathering); include_entities boolean. Use the exact enum strings — never "90 degrees" or bare numbers.
spawnentity_summonSpawn entity block at a (note carries any SNBT tags). Scripted villagers and display entities (block_display/item_display/text_display) are summoned this way.
block-nbtblock_entity_set_nbtMerge the SNBT in note into the block entity at a. Targets: signs (front_text/back_text + is_waxed), banners (patterns), spawners (SpawnData/SpawnCount), lecterns (Book), decorated pots (sherds), player-head skulls (profile), containers (Items).
set-slotinventory_set_slotPlace an item into the container at a (target = block:<dim>:<x>:<y>:<z>, 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.
runcommand_executeRun the raw command in note. Last resort.
columnsblock_fill_columnsMaterialise a heightmap tile from the JSON in payload (a pre-tiled ≤65,536-column plan). Harness-executed.
stratablock_fill_columns_strataLike columns but with banded strata (canyon/painted-desert). Harness-executed.
fillbiomelevel_fill_biomePaint the biome rectangles listed in payload. Harness-executed.
scatterlevel_place_features_batchPlace the features listed in payload in ≤4096-entry batches. Harness-executed.
erodeblock_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:

python ${CLAUDE_PLUGIN_ROOT}/tools/builder/harness.py build <plan.toon> <phase>
  • 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 <x1> <z1> <x2> <z2> 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.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.