feat(agents,voice): Unified Voice System - Personality-Driven TTS with Dynamic Agent Routing#322
Closed
sti0 wants to merge 2 commits into
Closed
feat(agents,voice): Unified Voice System - Personality-Driven TTS with Dynamic Agent Routing#322sti0 wants to merge 2 commits into
sti0 wants to merge 2 commits into
Conversation
Contributor
Author
|
Additional analytics, design and implementation documents: 2026-01-05-unified-voice-system-analytics.md |
sti0
force-pushed
the
feature/unified-voice-system
branch
from
January 5, 2026 01:03
8823d86 to
0c20c7a
Compare
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10 tasks
Closed
9 tasks
Unified voice system architecture: - Voice IDs read from ENV vars (ELEVENLABS_VOICE_*) - single source of truth - AGENT tag format [AGENT:voice] for personality-specific voice routing - Case-insensitive voice lookup throughout the pipeline - Smart .env path resolution with fallback chain Changes to kai-agents-skill (v1.2.0): - Removed hardcoded voice_registry from Traits.yaml - Added Handlebars lowercase helper for consistent voice names - Updated named agent personalities with AGENT tag response format - Updated INSTALL.md with comprehensive ENV var voice configuration Changes to kai-voice-system (v1.4.0): - Support direct assistant text responses in subagent hook - Correct regex patterns for markdown bold COMPLETED detection - Pass voice NAME to server instead of resolved ID - Add all dynamic agent voices to voice-personalities.json Authors: danielmiessler, sti0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
sti0
force-pushed
the
feature/unified-voice-system
branch
from
January 7, 2026 22:21
e53c88f to
92769ed
Compare
Owner
|
Thank you @sti0 for this unified voice system work! 🙏 This is ambitious and valuable. PAI v2.1 restructured the codebase ( See the release: https://github.com/danielmiessler/PAI/releases/tag/v2.1.0 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
feat: Unified Voice System - Personality-Driven TTS with Dynamic Agent Routing
Summary
This PR consolidates voice configuration into a single source of truth architecture, enabling personality-specific text-to-speech for dynamically composed agents. Each agent now outputs
[AGENT:voicename]tags that the hook system extracts for voice routing, delivering distinct vocal personalities based on agent traits.The Problem
Previously, voice configuration was scattered across multiple files:
Traits.yamlcontained avoice_registrywith hardcoded voice IDsAgentPersonalities.mdduplicated voice settings in JSON blocksThe Solution
Architecture: Voice NAME as the linking key
Key Changes
Version bump
Bumped PACK version to v1.4.0 and added a changelog.
Agent Output Format
Dynamic agents now include voice routing in their COMPLETED output:
Configuration Consolidation
$PAI_DIR/.envELEVENLABS_VOICE_ACADEMIC=<id>voice-personalities.jsonTraits.yamlTechnical Improvements
{{lowercase}}helper - Ensures consistent voice name casingACADEMIC,Academic,academicall resolveFiles Changed
Traits.yamlvoice_registry, lowercase voice namesAgentFactory.ts{{lowercase}}Handlebars helperDynamicAgent.hbs[AGENT:xxx]output formatAgentPersonalities.mdvoice-personalities.jsonserver.tssubagent-stop-hook-voice.tsINSTALL.mdVoice Personalities
Bug Fixes
**COMPLETED**:detection (colon outside asterisks)Testing Checklist
🎯 **COMPLETED**: [AGENT:voicename] message🎯 **COMPLETED**: [AGENT:intern] messageELEVENLABS_VOICE_ACADEMICvoices["academic"]ELEVENLABS_VOICE_DEFAULTworksBreaking Changes
None. Existing agents continue to work. New
[AGENT:xxx]tags are additive.Migration
Add voice IDs to
$PAI_DIR/.env:🤖 Generated with Claude Code