Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,6 @@ credentials/
.claude/pai_updates/
.claude/pai_backups/
.claude/.pai-sync-history

# Worktrees
.worktrees/
40 changes: 35 additions & 5 deletions Packs/kai-agents-skill/INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,16 +82,46 @@ cd "$PAI_DIR/skills/Agents/Tools"
bun add yaml handlebars
```

### Step 4: Configure Voice IDs (Optional)
### Step 4: Configure Voice Environment Variables (Optional)

If using kai-voice-system, edit `Traits.yaml` to replace placeholder voice IDs:
If using kai-voice-system for voice notifications, add voice IDs to your `.env` file.

> **Important:** Voice IDs MUST be configured in `$PAI_DIR/.env`, NOT in `settings.json` or other config files. The voice server reads ElevenLabs voice IDs exclusively from environment variables.

**$PAI_DIR/.env:**
```bash
# Edit voice mappings with your TTS provider's voice IDs
nano "$PAI_DIR/skills/Agents/Data/Traits.yaml"
# Required: ElevenLabs API key
ELEVENLABS_API_KEY=sk_your_api_key_here

# Dynamic agent voices (from trait mapping)
ELEVENLABS_VOICE_PROFESSIONAL=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_AUTHORITATIVE=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_ACADEMIC=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_WARM=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_GENTLE=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_ENERGETIC=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_DYNAMIC=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_SOPHISTICATED=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_INTENSE=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_GRITTY=<your_elevenlabs_voice_id>

# Named agent voices
ELEVENLABS_VOICE_PAI=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_INTERN=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_ARCHITECT=<your_elevenlabs_voice_id>
ELEVENLABS_VOICE_ENGINEER=<your_elevenlabs_voice_id>

