$goat-workflow
One consistent workflow, six independent entry points. This card decides which one.
The stages
| Stage | Use when | Needs |
|---|---|---|
$clarify |
The request could mean several different things | nothing |
$plan |
The approach needs to be written down and agreed | an objective |
$ultragoal |
Work needs finishing, with proof, across turns | an objective + an approach |
$team |
The work splits into 2+ independent lanes | an objective + real lanes |
$code-review |
A concrete change needs judging | a change |
$ultraqa |
Behavior needs proving by execution | something runnable |
There is no fixed chain
The usual order is clarify → plan → execute → review → QA, but nothing enforces it, because most real requests do not start at the beginning:
- "Review my changes" →
$code-review. No plan, no objective needed. - "Test this properly" →
$ultraqa. Straight in. - "Fix the login bug, tests must pass" →
$ultragoal. The approach is already implied. - "I'm not sure what I want" →
$clarify.
Ask what the request needs, not what stage comes next in a diagram.
Routing
- Is there a concrete change to judge? →
$code-review - Is there runnable behavior to prove? →
$ultraqa - Is the request ambiguous enough that two people would build different things? →
$clarify - Is the approach contested, risky, or spanning subsystems? →
$plan - Does it split into 2+ lanes with disjoint files? →
$team - Otherwise →
$ultragoal
If none of these fit — a single obvious edit, a question, a lookup — use no stage at all. Loading a workflow for a one-line fix is the most common way to waste a session.
Check before you start
goat contract # every stage: ready, or what is missing
goat contract ultraqa # one stage
goat status # what has already run, and what it proved
A requirement reported as inline means the user's own message can satisfy it. Take it
from there and proceed — do not force an earlier stage to manufacture it.
Evidence is the constant
Whatever stage runs, the rule does not change: a claim needs a command that ran.
goat ledger evidence --stage <stage> --exit <code> -- <command>
goat status marks a stage complete* when its evidence does not back the claim — none
recorded, every command exited non-zero, or every command is a shell no-op. Treat that as
unfinished work, not as a formatting detail.