The three modes
A mode is a contract, not a suggestion. It decides which tools exist for that turn, and the registry refuses a call from the wrong mode before it executes.
The contracts
| Mode | Contract |
|---|---|
| Discussion | Ultra-concise planning. Writes limited to design artifacts. Crystallises into a committed plan. |
| Brainstorming | Deep research: web, code tools and memory. Findings externalised to notes. |
| Autopilot | Full autonomy end to end. Re-plans on failure. Hands back only when truly blocked. |
What each mode can reach
Mode fencing is enforced in internal/tools/registry.go. A tool with an empty Modes list is available everywhere; anything else is a whitelist.
| Tool | Discussion | Brainstorming | Autopilot |
|---|---|---|---|
read grep glob | yes | yes | yes |
file_map find_symbol find_references outline_file | yes | yes | yes |
check_page ask_user remember | yes | yes | yes |
edit write apply_patch | yes | yes | yes |
commit_plan | yes | no | no |
web_fetch | no | yes | no |
bash serve | no | no | yes |
bash — not by asking, not by a jailbreak, because the mode check happens in Go before dispatch. A model that tries gets a refusal it can read and act on, rather than a silent failure.
Discussion
For deciding what to do. The model is asked to be brief, and writes are limited to design artifacts rather than implementation. It is the only mode with commit_plan, which turns the conversation into a structured plan that Autopilot can later follow.
commit_plan. The harness translates rather than pleads: a plan-shaped write is also committed as a structured plan event, so the plan card and the planner both see it. The rewrite is disclosed.
Brainstorming
For finding out. The only mode with web_fetch, so research cannot happen by accident in a mode meant for building. Findings are externalised to notes rather than held in the window, which is the difference between research that survives compaction and research that does not.
Autopilot
For doing. Full autonomy: it plans, acts, verifies, and re-plans when a step fails. It is the only mode with bash and serve, and therefore the only mode where the safety guard has real work to do.
If a plan was committed in Discussion it is injected as guidance — the agent follows its intent but adapts freely. No plan is fine; it plans as it goes.
It hands back only when genuinely blocked, and a handback is surfaced as such in the plan strip rather than as a silent stop.
Fencing through a reflex
A reflex can re-dispatch tool calls of its own. Mode fencing propagates through it: a bash step inside a reflex is still autopilot-only. That is what the ModeTool interface exists for — the recipe executor receives the invoking mode at execution time rather than losing it at the boundary.
Switching mode
From the panel's mode dial, with crvcli -mode, or over the API with PATCH /api/sessions/{id}. A session keeps its mode until changed; a new session starts in the default.