| name | voice-extract |
| description | Extracts a user's writing voice from text samples via SICO comparative analysis. Use when building a voice profile for consistent generation. |
| globs | **/*.{md,txt} |
| alwaysApply | false |
| category | writing-quality |
| tags | ["voice","extraction","sico","style-transfer","writing"] |
| tools | [] |
| complexity | high |
| model_hint | opus |
| estimated_tokens | 3200 |
| progressive_loading | true |
| modules | ["modules/sico-extraction.md","modules/sample-intake.md","modules/register-creation.md"] |
| dependencies | ["scribe:style-learner","scribe:slop-detector"] |
Voice Extraction Skill
Extract a user's writing voice through SICO comparative analysis.
When NOT To Use
- Writing text in a profile that already exists (use
scribe:voice-generate)
- Refining a profile from edits (use
scribe:voice-learn)
Method: Comparative Feature Extraction
Rather than measuring surface metrics, this skill uses SICO
Phase 1: feed the model user writing samples alongside its own
default output on the same topics. The model describes what the
user does differently. This produces voice descriptions that
encode implicit structural patterns no metrics can capture.
Key Principles (from research)
-
Anonymize samples: Label as "Sample 1", "Sample 2", etc.
Context labels cause the extractor to anchor on content
rather than reading a unified voice.
-
Variety over volume: 10 samples across different topics
beats 20 on the same subject. The extraction needs to see
what stays constant when everything else changes.
-
Casual writing is distinctive: Reddit comments, slack
messages, quick emails. Polished pieces have rough edges
edited away, and those edges are where voice lives.
-
Pressure test for specificity: If extraction output
sounds generic ("uses varied sentence lengths"), run pass 2
and force specificity. Good output reads like followable
instructions, not a book report.
-
Use Opus for extraction: More nuanced feature
descriptions, especially for registers where subtle tonal
shifts matter.
Required TodoWrite Items
voice-extract:samples-collected - Writing samples gathered
voice-extract:samples-anonymized - Labels stripped, numbered
voice-extract:baseline-generated - Claude's default output on same topics
voice-extract:extraction-pass-1 - Broad comparative features
voice-extract:extraction-pass-2 - Pressure test for specificity
voice-extract:profile-written - extraction.md created
Step 1: Sample Intake
Load: @modules/sample-intake
Directory Mode
PROFILE_DIR="$HOME/.claude/voice-profiles/{name}"
-p