Spec Kitty uses a kanban-style workflow to track work package progress. This document explains how lanes work, why we track status this way, and what happens when work moves between lanes.
Work packages move through four lanes during their lifecycle:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ PLANNED │ → │ DOING │ → │ FOR_REVIEW │ → │ DONE │
├─────────────┤ ├─────────────┤ ├─────────────┤ ├─────────────┤
│ Ready to │ │ Agent is │ │ Waiting for │ │ Reviewed │
│ start │ │ implementing│ │ review │ │ and merged │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
Meaning: Work package is defined and ready to start.
How it gets here:
/spec-kitty.tasks creates WPs in planned laneWhat happens:
Meaning: An agent is actively implementing this work package.
How it gets here:
spec-kitty agent tasks move-task WP01 --to doingspec-kitty implement WP01What happens:
doing at a timeMeaning: Implementation is complete, waiting for review.
How it gets here:
spec-kitty agent tasks move-task WP01 --to for_reviewWhat happens:
Meaning: Work package has been reviewed and accepted.
How it gets here:
spec-kitty agent tasks move-task WP01 --to doneWhat happens:
done, run /spec-kitty.accept to validate the entire feature1. WP created by /spec-kitty.tasks
└── lane: planned
2. Agent claims WP
└── spec-kitty agent tasks move-task WP01 --to doing --assignee claude
└── lane: doing
3. Agent completes implementation
└── spec-kitty agent tasks move-task WP01 --to for_review --note "Ready"
└── lane: for_review
4. Reviewer approves and moves WP
└── spec-kitty agent tasks move-task WP01 --to done
└── lane: done
└── (Once ALL WPs are done: /spec-kitty.accept validates entire feature)
When review finds issues:
1. WP in for_review, reviewer examines code
2. Reviewer finds problems
└── /spec-kitty.review WP01
└── Adds feedback to WP file
└── lane: planned (reset)
└── review_status: has_feedback
3. Agent re-claims WP
└── Reads feedback section in WP
└── Addresses issues
└── lane: doing → for_review
4. Reviewer re-reviews
└── If good: lane: done
└── If issues remain: repeat
Lane status is stored in each work package’s YAML frontmatter:
---
work_package_id: "WP01"
title: "Database Schema"
lane: "doing"
assignee: "claude"
agent: "claude"
shell_pid: "12345"
review_status: ""
---
| Field | Purpose |
|---|---|
lane |
Current status (planned/doing/for_review/done) |
assignee |
Who is working on this WP |
agent |
Which AI agent claimed this |
shell_pid |
Process ID of the agent (for tracking) |
review_status |
Empty or has_feedback if returned from review |
In many kanban systems, you move cards between columns (directories). In Spec Kitty, the WP file stays in the same place—only the lane: field changes.
kitty-specs/012-feature/tasks/
├── WP01-database.md # lane: done
├── WP02-api.md # lane: for_review
├── WP03-frontend.md # lane: doing
└── WP04-tests.md # lane: planned
This design keeps all WP files in one location for easier discovery.
Agents are responsible for:
planned → doing - Claiming a WP to work ondoing → for_review - Signaling completionCommands:
# Claim a WP
spec-kitty agent tasks move-task WP01 --to doing --assignee claude
# Mark complete
spec-kitty agent tasks move-task WP01 --to for_review --note "Implementation complete"
Reviewers are responsible for:
for_review → done - Approving workfor_review → planned - Requesting changes (adds feedback)Commands:
# Review a WP (opens review workflow)
/spec-kitty.review WP01
# Move WP to done after review passes
spec-kitty agent tasks move-task WP01 --to done
# Once ALL WPs are done, validate entire feature
/spec-kitty.accept
Users can override any lane transition if needed:
# Force move (e.g., to un-block stuck work)
spec-kitty agent tasks move-task WP01 --to planned
Every lane transition is logged in the WP file’s history field:
history:
- timestamp: "2026-01-15T10:00:00Z"
lane: "planned"
agent: "system"
action: "Prompt generated via /spec-kitty.tasks"
- timestamp: "2026-01-15T11:00:00Z"
lane: "doing"
agent: "claude"
shell_pid: "12345"
action: "Claimed for implementation"
- timestamp: "2026-01-15T14:00:00Z"
lane: "for_review"
agent: "claude"
shell_pid: "12345"
action: "Implementation complete, ready for review"
- timestamp: "2026-01-15T15:00:00Z"
lane: "done"
agent: "reviewer"
action: "Approved and moved to done"
Debugging: If something goes wrong, you can trace what happened.
Metrics: Calculate time-in-lane, cycle time, throughput.
Audit trail: Know who did what and when.
Coordination: Multiple agents can see what others are doing.
Use /spec-kitty.status to see the current board state:
Feature: 012-user-authentication
═══════════════════════════════════════════════════════════════════════════════
PLANNED │ DOING │ FOR_REVIEW │ DONE
─────────────────┼─────────────────┼─────────────────┼─────────────────
WP04-tests │ WP03-frontend │ WP02-api │ WP01-database
│ (claude) │ │
─────────────────┴─────────────────┴─────────────────┴─────────────────
Progress: ████████░░░░░░░░ 25% (1/4 done)
When a WP is in doing:
Before moving a WP to doing:
done lane (or at least for_review)The implement command enforces this:
spec-kitty implement WP02 --base WP01 # Ensures WP01 code is available
WPs cannot skip directly to done:
for_reviewBefore moving to for_review:
[x]WP01 → WP02 → WP03 → WP04
Each WP moves through lanes sequentially. One agent handles everything.
WP01 (done)
/ \
WP02 (doing) WP03 (doing)
Multiple WPs in doing simultaneously. Different agents work in parallel.
planned → doing → for_review → planned → doing → for_review → done
↑ ↑
(feedback) (approved)
Work returned from review goes back to planned with feedback.
This document explains how lanes work. For practical steps on moving work, see the how-to guides.