Shipped agents¶
Six read-only subagents, all tools: Read, Grep, Glob, Bash — none of them
edit anything, and none of them gate you directly. Each returns a verdict
that the calling session weighs; only the main session ever acts on a
finding. Alongside the research agents you register yourself (see Getting
started § Step 0), these ship
with every bundle: one wires into /ticket:new, the
other five into /ticket:pick.
| Agent | Stage | Role | Blocking? |
|---|---|---|---|
nfr-analyst |
Creation (once) | Derives the ticket's non-functional requirements before scope is locked | Feeds the step 2.5 grilling |
challenger |
Plan (once) | Stress-tests the drafted plan before you approve it | Feeds the Plan gate |
code-reviewer |
Every loop round | Reviews the diff against the plan, architecture, conventions | Blocking |
test-adequacy-reviewer |
Every loop round | Checks whether new tests would actually fail on a revert | Blocking |
code-challenger |
Every loop round | Attacks the route the code actually took | Advisory |
code-simplifier |
Every loop round | Proposes behavior-preserving simplifications | Advisory |
flowchart TD
Ticket["Draft ticket"] --> NFR["nfr-analyst"]
NFR --> Grill{"Grilling<br/>(step 2.5)"}
Grill --> Section["'## Non-functional requirements'<br/>each one + its verification"]
Section --> Plan["Draft plan"]
Plan --> Challenger["challenger"]
Challenger --> Gate{"Plan gate"}
Gate -->|approved| Loop["Implementation loop"]
Loop --> Diff["Diff for this round"]
Diff --> CR["code-reviewer<br/>(blocking)"]
Diff --> TAR["test-adequacy-reviewer<br/>(blocking)"]
Diff --> CC["code-challenger<br/>(advisory)"]
Diff --> CS["code-simplifier<br/>(advisory)"]
CR --> Eval{"Evaluate"}
TAR --> Eval
CC --> Eval
CS --> Eval
Eval -->|blocking finding| Replan["Re-plan"]
Eval -->|advisory folded in| Iterate["Next round"]
Eval -->|clean| Done(["Done → review"])
code-reviewer and test-adequacy-reviewer are the default blocking
checkers, configured via review.agents in config.yaml — projects can
register extra checkers (a11y, security…) without touching the command.
nfr-analyst, challenger, code-challenger, and code-simplifier are
fixed, not configurable. Every agent also works standalone against any
described work, plan, or diff, outside the commands.
Why no NFR agent in the loop. The non-functional work is front-loaded on
purpose. At creation the failure mode is omission — a requirement nobody
stated, which nobody can check later — and catching that needs a specialist.
By the time the loop runs, the requirement is written on the ticket with its
verification named, so the failure mode is compliance against a written
list, which code-reviewer and test-adequacy-reviewer already handle. A
project whose dimension genuinely can't be judged by a generalist reading a
diff registers its own checker in review.agents.
See also¶
/ticket:pick— the implementation loop these agents run inside