From wizard
Use when the user wants to capture a repeatable task as a reusable spell, or asks "how do I build a workflow / skill / framework for X"
How this skill is triggered — by the user, by Claude, or both
Slash command
/wizard:building-a-spellThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Interviews the user about a task they do repeatedly, then writes a spell file (a SKILL.md) that captures it. Future sessions auto-invoke that spell whenever the trigger matches.
examples/example-content.mdexamples/example-discipline.mdinterview-questions.mdworkflow-shapes/README.mdworkflow-shapes/brainstorm-then-cluster.mdworkflow-shapes/compare-two-things.mdworkflow-shapes/decision-with-alternatives.mdworkflow-shapes/extract-action-items.mdworkflow-shapes/learn-from-source.mdworkflow-shapes/personalized-outbound-message.mdworkflow-shapes/pre-meeting-prep.mdworkflow-shapes/recurring-stakeholder-update.mdworkflow-shapes/respond-to-feedback.mdworkflow-shapes/summary-with-quotes.mdworkflow-shapes/triage-incoming-list.mdworkflow-shapes/verify-fact-or-claim.mdInterviews the user about a task they do repeatedly, then writes a spell file (a SKILL.md) that captures it. Future sessions auto-invoke that spell whenever the trigger matches.
This skill is the meta-builder. It calls other skills (intuitive-interviewing, kind-specific builders, pressure-testing-a-spell) and dispatches the spell-tester subagent.
A new spell file at $WIZARD_HOME/<category>/<name>/SKILL.md, validated and tested.
This is a workflow chain. The stages below are the master flow.
Skip this stage entirely if no transcript was supplied (the default /build-spell flow).
If invocation came with --from-transcript <path> OR was routed through /capture-this-chat, the input includes a transcript blob plus provenance.
In that case:
inferring-a-spell-from-examples (passes the transcript + provenance).BUILDABLE outcome → context dictionary + draft SKILL.md. Resume at Stage 2 (kind-route) with kind already set. Skip Stage 0 and Stage 1 entirely.TOO-THIN or TOO-BROAD outcome → halt with the inference skill's user-facing message. Do not enter Stages 0–4.Output handed to next stage: same shape as Stage 1's output (context dictionary + filled-out interview).
Parse what the user already gave you. Pull out:
name (lowercase-hyphenated, derived from the task verb + object)kind (use the kind-routing table below)audience (default anyone unless context says otherwise)complexity (default simple unless multi-stage/multi-tool)Then batch-confirm the extracted fields in a single message: "I heard X, Y, Z — change anything?" Do NOT re-ask what was already answered.
Output handed to next stage: a context dictionary.
Invoke intuitive-interviewing and pass it the context dictionary. It chooses depth (Express / Standard / Deep) and checks the workflow-shapes library at skills/building-a-spell/workflow-shapes/.
If a shape matches, propose it as a strawman: "This looks like a <shape> — here's a draft. What needs to change?"
If no shape matches, fall through to a relevance-filtered interview that skips already-answered questions.
Output handed to next stage: a filled-out interview (kind, audience, complexity, inputs, outputs, steps, quality bar).
Read the kind field from Stage 1 output:
| Kind | Specialist builder |
|---|---|
content | (continue inline; content is the simplest case) |
workflow | building-a-workflow-spell |
discipline | building-a-discipline-spell |
subagent | building-a-subagent-spell |
Invoke the specialist (if any) and let it produce the draft SKILL.md. For content, draft inline using the template at templates/spell-template.md.
Output handed to next stage: a complete draft SKILL.md (in memory, not yet saved).
Dispatch the spell-tester subagent (see agents/spell-tester.md) with:
The tester returns one of three verdicts:
| Verdict | Action |
|---|---|
PASS | Proceed to Stage 4 |
NEEDS-REFINEMENT | Loop back to Stage 1 with the tester's specific gaps |
SCOPE-CHANGED | Pivot — see "Mid-interview pivots" below |
Output handed to next stage: a PASSing draft + tester verdict text.
Write the draft to $WIZARD_HOME/<category>/<name>/SKILL.md. Default category is personal/ unless the user named one.
If the file exists, prompt for choice (overwrite / new name / new version / cancel) — never silent overwrite.
Print the full path saved and a one-line how-to-use.
Output handed to next stage: the saved file path.
Pass each stage gate only when:
PASSvalidate-spell.js exits cleanReturn to Stage 1 when:
NEEDS-REFINEMENTThe try-it phase (Stage 3) is non-skippable. No exceptions. No exemption for "it's obviously fine." No exemption for "the user is in a hurry."
The Iron Law applies equally to inference-built skills. Stage 3 try-it must run regardless of how the draft was produced.
| If you think... | Reality |
|---|---|
| "It's obviously fine" | Obvious things have subtle bugs. Run try-it. |
| "Too simple to test" | Simple skills get used wrong most often. Run try-it. |
| "I'll test it later" | Later is when the user is depending on it. Run try-it now. |
| "I already manually checked" | Mental verification is unreliable. Run try-it. |
| "I'll fix it next time" | Next time is too late. Run try-it. |
All forbidden excuses get the same response: Run try-it. No exceptions.
Before saving any spell to `$WIZARD_HOME`, the tester must have returned `PASS`. If you are about to save without a `PASS` verdict in the conversation history, STOP. Run try-it.When the user asks to build multiple spells in one session: complete one spell end-to-end (Stages 0 through 4) before starting the next.
| If you think... | Reality |
|---|---|
| "I'll batch the interviews and test them all at the end" | Batched testing dilutes attention. Each one needs full focus. |
| "They share context so I can save tokens" | Token savings are illusory; quality cost is real. Finish each. |
| "Let me draft all three first, then iterate" | Drafting in batch encourages copy-paste defects. One at a time. |
All forbidden excuses get the same response: Finish this one through save. Then start the next.
If during Stage 3 the tester returns SCOPE-CHANGED, pause. Check what shifted:
intuitive-interviewing with the corrected audience.A built spell passes when:
validate-spell.js exits 0 with no warnings (or has a documented exception)PASS$WIZARD_HOME (never bundled spells/)Input: "I want to capture how I draft cold outreach emails to investors."
Stage 0: Extracted: name: writing-investor-cold-outreach, kind: content, audience: founder, complexity: simple. Confirmed with user.
Stage 1: Shape match: personalized-outbound-message. Strawman shown. User adjusts: "add a 2-line subject-line section."
Stage 2: Content kind, drafted inline.
Stage 3: Tester runs 3 scenarios (different investor types). Verdict: PASS.
Stage 4: Saved to ~/.wizard/work/writing-investor-cold-outreach/SKILL.md.
Output: "Saved. Next time you say 'help me cold-email an investor', this spell will fire automatically."
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub redhuntlabs/wizard --plugin wizard