Skip to content

Use plan mode

This guide shows you how to get a structured plan out of an agent before it writes any code.

In plan mode the agent researches read-only and its only deliverable is a typed plan: a dependency graph of steps you approve, which Control Center then compiles into real work. Use it when you want to see the scope of a change, get the steps broken down, or have risks and dependencies named before anything is touched.

Any of these flips the space’s mode and the change is persisted:

  • Pick Plan from the mode dropdown on the far left of the composer toolbar
  • Press Shift+Tab
  • Send /plan. A bare /plan just arms the mode; /plan <request> arms it and sends the rest as your message

/plan never travels as text — it sets the stored mode, which is the authority the tool surface, the guard preset and the prompt all read. So the mode holds for this turn and every turn after it, until you change it back.

The mode is stored on the space, so the same agent can be in plan mode here and in agent mode elsewhere.

  1. It researches read-only — memory, the code index, files
  2. It calls submit_plan once, with a goal plus nodes, each carrying a stable key, a title, a description and the node keys it dependsOn (which is what lets independent work run in parallel)
  3. It stops

The tool validates the graph — duplicate keys, dangling dependencies, cycles — and returns violations for the agent to fix rather than accepting a broken plan.

The plan appears in the conversation as a compact row showing the goal, its status and the step count. Plan Studio — the dependency graph, the per-node inspector and the cost estimate — opens as a tab beside the conversation: press Open on the row, or simply wait, because a plan that lands within 30 seconds while you are watching the conversation opens its tab itself.

Prose is not a deliverable here. A run that ends without calling submit_plan posts a visible “Ended without submitting a plan (no submit_plan call).” line in the conversation and flags the run as having missed its deliverable. The run’s status deliberately stays completed — that keeps pipeline and ticket state machines untouched — so read the line, not the status badge.

From the plan’s row in the conversation, press Approve and run. From Plan Studio’s approval bar, press Approve plan (or Reject beside it; approval is disabled while the graph has a validation error).

Then:

  1. Control Center compiles the plan into an orchestration and materializes it — the tickets and the run. No model is involved in this step; it is deterministic
  2. The plan executes as the agent that wrote it. Whether to bring anyone else in is that agent’s call at run time — it can delegate_task a step to a better-suited teammate, within the workspace’s delegation depth cap
  3. The plan’s goal becomes the conversation’s goal and the work runs in that same conversation: each step posts what the agent was asked and streams its turn back, so you follow it (and can stop a turn) where you already are
  4. The goal row in the conversation’s General side panel (under Todos) carries the run’s progress as settled/total and its stop button; Plan Studio shows per-node state on the graph and cancels there too

If you would rather stay in this conversation than approve the plan, the agent can call exit_plan_mode. That is the only sanctioned exit: it opens a durable approval request linked to the conversation and returns pending — the space stays in plan mode and the agent must not act. Once the request is approved, the agent’s next exit_plan_mode call flips the space from plan to agent mode and unlocks its mutating tools. A rejection lets it open a fresh request against a revised plan.

A promptAgent pipeline step reads its conversation mode from the node config’s mode extraextras['mode']: 'plan'. The key is exact-match: any other spelling, including conversationMode or dispatchMode, is silently ignored and the step falls back to its default, which is review mode, not chat.