tobihagemann/turbo-draft-spec
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 skills add https://github.com/tobihagemann/turbo --skill draft-spec
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 update_plan to track each step, restating any remaining steps of a parent workflow alongside them:
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 request_user_input 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 request_user_input to ask 1-3 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 until you reach shared understanding of the project. 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 — which of these do this project's users and deployment require? |
| Scale and operational rigor | How many users and operators, now and realistically? Concurrent writers? Which rigor tier is proportionate — personal tool, small team, or business-critical — and what failure tolerance does that imply? |
| 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 |
request_user_input to ask one question at a time. Use options with descriptions to frame trade-offs and offer concrete suggestions. When choices are not mutually exclusive, ask the user free-form which combination applies.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:
request_user_input to offer up to 2 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. The auto-appended "Other" lets the user supply a freeform answer.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 a brief summary of the drafted spec: the problem, the chosen solution, and the shape of the requirements, short enough to read at a glance so the user does not have to read the full spec. Fit the summary to the spec rather than a fixed template.
Then use request_user_input to offer two paths:
After approval:
> The spec is ready at the resolved spec path. To break it into shells, run $draft-shells.
Then call update_plan to mark this step completed and continue with the next step of the active workflow.
.turbo/ are the only outputs — do not create code, scaffolding, or other project filesTake tobihagemann/turbo-draft-spec from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.