Documentation menu
how-to

Pin down the ask
before anything is built.

A vague request turns into a confident spec, and the spec is wrong. PM mode puts a short question round in front of the drafting. It fills in what it can from the request and the repo, then asks you only about the gaps that would change what gets built.

brief
docs/brief/
questions
2 rounds, at most
engineer mode
off by default

Check when the round runs

PM mode fires at Step 0.5 of whichever skill starts your workflow: /intake, /spec or /tdd. It runs before that skill opens its template, so the answers shape the first draft instead of correcting it later.

/triage decides whether it runs, and writes skip_brainstorm into .claude/state/workflow.json on every workflow. It sets the flag to true when your request already comes from a spec chapter, a roadmap, a backlog entry or an approved epic. It also sets true for fresh work that already names who is affected, when the problem shows up, and what should happen instead.

The flag reads false in one case: the request is genuinely unclear, and your answers would change what gets built. A workflow with no flag at all runs the round.

Answer the questions

Claude works out as much as it can before it asks you anything. It reads your request, the artifact triage cited, repo memory and the conversation so far, then fills in six fields.

actor

A real role or person. "Users" is too broad to count.

trigger

When the problem shows up.

current_state

What happens today, as observed. Guesses stay out.

desired_state

What should happen instead.

non_goals

What this work leaves alone.

solution_leakage

Solution-shaped verbs in your request: add X, use Y, refactor to.

A field it can fill with cited support is filled, and you never see a question about it. Only the gaps it cannot fill, and that would change the build, reach you. You get two rounds of those at most.

The questions stay off solutions. discipline.mjs scans each one before you see it. It catches solution verbs, library names such as Redis or PostgreSQL, and phrasing like "we could" or "I recommend". Anything it flags gets rewritten first.

Propose a solution yourself and it lands under solution_leakage. The questions keep working on the need behind it, because that is what the spec has to be right about.

Gaps still open after two rounds become open_questions in the brief, and travel with the work from there.

Confirm the brief

Claude reads the brief back to you and offers three answers: capture it, edit one section, or start over. Editing sends you back to the questions for that one field.

Say yes and it writes docs/brief/<slug>.md with the six fields in a fixed order. Your entry skill picks that file up as its main input, so each field flows into the matching section of the intake or spec.

docs/brief/<slug>.md
actor            who is affected
trigger          when it happens
current_state    what happens today
desired_state    what should happen
non_goals        what stays untouched
solution_leakage solutions you proposed

Reject it five times in a row and the round stops and hands the work back to you.

Running the entry skill twice asks you once.

If docs/brief/<slug>.md is already on disk for that slug, the round short-circuits and reads the existing file. Only the brief lasts. .claude/state/brainstorm/<slug>.json is scratch for picking a half-finished dialogue back up in a later session, and it is left out of the archive.

Skip the round

Put --no-brainstorm in your triage request and the round returns straight away. No question ever fires.

claude code
> /triage "your request --no-brainstorm"

Two tracks stay quiet on their own. chore and freeform have no /intake, /spec or /tdd step for the round to hook into, so it cannot fire there by design.

The skip path matches the behaviour the baseline had before PM mode existed, byte for byte. Opting out costs you the brief and nothing else.

Turn on engineer mode

PM mode captures what to build. Engineer mode captures how, and it ships off. Turn it on with --codesign on your triage request, or by setting codesign_mode in workflow.json yourself.

With it on, /spec Step 1.5 hunts for the technical calls your expertise should decide. A computer-vision approach, a model architecture, a numerical method, an IPC pattern. Claude names its pick for each one and gives you a short reason. Then it asks: approve that pick, offer your own, or talk the trade-off through.

Your words win. Override the pick and your reasoning goes into the spec's ## Decisions section as a blockquote, with the recorded choice being yours. spec-lint check #4 fails a spec that has engineer mode on and no ## Decisions heading. With the mode off, that check drops out of the report entirely.

Triage will suggest engineer mode when your request mentions one of a fixed set of words, among them cryptographic, consensus, realtime, kernel and algorithm design. It asks; the switch is yours to throw.

Each decision can come back around three times. Say /integrate fails later and the cause is the spec, Claude reopens the decision that caused it. The fourth pass on the same decision stops and asks for you.

last updated 2026-07-30 edit on GitHub →