- 1 Interview + spec
- 2 Plan
- 3 Gate human approval
/dev one entry point, two phases, six agents
Type-aware. Resumable. Specialists do the work — the orchestrator drives.
Two phases, ten numbered steps.
Phase 1 is interactive: a human approves the plan. Phase 2 is autonomous: agents implement, test, review, ship, reflect.
- 4 Implement
- 5 Test
- 6 Review
- 7 Security trigger
- 8 Docs
- 9 Ship
- 10 Retro
The same flow, branched by intent.
Pick a type — see which phases run. No e2e test runs for a chore; no fix lands without a regression test.
Specialists. The orchestrator only drives.
Hover an agent to see what it owns. Several have multiple modes, so the count stays small.
One folder per run. Templates, never freeform.
Everything lives in .workflow/<id>/. Resume cursor in state.json. Carry-overs in FOLLOWUPS.md.
.workflow/ ├── INDEX.md ├── FOLLOWUPS.md ├── _templates/ └── 0001-feat-todolist-app/ ├── state.json ├── spec.md ├── plan.md ├── test-plan.md ├── review.md ├── security.md ├── tests.md └── retro.md
The non-negotiable checkpoint.
Before any code is written, the user sees the spec, the plan, and the per-task phase plan. Approve, revise, skip/run a discretionary phase, or swap.
feat · Ship as: single PR
Watch a feat run move through the steps.
Press play. Each tile lights up as the active phase advances; cycle counters show review and test loops.
Phase 7 fires only when the diff earns it.
Click a path on the left. If it matches the sensitive list, the security review fires automatically.
lead spawned in security mode.
- auth / session / token
- password / crypto primitives
- SQL / query building
- raw HTML render
- file / path handling
- exec / shell calls
- deserialise untrusted input
- env / secrets
- new outbound network
Context dies? /dev --resume <id> picks up.
Every step writes to state.json. Phase, step, cycle counters, last agent — all the cursor the orchestrator needs.
{
"id": "0001-feat-todolist-app",
"type": "feat",
"phase": "phase-2-implementation",
"step": "review",
"next_step": "test",
"cycles": { "review": 1, "test": 0 },
"last_agent": "lead",
"last_updated": "2026-05-14T12:48:03Z"
}
Each tick simulates the orchestrator finishing a step and writing state.
The JSON updates live — that's exactly what --resume reads back.
Loops have budgets. The orchestrator doesn't grind.
Review at 2, test at 3, then escalate. Anti-bias rule keeps reviews honest — checklists, not vibes.
After cycle 2, orchestrator escalates: continue / hand off / abort.
Same shape. No silent grinding past the limit.
High severity loops count against the review budget.
If pm skips it, orchestrator re-spawns. Spec built from a one-liner is broken.
Three runs, three shapes.
Same orchestrator, same artifacts. The matrix flexes around the intent.
- interview → spec (Type=feat)
- plan: Vite + React + TS, 10 steps
- gate → approve
- scaffold → implement → tests pass
- review clean → docs → commit + PR
- retro → 1 skill candidate created
- spec includes reproduction
- plan step 1 = failing regression test
- gate → approve
- test fails → fix → test passes
- security review fires (auth diff)
- commit only (no PR) → retro
- spec: timebox 1 day
- exploration plan, no production code
- gate → approve
- engineer explores both
- recommendations.md drafted
- retro → maybe a follow-up feat