Help us improve
Share bugs, ideas, or general feedback.
From voice
Reverse-engineers voice profiles from text samples by analyzing sentence structure, vocabulary, tone markers, and usage patterns like contractions and pronouns. Outputs YAML profiles for formality, confidence, warmth.
npx claudepluginhub jmagly/aiwg --plugin voiceHow this skill is triggered — by the user, by Claude, or both
Slash command
/voice:voice-analyzeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Reverse-engineer voice profiles from sample content by analyzing writing patterns.
Extracts speaking style, signature phrases, vocabulary, and sentence patterns from transcripts to build or refine author profiles for authentic AI content.
Extracts a voice fingerprint from strong passages to audit and repair voice departures in multi-author documents or when brand voice has drifted.
Generates personalized AI writer skill by extracting linguistic fingerprint from interactive writing samples, style preferences, and pattern rejection questionnaire (~15 min).
Share bugs, ideas, or general feedback.
Reverse-engineer voice profiles from sample content by analyzing writing patterns.
When triggered, this skill:
Analyzes text samples for:
Extracts measurable features:
Maps features to voice dimensions:
Generates voice profile matching the analyzed style
User: "Analyze this writing style" + [paste technical docs]
Analysis:
- Formality: 0.7 (no contractions, structured sentences)
- Confidence: 0.85 (direct statements, few hedges)
- Warmth: 0.25 (impersonal, third-person)
- Complexity: 0.8 (technical vocabulary, long sentences)
Output: analyzed-technical-docs.yaml
User: "Extract voice from our marketing copy" + [paste samples]
Analysis:
- Formality: 0.3 (conversational, contractions)
- Confidence: 0.7 (benefit claims, but some hedging)
- Warmth: 0.85 (second person, friendly tone)
- Energy: 0.8 (exclamation points, action verbs)
Output: brand-marketing-voice.yaml
User: "Create profile from my blog posts" + [paste samples]
Analysis:
- Identifies personal writing quirks
- Extracts signature phrases
- Maps to voice dimensions
Output: personal-blog-voice.yaml
| Feature | Measurement | Maps To |
|---|---|---|
| Sentence length | Avg words/sentence | complexity |
| Contractions | Frequency per 100 words | formality (inverse) |
| First person ("I", "we") | Frequency | warmth |
| Second person ("you") | Frequency | warmth |
| Passive voice | Percentage of sentences | confidence (inverse) |
| Questions | Per paragraph | warmth, engagement |
| Hedging words | "might", "perhaps", "could" | confidence (inverse) |
| Exclamation marks | Frequency | energy |
| Technical terms | Domain vocabulary density | complexity |
Formality (0-1):
Confidence (0-1):
Warmth (0-1):
Energy (0-1):
Complexity (0-1):
Signature phrases - Identified by:
Domain vocabulary - Extracted by:
Avoid patterns - Detected by:
name: analyzed-sample-voice
version: 1.0.0
description: Voice profile extracted from sample content
analysis_source:
sample_size: 1500 # words analyzed
sample_count: 3 # number of samples
confidence: 0.85 # analysis confidence score
tone:
formality: 0.65
confidence: 0.8
warmth: 0.4
energy: 0.5
complexity: 0.7
vocabulary:
prefer:
- "extracted signature phrase 1"
- "detected domain terminology"
avoid:
- "patterns not found in samples"
signature_phrases:
- "The key point is..."
- "This demonstrates..."
structure:
sentence_length: medium # avg 15-20 words
paragraph_length: medium # avg 4-6 sentences
sentence_variety: high # varied structure detected
use_lists: when-appropriate
use_examples: frequently
use_questions: rarely
perspective:
person: third
voice: active
tense: present
extracted_patterns:
opening_style: "context-first"
closing_style: "conclusion-summary"
transition_style: "logical-flow"
# Analyze from file
python voice_analyzer.py --input sample.txt
# Analyze from multiple files
python voice_analyzer.py --input "sample1.txt,sample2.txt,sample3.txt"
# Analyze from stdin (pipe content)
cat sample.txt | python voice_analyzer.py --stdin
# Specify output name
python voice_analyzer.py --input sample.txt --name my-extracted-voice
# Output to specific directory
python voice_analyzer.py --input sample.txt --output .aiwg/voices/
# JSON output for inspection
python voice_analyzer.py --input sample.txt --json
voice-applyvoice-analyze → voice-create (to refine) → voice-applyvoice-analyze + voice-analyze → voice-blend (combine styles)../../../schemas/voice-profile.schema.json../voice-apply/references/voice-dimensions.md../voice-create/scripts/voice_generator.py