spec-writer · v1.0.0 · 2026-09-14 · sha256 0fd6e14d636b0365

spec-writer v1.0.0A

Immutable. This exact content is served forever at /api/v1/blob/0fd6e14d636b0365.

---
name: spec-writer
description: >
  Use this skill when a vague feature request, ticket, PRD fragment, or rough idea
  needs to be turned into a structured specification, technical plan, and ordered
  task breakdown for AI coding agents. Generates all three output sections
  immediately, then flags every implicit decision as an inline [ASSUMPTION: ...]
  marker with an impact rating and correction guidance — no back-and-forth
  questions needed before drafting. Primary keywords: spec-driven development
  SDD, feature specification generation, technical planning, task breakdown,
  assumption flagging, acceptance criteria Given When Then, requirements
  engineering, feature request refinement, specification writing agent,
  plan-first development. For all major agentic platforms.
version: 1.0.0
author: JPeetz (based on spec-writer by dannwaneri)
license: MIT
compatibility: >
  Cross-platform: Claude Code, OpenAI Codex, GitHub Copilot, Cursor, Windsurf,
  Gemini CLI, OpenClaw, Hermes Agent, OpenCode, and any SKILL.md-compatible agent.
tags:
  - spec-writing
  - technical-planning
  - task-breakdown
  - requirements-engineering
  - spec-driven-development
  - sdd
  - feature-specification
  - assumption-tracking
  - acceptance-criteria
  - plan-first
  - documentation
platforms:
  - claude-code
  - codex
  - opencode
  - cursor
  - gemini-cli
  - openclaw
  - hermes-agent
  - windsurf
  - copilot
---

# Spec Writer

Turns a vague feature request into a structured spec, technical plan, and task breakdown — ready for any coding agent to implement without guessing.

---

## Overview

AI coding agents don't fail because the model is weak. They fail because the instructions are ambiguous. This skill closes that gap **before** the agent starts.

Given any feature description — a sentence, a ticket, a PRD fragment, a rough idea — spec-writer produces three deliverables in a single output:

1. **A Spec** — functional, technology-agnostic. What the feature does, who uses it, what must be true, what can go wrong, and binary acceptance criteria in Given/When/Then format.
2. **A Plan** — technical and concrete. Architecture decisions, data model changes, API contracts, testing strategy, security constraints.
3. **A Task breakdown** — ordered, self-contained tasks. Each completable in a single agent session. Each with its own acceptance criteria.

The key methodology: **generate first, flag assumptions inline**. Instead of asking clarifying questions before drafting, the skill produces a complete output and marks every decision made without user input as `[ASSUMPTION: ...]` — impact-rated, with guidance on when to correct it.

---

## When to Use

- A stakeholder or user sends a vague feature request ("add export", "build a dashboard", "let users invite teammates")
- You have a Jira ticket, Linear issue, or GitHub issue that says *what* but not *how*, and needs decomposing into agent-ready work
- You need to validate scope and surface hidden assumptions before implementation starts
- You're handing work to another agent or developer and want to eliminate ambiguity
- You want acceptance criteria that are **binary pass/fail**, not "works correctly"
- You need a plan-first methodology for Spec Driven Development (SDD)

Do **not** use this skill when:
- The requirements are already a complete, unambiguous spec with acceptance criteria
- You need a quick one-line answer rather than a structured document
- You're asking a question rather than requesting a feature

---

## How to Invoke

```
/spec-writer [feature description]
```

Pass anything — a feature description, a ticket, a PRD fragment, a rough idea:

```
/spec-writer Add password reset via email
/spec-writer Build an admin dashboard showing daily active users
/spec-writer Let users invite teammates to their workspace
/spec-writer Add rate limiting to the public API
```

The skill produces a complete spec, plan, and task breakdown in one shot. No intermediate questions.

---

## Output Format

The output is a single document with three sections, each clearly delimited:

### Spec Section

The Spec section contains:

