16. Plan and todo states
[!ref] Full details in the User Manual, "Plan and todo".
16.1 Plan state machine
| State | Trigger | Next |
|---|---|---|
| Drafting | Assistant starts writing | Draft ready |
| Draft ready | Assistant emits complete plan | Accepted / Edited / Rejected |
| Edited | User edits and hands back | Drafting (refine) |
| Accepted | User clicks Accept | Enter execute |
| Rejected | User clicks Reject | Assistant rewrites |
16.2 Todo states
| State | Icon | Description |
|---|---|---|
| Todo | Not started | |
| In progress | Assistant is on it | |
| Done | Finished | |
| Failed | Skipped or failed |
16.2.1 Todo check and self-reported pause
| Item | Value |
|---|---|
| Trigger | A turn ends while the todo list still has unfinished items, and other tools were called after the list was last updated (helper tools — asking the user, loading tools, memory recall — don't count; reading and analysis tools do) |
| Mechanism | A hidden user message (source = auto_todo_nudge) asking the agent to reconcile the list only (mark done / rewrite / delete); it must not execute unfinished items or ask whether to continue in that turn |
| Riding along | If the turn already sends another automatic continuation message, the check is appended to it as a postscript — no extra turn |
| Stopping | The check turn never triggers another check; read-only verification inside it doesn't count as new work; a turn the user stopped manually gets no follow-up check |
| Self-reported pause | The model emitting <todo-status>paused</todo-status> counts as "holding off as the user asked", and checks are suppressed until the todo list changes. The tag never appears in the body text; it shows up in the Trace panel as a "Todo paused" step and in the "Todo paused" counter |
| Ending on a question | A working turn that ends by asking the user a question also suppresses checks; a question at the end of the check turn itself doesn't count |
| Across compaction | The pause intent survives context compaction — checks do not restart after a compaction |
| Persistence | The pause intent is persisted with the session and inherited after a restart |
| Subagents | The ask tool is not delegated to subagents; unattended runs never raise a form nobody will answer |
16.2.2 Session goal states
| State | Meaning |
|---|---|
active |
Being advanced |
paused |
Paused by you |
idle (Paused, idle) |
The goal exists but no agent is currently running, so nothing is advancing it; the popover offers "Keep going" |
complete |
Marked complete |
budget_limited |
Token budget exhausted; the agent enters wrap-up mode. Click "Continue" to let it carry on, or raise the budget |
| Item | Value |
|---|---|
| In-panel editing | Both the objective and the token budget are editable in place; editing the objective pulls the state back to active and injects updated guidance on the next turn, while changing only the budget leaves progress alone |
| Empty budget | Unlimited |
| Auto-continuation | Carries stall detection: 4–5 idle rounds in a row and it stops, instead of burning through the whole round cap |
| While a subtask runs | Stall detection is frozen, and those rounds do not count against the cap |
| Versus the todo check | Both share one injection channel and run in parallel: the check rides along in the continuation message, so neither starves the other |
| Usage counter display | Click to cycle: raw / thousands separators / compact / percentage; with subagents you can expand the "self / subagent / tool calls" breakdown |
| Slash commands | /goal <text>, /goal budget <N>, /goal pause, /goal resume, /goal complete, /goal clear |
16.3 Preserved across compaction
When compaction fires, these fields are kept verbatim in the new summary:
- Plan current state (drafting / draft ready / …)
- Plan latest version number and diff summary
- All todo entries with their state
- User-confirmed decisions ("Accepted v3 of the plan")
- Required facts (paths, version numbers)