# Fallback voice (used when specific voice not configured)
ELEVENLABS_VOICE_ID=<your_default_voice_id>
```

Replace `YOUR_*_VOICE_ID` placeholders with actual voice IDs from your TTS provider.
**Configuration Split:**
| What | Where | Example |
|------|-------|---------|
| Voice IDs (secrets) | `$PAI_DIR/.env` | `ELEVENLABS_VOICE_ACADEMIC=dCnu06FiOZma2KVNUoPZ` |
| Voice settings | `kai-voice-system/config/voice-personalities.json` | `{ "stability": 0.62, "similarity_boost": 0.80 }` |

> **Note:** Get your voice IDs from the [ElevenLabs Voice Library](https://elevenlabs.io/voice-library). Each voice has a unique ID like `dCnu06FiOZma2KVNUoPZ`.

---

Expand Down
14 changes: 11 additions & 3 deletions Packs/kai-agents-skill/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
name: Kai Agents Skill
pack-id: danielmiessler-agents-skill-core-v1.1.1
version: 1.1.1
author: danielmiessler
pack-id: danielmiessler-agents-skill-core-v1.2.0
version: 1.2.0
author: [danielmiessler, sti0]
description: Dynamic agent composition and orchestration system - create custom agents with unique personalities, voices, and trait combinations on-the-fly
type: skill
purpose-type: [productivity, automation, development]
Expand Down Expand Up @@ -93,6 +93,14 @@ bun run AgentFactory.ts --list

## Changelog

### 1.2.0 - 2026-01-07
- **Unified voice system integration**: Voice IDs now read from ENV vars (`ELEVENLABS_VOICE_*`)
- **AGENT tag format**: Dynamic agents output `[AGENT:voice]` tags for personality-specific voice routing
- Removed hardcoded voice registry from `Traits.yaml` - single source of truth in `.env`
- Added Handlebars `lowercase` helper for consistent voice name formatting
- Updated named agent personalities with AGENT tag response format
- Updated INSTALL.md with comprehensive ENV var voice configuration

### 1.1.1 - 2026-01-03
- Added missing `SpawnParallelAgents.md` workflow (was referenced but didn't exist)
- Fixed workflow validation
Expand Down
58 changes: 17 additions & 41 deletions Packs/kai-agents-skill/src/skills/Agents/AgentPersonalities.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@ Use named agents for recurring work where relationship continuity matters.

### The Intern - "The Brilliant Overachiever"

**Voice Settings**: Fast rate (270 wpm), Low stability (0.30)
**Response Format:**
Always end responses with:
```
🎯 **COMPLETED**: [AGENT:intern] [Brief summary - max 12 words]
```

**Backstory:**
Youngest person accepted into competitive program. Skipped grades, constantly
Expand All @@ -39,7 +43,11 @@ love or hate them. Fast talker because brain races ahead of mouth.

### The Architect - "The Academic Visionary"

**Voice Settings**: Slow rate (205 wpm), High stability (0.75)
**Response Format:**
Always end responses with:
```
🎯 **COMPLETED**: [AGENT:architect] [Brief summary - max 12 words]
```

**Backstory:**
Started in academia (CS research) before industry. PhD work on distributed
Expand All @@ -60,7 +68,11 @@ patterns are timeless vs trends.

### The Engineer - "The Battle-Scarred Leader"

**Voice Settings**: Slow rate (212 wpm), High stability (0.72)
**Response Format:**
Always end responses with:
```
🎯 **COMPLETED**: [AGENT:engineer] [Brief summary - max 12 words]
```

**Backstory:**
15 years from junior to technical lead. Scars from architectural decisions that
Expand All @@ -79,47 +91,11 @@ before diving into solutions.

---

## Voice Configuration

For voice notifications, map agent names to your TTS provider's voice IDs:

```json
{
"default_rate": 175,
"voices": {
"intern": {
"voice_id": "YOUR_INTERN_VOICE_ID",
"voice_name": "Energetic",
"rate_wpm": 270,
"stability": 0.30,
"similarity_boost": 0.65,
"description": "High-energy eager delivery"
},
"architect": {
"voice_id": "YOUR_ARCHITECT_VOICE_ID",
"voice_name": "Academic",
"rate_wpm": 205,
"stability": 0.75,
"similarity_boost": 0.88,
"description": "Measured academic wisdom"
},
"engineer": {
"voice_id": "YOUR_ENGINEER_VOICE_ID",
"voice_name": "Leader",
"rate_wpm": 212,
"stability": 0.72,
"similarity_boost": 0.88,
"description": "Deliberate leadership presence"
}
}
}
```

## Adding Your Own Named Agents

1. Define backstory and personality traits
2. Choose voice settings that match personality
3. Map to your TTS provider's voice ID
2. Add voice entry to `voice-personalities.json`
3. Set ENV var: `ELEVENLABS_VOICE_AGENTNAME=your_voice_id`
4. Document communication style examples

Named agents create relationship continuity - the same "person" helping across sessions.
161 changes: 41 additions & 120 deletions Packs/kai-agents-skill/src/skills/Agents/Data/Traits.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -363,176 +363,97 @@ approach:
# ==============================================================================
# VOICE MAPPINGS - How dynamic agents map to TTS voices
# ==============================================================================
# CUSTOMIZE: Replace voice_id values with your TTS provider's voice IDs
# Voice IDs come from ENV vars: ELEVENLABS_VOICE_${name.toUpperCase()}
# Voice settings (stability, similarity_boost) come from voice-personalities.json
#
voice_mappings:
# Default voice when no mapping matches
default: "Default"
default_voice_id: "YOUR_DEFAULT_VOICE_ID"

# ===========================================================================
# VOICE REGISTRY - Define your available voices
# ===========================================================================
voice_registry:
# --- AUTHORITATIVE VOICES ---
Authoritative:
voice_id: "YOUR_AUTHORITATIVE_VOICE_ID"
characteristics: ["authoritative", "measured", "intellectual"]
description: "Deep authoritative voice for serious analysis"
stability: 0.70
similarity_boost: 0.85

Professional:
voice_id: "YOUR_PROFESSIONAL_VOICE_ID"
characteristics: ["professional", "balanced", "neutral"]
description: "Balanced professional voice for general use"
stability: 0.65
similarity_boost: 0.80

# --- WARM/FRIENDLY VOICES ---
Warm:
voice_id: "YOUR_WARM_VOICE_ID"
characteristics: ["warm", "friendly", "engaging"]
description: "Warm friendly voice for supportive interactions"
stability: 0.50
similarity_boost: 0.75

Gentle:
voice_id: "YOUR_GENTLE_VOICE_ID"
characteristics: ["warm", "calm", "gentle"]
description: "Calm gentle voice for empathetic guidance"
stability: 0.55
similarity_boost: 0.75

# --- ENERGETIC VOICES ---
Energetic:
voice_id: "YOUR_ENERGETIC_VOICE_ID"
characteristics: ["energetic", "excited", "dynamic"]
description: "High-energy voice for enthusiastic delivery"
stability: 0.35
similarity_boost: 0.65

Dynamic:
voice_id: "YOUR_DYNAMIC_VOICE_ID"
characteristics: ["energetic", "fast", "charismatic"]
description: "Fast-paced dynamic voice for exciting content"
stability: 0.40
similarity_boost: 0.70

# --- INTELLECTUAL VOICES ---
Academic:
voice_id: "YOUR_ACADEMIC_VOICE_ID"
characteristics: ["intellectual", "warm", "academic"]
description: "Academic voice for research and analysis"
stability: 0.62
similarity_boost: 0.80

Sophisticated:
voice_id: "YOUR_SOPHISTICATED_VOICE_ID"
characteristics: ["intellectual", "sophisticated", "smooth"]
description: "Sophisticated voice for nuanced discussion"
stability: 0.60
similarity_boost: 0.80

# --- EDGY/DISTINCTIVE VOICES ---
Intense:
voice_id: "YOUR_INTENSE_VOICE_ID"
characteristics: ["edgy", "gravelly", "intense"]
description: "Intense voice for adversarial/security work"
stability: 0.55
similarity_boost: 0.75

Gritty:
voice_id: "YOUR_GRITTY_VOICE_ID"
characteristics: ["edgy", "raspy", "authentic"]
description: "Gritty authentic voice for skeptical analysis"
stability: 0.50
similarity_boost: 0.70
default: "pai"

# ===========================================================================
# TRAIT -> VOICE MAPPINGS
# ===========================================================================
mappings:
# Skeptical combinations -> Intellectual voices
- traits: ["contrarian", "skeptical"]
voice: "Intense"
voice: "intense"
reason: "Contrarian skepticism needs intensity"

- traits: ["skeptical", "analytical"]
voice: "Academic"
voice: "academic"
reason: "Skeptical analysis suits academic warmth"

- traits: ["skeptical", "meticulous"]
voice: "Sophisticated"
voice: "sophisticated"
reason: "Meticulous skepticism suits sophistication"

# Creative combinations -> Energetic voices
- traits: ["enthusiastic", "creative"]
voice: "Energetic"
voice: "energetic"
reason: "Creative enthusiasm needs high energy"

- traits: ["creative", "exploratory"]
voice: "Dynamic"
voice: "dynamic"
reason: "Creative exploration suits dynamic delivery"

# Analytical combinations -> Professional voices
- traits: ["analytical", "technical"]
voice: "Authoritative"
voice: "authoritative"
reason: "Technical analysis suits authority"

- traits: ["analytical", "systematic"]
voice: "Professional"
voice: "professional"
reason: "Systematic analysis suits professionalism"

# Empathetic combinations -> Warm voices
- traits: ["empathetic", "consultative"]
voice: "Warm"
voice: "warm"
reason: "Empathetic consulting suits warmth"

- traits: ["empathetic", "synthesizing"]
voice: "Gentle"
voice: "gentle"
reason: "Synthesizing empathy suits gentleness"

# Security combinations -> Edgy voices
- traits: ["security", "adversarial"]
voice: "Intense"
voice: "intense"
reason: "Security adversary suits intensity"

- traits: ["security", "skeptical"]
voice: "Gritty"
voice: "gritty"
reason: "Security skepticism suits gritty authenticity"

# ===========================================================================
# FALLBACKS - Single trait -> voice
# ===========================================================================
fallbacks:
skeptical: "Academic"
enthusiastic: "Energetic"
analytical: "Authoritative"
cautious: "Professional"
bold: "Intense"
creative: "Dynamic"
empathetic: "Warm"
contrarian: "Intense"
pragmatic: "Professional"
meticulous: "Sophisticated"

security: "Intense"
legal: "Authoritative"
finance: "Professional"
medical: "Warm"
technical: "Professional"
research: "Academic"
communications: "Dynamic"
business: "Professional"
data: "Academic"

thorough: "Professional"
rapid: "Dynamic"
systematic: "Professional"
exploratory: "Dynamic"
adversarial: "Intense"
consultative: "Warm"
skeptical: "academic"
enthusiastic: "energetic"
analytical: "authoritative"
cautious: "professional"
bold: "intense"
creative: "dynamic"
empathetic: "warm"
contrarian: "intense"
pragmatic: "professional"
meticulous: "sophisticated"

security: "intense"
legal: "authoritative"
finance: "professional"
medical: "warm"
technical: "professional"
research: "academic"
communications: "dynamic"
business: "professional"
data: "academic"

thorough: "professional"
rapid: "dynamic"
systematic: "professional"
exploratory: "dynamic"
adversarial: "intense"
consultative: "warm"

# ==============================================================================
# COMPOSITION EXAMPLES
Expand Down
Loading
Loading