Spec driven development

Creates specs before coding.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/spec-driven-development, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit addyosmani/agent-skills/skills/spec-driven-development#main ~/.claude/skills/spec-driven-development

For one project only, change the path to .claude/skills/spec-driven-development. This skill also uses SPEC-identity.md, SPEC-billing.md, SPEC.md — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Spec driven development

Show the full text252 lines
namedescription
spec-driven-developmentCreates specs before coding. Use when starting a new project, feature, or significant change and no specification exists yet. Use when drafting a PRD or requirements document with objectives and scope, or when requirements are unclear, ambiguous, or only exist as a vague idea. Use when a single requirement spans several independently testable capabilities and needs decomposing into a capability map of modules before specifying.

Spec-Driven Development

Overview

Write a structured specification before writing any code. The spec is the shared source of truth between you and the human engineer — it defines what we're building, why, and how we'll know it's done. Code without a spec is guessing.

When to Use

  • Starting a new project or feature
  • Requirements are ambiguous or incomplete
  • The change touches multiple files or modules
  • You're about to make an architectural decision
  • The task would take more than 30 minutes to implement

When NOT to use: Single-line fixes, typo corrections, or changes where requirements are unambiguous and self-contained.

The Gated Workflow

Spec-driven development has four phases, preceded by a scope check (Phase 0) that activates only when one request bundles several independently testable capabilities. Do not advance to the next phase until the current one is validated.

SPECIFY ──→ PLAN ──→ TASKS ──→ IMPLEMENT
   │          │        │          │
   ▼          ▼        ▼          ▼
 Human      Human    Human      Human
 reviews    reviews  reviews    reviews
Phase 0: Scope Check

Most requests describe one capability. If this one does, skip this phase and go straight to Specify — Phase 0 exists for the exception, not the rule, and it puts no hierarchy on single-capability features.

Detection. Decompose before specifying when a single requirement bundles several independently testable capabilities:

  • The requirement names distinct capabilities with their own consumers or data (e.g. identity, billing, notifications, reporting)
  • Acceptance criteria cluster into groups that could ship and be verified separately
  • One capability could be cut or replaced without rewriting the others' requirements

Propose a capability map before writing any spec. Small and reviewable — a module table plus a build order, not a project plan:

# Capability Map: [Initiative Name]

| Module id | Responsibility | Depends on |
|---|---|---|
| identity | Accounts, sessions, SSO | — |
| billing | Plans, invoices, payments | identity |
| notifications | Email and webhook fan-out | identity |
| reporting | Usage dashboards | billing, notifications |

Build order: identity → billing, notifications → reporting
  • Stable module ids. Kebab-case, chosen once, never renamed mid-initiative. Specs, plans, and downstream commands select work by these ids instead of guessing which spec is active.
  • Dependency direction, no cycles. Arrows point one way. If two modules each need the other, they are one module.
  • Interfaces live at the boundary. The map records that billing depends on identity; the contract between them belongs in the provider module's spec (see api-and-interface-design for designing it).

The map is gated like every phase. The human reviews module boundaries, dependency direction, and build order before any module spec is written. Getting the map wrong is expensive; reviewing ten lines is not.

Then recurse per module. Run Specify → Plan → Tasks → Implement for each module in dependency order. Each module gets its own spec, scoped to that module's objective, boundaries, and success criteria. Save the approved map at the project root and each module's spec alongside it, named by module id (SPEC-identity.md, SPEC-billing.md) — the map, not filename guessing, is the index of what exists.

Phase 1: Specify

Start with a high-level vision. Ask the human clarifying questions until requirements are concrete.

Surface assumptions immediately. Before writing any spec content, list what you're assuming:

ASSUMPTIONS I'M MAKING:
1. This is a web application (not native mobile)
2. Authentication uses session-based cookies (not JWT)
3. The database is PostgreSQL (based on existing Prisma schema)
4. We're targeting modern browsers only (no IE11)
→ Correct me now or I'll proceed with these.

Don't silently fill in ambiguous requirements. The spec's entire purpose is to surface misunderstandings before code gets written — assumptions are the most dangerous form of misunderstanding.

