name: plan description: Break an approved spec or design into a precise, executable implementation plan. Use after the what/why and the shape are agreed, and before writing implementation code for any multi-step task.
██████╗ ██╗ █████╗ ███╗ ██╗
██╔══██╗██║ ██╔══██╗████╗ ██║
██████╔╝██║ ███████║██╔██╗ ██║
██╔═══╝ ██║ ██╔══██║██║╚██╗██║
██║ ███████╗██║ ██║██║ ╚████║
╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝
Plan in vertical, executable slices
A plan good enough that a context-free executor with questionable taste could follow it without guessing. Vague plans get vague work.
Slices are vertical tracer bullets
Each task cuts end-to-end through whatever layers the artifact actually has and leaves the program working. For a web feature that may be schema → API → logic → UI → tests; for a CLI it's flag → handler → output; for a library it's public function → behavior → test. The rule is end-to-end-to-an-observable-result — not a fixed layer list. Never slice horizontally (all of one layer, then all of the next) — horizontal slices can't be verified until the end and hide integration problems until they're expensive.
Among valid first slices, pick the one that retires the most risk — the integration most likely to be wrong (the unproven third-party call, the gnarly migration), not merely the easiest. De-risk first; polish later.
Each task is bite-sized and test-shaped
Size each task to one RED→GREEN→commit cycle — the minimum change that makes exactly one new test pass. If a task needs two assertions about two different behaviors, split it. (The loop itself lives in forge:tdd — don't restate it; plan just chooses the slices.)
Write each task so a context-free executor can run it. Give every task these fields:
- id (T1, T2…) + a one-line intent
- target — the file(s) and the function/signature it adds or changes
- test — the assertion that should fail first, then pass (the success criterion — a concrete check, never "make it work")
- blocked-by — real task IDs, or "none"
(This is forge:principles #4 made concrete.)
No placeholders
The executor may read tasks out of order and has no context beyond the plan. Therefore:
- No "TBD", no "add appropriate error handling", no "handle edge cases."
- No "similar to Task 3" — restate the actual intent/code, because Task 3 may not have been read.
- If a value, path, or signature matters, write it down.
Order and parallelism
- Order by dependency. Reference blockers by real task IDs ("blocked by T2"), added only once T2 exists.
- Mark which tasks are independent and safe to parallelize — hand those to
forge:orchestrateto run concurrently with fresh agents. - Keep the plan in a file, not just the conversation — it's a durable artifact that survives compaction.
Exit
Execute with forge:tdd (one slice at a time), request forge:review after meaningful chunks, and forge:verify before claiming done.