Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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".
.claude/skills/tobihagemann-draft-spec/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 259% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 222% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 83% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 205% | 0% |
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 |
$consult-claude skill for the soundest answer on technical merit alone, independent of the task's original scope; on a question of product intent, run it for what each answer commits to and what reversing it costs. Then resolve the question with that answer in hand, re-asking when the choice stays the user's.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.
`markdown# <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. Offer a Get a second opinion option whenever the question is costly to reverse (it establishes a pattern others will follow, defines an interface, commits to a data shape, or imports a pattern the codebase has not used), and whenever no option earns "(Recommended)" with conviction. Keeping the question at three options, present it in place of Defer to implementation when the question is answerable from what already exists, and in place of the weaker resolution option when the answer needs code or survey context that implementation will produce. It runs the $consult-claude skill for the soundest option on technical merit alone, independent of the task's original scope, naming any scope cost with the answer. On a question of product intent, run it for what each option commits to, what reversing it costs, and what the prevailing convention is. Then resolve the question with that answer in hand, re-asking when the choice stays the user's.If the user selects "Other" and provides a freeform answer, accept it and proceed. When that answer defers the question rather than resolving it, leave the question in Open Questions instead of folding it into the spec.
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 files| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-10 | fail→fail | 14,345 | 12,607 | -12% | 1 | 1 | 0% | 2,203 | 3,873 | +76% | 0 | 0 | — |
case-01 | fail→fail | 11,673 | 7,890 | -32% | 1 | 1 | 0% | 1,897 | 3,244 | +71% | 0 | 0 | — |
case-02 | fail→fail | 6,488 | 7,773 | +20% | 1 | 1 | 0% | 1,092 | 3,298 | +202% | 0 | 0 | — |
case-03 | fail→fail | 9,004 | 3,770 | -58% | 1 | 1 | 0% | 1,338 | 3,189 | +138% | 0 | 0 | — |
case-04 | fail→fail | 4,915 | 12,955 | +164% | 1 | 1 | 0% | 884 | 3,808 | +331% | 0 | 0 | — |
case-05 | fail→pass | 4,794 | 2,614 | -45% | 1 | 1 | 0% | 898 | 3,223 | +259% | 0 | 0 | — |
case-06 | fail→fail | 13,077 | 6,295 | -52% | 1 | 1 | 0% | 2,233 | 3,554 | +59% | 0 | 0 | — |
case-07 | fail→fail | 15,220 | 11,801 | -22% | 1 | 1 | 0% | 2,694 | 3,710 | +38% | 0 | 0 | — |
case-08 | pass→pass | 7,199 | 2,528 | -65% | 1 | 1 | 0% | 1,054 | 3,189 | +203% | 0 | 0 | — |
case-09 | pass→fail | 15,235 | 11,425 | -25% | 1 | 1 | 0% | 2,316 | 3,443 | +49% | 0 | 0 | — |
case-11 | fail→pass | 18,689 | 7,006 | -63% | 1 | 1 | 0% | 2,833 | 3,833 | +35% | 0 | 0 | — |
case-12 | fail→pass | 6,111 | 1,985 | -68% | 1 | 1 | 0% | 958 | 3,083 | +222% | 0 | 0 | — |
case-13 | pass→pass | 10,803 | 4,067 | -62% | 1 | 1 | 0% | 1,623 | 3,364 | +107% | 0 | 0 | — |
case-14 | fail→pass | 10,874 | 2,378 | -78% | 1 | 1 | 0% | 1,702 | 3,118 | +83% | 0 | 0 | — |
case-15 | fail→fail | 26,032 | 10,040 | -61% | 1 | 1 | 0% | 6,175 | 3,511 | -43% | 0 | 0 | — |
case-16 | fail→fail | 20,753 | 21,110 | +2% | 1 | 1 | 0% | 3,806 | 3,127 | -18% | 0 | 0 | — |
case-17 | fail→fail | 25,939 | 3,578 | -86% | 1 | 1 | 0% | 5,652 | 3,311 | -41% | 0 | 0 | — |
case-18 | fail→fail | 4,708 | 16,386 | +248% | 1 | 1 | 0% | 738 | 3,842 | +421% | 0 | 0 | — |
case-19 | fail→pass | 8,119 | 6,952 | -14% | 1 | 1 | 0% | 1,310 | 3,992 | +205% | 0 | 0 | — |
case-20 | fail→pass | 7,811 | 3,633 | -53% | 1 | 1 | 0% | 1,314 | 3,342 | +154% | 0 | 0 | — |
case-21 | pass→pass | 13,961 | 6,876 | -51% | 1 | 1 | 0% | 2,282 | 3,846 | +69% | 0 | 0 | — |
case-22 | pass→pass | 12,180 | 3,050 | -75% | 1 | 1 | 0% | 1,703 | 3,245 | +91% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 15 counted toward the lift figure. The other 7 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 15 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.