How to start one
On the new-session page, pick the Plan & Build card. It’s the default. The panel’s own subtitle gives the pitch in one line.Bring an idea, plan it out with an agent that understands your codebase, then let p0 build it autonomously, QA its own work, and hand you the PRs.Power users can also type
/build-from-spec directly in any chat input. That is the underlying slash command Plan & Build wraps. Pointing the command at an existing product spec (and optionally a technical spec) skips past idea-gathering and into the engineering phase.
The phases
Plan & Build moves through five phases. The first four are visible in the breadcrumb at the top of the session. Post-PR is rendered as a full-screen takeover when PRs are ready. The exact labels come fromPHASE_LABELS in features/spec-mode/atoms/index.ts.
| # | Label | What it produces |
|---|---|---|
| 1. | Import. | A product spec (and optional technical spec) in the editor. |
| 2. | Improve. | A refined spec that is ready to be expanded into tickets. |
| 3. | Watch. | An implementation, ticket by ticket, in an isolated worktree. |
| 4. | Done. | A reviewed build with a manual-setup checklist. |
| 5. | Post-PR. | One or more pull requests, surfaced in a celebration screen. |
1. Import
The Import panel offers three sources: Files (local.md / .txt / .pdf / .docx), Linear, and JIRA. The Files mode separates a required Product Spec from an optional Technical Spec and accepts arbitrary attachments (images, PDFs, reference docs) for context.
The phase ends when a spec is loaded. The handleSpecImported callback in spec-driven-content.tsx persists the spec content, renames the session after the imported file, and advances the session’s phase column to 2.
2. Improve
The Improve panel is a split view: spec editor on the left (with Product / Technical / Attachments tabs), a chat with p0 on the right, and a readiness meter in the footer. The meter colors itself based on product-spec length — red under 100 chars, orange at 100–499, yellow at 500–1499, green at 1500+. The phase ends when you click the Go! button in the readiness footer of the Improve panel (improve-spec-panel.tsx L1014). The split-button next to it has a clock caret that opens a schedule popover if you want to defer the build — see Scheduled sessions. Behind the scenes, Go! saves the spec to disk and writes phase 3 to the DB.
3. Watch
Watch is another split view: the Claude stream on the left (WatchModeStream) and the live ticket tree on the right (TicketTreePanel). This is where /build-from-spec’s middle three phases play out. The engineering architect breaks the spec into an implementation-spec-{slug}.md. The orchestrator spawns an agent team named impl-{slug}. QA teammates verify the work against the engineers who wrote it (max three QA attempts, per the command file).
You do not click anything to leave Watch. The transition to Done fires automatically when either the agent team sends a buildComplete MCP signal (the preferred path) or manual-setup.md lands in the feature folder (the polling fallback). Both are wired through usePhaseDetection.
4. Done
Done preserves the Phase 3 chat history on the left (WatchModeStream in read-only mode). The right pane shows a Manual Setup checklist — the contents of the manual-setup.md file the build wrote. Examples: env vars, indexes, third-party config, anything the code itself could not do.
The footer has one primary action: Create PR/s (it relabels to Update PR/s if PRs have already been opened from this session). Clicking it injects the PR-creation instruction into the agent, which pushes the worktree branch and opens a pull request per repo.
5. Post-PR
The final phase is a full-screen takeover with a celebration animation. It lists one row per repo with the PR number, an External link to the PR/MR, a state badge (“open” / “merged” / “closed”), and a Check status action. Failed repos get a friendly error card with the branch name and a manual-alternative path (open the worktree, copy the branch, etc.). The terminology adapts to your provider — GitHub repos say “Pull Request”; GitLab repos say “Merge Request”.The DevTools panel
Throughout Watch and Done, the bottom DevTools panel keeps three tools alongside the chat. Terminal opens an xterm session rooted in the worktree. Changes shows a live diff of every file p0 has touched, split or unified. Run starts and tails the dev script you configured for each repo. See Run scripts for how the Run tab gets wired.What happens after Done
Once Create PR/s finishes, the session writes the PR results to the DB and hands them toPostPRSuccess. The Update Standards button is gated on standardsSuggestionAtom being non-empty — it appears only when the agent sent one or more standards suggestions during the build. The label shows the single suggestion’s description, or “N standards updates detected” for multiple. Clicking it opens the review modal so you can accept or dismiss each suggestion before closing the session.