ADR-0021: Default to agent dispatch across all commands and ordinary tasks
Status: Accepted — the default-to-dispatch principle stands; the roster it names is superseded by ADR-0022
Date: 2026-07-30
Context
ADR-0012 established two things that this ADR partially reverses:
/sp-implementdefaulted to in-session work, dispatching tosp-planner/sp-developer/sp-debugger/sp-tester/sp-revieweronly when the user passed--agent(or, forsp-planner, when the task looked non-trivial — a condition that in practice created a real ambiguity against the command's own "stay in-session by default" preamble, since "non-trivial" is an agent judgment call, not an explicit user ask)./sp-take-ticketand/sp-sync-docswere deliberately left without their own agent files: "these four are mechanical (fetch, write, confirm), not the kind of isolated multi-step reasoning the--agentpattern exists for, so a 1:1 command↔agent split just duplicated near-identical content across two files per command for no behavioural benefit."
The user's explicit preference, stated directly: agent usage should be the default, not an opt-in gated behind a flag or an agent's own judgment call — for all three commands, and for ordinary coding tasks handled outside any slash command too.
Decision
/sp-implementnow dispatches to the matching specialist by default. The--agentflag is removed (dispatch no longer needs gating); a new--sessionflag is the explicit opt-out for narrow in-session work. Thesp-plannerambiguity ADR-0012 left open is resolved the same direction: non-trivial tasks always get a plan first, no flag needed./sp-take-ticketand/sp-sync-docseach get a new, narrower read-only discovery agent —sp-ticketandsp-docsrespectively (.claude/agents/sp-ticket.md,.claude/agents/sp-docs.md) — reversing ADR-0012's "give them their own agent files" rejection specifically. Both new agents follow the same split every other specialist already uses: the agent finds/proposes, the orchestrating command confirms with the user and executes the mutation (board move, branch checkout, issue comment, or a doc-drift fix) itself. Neither new agent ever mutates GitHub state, the local repo, or a file — that discipline is unchanged from ADR-0012, only which layer does the finding moved.- Ordinary tasks outside any
/sp-*command — a task in normal conversation that touchesapps/api/orapps/web-player/code — also route to the matchingsp-*specialist via the Agent tool by default now, not just work handled through/sp-implement. Work in-session only when the user explicitly asks to skip the agent for that task. This is recorded inCLAUDE.mditself (the entrypoint every session reads), not just in the command files, since it applies whether or not a slash command was invoked. - Confirm-before-mutate discipline is unchanged everywhere: specialists (existing and new) never push, open/update a PR, move a board card, or apply a doc fix themselves — that stays at the orchestrating layer (command or main session), after the user says yes.
Consequences
- Every task that would previously have run in-session by default now costs an extra agent round-trip (dispatch latency + the token cost of a fresh agent context) — accepted trade-off for the specialist depth (the full architecture-checklist walk, the reproduce-first debugging discipline, narrow test-authoring focus) applying by default instead of only when explicitly requested.
sp-ticketandsp-docsduplicate some prose with their respective commands (the same "near-identical content across two files" cost ADR-0012 flagged) — accepted now that the user's stated preference outweighs that duplication cost.--sessionis the one remaining escape hatch across all three commands, for tasks small enough that a dispatch round-trip is genuine overhead — kept narrow and opt-in rather than removed, so the fully-manual path still exists when explicitly asked for.- Every doc surface describing the old "self-contained, no agent file" design (
CLAUDE.md,.claude/README.md,.claude/rules/knowledge-base.md,.claude/TOKEN_BUDGET.md,CONTRIBUTING.md,README.md) needed a sweep alongside this ADR — see the commit that introduced it.
Alternatives considered
- Keep
--agentas an opt-in flag, just change its default value to true — rejected; a flag whose default is "on" reads as more confusing than removing the flag and adding a clearly-named opt-out (--session) for the one case that still needs it. - Only change
/sp-implement, leave/sp-take-ticket//sp-sync-docsand ordinary-task routing alone — rejected per the user's explicit "all three commands" and "ordinary tasks too" instructions; ADR-0012's mechanical-work reasoning for those two commands was sound at the time but the user's preference for agent depth by default now outweighs the duplication cost it was written to avoid. - Fold
sp-ticket/sp-docs's logic directly intosp-implement's existing specialists — rejected; ticket discovery and doc-drift detection are distinct domains from code implementation/debugging/testing/review, and forcing them through an unrelated specialist would blur each agent's focused scope.