Continue an existing Forge project after a pause, restart, or interruption. Triggers: "forge continue", "pick up where we left off", "resume".
<Use_When>
Read .forge/state.json. If missing → "No active Forge project. Use forge to start one."
| Phase | Files to load |
|---|---|
| 0–1 | state.json only |
| 2 |
| + spec.md |
| 3 | + spec.md, code-rules.md, design/, contracts/, plan.md, runtime.json |
| 4 | + spec.md, code-rules.md, design/, contracts/, plan.md, tasks/, runtime.json |
| 5–7 | + spec.md, holes/, runtime.json |
| 8 | + spec.md, holes/, delivery-report/ |
If .forge/runtime.json exists, always load it — it has lane ownership, blockers, and handoff notes.
Keep it short. The user needs three things:
Forge: {{project_name}}
Phase {{N}}/{{9 for build, 7 for repair}} — {{phase_name}}
{{one-line summary of where things stand}}
Next: {{what to do now}}
{{if blockers: list them}}
Examples:
Forge: my-saas-app
Phase 4/9 — develop
3 lanes active, 1 blocked (auth waiting on DB schema)
Next: Continue auth-api lane after resolving DB contract
Forge: my-saas-app
Phase 6/8 — fix
2 blockers remaining (login redirect loop, rate limit bypass)
Next: Diagnose login redirect — attempt 1/3
Do NOT dump every runtime field. Surface only what's actionable.
Evaluate in this exact order. Take the FIRST match — do not skip ahead.
| Priority | Condition | Action |
|---|---|---|
| 1 | Customer blocker exists | Surface the question. Don't pretend work can continue without user input. |
| 2 | Internal blocker exists | Route to the owning team's phase skill with the blocker context. |
| 3 | Saved analysis is stale, or repair flow has no analysis yet | Route to forge:analyze first. Refresh analysis before phase work continues. |
| 4 | Lane has handoff notes and is in_progress | Load that lane's task file, worktree, and latest handoff note. Continue in-lane. |
| 5 | Runtime has a designated next lane (next_lane) | Load that lane's context. This is the lead dev's recommendation for where to pick up. |
| 6 | None of the above | Fall back to the current phase skill. |
The goal: the user types forge continue and lands on the single most useful thing to work on, with full context loaded and zero re-explanation needed.
On resume, recommendedAgentsFor() provides layer-classified agent recommendations.
Dispatch agents according to their layer classification (layer0, layer2_subagent, etc.).
Apply session age-aware dispatch (from state-restore.mjs; based on session wall-clock, not artifact dependencies):
forge continue, then resume from saved state instead of restarting discoveryStandard mode (build, N/9):
Repair mode (N/7):
Express mode:
Invoke the target skill with loaded context. The skill takes over from here. Do NOT ask the user for extra confirmation during resume unless a true customer blocker or an approved ambiguity gate is hit.
<Tool_Usage>