voice-analyze
Reverse-engineer voice profiles from sample content by analyzing writing patterns. Detects and flags AI writing tells so the resulting profile produces human-sounding output.
Triggers
Alternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):
- "voice fingerprint" -> voice profile extraction
- "what's my writing style" -> voice analysis
Behavior
When triggered, this skill:
Analyzes text samples for:
- Sentence structure and length patterns
- Vocabulary sophistication and domain
- Tone markers (formality, confidence, warmth)
- Structural patterns (lists, examples, questions)
- Perspective and voice choices
Extracts measurable features:
- Average sentence length
- Vocabulary complexity (syllables, word length)
- Contraction usage
- Personal pronoun frequency
- Question density
- List/bullet usage
Scans for AI writing tells (see ../voice-apply/references/ai-tells.md):
- Flags any banned vocabulary found in the sample (verbs, adjectives, nouns, adverbs from the tells list)
- Detects banned sentence structures: "It's not X, it's Y" negation patterns, self-posed questions answered immediately, anaphora abuse, present participle trailing clauses
- Measures em dash frequency (AI models use ~10x more than human writers)
- Checks for uniform sentence length clustering (the "burstiness problem": AI clusters at 15-20 words, humans swing from 3-word fragments to 40-word sprawls)
- Detects banned transitions and filler phrases (throat-clearing openers, pedagogical openers, fake-suspense transitions, hype phrases)
- Flags formatting tells: bold-first bullet points, excessive headers, erratic bolding, emoji decoration
- Checks for Rule of Three overuse (back-to-back tricolons are an AI fingerprint)
- Detects uniform paragraph length (the most visually obvious tell)
- If the sample contains AI tells, the profile's
vocabulary.avoid list MUST include them and the ai_tells_report section must document what was found
Maps features to voice dimensions:
- Statistical analysis -> tone scale values (0-1)
- Pattern detection -> structure preferences
- Vocabulary extraction -> prefer/avoid lists
Generates voice profile matching the analyzed style, with AI tells filtered out
Usage Examples
Analyze Existing Documentation
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)
- AI Tells Detected: 3 (2 banned verbs, 1 negation pattern)
Output: analyzed-technical-docs.yaml
Match Brand Voice
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)
- AI Tells Detected: 0
Output: brand-marketing-voice.yaml
Capture Personal Style
User: "Create profile from my blog posts" + [paste samples]
Analysis:
- Identifies personal writing quirks
- Extracts signature phrases
- Maps to voice dimensions
- Flags and excludes any AI tells found in samples
Output: personal-blog-voice.yaml
Analysis Methodology
Feature Extraction
| Feature |
Measurement |
Maps To |
| Sentence length |
Avg words/sentence |
complexity |
| Sentence length variance |
Std deviation of word count |
burstiness (human = high variance) |
| 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 |
| Em dash frequency |
Per 1000 words |
ai_tell_score (high = likely AI) |
| Banned AI vocabulary |
Count from tells list |
ai_tell_score |
| Paragraph length variance |
Std deviation of sentence count |
ai_tell_score (low variance = likely AI) |
AI Tells Detection Pass
After standard feature extraction, run the AI tells scan. For each category in ../voice-apply/references/ai-tells.md:
- Vocabulary scan: Count occurrences of every word/phrase in the banned lists (verbs, adjectives, nouns, adverbs, connectors)
- Structure scan: Detect banned sentence patterns (negation flips, self-posed questions, anaphora, trailing participles, false ranges, hedge-stacking)
- Punctuation scan: Count em dashes, semicolons, Oxford commas, Unicode ellipsis characters
- Rhythm scan: Calculate sentence length standard deviation. If std dev < 4 words, flag as AI-like clustering
- Formatting scan: Check for bold-first bullets, excessive headers, erratic bolding
- Transition scan: Search for throat-clearing openers, pedagogical openers, fake-suspense phrases, hype phrases, banned conclusion phrases
Report findings in the output profile under ai_tells_report. Any banned vocabulary found in the sample goes into vocabulary.avoid automatically.
Dimension Calibration
Formality (0-1):
- 0.0-0.3: Contractions frequent, casual language, fragments okay
- 0.4-0.6: Mixed style, professional but accessible
- 0.7-1.0: No contractions, complete sentences, formal structure
Confidence (0-1):
- 0.0-0.3: Many hedges ("might", "perhaps"), questions, qualifiers
- 0.4-0.6: Balanced certainty, occasional hedges
- 0.7-1.0: Direct statements, conclusions first, few qualifiers
Warmth (0-1):
- 0.0-0.3: Third person, passive voice, clinical tone
- 0.4-0.6: Professional but personable
- 0.7-1.0: Second person, inclusive language, empathetic
Energy (0-1):
- 0.0-0.3: Calm, measured, understated
- 0.4-0.6: Balanced engagement
- 0.7-1.0: Exclamation marks, action verbs, dynamic phrasing
Complexity (0-1):
- 0.0-0.3: Short sentences, simple vocabulary, accessible
- 0.4-0.6: Moderate complexity, clear but nuanced
- 0.7-1.0: Long sentences, technical vocabulary, layered ideas
Vocabulary Extraction
Signature phrases - Identified by:
- Repeated patterns across samples
- Distinctive constructions
- Opening/closing patterns
Domain vocabulary - Extracted by:
- Technical term frequency
- Specialized jargon
- Industry-specific language
Avoid patterns - Built from two sources:
- Conspicuous absence of common phrases in the samples
- Any AI writing tells found during the tells detection pass (always include these)
Output Format
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:
- "leverage" # AI tell: banned verb
- "delve" # AI tell: banned verb
- "comprehensive" # AI tell: banned adjective
- "landscape" # AI tell: banned noun
- "furthermore" # AI tell: banned adverb
- "patterns not found in samples"
signature_phrases:
- "The key point is..."
- "This demonstrates..."
structure:
sentence_length: medium # avg 15-20 words
sentence_length_variance: high # std dev > 6 words (human-like)
paragraph_length: medium # avg 4-6 sentences
paragraph_length_variance: high # varied paragraph sizes (human-like)
sentence_variety: high # varied structure detected
use_lists: when-appropriate
use_examples: frequently
use_questions: rarely
em_dash_usage: avoid # always set to avoid unless user explicitly uses them naturally
perspective:
person: third
voice: active
tense: present
extracted_patterns:
opening_style: "context-first"
closing_style: "conclusion-summary"
transition_style: "logical-flow"
ai_tells_report:
tells_found: 3
em_dash_frequency: 2.1 # per 1000 words (human avg ~0.5, AI avg ~5.0)
sentence_length_std_dev: 7.2 # words (human = 6-12, AI = 2-4)
paragraph_length_std_dev: 2.8 # sentences (human = 2-5, AI = 0.5-1.5)
banned_vocabulary_found:
- "leverage (1x)"
- "comprehensive (2x)"
banned_structures_found:
- "negation pattern (1x)"
banned_transitions_found: []
formatting_tells_found: []
overall_human_score: 0.82 # 0 = clearly AI, 1 = clearly human
Integration
- Output: Creates profiles usable by
voice-apply
- Chain:
voice-analyze -> voice-create (to refine) -> voice-apply
- Chain:
voice-analyze + voice-analyze -> voice-blend (combine styles)
Accuracy Considerations
- Minimum sample: 500+ words for reliable analysis
- Multiple samples: 3+ samples improve accuracy
- Consistent genre: Mixing genres reduces accuracy
- Confidence score: Output includes analysis confidence (0-1)
- AI tells in samples: If the sample itself contains AI tells (e.g., it was partially AI-generated), the analyzer will flag them and exclude them from the profile's preferred patterns. The
overall_human_score helps gauge how much of the sample is genuinely the user's voice vs AI artifacts.
References
- AI Writing Tells:
../voice-apply/references/ai-tells.md
Source: angelarose210/ghostwriter — distributed by TomeVault.
1---2name: voice-analyze3description: Reverse-engineer voice profiles from sample content by analyzing writing patterns. Use when user pastes writing samples and wants to extract their style. Use when this capability is needed.4---56# voice-analyze78Reverse-engineer voice profiles from sample content by analyzing writing patterns. Detects and flags AI writing tells so the resulting profile produces human-sounding output.910## Triggers1112Alternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):1314- "voice fingerprint" -> voice profile extraction15- "what's my writing style" -> voice analysis1617## Behavior1819When triggered, this skill:20211. **Analyzes text samples** for:22 - Sentence structure and length patterns23 - Vocabulary sophistication and domain24 - Tone markers (formality, confidence, warmth)25 - Structural patterns (lists, examples, questions)26 - Perspective and voice choices27282. **Extracts measurable features**:29 - Average sentence length30 - Vocabulary complexity (syllables, word length)31 - Contraction usage32 - Personal pronoun frequency33 - Question density34 - List/bullet usage35363. **Scans for AI writing tells** (see `../voice-apply/references/ai-tells.md`):37 - Flags any banned vocabulary found in the sample (verbs, adjectives, nouns, adverbs from the tells list)38 - Detects banned sentence structures: "It's not X, it's Y" negation patterns, self-posed questions answered immediately, anaphora abuse, present participle trailing clauses39 - Measures em dash frequency (AI models use ~10x more than human writers)40 - Checks for uniform sentence length clustering (the "burstiness problem": AI clusters at 15-20 words, humans swing from 3-word fragments to 40-word sprawls)41 - Detects banned transitions and filler phrases (throat-clearing openers, pedagogical openers, fake-suspense transitions, hype phrases)42 - Flags formatting tells: bold-first bullet points, excessive headers, erratic bolding, emoji decoration43 - Checks for Rule of Three overuse (back-to-back tricolons are an AI fingerprint)44 - Detects uniform paragraph length (the most visually obvious tell)45 - If the sample contains AI tells, the profile's `vocabulary.avoid` list MUST include them and the `ai_tells_report` section must document what was found46474. **Maps features to voice dimensions**:48 - Statistical analysis -> tone scale values (0-1)49 - Pattern detection -> structure preferences50 - Vocabulary extraction -> prefer/avoid lists51525. **Generates voice profile** matching the analyzed style, with AI tells filtered out5354## Usage Examples5556### Analyze Existing Documentation57```58User: "Analyze this writing style" + [paste technical docs]5960Analysis:61- Formality: 0.7 (no contractions, structured sentences)62- Confidence: 0.85 (direct statements, few hedges)63- Warmth: 0.25 (impersonal, third-person)64- Complexity: 0.8 (technical vocabulary, long sentences)65- AI Tells Detected: 3 (2 banned verbs, 1 negation pattern)6667Output: analyzed-technical-docs.yaml68```6970### Match Brand Voice71```72User: "Extract voice from our marketing copy" + [paste samples]7374Analysis:75- Formality: 0.3 (conversational, contractions)76- Confidence: 0.7 (benefit claims, but some hedging)77- Warmth: 0.85 (second person, friendly tone)78- Energy: 0.8 (exclamation points, action verbs)79- AI Tells Detected: 08081Output: brand-marketing-voice.yaml82```8384### Capture Personal Style85```86User: "Create profile from my blog posts" + [paste samples]8788Analysis:89- Identifies personal writing quirks90- Extracts signature phrases91- Maps to voice dimensions92- Flags and excludes any AI tells found in samples9394Output: personal-blog-voice.yaml95```9697## Analysis Methodology9899### Feature Extraction100101| Feature | Measurement | Maps To |102|---------|-------------|---------|103| Sentence length | Avg words/sentence | complexity |104| Sentence length variance | Std deviation of word count | burstiness (human = high variance) |105| Contractions | Frequency per 100 words | formality (inverse) |106| First person ("I", "we") | Frequency | warmth |107| Second person ("you") | Frequency | warmth |108| Passive voice | Percentage of sentences | confidence (inverse) |109| Questions | Per paragraph | warmth, engagement |110| Hedging words | "might", "perhaps", "could" | confidence (inverse) |111| Exclamation marks | Frequency | energy |112| Technical terms | Domain vocabulary density | complexity |113| Em dash frequency | Per 1000 words | ai_tell_score (high = likely AI) |114| Banned AI vocabulary | Count from tells list | ai_tell_score |115| Paragraph length variance | Std deviation of sentence count | ai_tell_score (low variance = likely AI) |116117### AI Tells Detection Pass118119After standard feature extraction, run the AI tells scan. For each category in `../voice-apply/references/ai-tells.md`:1201211. **Vocabulary scan**: Count occurrences of every word/phrase in the banned lists (verbs, adjectives, nouns, adverbs, connectors)1222. **Structure scan**: Detect banned sentence patterns (negation flips, self-posed questions, anaphora, trailing participles, false ranges, hedge-stacking)1233. **Punctuation scan**: Count em dashes, semicolons, Oxford commas, Unicode ellipsis characters1244. **Rhythm scan**: Calculate sentence length standard deviation. If std dev < 4 words, flag as AI-like clustering1255. **Formatting scan**: Check for bold-first bullets, excessive headers, erratic bolding1266. **Transition scan**: Search for throat-clearing openers, pedagogical openers, fake-suspense phrases, hype phrases, banned conclusion phrases127128Report findings in the output profile under `ai_tells_report`. Any banned vocabulary found in the sample goes into `vocabulary.avoid` automatically.129130### Dimension Calibration131132**Formality** (0-1):133- 0.0-0.3: Contractions frequent, casual language, fragments okay134- 0.4-0.6: Mixed style, professional but accessible135- 0.7-1.0: No contractions, complete sentences, formal structure136137**Confidence** (0-1):138- 0.0-0.3: Many hedges ("might", "perhaps"), questions, qualifiers139- 0.4-0.6: Balanced certainty, occasional hedges140- 0.7-1.0: Direct statements, conclusions first, few qualifiers141142**Warmth** (0-1):143- 0.0-0.3: Third person, passive voice, clinical tone144- 0.4-0.6: Professional but personable145- 0.7-1.0: Second person, inclusive language, empathetic146147**Energy** (0-1):148- 0.0-0.3: Calm, measured, understated149- 0.4-0.6: Balanced engagement150- 0.7-1.0: Exclamation marks, action verbs, dynamic phrasing151152**Complexity** (0-1):153- 0.0-0.3: Short sentences, simple vocabulary, accessible154- 0.4-0.6: Moderate complexity, clear but nuanced155- 0.7-1.0: Long sentences, technical vocabulary, layered ideas156157### Vocabulary Extraction158159**Signature phrases** - Identified by:160- Repeated patterns across samples161- Distinctive constructions162- Opening/closing patterns163164**Domain vocabulary** - Extracted by:165- Technical term frequency166- Specialized jargon167- Industry-specific language168169**Avoid patterns** - Built from two sources:1701. Conspicuous absence of common phrases in the samples1712. Any AI writing tells found during the tells detection pass (always include these)172173## Output Format174175```yaml176name: analyzed-sample-voice177version: 1.0.0178description: Voice profile extracted from sample content179analysis_source:180 sample_size: 1500 # words analyzed181 sample_count: 3 # number of samples182 confidence: 0.85 # analysis confidence score183tone:184 formality: 0.65185 confidence: 0.8186 warmth: 0.4187 energy: 0.5188 complexity: 0.7189vocabulary:190 prefer:191 - "extracted signature phrase 1"192 - "detected domain terminology"193 avoid:194 - "leverage" # AI tell: banned verb195 - "delve" # AI tell: banned verb196 - "comprehensive" # AI tell: banned adjective197 - "landscape" # AI tell: banned noun198 - "furthermore" # AI tell: banned adverb199 - "patterns not found in samples"200 signature_phrases:201 - "The key point is..."202 - "This demonstrates..."203structure:204 sentence_length: medium # avg 15-20 words205 sentence_length_variance: high # std dev > 6 words (human-like)206 paragraph_length: medium # avg 4-6 sentences207 paragraph_length_variance: high # varied paragraph sizes (human-like)208 sentence_variety: high # varied structure detected209 use_lists: when-appropriate210 use_examples: frequently211 use_questions: rarely212 em_dash_usage: avoid # always set to avoid unless user explicitly uses them naturally213perspective:214 person: third215 voice: active216 tense: present217extracted_patterns:218 opening_style: "context-first"219 closing_style: "conclusion-summary"220 transition_style: "logical-flow"221ai_tells_report:222 tells_found: 3223 em_dash_frequency: 2.1 # per 1000 words (human avg ~0.5, AI avg ~5.0)224 sentence_length_std_dev: 7.2 # words (human = 6-12, AI = 2-4)225 paragraph_length_std_dev: 2.8 # sentences (human = 2-5, AI = 0.5-1.5)226 banned_vocabulary_found:227 - "leverage (1x)"228 - "comprehensive (2x)"229 banned_structures_found:230 - "negation pattern (1x)"231 banned_transitions_found: []232 formatting_tells_found: []233 overall_human_score: 0.82 # 0 = clearly AI, 1 = clearly human234```235236## Integration237238- **Output**: Creates profiles usable by `voice-apply`239- **Chain**: `voice-analyze` -> `voice-create` (to refine) -> `voice-apply`240- **Chain**: `voice-analyze` + `voice-analyze` -> `voice-blend` (combine styles)241242## Accuracy Considerations243244- **Minimum sample**: 500+ words for reliable analysis245- **Multiple samples**: 3+ samples improve accuracy246- **Consistent genre**: Mixing genres reduces accuracy247- **Confidence score**: Output includes analysis confidence (0-1)248- **AI tells in samples**: If the sample itself contains AI tells (e.g., it was partially AI-generated), the analyzer will flag them and exclude them from the profile's preferred patterns. The `overall_human_score` helps gauge how much of the sample is genuinely the user's voice vs AI artifacts.249250## References251252- AI Writing Tells: `../voice-apply/references/ai-tells.md`253254---255> Source: [angelarose210/ghostwriter](https://github.com/angelarose210/ghostwriter) — distributed by [TomeVault](https://tomevault.io).256<!-- tomevault:4.0:skill_md:2026-06-23 -->