Goal
Route the user's ask to the right phase of the design pipeline — brainstorm → spec → plan — then run that phase from its own file in this directory:
| Route | Phase file | Right when |
|---|---|---|
brainstorm |
BRAINSTORM.md | The idea is raw; its approach, shape, or product direction is still open. |
spec |
SPEC.md | The idea is formed (or a brainstorm brief exists) and needs acceptance criteria and technical decisions. |
plan |
PLAN.md | Behavior and design are settled — a finished spec, or a well-understood change like a scoped bug fix — and only "how to build it" remains. |
Execution is deliberately not a route: when a plan is done, recommend /crank-execute and stop. Sharpening an artifact without advancing it is /crank-refine's job.
Four asks enter elsewhere: a codebase-wide hunt for shallow modules or leaking seams is /crank-deepen (it hands back a brainstorm brief); judging existing changes is /crank-review, a test suite is /crank-test-prune, and stripping AI slop, hunting code-judo restructurings, or pruning outgrown comments over a declared scope is /crank-deslop.
Triage
The first rule that applies wins:
- Explicit route argument. If the arguments name a route (
brainstorm,spec,plan), take it. - Pipeline artifact given. Handed an existing crank artifact (in the arguments or conversation), route to the next phase: a brainstorm brief →
spec; a spec →plan; a plan → recommend/crank-execute. Classify it by content and structure, never just its filename — a brief sketches approach and shape; a spec carries acceptance criteria; a plan carries ordered, committable tasks. Resolve the handed-in path per ARTIFACT-HOME.md, read here. - Infer from the ask. Judge how settled the work is against the "Right when" column, then announce and go: state the route and a one-line rationale — e.g. "This is a formed bug with a known cause — starting at plan" — and immediately load and run the phase file. No confirmation stop: the phase opens with its own agenda/grilling, so a misroute surfaces and is corrected in the first exchange.
- Torn between two routes. Only when two routes are genuinely arguable — a formed idea touching unfamiliar architecture, a "small" ask hiding an open product question — ask one question naming both routes, a one-line case for each, your recommendation first.
- Nothing to route. Invoked bare with no usable conversation context: ask what the user wants to work on, then triage the answer from rule 1 and against the sibling entry points named in the Goal, which rules 1–4 don't cover.
Phase gates
- Load one phase at a time. Read a phase file only when routing into it; the reference docs and templates beside it load when that phase file says, never at triage, except the artifact-home read in triage rule 2.
- The adversarial review is one heavy dispatch. Where a phase's flow has one: spawn one heavy subagent resolved per SUBAGENT-TIERS.md, and pass it the phase's review brief verbatim with the step's artifact paths substituted in. Completion criterion: the reviewer's edits are in the artifact file.
- Read back after the review. Each phase writes its artifact, runs its adversarial review where its flow has one, then reads the artifact back per READBACK.md, which fixes what the one readback message shows, how feedback lands, and when the readback is done.
- Hand off the same way in every phase. Hand off once the readback is done. State the filing rather than asking how to file: one line saying the artifact stays at its
.crank/path (with the path), then the step's Next: line. Close with one trailing prose sentence, not a numbered question, noting the artifact can instead be copied elsewhere, printed inline, or deleted on request, then stop. - Advancing is the user's call. Load the next phase file only on an explicit "continue".
- Continuing is also a context call. "Continue" keeps this conversation as the next phase's primary source, its reasoning verbatim, not as a summary, so recommend it while this session has run at most one phase and has not been compacted. Once a second phase would follow a compaction, recommend the Next: line's fresh-session command instead: each artifact is self-contained, so a new session given its path loses nothing the file doesn't carry —
.crank/<slug>/grounding.mdis an optional cache, read when present, that no artifact depends on.