agentic/code/addons/voice-framework/skills/voice-analyze/SKILL.md
Reverse-engineer voice profiles from sample content by analyzing writing patterns
npx skillsauth add jmagly/aiwg voice-analyzeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Reverse-engineer voice profiles from sample content by analyzing writing patterns.
Alternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):
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.pydata-ai
Report which research-corpus radar sidecars are overdue for refresh. Computes staleness (days since last refresh vs the cadence window) for every radar, sorted most-overdue-first. Runs via `aiwg corpus radar-status`.
data-ai
Aggregate research-corpus radar sidecars into a corpus or per-cluster freshness report — totals, overdue count, per-cluster / per-GRADE / per-trajectory breakdowns, an overdue table, and per-radar rationale snippets. Runs via `aiwg corpus radar-report`.
testing
Scaffold radar/freshness sidecars for research-corpus REFs. Pulls title/authors from the citation sidecar and GRADE from the analysis doc, defaults the refresh cadence from GRADE and the cluster from a corpus-local map, and stamps documentation/radar/REF-XXX-radar.md. Runs via `aiwg corpus radar-init`.
data-ai
Compute an entity's publication trajectory — per-year paper counts, topic drift, hot-streak detection (≥3 consecutive A-grade years), and career phase. Runs via `aiwg corpus profile-temporal`.