Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Extract and document someone's authentic writing voice from samples. Use when someone needs a "voice guide," wants to capture their writing DNA, or needs to train AI to write in their style. Also useful for ghostwriting, brand voice documentation, or onboarding writers.
.claude/skills/brianrwagner-voice-extractor/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-22 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 54% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 73% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 65% | 0% |
AI-generated content all sounds the same. The fix isn't better prompts — it's teaching the AI how you actually communicate.
This skill extracts your communication DNA from writing samples and produces a Voice Guide: documented, tested, and ready to use.
Detect from context or ask: "Quick voice snapshot, full Voice Guide, or full guide with examples?"
| Mode | What you get | Best for | |------|-------------|----------| | quick | Top 5 voice characteristics + 3 do/don't rules | Fast style reference, single piece | | standard | Full Voice Guide: tone, vocabulary, rhythm, structure | AI training, ghostwriting, brand documentation | | deep | Full Voice Guide + 10 sample rewrites + writing rules checklist + AI training examples | Onboarding writers, building a brand voice system |
Default: standard — use quick if they just need a fast reference. Use deep if they're onboarding a ghostwriter or building a content team.
Before extracting, collect:
Sample priority (most → least authentic):
Minimum sample gate: If samples total under 500 words, stop: > "These samples are too short to extract reliable patterns. Please add 2-3 more — emails, Slack messages, or transcripts work best. The messier and more casual, the better."
Do not attempt full extraction from under 500 words. Offer quick mode instead.
Before extracting, reason through:
Output a sample assessment: > "I have X samples / Y words] to work with. Quality: high/medium — why]. I'll use full/quick] mode. Excluding: any patterns and why]."
Identify the fundamental communication mode:
Role:
Default energy:
Recurring themes: What topics appear unprompted across samples? These are the things they actually care about.
Scan all samples and extract:
Transition phrases (how they shift topics):
Emphasis phrases (how they land a point):
Closers (how they wrap up):
| Zone | Description | Language Markers | |---|---|---| | Full authority | Topics they're an expert in | No hedging, definitive statements, "here's what works" | | Earned perspective | Topics with experience but not mastery | "In my experience...", "What I've found..." | | Active exploration | Topics they're learning now | "I'm testing this...", "What I'm seeing..." |
Map their stated expertise areas to each zone. This calibration is what makes the voice feel real vs. one-dimensional.
Extract what they'd NEVER say:
Source these from sample evidence where possible: "You never used word] across X samples] — it doesn't fit your voice."
After extracting the full profile, generate 2 test sentences on the same topic:
Version A (using the extracted voice profile): > "Sample sentence in their voice]"
Version B (wrong voice — contrasting example): > "Same content, different voice — shows what to avoid]"
Ask the user: "Does Version A actually sound like you when you're not overthinking it? What feels off?"
This validation catches extraction errors before the guide is put into production.
--quick)When samples are thin (300–500 words) or time is short:
Output: Minimum viable voice guide.
Difference from full mode:
After generating the Voice Guide:
Flag any issues: "The anti-pattern section only has 2 entries — not enough for a usable guide. I need more samples or direct input from the user."
markdown## Voice Guide: [Name] — [Date] ### Sample Assessment - Samples: [count, types] - Total words: [count] - Quality: [high/medium — reason] - Mode: [quick/full] - Excluded: [patterns excluded + why] --- ### Core Energy - Role: [teacher/challenger/cheerleader/straight-shooter] - Default energy: [description] - Recurring themes: [list] ### Signature Phrases **Transitions:** - "[Phrase]" (source: [email/post]) - "[Phrase]" **Emphasis:** - "[Phrase]" (source: [email/post]) **Closers:** - "[Phrase]" ### Confidence Calibration **Full authority (no hedging):** Topics: [list] Sounds like: "[example sentence]" **Earned perspective:** Topics: [list] Sounds like: "[example sentence]" **Active exploration:** Topics: [list] Sounds like: "[example sentence]" ### Anti-Patterns (Never Use) - [Word/phrase] — why: [evidence from samples] - [Word/phrase] — why: [evidence] ### Validation Test **This sounds like you:** "[Version A]" **This doesn't:** "[Version B — contrast]" ### Self-Critique Notes [Any gaps, things to validate with user] ### Usage Instructions - For AI: Paste this guide into your system prompt - For ghostwriter: Share on day 1 — cuts revision cycles in half - For team: This is the benchmark for "on brand"
Skill by Brian Wagner | AI Marketing Architect | brianrwagner.com
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | fail→pass | 10,018 | 2,073 | -79% | 1 | 1 | 0% | 1,287 | 2,272 | +77% | 0 | 0 | — |
case-01 | fail→fail | 24,348 | 4,615 | -81% | 1 | 1 | 0% | 3,729 | 2,735 | -27% | 0 | 0 | — |
case-02 | fail→fail | 27,535 | 4,944 | -82% | 1 | 1 | 0% | 4,119 | 2,769 | -33% | 0 | 0 | — |
case-03 | fail→fail | 24,430 | 4,200 | -83% | 1 | 1 | 0% | 3,610 | 2,727 | -24% | 0 | 0 | — |
case-04 | pass→pass | 4,259 | 8,969 | +111% | 1 | 1 | 0% | 692 | 3,443 | +398% | 0 | 0 | — |
case-19 | pass→pass | 6,168 | 2,728 | -56% | 1 | 1 | 0% | 882 | 2,389 | +171% | 0 | 0 | — |
case-20 | fail→pass | 10,366 | 2,348 | -77% | 1 | 1 | 0% | 1,516 | 2,331 | +54% | 0 | 0 | — |
case-21 | fail→pass | 9,621 | 2,976 | -69% | 1 | 1 | 0% | 1,525 | 2,435 | +60% | 0 | 0 | — |
case-05 | fail→fail | 1,871 | 8,337 | +346% | 1 | 1 | 0% | 269 | 3,314 | +1132% | 0 | 0 | — |
case-06 | pass→fail | 8,200 | 11,637 | +42% | 1 | 1 | 0% | 1,251 | 3,811 | +205% | 0 | 0 | — |
case-07 | fail→pass | 10,534 | 3,792 | -64% | 1 | 1 | 0% | 1,552 | 2,681 | +73% | 0 | 0 | — |
case-08 | pass→pass | 6,281 | 4,420 | -30% | 1 | 1 | 0% | 923 | 2,704 | +193% | 0 | 0 | — |
case-09 | fail→pass | 10,133 | 3,671 | -64% | 1 | 1 | 0% | 1,568 | 2,590 | +65% | 0 | 0 | — |
case-10 | pass→pass | 8,146 | 4,937 | -39% | 1 | 1 | 0% | 1,244 | 2,776 | +123% | 0 | 0 | — |
case-11 | pass→pass | 12,372 | 5,741 | -54% | 1 | 1 | 0% | 1,850 | 2,752 | +49% | 0 | 0 | — |
case-12 | fail→pass | 10,512 | 4,237 | -60% | 1 | 1 | 0% | 1,493 | 2,614 | +75% | 0 | 0 | — |
case-13 | pass→fail | 7,974 | 4,912 | -38% | 1 | 1 | 0% | 1,266 | 2,742 | +117% | 0 | 0 | — |
case-14 | pass→pass | 12,553 | 3,671 | -71% | 1 | 1 | 0% | 1,852 | 2,589 | +40% | 0 | 0 | — |
case-15 | pass→pass | 15,467 | 5,987 | -61% | 1 | 1 | 0% | 2,524 | 2,951 | +17% | 0 | 0 | — |
case-16 | pass→pass | 17,249 | 6,037 | -65% | 1 | 1 | 0% | 2,004 | 2,943 | +47% | 0 | 0 | — |
case-17 | fail→pass | 10,883 | 5,746 | -47% | 1 | 1 | 0% | 1,624 | 2,859 | +76% | 0 | 0 | — |
case-18 | fail→pass | 5,730 | 2,571 | -55% | 1 | 1 | 0% | 837 | 2,347 | +180% | 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. The headline lift of +27 percentage points is the difference between those two pass rates over the 22 comparable cases. 2 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.