Skip to content
Back to skills

Building A Spell

ASecurity

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"

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 27, 2026
toolsgoexpresstesting

Security analysis

A100/100

Pro scans all 17 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add redhuntlabs/wizard --skill building-a-spell --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Building A Spell?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Building A Spell
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/redhuntlabs-building-a-spell/badge)](https://www.skillsdirectory.com/skills/redhuntlabs-building-a-spell)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: building-a-spell
description: 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"
kind: workflow
audience: anyone
ai-tools: any
complexity: guided
time: 10-30 min per spell
version: 1.0.0
source: bundled
---

# Building a Spell

## What this does

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.

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.

## When to use

- User describes a task they do over and over and asks to capture it
- User says "build a workflow / skill / spell for X"
- User shows you a process and says "I want this systematized"
- User wants the AI to behave the same way every time they hit a certain trigger

## What you bring (Inputs)

- A description of the task (one or two sentences is enough)
- Your domain (research, ops, writing, dev, etc.) — inferred if not stated
- Any constraints (time budget, tools available, style preferences)

## What you get (Output)

A new spell file at `$WIZARD_HOME/<category>/<name>/SKILL.md`, validated and tested.

## How it works (Steps)

This is a workflow chain. The stages below are the master flow.

## Stages

### Stage -1: Inference prelude (conditional)

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:

1. Invoke `inferring-a-spell-from-examples` (passes the transcript + provenance).
2. The inference skill produces either:
   - A `BUILDABLE` outcome → context dictionary + draft `SKILL.md`. Resume at **Stage 2** (kind-route) with kind already set. Skip Stage 0 and Stage 1 entirely.
   - A `TOO-THIN` or `TOO-BROAD` outcome → halt with the inference skill's user-facing message. Do not enter Stages 0–4.
   - A user choice of "Re-do as interview" (bail) → resume at **Stage 1** with the inferred fields as pre-filled defaults. Stage 1's batch-confirm still runs; user can accept-with-Enter or correct.

**Output handed to next stage**: same shape as Stage 1's output (context dictionary + filled-out interview).

### Stage 0: Context extraction

Parse what the user already gave you. Pull out:

- Implied `name` (lowercase-hyphenated, derived from the task verb + object)
- Implied `kind` (use the kind-routing table below)
- Implied `audience` (default `anyone` unless context says otherwise)
- Implied `complexity` (default `simple` unless multi-stage/multi-tool)
- Any examples mentioned

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.

### Stage 1: Pick depth and check for shape match

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).

### Stage 2: Kind-route to specialist builder

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).

### Stage 3: Try-it (NON-SKIPPABLE — Iron Law)

Dispatch the `spell-tester` subagent (see `agents/spell-tester.md`) with:

- The full draft text
- The user's stated goal
- The user's domain
- Up to 2 examples from the interview

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.

### Stage 4: Save to WIZARD_HOME

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.

## Checkpoints

Pass each stage gate only when:

- **After Stage 0**: user has confirmed the extracted context (or corrected it)
- **After Stage 1**: every required frontmatter field has a value
- **After Stage 2**: draft SKILL.md exists in memory and includes all required body sections (validator-equivalent check)
- **After Stage 3**: tester returned `PASS`
- **After Stage 4**: file is written and `validate-spell.js` exits clean

## Loop-back conditions

Return to Stage 1 when:

- Tester returns `NEEDS-REFINEMENT`
- User adds context mid-interview that invalidates Stage 0's extraction
- A workflow shape was wrongly selected (mismatched outputs)

## The Iron Law

The 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.

### Forbidden excuses

| 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.**

<MUST-STOP>
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.
</MUST-STOP>

## The Batch Iron Law (Second Iron Law)

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.

### Forbidden excuses

| 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.**

## Mid-interview pivots

If during Stage 3 the tester returns `SCOPE-CHANGED`, pause. Check what shifted:

- **Two spells in disguise**: split. Build the most-pressing one first; queue the other.
- **Wrong audience**: re-route via `intuitive-interviewing` with the corrected audience.
- **Wrong kind**: kind-route again at Stage 2.
- **Out-of-scope**: tell the user, suggest the closest existing spell or chain.

## Quality bar

A built spell passes when:

- `validate-spell.js` exits 0 with no warnings (or has a documented exception)
- Tester returned `PASS`
- File is saved to `$WIZARD_HOME` (never bundled `spells/`)
- The next session can invoke it via the 1% rule by description match alone

## Variations

- **Express mode** (Stage 1 picks it): one-question interview, single shape, fast turnaround. Best for content kind.
- **Deep mode** (Stage 1 picks it): full 12-question interview. Best for discipline kind or first-time users.
- **Re-build from existing**: user has a sketch — start at Stage 1 with the sketch as the strawman.

## Example

**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."

Files in this skill

  • SKILL.md9 KB
  • examples/example-content.md2.6 KB
  • examples/example-discipline.md4.1 KB
  • interview-questions.md3.4 KB
  • workflow-shapes/README.md1.6 KB
  • workflow-shapes/brainstorm-then-cluster.md1.1 KB
  • workflow-shapes/compare-two-things.md1.1 KB
  • workflow-shapes/decision-with-alternatives.md1.1 KB
  • workflow-shapes/extract-action-items.md1.2 KB
  • workflow-shapes/learn-from-source.md1.2 KB
  • workflow-shapes/personalized-outbound-message.md1.2 KB
  • workflow-shapes/pre-meeting-prep.md1.2 KB
  • workflow-shapes/recurring-stakeholder-update.md1.1 KB
  • workflow-shapes/respond-to-feedback.md1.4 KB
  • workflow-shapes/summary-with-quotes.md1.1 KB
  • workflow-shapes/triage-incoming-list.md1.1 KB
  • workflow-shapes/verify-fact-or-claim.md1.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.