SDD Workflow
Critical Rules
- •ALWAYS start with Phase 1 (Specify) — never skip to implementation without a spec
- •NEVER proceed to the next phase until the current phase's artifact exists and is confirmed
- •ALWAYS persist phase artifacts to files — memory is files, not conversation
- •WHEN resuming an interrupted workflow, detect existing artifacts and resume from the correct phase
- •NEVER let Phase 3 (Implement) start without both a spec AND a plan (unless in lightweight mode)
- •WHEN the user wants to skip phases, explain the value of each phase but respect their decision if they insist
Instructions
Step 0: Detect Existing Workflow State
Before starting, check for existing artifacts from a previous session:
- •Look for
specs/<feature-name>.md— if exists, Phase 1 is done - •Look for
specs/<feature-name>.plan.md— if exists, Phase 2 is done - •Look for
specs/<feature-name>.validation.md— if exists, Phase 4 is done
IF existing artifacts found:
- •Show the user what exists and which phase to resume from
- •Ask: "Found existing artifacts. Resume from Phase N, or start fresh?"
IF no artifacts found → proceed to Step 1.
Step 1: Determine Rigor Level and Mode
Analyze the user's feature description to select the workflow mode:
Lightweight Mode (auto-detected for small changes):
- •Change affects 1-2 files with clear scope
- •User describes a bug fix, small tweak, or minor addition
- •Workflow: Write acceptance criteria → Implement → Validate (skip formal plan)
Full Mode (default for everything else):
- •Workflow: Specify → Plan → Implement → Validate
Rigor Level (see references/rigor-levels.md for details):
- •spec-first (default): Spec guides initial development, may not be maintained
- •spec-anchored: Spec maintained alongside code, both evolve together
- •spec-as-source: Spec IS the source, code generated from it
Announce the selected mode and rigor level. If the user mentioned "API", "contract", "long-term", "team", or "shared", recommend spec-anchored and explain why.
If the user explicitly requests a specific rigor level, use it.
Step 2: Phase 1 — Specify
Goal: Produce a spec file at specs/<feature-name>.md
Option A: Delegate to spec-writer skill If the feature needs deep elicitation (complex, unclear, many stakeholders):
"This feature would benefit from a detailed specification. I'll use the spec-writer skill to guide you through it."
Use the Skill tool to invoke spec-writer with the feature description.
Option B: Inline spec creation For straightforward features where the user has already described clear requirements:
- •Draft a spec directly using the spec-writer format (Purpose, Rigor Level, Acceptance Criteria, Edge Cases, Constraints)
- •Present it for confirmation
- •Write to
specs/<feature-name>.md
Phase 1 is complete when specs/<feature-name>.md exists and the user has confirmed it.
Step 3: Phase 2 — Plan
Goal: Produce an implementation plan at specs/<feature-name>.plan.md
Invoke the spec-planner agent using the Task tool:
Task tool call: subagent_type: "spec-planner" prompt: "Read the spec at specs/<feature-name>.md and produce an implementation plan. Scan the codebase for existing patterns and relevant code. Output the plan to specs/<feature-name>.plan.md"
Wait for the agent to complete and read the generated plan.
Present the plan to the user:
"Here's the implementation plan. Review the architecture decisions and task breakdown. Should we proceed, or adjust anything?"
Phase 2 is complete when the plan file exists and the user approves it.
In lightweight mode: Skip this phase. The acceptance criteria from the spec serve as the implementation guide.
Step 4: Phase 3 — Implement
Goal: Build the feature according to the plan (or spec in lightweight mode)
This phase is user-driven. The skill provides structure, not automation:
- •Display the task list from the plan (or acceptance criteria in lightweight mode)
- •For each task:
- •Announce which task is being worked on
- •Implement the required changes
- •Mark the task complete
- •Briefly verify the change works
- •Track progress: "Completed N/M tasks"
During implementation, watch for:
- •Requirements that don't match the plan → pause and suggest updating artifacts
- •Missing acceptance criteria discovered during coding → note them for the validate phase
- •Blockers or unclear requirements → pause and ask the user
Phase 3 is complete when all plan tasks (or acceptance criteria) are addressed.
Step 5: Phase 4 — Validate
Goal: Verify implementation matches the spec. Produce a validation report.
Invoke the spec-validator agent using the Task tool:
Task tool call: subagent_type: "spec-validator" prompt: "Read the spec at specs/<feature-name>.md. Validate the implementation against all acceptance criteria and edge cases. Write the report to specs/<feature-name>.validation.md"
Wait for the agent to complete and read the validation report.
Present the report to the user with a summary:
If PASS: "All acceptance criteria met. Implementation is complete."
If PARTIAL: "N/M criteria met. Here's what's missing: [list]. Would you like to address these now?"
If FAIL: "Significant gaps found. Here are the issues: [list]. Let's fix these before considering this done."
For spec-anchored rigor: remind the user that the spec should be updated if implementation legitimately diverged from the original spec.
Step 6: Completion
When all four phases are done:
- •Summarize what was built
- •List all artifacts created (spec, plan, validation report)
- •Note the rigor level and any maintenance implications
- •If spec-anchored: remind user to update spec when behavior changes in the future
Examples
Example 1: Full Workflow
User: "I want to add OAuth2 login to my app using spec-driven development" SDD Workflow: → Detected: "login" + "OAuth2" = auth feature, multi-file change → Mode: Full workflow → Rigor: Recommending spec-anchored (auth is security-critical, shared) Phase 1 (Specify): Delegating to spec-writer... [spec-writer guides user through OAuth2 spec creation] ✓ Spec written to specs/oauth2-login.md Phase 2 (Plan): Invoking spec-planner agent... [agent analyzes codebase and generates plan] ✓ Plan written to specs/oauth2-login.plan.md "Here's the plan with 8 tasks. Review and approve?" Phase 3 (Implement): Working through tasks... Task 1/8: Add OAuth2 client configuration ✓ Task 2/8: Create callback endpoint ✓ ... Task 8/8: Add session management ✓ Phase 4 (Validate): Invoking spec-validator agent... ✓ All 12 acceptance criteria met ✓ 5/6 edge cases covered (1 marked UNCLEAR - manual verification needed) Report: specs/oauth2-login.validation.md
Example 2: Lightweight Mode
User: "Fix the off-by-one error in the pagination component" SDD Workflow: → Detected: 1-2 files, bug fix, clear scope → Mode: Lightweight (skip formal plan) → Rigor: spec-first Phase 1: Quick acceptance criteria: AC1: Given page 1 with 10 items per page, when requesting page 2, then items 11-20 are shown AC2: Given the last page, when displayed, then only remaining items shown (no duplicates) ✓ Spec written to specs/pagination-fix.md Phase 3: Implementing fix... ✓ Fixed offset calculation in pagination.ts Phase 4: Validating... ✓ Both acceptance criteria met
Troubleshooting
User wants to skip Specify phase
Cause: They feel it's overhead for a "simple" change. Solution: Explain value: "Specs prevent rework by clarifying requirements upfront. Even 2-3 acceptance criteria help." If they insist, let them proceed but note the risk of rework.
Plan doesn't match spec
Cause: The spec-planner agent missed acceptance criteria or misinterpreted constraints. Solution: Phase 2 should be re-run. The plan must address every acceptance criterion in the spec. Review the spec for clarity if the agent consistently misinterprets it.
Implementation diverges from plan
Cause: Reality doesn't match the plan — new constraints discovered during coding. Solution: This is normal. Update the plan if the divergence is intentional. Flag it if accidental. The plan is a guide, not a contract.
Validation finds gaps late
Cause: Acceptance criteria were met but edge cases were missed during implementation. Solution: Better late than never. The gaps inform either code fixes or spec updates (if requirements changed during implementation).
User doesn't know which rigor level
Cause: The three levels seem abstract without project context. Solution: Default to spec-first. It has the lowest overhead and still provides value. Suggest upgrading later if the feature becomes long-lived.
Session ends mid-workflow
Cause: User closes session or context window fills up. Solution: Artifacts on disk allow resumption. Step 0 handles detection automatically on the next invocation.