- **Purpose** — one or two sentences describing the feature's goal
- **Use case(s)** — who uses this feature and what they accomplish
- **Functional requirements** — what the system must do (numbered)
- **Non-functional requirements** — performance, security, compliance constraints
- **Acceptance criteria** — binary Given/When/Then scenarios
- **Edge cases** — what happens at boundaries, with empty states, with errors

### Plan Section

The Plan section contains:

- **Architecture decisions** — components, interactions, data flow
- **Data model changes** — new/modified entities, fields, relationships
- **API contracts** — endpoints, methods, request/response shapes
- **UI changes** — components, states, navigation flow
- **Testing strategy** — unit, integration, E2E coverage requirements
- **Security & performance constraints** — auth, rate limiting, caching, SLAs

### Task Breakdown Section

The Task breakdown section contains:

- A numbered list of **ordered, self-contained tasks**, each with:
  - **Dependencies** — which tasks must complete first
  - **Acceptance criteria** — binary pass/fail conditions unique to that task
  - **Estimated complexity** — (small / medium / large)
- No task says "implement the feature" — every task is independently verifiable

---

## Assumption Markers

Every decision the skill makes without explicit user input is marked inline with an `[ASSUMPTION: ...]` annotation:

```
When the export contains more than 1,000 rows
  [ASSUMPTION: async for large exports — Impact: HIGH]
Then the export is generated asynchronously and the user is notified by email
```

At the end of the output, all assumptions are collected into a prioritized summary:

```
## Assumptions to Review
1. Async generation for exports over 1,000 rows — Impact: HIGH
   Correct this if: your order volumes are low and synchronous is fine
2. Date range filter is required — Impact: MEDIUM
   Correct this if: the first version should export all orders with no filtering
```

### Assumption Impact Levels

| Impact | Meaning |
|--------|---------|
| **HIGH** | Changing this assumption could significantly alter the architecture or effort |
| **MEDIUM** | Changing this assumption would affect the design but not the overall approach |
| **LOW** | Changing this assumption is a minor adjustment with no architectural impact |

---

## Common Pitfalls

1. **Over-specifying technology in the Spec section.** The Spec must remain technology-agnostic. Framework choices, database decisions, and library selections belong in the Plan section only.
2. **Acceptance criteria that aren't binary.** "Works correctly" is not a criterion. "Returns 401 when unauthenticated" is. Every criterion must be testable as pass/fail.
3. **Tasks that are too large.** If a task's acceptance criteria read like a mini-spec, break it down further. Every task should be completable in a single agent session.
4. **Missing edge cases.** Always include empty states, error states, boundary conditions (pagination limits, max file size, timeout duration), and concurrent access.
5. **Skipping the assumptions review.** The generated assumptions are a feature, not a bug. Always explicitly review and either confirm or override each HIGH/MEDIUM assumption before handing the output to an implementer.
6. **Mixing spec with plan details.** If an acceptance criterion mentions a specific library or framework, it belongs in the Plan. Keep the Spec pure functional requirements.
7. **No non-functional requirements.** Storage limits, latency targets, concurrency expectations, and accessibility requirements are often assumed but must be explicit.

---

## Verification

After generating the output, verify the following before considering it complete:

- [ ] **Every [ASSUMPTION] marker is impact-rated** — HIGH, MEDIUM, or LOW — with correction guidance
- [ ] **Assumptions are collected** into a single summary section at the end
- [ ] **Spec is technology-agnostic** — no framework, library, or infrastructure choices in functional requirements or acceptance criteria
- [ ] **Acceptance criteria are binary** — every scenario is a clear Given/When/Then that can pass or fail
- [ ] **Plan contains concrete decisions** — architecture, data model, API contracts, testing strategy
- [ ] **Tasks are self-contained** — each has unique acceptance criteria and clear dependencies
- [ ] **No task says "implement the feature"** — the largest task should be implementable in a single agent session
- [ ] **Edge cases are covered** — empty states, error states, boundary conditions, concurrent access
- [ ] **Non-functional requirements are present** — performance, security, storage, latency