Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Produce an implementation plan at .turbo/plans/<slug>.md. Use when the user asks to "draft a plan", "draft the plan", "write an implementation plan", "plan this change", "create an implementation plan", or needs a first-draft plan file before refinement.
.claude/skills/tobihagemann-draft-plan/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 293% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 179% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 98% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 83% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 86% | 0% |
Produce an implementation plan at .turbo/plans/<slug>.md. Capture the task, survey patterns, escalate decisions, discuss, and draft.
Use update_plan to track each step, restating any remaining steps of a parent workflow alongside them:
$survey-patterns skillAbsorb the user's request without interrupting. Restate the goal in one or two sentences and confirm.
Generate a slug for the plan file from the task title:
Example: "Add a caching layer to the image pipeline" → add-a-caching-layer-to-the-image-pipeline.
If .turbo/plans/<slug>.md already exists, append -2, -3, etc. until the path is free. Do not overwrite.
The user may pass an explicit slug or output path in their request (e.g., "draft plan as auth-rewrite"). If so, honor it. If .turbo/plans/<slug>.md exists in that case, use request_user_input to ask whether to overwrite, append a numeric suffix, or pick a different slug.
A path to a file that already exists is background input rather than an output destination. Treat it as the output path only when the request says so explicitly.
State the chosen slug and the resulting plan path before continuing.
If a path to a background document is passed as input (a design doc, an issue, a written proposal), treat it as the source of truth for product decisions and discussion areas. Read it, then:
A question is resolved only when the document makes a definitive statement that answers it. Mentions without a chosen direction, open questions, and deferred decisions do not count as resolved; escalate those normally.
Step 2 (pattern survey) and Step 3 (consult skills and docs) still run in full. The document describes what; $draft-plan still surveys how.
$survey-patterns SkillRun the $survey-patterns skill with the confirmed task description. Keep the returned findings in conversation context for use in Steps 5 and 6.
Ground library and framework choices in current reality before escalating decisions.
Keep findings at the decision level: what a library can do, which approach is idiomatic, which version to target. Do not embed specific API signatures or code snippets into the plan. Those belong at execution time, where the same skills are re-loaded.
Identify product or design decisions the user's request did not resolve. Escalate these via request_user_input before drafting steps.
Escalate when:
Do not escalate technical decisions the agent can make autonomously: which data structure, which existing pattern to follow, internal implementation approach. The boundary is product intent.
Confirm external constraints before escalating. When an option depends on a third-party API, service, or platform behaving a particular way, drop it unless that behavior is confirmed by current documentation.
Output what is at stake as text first, even when the reading it came from is fresh in this conversation. When the decision turns on a failure or misuse scenario, that means the invariant the change would protect and what makes that scenario reachable given the existing guards. Then use request_user_input to present the decision as a concise trade-off with options. Mark the strongest option "(Recommended)" and place it first. Draft plan steps that depend on these decisions only after the user responds.
Offer a Get a second opinion option whenever the decision 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. It runs the $consult-claude skill for what each option commits to, what reversing it costs, and what the prevailing convention is. Hold the concrete options to two so the question stays within the three-option limit. Then resolve the decision with that answer in hand, re-asking when the choice stays the user's.
Interview the user relentlessly about every aspect of the implementation shape until you reach shared understanding. Use request_user_input, one question at a time. Use the pattern survey findings to frame choices. Cover whichever of these matter for the task. Do not present a rigid checklist.
Settle the first two rows before the rest, so implementation choices land against concrete outcomes and bounds instead of being taken in the abstract. When the user jumps to implementation shape early, engage briefly then circle back.
| Area | What to explore | |---|---| | Outcomes | What must be true when this is done? The observable behaviors that decide whether it worked, and the acceptance criteria that pin each one. | | Bounds | 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? | | Constraints | Which non-functional requirements apply: performance, security, accessibility, i18n, compliance? Which tech-stack, hosting, or integration choices does the work commit to? | | Prototype unknowns | What does the surface look like, and does the interaction pattern make sense in the hand? Separate these from ordinary design questions by whether an answer in prose would still leave the user guessing. | | Reuse vs new | Which survey findings should the new work build on? Which should it deliberately not follow, and why? | | File placement | Where do new files live? Which existing files are modified? | | Data flow | How does data move through the change? Any new boundaries or contracts? | | Edge cases | Partial failure, empty states, backward compatibility, concurrency | | Tests | Which existing test patterns apply? Where do new tests live? | | Scope cut | Anything to explicitly defer? |
$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.$prototype skill on that unknown, then asks the question again with the prototype in hand.Synthesize the task description, pattern survey findings, consulted skill and doc context, resolved product decisions, and deep-dive discussion outcomes into a complete plan document.
Create .turbo/plans/ if it does not exist. Write the plan to .turbo/plans/<slug>.md using the slug picked in Step 1 (or the override path from Step 1) using this structure:
`markdown--- status: draft --- # Plan: <Task Title> ## Context <Why this change is being made — the problem or need it addresses, what prompted it, the intended outcome. One or two paragraphs.> <The deployment's bounds: user and operator count, concurrency, the rigor tier, and the failure tolerance it implies. One or two sentences.> ## Acceptance Criteria What must be true when this is done: - When <trigger or condition>, the system shall <expected behavior>. - As a <persona>, I want <capability> so that <outcome>. - Acceptance: <criterion> ## Pattern Survey <Insert the structured findings from `$survey-patterns`: Analogous Features, Reusable Utilities, Convention Anchors, Proposed Alignment. Use the same format the survey returned.> ## Implementation Steps 1. **<Step 1 title>** - <Concrete action with `file_path` references and named functions or symbols> - <Another action> 2. **<Step 2 title>** - ... 3. ... ## Verification How to verify the change works end-to-end after implementation: - <Specific test command, manual smoke check, or MCP tool invocation> - <Expected observable result for each verification step> - <Edge cases to spot-check> ## Context Files Files to read in full before starting implementation: - `<path/to/file1>` — <why it matters> - `<path/to/file2>` — <why it matters> - ...
file_path references and named functions or symbols. Reference existing functions and utilities from the Pattern Survey instead of reinventing them. Each step describes a discrete unit of work that can be tracked independently during execution.$finalize invocation, test commands, or commit instructions in the plan content — those are execution-wrapper concerns.Present a brief summary of the drafted plan: the essence of what it builds and the key decisions behind it, short enough to read at a glance so the user does not have to read the full plan file. When the plan delivers value to a user, developer, or operator, also present a short list of stories capturing what that person gains, in the form "As a <persona>, I want <capability> so that <outcome>". Skip the stories only when no beneficiary or outcome can be named, such as a purely mechanical refactor. Fit both to the plan rather than a fixed template.
Then use request_user_input to offer these paths:
$prototype skill, apply what it settled to the plan file, then re-summarize and re-present. Mark it "(Recommended)" in place of Approve while such an unknown is open, since a surface or interaction pattern that is still unproven cannot be judged from the plan text.Then call update_plan to mark this step completed and continue with the next step of the active workflow.
.turbo/, and any prototype the discussion or the finalize gate called for are the only outputs. Do not write code, scaffolding, or other project files.$review-plan or any review skills here.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-16 | pass→pass | 9,446 | 3,887 | -59% | 1 | 1 | 0% | 1,549 | 4,064 | +162% | 0 | 0 | — |
case-17 | pass→pass | 12,340 | 9,027 | -27% | 1 | 1 | 0% | 1,994 | 4,886 | +145% | 0 | 0 | — |
case-01 | fail→fail | 4,528 | 33,588 | +642% | 1 | 1 | 0% | 431 | 3,600 | +735% | 0 | 0 | — |
case-02 | fail→fail | 5,342 | 6,899 | +29% | 1 | 1 | 0% | 355 | 3,856 | +986% | 0 | 0 | — |
case-03 | fail→fail | 5,947 | 6,824 | +15% | 1 | 1 | 0% | 506 | 3,552 | +602% | 0 | 0 | — |
case-04 | fail→pass | 5,259 | 5,587 | +6% | 1 | 1 | 0% | 1,125 | 4,420 | +293% | 0 | 0 | — |
case-05 | fail→fail | 7,741 | 14,848 | +92% | 1 | 1 | 0% | 1,286 | 4,668 | +263% | 0 | 0 | — |
case-06 | fail→pass | 12,731 | 23,578 | +85% | 1 | 1 | 0% | 2,346 | 6,540 | +179% | 0 | 0 | — |
case-07 | fail→pass | 14,446 | 10,193 | -29% | 1 | 1 | 0% | 2,710 | 5,378 | +98% | 0 | 0 | — |
case-08 | fail→pass | 17,514 | 4,729 | -73% | 1 | 1 | 0% | 2,312 | 4,237 | +83% | 0 | 0 | — |
case-09 | fail→pass | 13,281 | 22,405 | +69% | 1 | 1 | 0% | 2,363 | 4,390 | +86% | 0 | 0 | — |
case-10 | pass→pass | 7,481 | 5,270 | -30% | 1 | 1 | 0% | 1,397 | 4,353 | +212% | 0 | 0 | — |
case-11 | pass→fail | 11,043 | 17,459 | +58% | 1 | 1 | 0% | 1,806 | 4,637 | +157% | 0 | 0 | — |
case-12 | fail→pass | 13,763 | 9,834 | -29% | 1 | 1 | 0% | 2,248 | 5,174 | +130% | 0 | 0 | — |
case-13 | fail→pass | 16,015 | 6,512 | -59% | 1 | 1 | 0% | 2,798 | 4,413 | +58% | 0 | 0 | — |
case-14 | pass→pass | 10,836 | 4,197 | -61% | 1 | 1 | 0% | 1,815 | 3,924 | +116% | 0 | 0 | — |
case-15 | pass→pass | 11,563 | 3,412 | -70% | 1 | 1 | 0% | 1,973 | 3,896 | +97% | 0 | 0 | — |
case-18 | pass→pass | 7,384 | 1,907 | -74% | 1 | 1 | 0% | 1,322 | 3,526 | +167% | 0 | 0 | — |
case-19 | fail→pass | 7,173 | 7,756 | +8% | 1 | 1 | 0% | 1,251 | 4,636 | +271% | 0 | 0 | — |
case-20 | fail→fail | 10,118 | 3,061 | -70% | 1 | 1 | 0% | 1,584 | 3,730 | +135% | 0 | 0 | — |
case-21 | fail→fail | 5,198 | 7,296 | +40% | 1 | 1 | 0% | 219 | 3,790 | +1631% | 0 | 0 | — |
case-22 | pass→fail | 2,846 | 5,407 | +90% | 1 | 1 | 0% | 454 | 4,230 | +832% | 0 | 0 | — |
case-23 | pass→fail | 18,417 | 47,117 | +156% | 1 | 1 | 0% | 3,227 | 4,200 | +30% | 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. 23 cases were attempted, and 16 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 +22 percentage points is the difference between those two pass rates over the 16 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.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/21/2026 | -13% |
Other measured skills in the registry, with their headline benchmark lift.