Turns vague product ideas into a spec.md → plan.md → tasks.md pipeline with TDD ordering. For use before writing code for any new feature, MVP, or project.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dominicode-sdd-creator:dominicode-sdd-creatorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill turns a vague product idea into a Spec → Plan → Tasks pipeline that drives implementation through TDD. Code is the **last** thing that happens, not the first.
This skill turns a vague product idea into a Spec → Plan → Tasks pipeline that drives implementation through TDD. Code is the last thing that happens, not the first.
SDD adaptation by Bezael Pérez · Dominicode.
You write the spec → the spec drives the plan → the plan drives the tests → the tests drive the implementation.
Trigger this skill at the start of any non-trivial coding work, even if the user did not say the word "spec". Signals:
Do not trigger for:
specs/<name>/spec.md already exists (read it instead)Look at the conversation so far and classify what the user has given you:
| Level | Signal | Action |
|---|---|---|
| HIGH | Detailed PRD, ticket, doc, or 3+ paragraphs of context | Produce a full draft of the 6 sections + list "Open questions" at the end |
| MEDIUM | 1–2 sentences with clear goal but missing detail | Produce a draft, mark unknowns with [NEEDS CONFIRMATION: ...] inline |
| LOW | Vague request ("quiero hacer una app de X") | Interview the user one section at a time — do NOT dump all 6 questions at once |
Tell the user which mode you detected and why, in one sentence, before proceeding.
A spec written in a vacuum proposes a stack the project doesn't use and re-decides things already decided. Before choosing a slug, look at what exists — so the spec fits the project it will live in. If you have filesystem access, inspect; if not, ask the user the same questions.
package.json, pyproject.toml, Cargo.toml, go.mod, Gemfile, pom.xml/build.gradle, composer.json, pubspec.yaml, *.csproj) and its dependencies: framework/runtime, DB/ORM, auth, lint/format, and the test runner. These are commitments to respect, not re-open.src/, app/, feature- vs layer-folders), file naming, and whether identifiers/comments are English or Spanish.specs/INDEX.md exists, read its Shared decisions (reuse them) and scan the Specs table for a feature related to this request. If you find one, surface it: "this looks related to <slug> — extend that spec, or start a new one?". If there's no index but specs/<slug>/ folders exist, grep/Glob across specs/**/spec.md as fallback recall.plan.md".This snapshot anchors Section 5 (Architecture) and plan.md §1 on what already exists, and pre-collects the facts that Step 3.5 will confirm rather than re-scan. See references/codebase-inspection.md for what to read per ecosystem and the no-conflicting-stack rule.
Ask for or infer a short kebab-case name (e.g. invoice-generator, user-auth). All artifacts go under specs/<feature-slug>/.
spec.md (the 6 sections)Use the template at templates/spec.md. Fill all 6 sections in order. Strict rules:
Usuario [rol]: acción 1, acción 2, acción 3.El usuario puede ... or El sistema permite .... Organize by module. This is non-negotiable — it forces thinking from behavior, not from code.A decidir con el agente and propose 2–3 reasonable stacks with trade-offs. Don't invent a stack silently.After writing, stop and ask the user to confirm. Do not move to Step 3 without explicit go-ahead.
plan.md (technical decisions)Use the template at templates/plan.md. Translate the spec into technical decisions:
Again, stop and confirm before Step 3.5.
Without a working test runner there is no TDD. Before writing tasks.md, confirm the runner — or that installing one is the first task.
Use the test-runner facts already gathered in the Step 0.5 snapshot (re-inspect only if the snapshot is missing, or ask the user if you have no filesystem access):
package.json → Node, pyproject.toml/requirements.txt → Python, Cargo.toml → Rust, go.mod → Go, Gemfile → Ruby, pom.xml/build.gradle → Java/Kotlin, composer.json → PHP, pubspec.yaml → Dart, *.csproj → .NET.tests/, __tests__/, *.test.*, *_test.go, spec/, etc).cargo test and go test are built-in). Confirm with the user. Setup tasks go in Phase 0 of tasks.md.plan.md § "Stack final → CI / Tests". If it's not, go back and close it before continuing.spec.md + plan.md only, skip tasks.md. Do not silently switch to non-TDD tasks.State the result of the detection to the user in one sentence before proceeding to Step 4 ("Detected pytest in pyproject.toml, using it" / "No runner found — proposing Vitest, please confirm").
See references/test-runner-detection.md for the full matrix per ecosystem, defaults with rationale, and the smoke-test pattern.
tasks.md (TDD-ordered task list)Use the template at templates/tasks.md. This is where SDD meets TDD. For every feature in Section 3 of the spec, generate tasks in this order:
Each task is a checkbox. Each task has:
See references/tdd-workflow.md for the full chaining detail and naming conventions.
Before hand-off — fill the coverage matrix. At the end of tasks.md, build the ## Coverage matrix: one row per Section 3 feature → its plan.md contract/entity → the task IDs that build and test it. If any feature has no task, it is an orphan — the task list is not done; close the gap before Step 5. See references/traceability.md for the method and the two-way gap check.
Gate before hand-off: the coverage matrix is filled and has no orphan features (every Section 3 bullet traces to a task), and Section 4 flows + measurable Section 6 NFRs have their tasks. If not, don't hand off — close the gap first.
Update project memory. Create or update specs/INDEX.md (from templates/specs-index.md if it doesn't exist yet): add or refresh this spec's row (slug, one-line vision, status, key stack, related specs) and promote any genuinely cross-cutting decision from plan.md into the Shared decisions table, citing this slug.
Then tell the user:
specs/<feature-slug>/, and specs/INDEX.md is updatedtasks.md and execute it — nothing elsespec.md first, don't paper over it in code.work/)The three SDD artifacts document decisions; execution deserves a plan too — but a disposable one. At the start of each implementation session (this one or a future agent run), before touching code:
specs/<feature-slug>/.work/implementation.md from templates/implementation.md: which tasks from tasks.md this session covers, files to touch in attack order, execution order, and the exact test command.specs/**/.work/ is in the project's .gitignore — add it if missing. This file is agent scratch, never committed: if persisted it goes stale and starts competing with plan.md as a source of truth.spec.md → plan.md → tasks.md first, then regenerate the ephemeral plan. This feeds the existing rule 4 of tasks.md, it does not replace it.The benefit: the plan survives context compaction within the session, and is cheap to regenerate in the next one because it derives from tasks.md.
Always produce exactly this layout under the project root:
specs/
├── INDEX.md ← project memory — committed, updated at hand-off
└── <feature-slug>/
├── spec.md
├── plan.md
├── tasks.md
└── .work/
└── implementation.md ← gitignored — ephemeral, regenerated each session
If specs/<feature-slug>/ already exists, read it first and propose updates rather than overwriting. If specs/INDEX.md exists, read it at Step 0.5 and reconcile it at hand-off.
tasks.md.work/ — the ephemeral implementation plan is agent scratch, not documentationspecs/INDEX.md at hand-off and reuse its Shared decisions instead of re-deciding themspec.md first when implementation reveals a gap, then update plan.md and tasks.md, then code — a durable decision must never live only in .work/implementation.mdtemplates/spec.md — the 6-section spec template (fill in directly)templates/plan.md — technical plan templatetemplates/tasks.md — TDD task list template (includes the coverage matrix)templates/implementation.md — ephemeral implementation plan template (gitignored, per session)templates/specs-index.md — project memory index template (specs/INDEX.md: shared decisions + specs table)references/examples.md — a fully worked example (feature: invoice generator)references/codebase-inspection.md — how to ground the spec in the existing project (Step 0.5): what to read per ecosystem, the snapshot, the no-conflicting-stack rulereferences/tdd-workflow.md — TDD chaining details, naming conventions, common pitfallsreferences/test-runner-detection.md — how to verify if the project has a test runner, defaults per ecosystem, smoke-test patternreferences/traceability.md — the coverage matrix method (spec §3 → plan → tasks) and the hand-off gateSkill by Bezael Pérez · Dominicode — Build with AI: From Idea to Product with Claude and Specs.
npx claudepluginhub bezael/sdd-creatorGuides GitHub Spec-Kit CLI integration for 7-phase constitution-based spec-driven feature development, managing .specify/specs/ directories with phases: Constitution, Specify, Clarify, Plan, Tasks, Analyze, Implement.
Orchestrates spec-driven development workflow (Requirements → Design → Tasks → Implementation) with approval gates. Activates for structured feature planning or 'use spec-driven'.
Writes structured specifications before coding. Use when requirements are ambiguous, starting a new project/feature, or changes touch multiple files.