Visual Plan

Review mode

Rendering a plan opens an interactive review by default: a session where you comment on the plan, answer its open questions, and end with an explicit Approve, Deny, or Iterate. The CLI blocks on that verdict and hands it back to the agent, so the agent knows exactly when the plan is settled and what to change if it is not. (Reach for --static when you only want to read a plan, not decide on it.)

vplan plan.mdx          # opens a review session (the default)

The demo below is the real review layer running over a dummy plan, in a self-contained mode with no agent behind it. Hover a section to leave a comment, drag-select text to comment on an exact quote, type an answer into a question, then click a decision. Use Reset to start over.

Live demo: hover a section to comment, answer a question inline, then Approve, Deny, or Iterate. Nothing leaves this page.

What you can do in a session

  • Comment on any section. Hover a phase, a callout, a diagram, or any block and a comment button appears beside it. Each comment is tagged with the section so the agent can map it back to the MDX.
  • Quote an exact span. Select text inside the plan and comment on just that selection; the quote rides along so the agent can find the precise wording you meant.
  • Answer the open questions. A <Questions> block is directly answerable in review mode: each question gets an inline field, and your answers come back on their own channel, keyed to the question, instead of being buried in a comment.
  • Decide. Approve, Deny, or Iterate from the bottom bar. Iterate needs at least one comment, answer, or note, since “revise with feedback” needs feedback to act on.

What the agent gets back

The CLI prints the decision, every comment, every answer, and an optional overall note to stdout, then exits with a decision-specific code:

DecisionExit codeWhat it means
Approve0Proceed with the plan as written.
Deny1Stop and reconsider; do not proceed.
Iterate2Revise the plan against the comments, then review again.
Timeout3No decision before --timeout elapsed (default 15 minutes).

Closing the tab without deciding counts as Deny, and still carries any comments and answers you staged, so the agent always gets something to act on.

Iterating

On an Iterate, the agent revises the same .mdx file in place and re-runs the review. Because a render snapshots the plan’s source, the next session marks what changed since your last view with a git-gutter accent and an “N changed” summary, so you re-review only the delta. The agent passes -i N (--iteration N) so the bar shows which round you are on. This repeats until you Approve or Deny.

vplan plan.mdx -i 2   # second review round, shows the diff since round 1

Review queue

When several plans are in flight at once, they share one tab instead of opening one each. The first review starts a small background daemon that owns a single browser tab with a left sidebar of every queued plan; reviews launched from any other session join the same tab. You clear them like an inbox: decide a plan and it is checked off and the next one opens, and each plan’s verdict returns to the session that queued it.

Queue several plans at once:

vplan review plan-a.mdx plan-b.mdx plan-c.mdx

Or open the queue tab on its own, so later reviews have somewhere to land (it starts the daemon if one is not already running):

vplan open

In the sidebar each plan shows its title, its origin directory, and a status icon for the verdict it locked in (a green check for Approve, a red cross for Deny, a spinning mark for Iterate); a re-reviewed plan carries a vN version chip, and requeuing a plan replaces its prior version in place. Reselect a decided plan to revisit its locked-in verdict with your answers preserved. The daemon lingers for a configurable idle window after the queue empties so a quick re-plan reuses the warm tab, and closing the tab denies anything still pending. Pass --no-daemon for a one-shot tab per review instead.

See the CLI reference for the full flag list, including --timeout, --diff, and --no-diff.