voice-blend
Combine multiple voice profiles with weighted mixing to create hybrid voices
Best use case
voice-blend is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
It is a strong fit for teams already working in Codex.
Combine multiple voice profiles with weighted mixing to create hybrid voices
Teams using voice-blend should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/voice-blend/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How voice-blend Compares
| Feature / Agent | voice-blend | Standard Approach |
|---|---|---|
| Platform Support | Codex | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Combine multiple voice profiles with weighted mixing to create hybrid voices
Which AI agents support this skill?
This skill is designed for Codex.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
Cursor vs Codex for AI Workflows
Compare Cursor and Codex for AI coding workflows, repository assistance, debugging, refactoring, and reusable developer skills.
AI Agents for Coding
Browse AI agent skills for coding, debugging, testing, refactoring, code review, and developer workflows across Claude, Cursor, and Codex.
AI Agents for Marketing
Discover AI agents for marketing workflows, from SEO and content production to campaign research, outreach, and analytics.
SKILL.md Source
# voice-blend
Combine multiple voice profiles with weighted mixing to create hybrid voices.
## Triggers
Alternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):
- "70/30 [voice A]/[voice B]" → ratio-based voice blending
- "blend voices" → voice mixing
## Behavior
When triggered, this skill:
1. **Loads source voice profiles** from:
- Built-in templates (`voices/templates/`)
- Project voices (`.aiwg/voices/`)
- User voices (`~/.config/aiwg/voices/`)
2. **Parses blend specification**:
- Equal blend: "blend X and Y" → 50%/50%
- Weighted blend: "70% X, 30% Y" → explicit weights
- Multi-voice: "blend X, Y, and Z" → equal thirds
3. **Interpolates dimensions**:
- Weighted average of tone values (formality, confidence, etc.)
- Merged vocabulary lists (union of prefer, intersection of avoid)
- Dominant structure patterns from highest-weighted voice
4. **Generates hybrid profile** with clear lineage tracking
## Usage Examples
### Equal Blend
```
User: "Blend technical-authority and friendly-explainer"
Result: 50/50 blend
- formality: 0.45 (avg of 0.7 and 0.2)
- confidence: 0.8 (avg of 0.9 and 0.7)
- warmth: 0.55 (avg of 0.3 and 0.8)
- vocabulary: merged from both
```
### Weighted Blend
```
User: "80% executive-brief, 20% casual-conversational"
Result: Weighted blend
- formality: 0.7 (0.8*0.85 + 0.2*0.15)
- confidence: 0.86 (0.8*0.9 + 0.2*0.6)
- Dominant structure from executive-brief
```
### Multi-Voice Blend
```
User: "Combine technical-authority, friendly-explainer, and executive-brief"
Result: Equal thirds (33.3% each)
- All dimensions averaged across three profiles
- Vocabulary merged from all three
```
## Blend Algorithm
### Dimension Interpolation
For each tone dimension:
```
blended_value = Σ(weight_i × value_i) / Σ(weight_i)
```
### Vocabulary Merging
- **prefer**: Union of all prefer lists, deduplicated
- **avoid**: Intersection of all avoid lists (only avoid if ALL sources avoid)
- **signature_phrases**: Top N from each source (weighted by blend ratio)
### Structure Resolution
Structure settings use the **dominant voice** (highest weight):
- sentence_length: from dominant
- paragraph_length: from dominant
- use_lists: from dominant
- use_examples: averaged (rarely=0, when-appropriate=1, frequently=2)
### Perspective Handling
- **person**: Majority vote (tie goes to second person)
- **voice**: Active unless all sources use passive
- **tense**: Present unless all sources use past
## Output Format
```yaml
name: technical-friendly-blend
version: 1.0.0
description: Blended voice profile
blend_sources:
- name: technical-authority
weight: 0.7
- name: friendly-explainer
weight: 0.3
tone:
formality: 0.55 # interpolated
confidence: 0.84 # interpolated
warmth: 0.45 # interpolated
energy: 0.49 # interpolated
complexity: 0.65 # interpolated
vocabulary:
prefer:
- precise technical terminology # from technical
- concrete examples # from friendly
avoid:
- marketing superlatives # common to both
signature_phrases:
- "The system handles..." # from technical (70%)
- "Think of it like..." # from friendly (30%)
structure:
sentence_length: medium # from dominant (technical)
use_examples: frequently # averaged
```
## Output Location
Blended profiles are saved to:
1. `.aiwg/voices/{name}.yaml` (default)
2. Custom path with `--output` flag
3. `~/.config/aiwg/voices/` with `--global` flag
## Integration
- **Input**: Takes profiles created by `voice-create` or built-in templates
- **Output**: Creates profiles usable by `voice-apply`
- **Chain**: `voice-analyze` → `voice-blend` → `voice-apply`
## CLI Usage
```bash
# Equal blend of two voices
python voice_blender.py --voices "technical-authority,friendly-explainer"
# Weighted blend
python voice_blender.py --voices "technical-authority:0.7,friendly-explainer:0.3"
# Custom output name
python voice_blender.py --voices "..." --name my-hybrid-voice
# Output to specific directory
python voice_blender.py --voices "..." --output .aiwg/voices/
# JSON output for inspection
python voice_blender.py --voices "..." --json
```
## Error Handling
- **Profile not found**: Lists available profiles and suggests closest match
- **Invalid weights**: Normalizes weights to sum to 1.0
- **Incompatible profiles**: Warns but proceeds with best-effort blend
## References
- Voice loader: `../voice-apply/scripts/voice_loader.py`
- Schema: `../../../schemas/voice-profile.schema.json`
- Built-in templates: `../../voices/templates/`Related Skills
voice-to-soul
Generate a SOUL.md from an existing AIWG voice profile
voice-create
Generate custom voice profiles from natural language descriptions by mapping tone, formality, and domain to voice dimensions
voice-apply
Applies a voice profile to transform content. Use when user asks to write in a specific voice, match a tone, apply a style, or transform content to sound like a particular voice profile.
voice-analyze
Reverse-engineer voice profiles from sample content by analyzing writing patterns
soul-to-voice
Generate an AIWG voice profile from an existing SOUL.md identity file
soul-blend
Merge multiple SOUL.md files into a composite persona for team-level agents or multi-perspective characters
roko-voice
Transform standard technical content into ROKO voice — dense technical mythology wrapped in cypherpunk cultural narrative
aiwg-orchestrate
Route structured artifact work to AIWG workflows via MCP with zero parent context cost
venv-manager
Create, manage, and validate Python virtual environments. Use for project isolation and dependency management.
pytest-runner
Execute Python tests with pytest, supporting fixtures, markers, coverage, and parallel execution. Use for Python test automation.
vitest-runner
Execute JavaScript/TypeScript tests with Vitest, supporting coverage, watch mode, and parallel execution. Use for JS/TS test automation.
eslint-checker
Run ESLint for JavaScript/TypeScript code quality and style enforcement. Use for static analysis and auto-fixing.