Planning
Decompose a confirmed contract into an atomic task DAG with wave ordering. Every task cites one or more contract criterion ids.From its SKILL.md
npx -y skills add forsonny/DG-Anvil --skill planningAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.1 KB, 947 tokens by cl100k_base, as published. Nobody here has run it
Overview
This skill produces anvil/plan.yml as a task DAG with wave ordering. An atomic task is one that produces one diff that one Verify pass can score. Every task names the contract criterion id(s) it is accountable for; tasks without citations are invalid and do not execute. Waves are topologically sorted: a task in wave k depends only on tasks in waves strictly less than k.
Invoking the Anvil CLI: the CLI is cli/anvil.js inside the plugin directory, NOT on PATH. Use node "$CLAUDE_PLUGIN_ROOT/cli/anvil.js" <subcommand> ... for every invocation.
When to Use
Invoked by the orchestrator after anvil/contract.yml is confirmed. Not invoked from user prompts directly. If the contract is edited after the plan is written, this skill is re-invoked to regenerate the plan from scratch.
Process
Steps 1 and 4 run in the orchestrator's main thread. Steps 2 and 3 (decomposition + YAML authoring) are dispatched to a fresh subagent. The orchestrator holds only the confirmed contract and the written anvil/plan.yml file. It never holds the decomposition reasoning.
- Confirm
anvil/contract.ymlexists and validates (node "$CLAUDE_PLUGIN_ROOT/cli/anvil.js" contract --validate anvil/contract.ymlexits 0). If it does not, route back tocontracting; planning does not run against an unconfirmed contract. - Dispatch the
plan-drafteragent (defined atagents/plan-drafter.md) using theTasktool. Pass in the briefing: the repository path and the path toanvil/contract.yml. The subagent reads the contract, decomposes the work into an atomic task DAG with wave ordering, writesanvil/plan.yml, runsanvil plan --validate, and returns exactly one sentence. Do NOT decompose or write the YAML inline in the orchestrator thread - the orchestrator's context stays clean. - Read the returned one-sentence summary from the subagent. If the summary indicates a validation failure, surface the
details.rulestring to the user and stop. - The orchestrator now holds the task DAG by file reference (
anvil/plan.yml). It does not re-read the whole plan for every subsequent dispatch; it reads individual task records as theexecutingskill requests them.
Rationalizations
Reject the following shortcuts:
- "This one task covers everything; no need to split." Scope creep disguises itself as efficiency; an atomic task is scorable, a combined task is not (failure-taxonomy row 4: Scope creep).
- "Over-produce now and trim later." Over-production burns context and muddies the Verify signal (failure-taxonomy row 10: Over-production).
- "The plan can drift from the spec; the agent will catch it later." Plan drift is silent until Verify fails on a criterion no task cited (failure-taxonomy row 26: Spec-to-plan drift).
- "I'll decompose the tasks inline; it's faster." Inline decomposition fills the orchestrator context with reasoning that should live in a fresh subagent (failure-taxonomy row 16: Context-window collapse).
Red Flags
If any of these conditions obtain, the plan is rejected:
- A contract criterion id does not appear in any task's
criterion_ids(failure-taxonomy row 26: Spec-to-plan drift). - A task's scope extends beyond the criterion it cites (failure-taxonomy row 4: Scope creep).
- Two tasks in different waves touch the same file without a declared
depends_onedge (failure-taxonomy row 17: Cross-task architectural drift). - The orchestrator decomposes tasks in its own thread instead of dispatching the
plan-drafteragent (failure-taxonomy row 16: Context-window collapse).
Verification
Before saving the plan, run in order:
node "$CLAUDE_PLUGIN_ROOT/cli/anvil.js" plan --validate anvil/plan.yml --contract anvil/contract.ymlexits 0.- Every contract criterion id appears in at least one task's
criterion_idsarray. - The task DAG, interpreted via
topologicalWaves, produces one wave per distinctwaveinteger and contains no cycles. - Every task in wave
k > 0has adepends_onwhose members are tasks in waves< k.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most plan spec skills give in 947 tokens
Counted across 1,099 of the 1,860 authors here whose files we hold, read 2026-08-07
- Ask one question at a timein 51 of 1099
- Break plans into vertical slicesin 29 of 1099, across 11 files
- Publish issues in dependency orderin 27 of 1099, across 9 files
- Iterate until user approves the breakdownin 25 of 1099, across 7 files
- Explore the repository to understand the codebase statein 24 of 1099, across 7 files
- Use domain glossary vocabularyin 23 of 1099, across 5 files
- Apply correct triage labels to published issuesin 23 of 1099, across 5 files
- Prefer AFK slices over HITLin 22 of 1099, across 7 files
- Write a specification before writing any codein 22 of 1099, across 14 files
- Write failing tests before implementation codein 22 of 1099, across 20 files
- Ask clarifying questions until requirements are concretein 21 of 1099, across 13 files
- Respect existing architecture decision recordsin 20 of 1099, across 5 files
Said here and by no other author read
- dispatch the plan-drafter agent to decompose tasks
- write the task DAG to anvil/plan.yml
- ensure every task cites a contract criterion id
- ensure the task DAG is topologically sorted into waves
- ensure tasks in higher waves depend on lower waves
- re-run this skill if the contract is edited
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.