skills/draft-spec/SKILL.md
Guide a collaborative discussion that produces a specification document at .turbo/specs/<slug>.md. Use when the user asks to "draft a spec", "create a spec", "write a spec", "discuss a project plan", "spec out a project", "design a system", "let's plan this project", "help me scope this", "architect a solution", or "let's discuss before building".
npx skillsauth add tobihagemann/turbo draft-specInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Guide a collaborative discussion to explore a project idea, then synthesize the conversation into a comprehensive specification at .turbo/specs/<slug>.md.
At the start, use TaskCreate to create a task for each step:
Absorb whatever the user has provided — a sentence, a paragraph, a brain dump. Do not interrupt or ask questions yet. Restate the vision back in two or three sentences to confirm understanding.
Pick a slug for the spec file derived from the project or feature name:
Example: "Photo Sorter v2" → photo-sorter-v2. The user may pass an explicit slug; if so, honor it.
If .turbo/specs/<slug>.md already exists, use AskUserQuestion to ask whether to overwrite, append a numeric suffix (-2, -3, ...), or pick a different slug.
State the chosen slug and the resulting spec path before continuing.
Then use AskUserQuestion to ask 1-4 focused opening questions targeting the biggest unknowns. Skip anything the user already answered. Prioritize from:
Ground architecture and tech-stack choices in current reality before the deep-dive discussion.
Keep findings at the decision level: what tools can do, which approaches are idiomatic, which versions to target. Do not embed specific API signatures or code snippets into the spec. Those belong in implementation-time skill loads.
Interview the user relentlessly about every aspect of the project until you reach shared understanding. Gather behavioral requirements (the "what") before architectural design (the "how"), so design decisions land against a concrete set of requirements instead of being taken in the abstract. Track coverage internally but do not present the list as a rigid checklist. When the user jumps to architecture early, engage briefly then circle back to confirm the behavioral picture is complete.
| Category | What to explore | |---|---| | Users and personas | Who uses this? Goals, pain points, technical sophistication | | Core behaviors | Primary capabilities and user-facing workflows — the behaviors the system must exhibit | | Non-functional requirements | Performance, security, accessibility, i18n, compliance |
| Category | What to explore | |---|---| | Architecture | Client/server split, monolith vs services, real-time needs, offline support | | Tech stack | Languages, frameworks, databases, hosting — preferences and constraints | | Data model | Key entities, relationships, storage strategy | | Integrations | Third-party APIs, auth providers, external data sources |
| Category | What to explore | |---|---| | MVP scope | What ships first? What is explicitly deferred? | | Open questions | Unknowns needing research, prototyping, or external input |
AskUserQuestion to ask one question at a time. Use options with descriptions to frame trade-offs and offer concrete suggestions. Use multiSelect when choices are not mutually exclusive.Synthesize the consulted skill and doc context plus the entire discussion into .turbo/specs/<slug>.md using the slug picked in Step 1. Use the fixed skeleton below.
# <Project or Feature Name>
## Overview
<One or two paragraphs stating the problem being solved and the vision for the solution.>
## Users
<Personas and their goals. Omit this section if the project has no meaningful user role distinction (e.g., a single-integrator internal library).>
## Requirements
Enumerated behavioral requirements with stable IDs. Number requirements `R1`, `R2`, `R3`, ... IDs must stay stable once drafted so downstream artifacts can reference them reliably.
Pick either format per requirement; both can appear in the same spec.
**EARS format** — for unambiguous, testable behaviors:
- **R1.** When <trigger or condition>, the system shall <expected behavior>.
Adapt the slot to the EARS pattern that fits: `When` (event-driven), `While` (state-driven), `Where` (optional feature), `If ... then` (unwanted behavior), or a bare `The system shall ...` (ubiquitous).
**User story format** — for user-facing capabilities with acceptance criteria:
- **R2.** As a <persona>, I want <capability> so that <outcome>.
- Acceptance: <criterion 1>
- Acceptance: <criterion 2>
Group related requirements under `### <Subheading>` when the list grows past ~8 items. IDs stay contiguous across subheadings.
## Design
Technical approach that satisfies the requirements above. Cover the elements that apply:
- **Architecture** — component split, deployment shape, communication patterns
- **Tech stack** — languages, frameworks, libraries, hosting
- **Data model** — key entities, relationships, storage strategy
- **Integrations** — third-party APIs, auth providers, external data sources
- **Key flows** — sequence or data flow for any non-trivial interaction
State decisions, not options. Where a decision was deferred, move it to Open Questions.
## MVP Scope
<What ships first versus what is explicitly deferred. Omit this section if scope is not staged.>
## Open Questions
<Unresolved decisions needing further input, research, or prototyping. Omit this section if none remain after Step 5.>
## Overview, ## Requirements, and ## Design are mandatory. ## Users, ## MVP Scope, and ## Open Questions are omitted when they would be empty.Create the .turbo/specs/ directory if it does not exist. Accept a different output path if the user provides one.
If the spec's Open Questions section is empty, contains "None," or does not exist, skip this step.
For each open question:
AskUserQuestion to offer 2-3 concrete resolution options with short descriptions, plus a Defer to implementation option (leaves the question in Open Questions to be surfaced again when shells are expanded). Mark the strongest option "(Recommended)" and place it first.If the user selects "Other" and provides a freeform answer, accept it and proceed.
Default to resolving. Defer only when the answer genuinely needs codebase or pattern-survey context that is not yet available. If every question resolves, delete the Open Questions section entirely.
Present the draft to the user. Use AskUserQuestion to offer three paths:
After approval:
The spec is ready at the resolved spec path. To break it into shells, run
/draft-shells.
Then use the TaskList tool and proceed to any remaining task.
development
Run the post-implementation quality assurance workflow including tests, code polishing, review, and commit. Use when the user asks to "finalize implementation", "finalize changes", "wrap up implementation", "finish up", "ready to commit", or "run QA workflow".
development
Run the post-implementation quality assurance workflow including tests, code polishing, review, and commit. Use when the user asks to "finalize implementation", "finalize changes", "wrap up implementation", "finish up", "ready to commit", or "run QA workflow".
tools
Teach the user to deeply understand a change through interactive tutoring: restating understanding, drilling into why/what/how, and quizzing until mastery. The active counterpart to a one-shot explanation. Use when the user asks to "understand this change", "teach me this change", "help me understand what changed", "walk me through this change", "make sure I understand this", "quiz me on this", or "teach me what we did".
tools
Teach the user to deeply understand a change through interactive tutoring: restating understanding, drilling into why/what/how, and quizzing until mastery. The active counterpart to a one-shot explanation. Use when the user asks to "understand this change", "teach me this change", "help me understand what changed", "walk me through this change", "make sure I understand this", "quiz me on this", or "teach me what we did".