Write a spec document covering these six core areas:

  1. Objective — What are we building and why? Who is the user? What does success look like?

  2. Commands — Full executable commands with flags, not just tool names.

    Build: npm run build
    Test: npm test -- --coverage
    Lint: npm run lint --fix
    Dev: npm run dev
    
  3. Project Structure — Where source code lives, where tests go, where docs belong.

    src/           → Application source code
    src/components → React components
    src/lib        → Shared utilities
    tests/         → Unit and integration tests
    e2e/           → End-to-end tests
    docs/          → Documentation
    
  4. Code Style — One real code snippet showing your style beats three paragraphs describing it. Include naming conventions, formatting rules, and examples of good output.

  5. Testing Strategy — What framework, where tests live, coverage expectations, which test levels for which concerns.

  6. Boundaries — Three-tier system:

    • Always do: Run tests before commits, follow naming conventions, validate inputs
    • Ask first: Database schema changes, adding dependencies, changing CI config
    • Never do: Commit secrets, edit vendor directories, remove failing tests without approval

Spec template:

# Spec: [Project/Feature Name]

## Objective
[What we're building and why. User stories or acceptance criteria.]

## Tech Stack
[Framework, language, key dependencies with versions]

## Commands
[Build, test, lint, dev — full commands]

## Project Structure
[Directory layout with descriptions]

## Code Style
[Example snippet + key conventions]

## Testing Strategy
[Framework, test locations, coverage requirements, test levels]

## Boundaries
- Always: [...]
- Ask first: [...]
- Never: [...]

## Success Criteria
[How we'll know this is done — specific, testable conditions]

## Open Questions
[Anything unresolved that needs human input]

External spec tools: This workflow is format-agnostic. If the project already uses OpenSpec or another specification system, keep that system's artifact format and storage conventions instead of creating a duplicate SPEC.md. This skill owns the clarification, content, and approval gates; the external tool owns how the approved spec is represented.

Reframe instructions as success criteria. When receiving vague requirements, translate them into concrete conditions:

REQUIREMENT: "Make the dashboard faster"

REFRAMED SUCCESS CRITERIA:
- Dashboard LCP < 2.5s on 4G connection
- Initial data load completes in < 500ms
- No layout shift during load (CLS < 0.1)
→ Are these the right targets?

This lets you loop, retry, and problem-solve toward a clear goal rather than guessing what "faster" means.

Phase 2: Plan

With the validated spec, generate a technical implementation plan:

  1. Identify the major components and their dependencies
  2. Determine the implementation order (what must be built first)
  3. Note risks and mitigation strategies
  4. Identify what can be built in parallel vs. what must be sequential
  5. Define verification checkpoints between phases

Follow planning-and-task-breakdown for the dependency-graph mapping and vertical-slicing mechanics behind these steps; it is the canonical source. The bullets above are a lightweight summary; if they ever diverge, planning-and-task-breakdown takes precedence.

Output convention: Save the plan to tasks/plan.md and record the task list in the task list target defined by planning-and-task-breakdown (default tasks/todo.md; projects may designate an external tracker instead). Create tasks/ if it does not exist. Downstream commands (/build, etc.) expect these defaults.

The plan should be reviewable: the human should be able to read it and say "yes, that's the right approach" or "no, change X."

Phase 3: Tasks

Break the plan into discrete, implementable tasks:

  • Each task should be completable in a single focused session
  • Each task has explicit acceptance criteria
  • Each task includes a verification step (test, build, manual check)
  • Tasks are ordered by dependency, not by perceived importance
  • No task should require changing more than ~5 files

Follow planning-and-task-breakdown for the full task-sizing and dependency-ordering mechanics; it is the canonical source. The template below is a lightweight inline form; if they ever diverge, planning-and-task-breakdown takes precedence.

Task template:

- [ ] Task: [Description]
  - Acceptance: [What must be true when done]
  - Verify: [How to confirm — test command, build, manual check]
  - Files: [Which files will be touched]
Phase 4: Implement

Execute tasks one at a time following skills/incremental-implementation/SKILL.md (incremental-implementation) and skills/test-driven-development/SKILL.md (test-driven-development). Use skills/context-engineering/SKILL.md (context-engineering) to load the right spec sections and source files at each step rather than flooding the agent with the entire spec.

Keeping the Spec Alive

The spec is a living document, not a one-time artifact:

  • Update when decisions change — If you discover the data model needs to change, update the spec first, then implement.
  • Update when scope changes — Features added or cut should be reflected in the spec.
  • Commit the spec — The spec belongs in version control alongside the code.
  • Reference the spec in PRs — Link back to the spec section that each PR implements.

Common Rationalizations

Rationalization Reality
"This is simple, I don't need a spec" Simple tasks don't need long specs, but they still need acceptance criteria. A two-line spec is fine.
"I'll write the spec after I code it" That's documentation, not specification. The spec's value is in forcing clarity before code.
"The spec will slow us down" A 15-minute spec prevents hours of rework. Waterfall in 15 minutes beats debugging in 15 hours.
"Requirements will change anyway" That's why the spec is a living document. An outdated spec is still better than no spec.
"The user knows what they want" Even clear requests have implicit assumptions. The spec surfaces those assumptions.
"It's one big feature; splitting it is overhead" If acceptance criteria cluster into independently testable groups, a monolithic spec forces every downstream task to reason over the whole contract. A ten-line capability map is the cheap alternative.
"I'll decompose during planning" Planning slices tasks within a spec. By then the oversized artifact already exists — module boundaries and dependency direction must be decided before the spec is written, not after.

Red Flags

  • Starting to write code without any written requirements
  • Asking "should I just start building?" before clarifying what "done" means
  • Implementing features not mentioned in any spec or task list
  • Making architectural decisions without documenting them
  • Skipping the spec because "it's obvious what to build"
  • One spec whose requirements span several independently testable capabilities
  • Module boundaries or build order decided implicitly during implementation because no capability map was approved up front

Verification

Before proceeding to implementation, confirm:

  • The spec covers all six core areas
  • The human has reviewed and approved the spec
  • Success criteria are specific and testable
  • Boundaries (Always/Ask First/Never) are defined
  • The spec is saved to a file in the repository
  • If the request bundles several independently testable capabilities, a capability map (module ids, dependency direction, build order) was approved before any module spec was written
  • Every module spec traces to a module id in the approved map
1---
2name: spec-driven-development
3description: Creates specs before coding. Use when starting a new project, feature, or significant change and no specification exists yet. Use when drafting a PRD or requirements document with objectives and scope, or when requirements are unclear, ambiguous, or only exist as a vague idea. Use when a single requirement spans several independently testable capabilities and needs decomposing into a capability map of modules before specifying.
4---
5 
6# Spec-Driven Development
7 
8## Overview
9 
10Write a structured specification before writing any code. The spec is the shared source of truth between you and the human engineer — it defines what we're building, why, and how we'll know it's done. Code without a spec is guessing.
11 
12## When to Use
13 
14- Starting a new project or feature
15- Requirements are ambiguous or incomplete
16- The change touches multiple files or modules
17- You're about to make an architectural decision
18- The task would take more than 30 minutes to implement
19 
20**When NOT to use:** Single-line fixes, typo corrections, or changes where requirements are unambiguous and self-contained.
21 
22## The Gated Workflow
23 
24Spec-driven development has four phases, preceded by a scope check (Phase 0) that activates only when one request bundles several independently testable capabilities. Do not advance to the next phase until the current one is validated.
25 
26```
27SPECIFY ──→ PLAN ──→ TASKS ──→ IMPLEMENT
28 │ │ │ │
29 ▼ ▼ ▼ ▼
30 Human Human Human Human
31 reviews reviews reviews reviews
32```
33 
34### Phase 0: Scope Check
35 
36Most requests describe one capability. If this one does, skip this phase and go straight to Specify — Phase 0 exists for the exception, not the rule, and it puts no hierarchy on single-capability features.
37 
38**Detection.** Decompose before specifying when a single requirement bundles several independently testable capabilities:
39 
40- The requirement names distinct capabilities with their own consumers or data (e.g. identity, billing, notifications, reporting)
41- Acceptance criteria cluster into groups that could ship and be verified separately
42- One capability could be cut or replaced without rewriting the others' requirements
43 
44**Propose a capability map before writing any spec.** Small and reviewable — a module table plus a build order, not a project plan:
45 
46```markdown
47# Capability Map: [Initiative Name]
48 
49| Module id | Responsibility | Depends on |
50|---|---|---|
51| identity | Accounts, sessions, SSO | — |
52| billing | Plans, invoices, payments | identity |
53| notifications | Email and webhook fan-out | identity |
54| reporting | Usage dashboards | billing, notifications |
55 
56Build order: identity → billing, notifications → reporting
57```
58 
59- **Stable module ids.** Kebab-case, chosen once, never renamed mid-initiative. Specs, plans, and downstream commands select work by these ids instead of guessing which spec is active.
60- **Dependency direction, no cycles.** Arrows point one way. If two modules each need the other, they are one module.
61- **Interfaces live at the boundary.** The map records that `billing` depends on `identity`; the contract between them belongs in the provider module's spec (see `api-and-interface-design` for designing it).
62 
63**The map is gated like every phase.** The human reviews module boundaries, dependency direction, and build order before any module spec is written. Getting the map wrong is expensive; reviewing ten lines is not.
64 
65**Then recurse per module.** Run Specify → Plan → Tasks → Implement for each module in dependency order. Each module gets its own spec, scoped to that module's objective, boundaries, and success criteria. Save the approved map at the project root and each module's spec alongside it, named by module id (`SPEC-identity.md`, `SPEC-billing.md`) — the map, not filename guessing, is the index of what exists.
66 
67### Phase 1: Specify
68 
69Start with a high-level vision. Ask the human clarifying questions until requirements are concrete.
70 
71**Surface assumptions immediately.** Before writing any spec content, list what you're assuming:
72 
73```
74ASSUMPTIONS I'M MAKING:
751. This is a web application (not native mobile)
762. Authentication uses session-based cookies (not JWT)
773. The database is PostgreSQL (based on existing Prisma schema)
784. We're targeting modern browsers only (no IE11)
79→ Correct me now or I'll proceed with these.
80```
81 
82Don't silently fill in ambiguous requirements. The spec's entire purpose is to surface misunderstandings *before* code gets written — assumptions are the most dangerous form of misunderstanding.
83 
84**Write a spec document covering these six core areas:**
85 
861. **Objective** — What are we building and why? Who is the user? What does success look like?
87 
882. **Commands** — Full executable commands with flags, not just tool names.
89 ```
90 Build: npm run build
91 Test: npm test -- --coverage
92 Lint: npm run lint --fix
93 Dev: npm run dev
94 ```
95 
963. **Project Structure** — Where source code lives, where tests go, where docs belong.
97 ```
98 src/ → Application source code
99 src/components → React components
100 src/lib → Shared utilities
101 tests/ → Unit and integration tests
102 e2e/ → End-to-end tests
103 docs/ → Documentation
104 ```
105 
1064. **Code Style** — One real code snippet showing your style beats three paragraphs describing it. Include naming conventions, formatting rules, and examples of good output.
107 
1085. **Testing Strategy** — What framework, where tests live, coverage expectations, which test levels for which concerns.
109 
1106. **Boundaries** — Three-tier system:
111 - **Always do:** Run tests before commits, follow naming conventions, validate inputs
112 - **Ask first:** Database schema changes, adding dependencies, changing CI config
113 - **Never do:** Commit secrets, edit vendor directories, remove failing tests without approval
114 
115**Spec template:**
116 
117```markdown
118# Spec: [Project/Feature Name]
119 
120## Objective
121[What we're building and why. User stories or acceptance criteria.]
122 
123## Tech Stack
124[Framework, language, key dependencies with versions]
125 
126## Commands
127[Build, test, lint, dev — full commands]
128 
129## Project Structure
130[Directory layout with descriptions]
131 
132## Code Style
133[Example snippet + key conventions]
134 
135## Testing Strategy
136[Framework, test locations, coverage requirements, test levels]
137 
138## Boundaries
139- Always: [...]
140- Ask first: [...]
141- Never: [...]
142 
143## Success Criteria
144[How we'll know this is done — specific, testable conditions]
145 
146## Open Questions
147[Anything unresolved that needs human input]
148```
149 
150**External spec tools:** This workflow is format-agnostic. If the project
151already uses OpenSpec or another specification system, keep that system's
152artifact format and storage conventions instead of creating a duplicate
153`SPEC.md`. This skill owns the clarification, content, and approval gates; the
154external tool owns how the approved spec is represented.
155 
156**Reframe instructions as success criteria.** When receiving vague requirements, translate them into concrete conditions:
157 
158```
159REQUIREMENT: "Make the dashboard faster"
160 
161REFRAMED SUCCESS CRITERIA:
162- Dashboard LCP < 2.5s on 4G connection
163- Initial data load completes in < 500ms
164- No layout shift during load (CLS < 0.1)
165→ Are these the right targets?
166```
167 
168This lets you loop, retry, and problem-solve toward a clear goal rather than guessing what "faster" means.
169 
170### Phase 2: Plan
171 
172With the validated spec, generate a technical implementation plan:
173 
1741. Identify the major components and their dependencies
1752. Determine the implementation order (what must be built first)
1763. Note risks and mitigation strategies
1774. Identify what can be built in parallel vs. what must be sequential
1785. Define verification checkpoints between phases
179 
180> Follow `planning-and-task-breakdown` for the dependency-graph mapping and vertical-slicing mechanics behind these steps; it is the canonical source. The bullets above are a lightweight summary; if they ever diverge, `planning-and-task-breakdown` takes precedence.
181>
182> **Output convention:** Save the plan to `tasks/plan.md` and record the task list in the task list target defined by `planning-and-task-breakdown` (default `tasks/todo.md`; projects may designate an external tracker instead). Create `tasks/` if it does not exist. Downstream commands (`/build`, etc.) expect these defaults.
183 
184The plan should be reviewable: the human should be able to read it and say "yes, that's the right approach" or "no, change X."
185 
186### Phase 3: Tasks
187 
188Break the plan into discrete, implementable tasks:
189 
190- Each task should be completable in a single focused session
191- Each task has explicit acceptance criteria
192- Each task includes a verification step (test, build, manual check)
193- Tasks are ordered by dependency, not by perceived importance
194- No task should require changing more than ~5 files
195 
196> Follow `planning-and-task-breakdown` for the full task-sizing and dependency-ordering mechanics; it is the canonical source. The template below is a lightweight inline form; if they ever diverge, `planning-and-task-breakdown` takes precedence.
197 
198**Task template:**
199```markdown
200- [ ] Task: [Description]
201 - Acceptance: [What must be true when done]
202 - Verify: [How to confirm — test command, build, manual check]
203 - Files: [Which files will be touched]
204```
205 
206### Phase 4: Implement
207 
208Execute tasks one at a time following `skills/incremental-implementation/SKILL.md` (`incremental-implementation`) and `skills/test-driven-development/SKILL.md` (`test-driven-development`). Use `skills/context-engineering/SKILL.md` (`context-engineering`) to load the right spec sections and source files at each step rather than flooding the agent with the entire spec.
209 
210## Keeping the Spec Alive
211 
212The spec is a living document, not a one-time artifact:
213 
214- **Update when decisions change** — If you discover the data model needs to change, update the spec first, then implement.
215- **Update when scope changes** — Features added or cut should be reflected in the spec.
216- **Commit the spec** — The spec belongs in version control alongside the code.
217- **Reference the spec in PRs** — Link back to the spec section that each PR implements.
218 
219## Common Rationalizations
220 
221| Rationalization | Reality |
222|---|---|
223| "This is simple, I don't need a spec" | Simple tasks don't need *long* specs, but they still need acceptance criteria. A two-line spec is fine. |
224| "I'll write the spec after I code it" | That's documentation, not specification. The spec's value is in forcing clarity *before* code. |
225| "The spec will slow us down" | A 15-minute spec prevents hours of rework. Waterfall in 15 minutes beats debugging in 15 hours. |
226| "Requirements will change anyway" | That's why the spec is a living document. An outdated spec is still better than no spec. |
227| "The user knows what they want" | Even clear requests have implicit assumptions. The spec surfaces those assumptions. |
228| "It's one big feature; splitting it is overhead" | If acceptance criteria cluster into independently testable groups, a monolithic spec forces every downstream task to reason over the whole contract. A ten-line capability map is the cheap alternative. |
229| "I'll decompose during planning" | Planning slices tasks within a spec. By then the oversized artifact already exists — module boundaries and dependency direction must be decided before the spec is written, not after. |
230 
231## Red Flags
232 
233- Starting to write code without any written requirements
234- Asking "should I just start building?" before clarifying what "done" means
235- Implementing features not mentioned in any spec or task list
236- Making architectural decisions without documenting them
237- Skipping the spec because "it's obvious what to build"
238- One spec whose requirements span several independently testable capabilities
239- Module boundaries or build order decided implicitly during implementation because no capability map was approved up front
240 
241## Verification
242 
243Before proceeding to implementation, confirm:
244 
245- [ ] The spec covers all six core areas
246- [ ] The human has reviewed and approved the spec
247- [ ] Success criteria are specific and testable
248- [ ] Boundaries (Always/Ask First/Never) are defined
249- [ ] The spec is saved to a file in the repository
250- [ ] If the request bundles several independently testable capabilities, a capability map (module ids, dependency direction, build order) was approved before any module spec was written
251- [ ] Every module spec traces to a module id in the approved map
252 

Discussion

Alternatives

Also in Specs & PRDsSee all 277 in Product →