- Plan — the agent explores read-only and proposes what it intends to do before touching any files.
- Code — the agent writes and runs with maximum permissions for that provider.
Where you toggle Plan / Code
The pill uses a distinct glyph for each state plus a label — never color alone. On a provider with no Plan pole, the pill is omitted entirely rather than shown in a state it can’t honor.
The composer has no Local/Worktree picker — that choice belongs to the new-session composer, and a running session shows a read-only worktree badge. Don’t confuse that badge with the Plan / Code pill; they’re separate controls sitting on different rows.
How it maps to each provider
“Plan mode” means something slightly different depending on whether the provider runs as Claude’s direct PTY or through a managed harness.Cursor is the only exception, and Continuum defines plan support as literally “every provider except Cursor.” The daemon’s approval-policy resolution and the client’s pill both read that one definition, so they can never disagree about whether a session has a Plan pole — and you can never be shown a Plan pill that spawns a Code session.
Claude: the Approve & Run path
Claude is the provider with a discrete plan-then-approve handshake:1
Send with the pill on Plan
Continuum spawns Claude with
--permission-mode plan.2
Claude works read-only
When it’s ready it calls
ExitPlanMode. Continuum watches the session’s JSONL for that call, flips the session to plan-pending, and captures the plan text.3
Review the plan
The plan renders inline in the transcript as a read-only card — headings, bold lead-ins, inline code, and lists intact, with an estimated tool-call count and cost in its header. The card carries no buttons; see Where you approve.
4
Approve
The daemon suspends the plan-mode runtime and respawns Claude in the same working directory with no plan flag and write access restored, then marks the plan approved.
Harness providers: permission prompts, plus a live approve
For Codex, Gemini, Grok, and the OpenCode-connector providers, work flows through the harness rather than a Claude-style plan card. When the runtime requests permission — an edit, a command, a plan update — Continuum renders an inline permission prompt carrying the agent’s own options; you approve or deny it. The Plan ↔ Code pill governs whether those prompts appear at all:- Plan → approvals stay on (the agent asks before acting).
- Code → approvals are skipped (maximum permissions).
ExitPlanMode request, approving answers that request in place with a code-capable mode — the turn keeps its momentum instead of being killed and respawned. Only when there’s no live pending approval (a plan captured before the bridge came up, say) does Continuum fall back to reconfiguring the harness, carrying the transcript across. Either way the session lands on Code and the composer pill agrees.
The plan tracker
The Plan tab in the Mac review pane and on iPhone shows a step timeline. Steps are derived from the plan text by a heuristic shared between both platforms — numbered or “Step”-prefixed lines become individual rows. Tap any step to toggle its completion manually; your explicit choice wins over the heuristic, so a later auto-update can’t silently flip it back. On iPhone, the Plan tab appears when the session has a plan to show: any Codex session, an Antigravity session on a host that supports it, a session carrying plan text, a session with an approved plan, or one currently in the planning state.Where you approve
The transcript is for reading; the actions live in the composer. When a session goes plan-pending, the Mac composer raises a plan tray directly above the input field carrying two buttons:- Approve & run — approve and let the agent write.
- Comment (
⌘⇧Return) — keep planning. It moves focus to the composer so you can type feedback instead of approving.
- iPhone — Approve & run in the Plan tab. The tap routes through the mobile command outbox, so an offline approval queues and retries rather than failing.
- Watch — Approve plan in session detail, which relays the approval to the paired iPhone.
Watch approval is off by default. Turn on “Approve plans” under the Watch section of iPhone Settings; “Interrupt sessions” is a separate switch, and enabling one never enables the other. Continuum only honors a Watch command for a session actually in that state, and rejects a forged or stale one.
Refining before approving
Press Comment (⌘⇧Return) instead of approving and tell the agent what’s wrong with the plan. It revises and presents an updated proposal; the inline card reflects the latest version. Iterate as many times as you like before approving — a plan you never approve never writes anything.
Changing Plan / Code mid-session
The pill works mid-session. Flipping it issues a mode change:- Claude respawns its direct PTY in the new mode.
- Harness providers reconfigure their bridge in place — the managed harness is restarted with the new approval policy.