agentvibes 2.0.12 → 2.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/agent-vibes/bmad.md +0 -7
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/piper-installer.sh +7 -57
- package/.claude/hooks/play-tts-piper.sh +2 -10
- package/.claude/hooks/play-tts.sh +0 -31
- package/README.md +2 -2
- package/RELEASE_NOTES.md +0 -199
- package/package.json +1 -1
- package/src/installer.js +1 -112
- package/.claude/hooks/play-tts-local-wrapper.sh +0 -44
- package/.claude/hooks/play-tts-remote.sh +0 -81
- package/agentvibes.org/.claude/commands/agent-vibes/add.md +0 -21
- package/agentvibes.org/.claude/commands/agent-vibes/agent-vibes.md +0 -68
- package/agentvibes.org/.claude/commands/agent-vibes/commands.json +0 -53
- package/agentvibes.org/.claude/commands/agent-vibes/get.md +0 -9
- package/agentvibes.org/.claude/commands/agent-vibes/list.md +0 -13
- package/agentvibes.org/.claude/commands/agent-vibes/personality.md +0 -79
- package/agentvibes.org/.claude/commands/agent-vibes/preview.md +0 -16
- package/agentvibes.org/.claude/commands/agent-vibes/provider.md +0 -54
- package/agentvibes.org/.claude/commands/agent-vibes/replay.md +0 -19
- package/agentvibes.org/.claude/commands/agent-vibes/sample.md +0 -12
- package/agentvibes.org/.claude/commands/agent-vibes/sentiment.md +0 -52
- package/agentvibes.org/.claude/commands/agent-vibes/set-language.md +0 -47
- package/agentvibes.org/.claude/commands/agent-vibes/set-pretext.md +0 -65
- package/agentvibes.org/.claude/commands/agent-vibes/switch.md +0 -53
- package/agentvibes.org/.claude/commands/agent-vibes/update.md +0 -20
- package/agentvibes.org/.claude/commands/agent-vibes/version.md +0 -10
- package/agentvibes.org/.claude/commands/agent-vibes/whoami.md +0 -7
- package/agentvibes.org/.claude/hooks/bmad-voice-manager.sh +0 -278
- package/agentvibes.org/.claude/hooks/language-manager.sh +0 -190
- package/agentvibes.org/.claude/hooks/personality-manager.sh +0 -279
- package/agentvibes.org/.claude/hooks/piper-download-voices.sh +0 -133
- package/agentvibes.org/.claude/hooks/piper-voice-manager.sh +0 -227
- package/agentvibes.org/.claude/hooks/play-tts-elevenlabs.sh +0 -201
- package/agentvibes.org/.claude/hooks/play-tts-piper.sh +0 -175
- package/agentvibes.org/.claude/hooks/play-tts.sh +0 -138
- package/agentvibes.org/.claude/hooks/provider-commands.sh +0 -374
- package/agentvibes.org/.claude/hooks/provider-manager.sh +0 -196
- package/agentvibes.org/.claude/hooks/sentiment-manager.sh +0 -163
- package/agentvibes.org/.claude/hooks/voice-manager.sh +0 -349
- package/agentvibes.org/.claude/hooks/voices-config.sh +0 -33
- package/agentvibes.org/.claude/journal/2025-10-07.html +0 -373
- package/agentvibes.org/.claude/journal/index.html +0 -91
- package/agentvibes.org/.claude/output-styles/agent-vibes.md +0 -203
- package/agentvibes.org/.claude/personalities/angry.md +0 -16
- package/agentvibes.org/.claude/personalities/annoying.md +0 -16
- package/agentvibes.org/.claude/personalities/crass.md +0 -16
- package/agentvibes.org/.claude/personalities/dramatic.md +0 -16
- package/agentvibes.org/.claude/personalities/dry-humor.md +0 -52
- package/agentvibes.org/.claude/personalities/flirty.md +0 -22
- package/agentvibes.org/.claude/personalities/funny.md +0 -16
- package/agentvibes.org/.claude/personalities/grandpa.md +0 -34
- package/agentvibes.org/.claude/personalities/millennial.md +0 -16
- package/agentvibes.org/.claude/personalities/moody.md +0 -16
- package/agentvibes.org/.claude/personalities/normal.md +0 -18
- package/agentvibes.org/.claude/personalities/pirate.md +0 -16
- package/agentvibes.org/.claude/personalities/poetic.md +0 -16
- package/agentvibes.org/.claude/personalities/professional.md +0 -16
- package/agentvibes.org/.claude/personalities/robot.md +0 -16
- package/agentvibes.org/.claude/personalities/sarcastic.md +0 -40
- package/agentvibes.org/.claude/personalities/sassy.md +0 -16
- package/agentvibes.org/.claude/personalities/surfer-dude.md +0 -16
- package/agentvibes.org/.claude/personalities/zen.md +0 -16
- package/agentvibes.org/.mcp-minimal.json +0 -60
- package/agentvibes.org/CHANGELOG.md +0 -56
- package/agentvibes.org/README.md +0 -93
- package/agentvibes.org/app/(auth)/layout.tsx +0 -15
- package/agentvibes.org/app/(auth)/reset-password/page.tsx +0 -45
- package/agentvibes.org/app/(auth)/signin/page.tsx +0 -82
- package/agentvibes.org/app/(auth)/signup/page.tsx +0 -104
- package/agentvibes.org/app/(default)/layout.tsx +0 -31
- package/agentvibes.org/app/(default)/page.tsx +0 -20
- package/agentvibes.org/app/api/hello/route.ts +0 -3
- package/agentvibes.org/app/css/additional-styles/theme.css +0 -82
- package/agentvibes.org/app/css/additional-styles/utility-patterns.css +0 -55
- package/agentvibes.org/app/css/style.css +0 -100
- package/agentvibes.org/app/layout.tsx +0 -63
- package/agentvibes.org/components/cta.tsx +0 -58
- package/agentvibes.org/components/features.tsx +0 -256
- package/agentvibes.org/components/hero-home.tsx +0 -133
- package/agentvibes.org/components/modal-video.tsx +0 -137
- package/agentvibes.org/components/page-illustration.tsx +0 -55
- package/agentvibes.org/components/spotlight.tsx +0 -77
- package/agentvibes.org/components/testimonials.tsx +0 -282
- package/agentvibes.org/components/ui/footer.tsx +0 -82
- package/agentvibes.org/components/ui/header.tsx +0 -53
- package/agentvibes.org/components/ui/logo.tsx +0 -10
- package/agentvibes.org/components/workflows.tsx +0 -176
- package/agentvibes.org/next.config.js +0 -4
- package/agentvibes.org/package-lock.json +0 -1974
- package/agentvibes.org/package.json +0 -30
- package/agentvibes.org/pnpm-lock.yaml +0 -1141
- package/agentvibes.org/postcss.config.js +0 -5
- package/agentvibes.org/public/audio/02-sarcastic.mp3 +0 -0
- package/agentvibes.org/public/audio/03-angry.mp3 +0 -0
- package/agentvibes.org/public/audio/04-grandpa.mp3 +0 -0
- package/agentvibes.org/public/audio/05-sarcastic-example2.mp3 +0 -0
- package/agentvibes.org/public/audio/french-rachel.mp3 +0 -0
- package/agentvibes.org/public/audio/spanish-antoni.mp3 +0 -0
- package/agentvibes.org/public/favicon.ico +0 -0
- package/agentvibes.org/public/fonts/nacelle-italic.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-regular.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-semibold.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-semibolditalic.woff2 +0 -0
- package/agentvibes.org/public/images/blurred-shape-gray.svg +0 -1
- package/agentvibes.org/public/images/blurred-shape.svg +0 -1
- package/agentvibes.org/public/images/client-logo-01.svg +0 -1
- package/agentvibes.org/public/images/client-logo-02.svg +0 -1
- package/agentvibes.org/public/images/client-logo-03.svg +0 -1
- package/agentvibes.org/public/images/client-logo-04.svg +0 -1
- package/agentvibes.org/public/images/client-logo-05.svg +0 -1
- package/agentvibes.org/public/images/client-logo-06.svg +0 -1
- package/agentvibes.org/public/images/client-logo-07.svg +0 -1
- package/agentvibes.org/public/images/client-logo-08.svg +0 -1
- package/agentvibes.org/public/images/client-logo-09.svg +0 -1
- package/agentvibes.org/public/images/features.png +0 -0
- package/agentvibes.org/public/images/footer-illustration.svg +0 -1
- package/agentvibes.org/public/images/hero-image-01.jpg +0 -0
- package/agentvibes.org/public/images/logo.svg +0 -1
- package/agentvibes.org/public/images/page-illustration.svg +0 -1
- package/agentvibes.org/public/images/secondary-illustration.svg +0 -1
- package/agentvibes.org/public/images/testimonial-01.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-02.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-03.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-04.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-05.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-06.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-07.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-08.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-09.jpg +0 -0
- package/agentvibes.org/public/images/workflow-01.png +0 -0
- package/agentvibes.org/public/images/workflow-02.png +0 -0
- package/agentvibes.org/public/images/workflow-03.png +0 -0
- package/agentvibes.org/public/videos/video.mp4 +0 -0
- package/agentvibes.org/tsconfig.json +0 -28
- package/agentvibes.org/utils/useMasonry.tsx +0 -67
- package/agentvibes.org/utils/useMousePosition.tsx +0 -27
- package/docs/REMOTE_TTS_SETUP.md +0 -190
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Complete BMAD voice integration for agents
|
|
3
|
-
argument-hint: [command] [args...]
|
|
4
|
-
---
|
|
5
|
-
|
|
6
1
|
# /agent-vibes:bmad Command
|
|
7
2
|
|
|
8
3
|
Complete BMAD voice integration - assigns unique voices to each BMAD agent AND makes them speak when activated.
|
|
@@ -199,5 +194,3 @@ if [[ -n "$BMAD_AGENT_ID" ]]; then
|
|
|
199
194
|
fi
|
|
200
195
|
fi
|
|
201
196
|
```
|
|
202
|
-
|
|
203
|
-
!bash .claude/hooks/bmad-voice-manager.sh $ARGUMENTS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
20251009
|
|
@@ -69,65 +69,15 @@ fi
|
|
|
69
69
|
|
|
70
70
|
# Install Piper TTS
|
|
71
71
|
echo "📥 Installing Piper TTS via pipx..."
|
|
72
|
-
pipx install piper-tts
|
|
72
|
+
pipx install piper-tts
|
|
73
73
|
|
|
74
|
-
# Ensure pipx's bin directory is in PATH
|
|
75
|
-
echo ""
|
|
76
|
-
echo "🔧 Configuring PATH..."
|
|
77
|
-
pipx ensurepath
|
|
78
|
-
|
|
79
|
-
# Add pipx bin to current session PATH
|
|
80
|
-
PIPX_BIN_DIR="$HOME/.local/bin"
|
|
81
|
-
if [[ -d "$PIPX_BIN_DIR" ]]; then
|
|
82
|
-
export PATH="$PIPX_BIN_DIR:$PATH"
|
|
83
|
-
fi
|
|
84
|
-
|
|
85
|
-
# Check if piper is available now
|
|
86
74
|
if ! command -v piper &> /dev/null; then
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if [[ -f "$HOME/.bashrc" ]]; then
|
|
94
|
-
SHELL_CONFIG="$HOME/.bashrc"
|
|
95
|
-
elif [[ -f "$HOME/.zshrc" ]]; then
|
|
96
|
-
SHELL_CONFIG="$HOME/.zshrc"
|
|
97
|
-
fi
|
|
98
|
-
|
|
99
|
-
if [[ -n "$SHELL_CONFIG" ]]; then
|
|
100
|
-
# Check if PATH update already exists
|
|
101
|
-
if ! grep -q "export PATH=\"\$HOME/.local/bin:\$PATH\"" "$SHELL_CONFIG"; then
|
|
102
|
-
echo "" >> "$SHELL_CONFIG"
|
|
103
|
-
echo "# Added by AgentVibes Piper installer" >> "$SHELL_CONFIG"
|
|
104
|
-
echo "export PATH=\"\$HOME/.local/bin:\$PATH\"" >> "$SHELL_CONFIG"
|
|
105
|
-
echo "✅ Updated $SHELL_CONFIG with PATH configuration"
|
|
106
|
-
fi
|
|
107
|
-
fi
|
|
108
|
-
|
|
109
|
-
# Make piper available in current session
|
|
110
|
-
export PATH="$PIPX_BIN_DIR:$PATH"
|
|
111
|
-
|
|
112
|
-
# Verify it's working
|
|
113
|
-
if "$PIPX_BIN_DIR/piper" --version &> /dev/null; then
|
|
114
|
-
echo "✅ Piper is working! You may need to restart your terminal or run:"
|
|
115
|
-
echo " export PATH=\"\$HOME/.local/bin:\$PATH\""
|
|
116
|
-
else
|
|
117
|
-
echo "❌ Piper installed but not executing properly"
|
|
118
|
-
echo " Please restart your terminal and try again"
|
|
119
|
-
exit 1
|
|
120
|
-
fi
|
|
121
|
-
else
|
|
122
|
-
echo ""
|
|
123
|
-
echo "❌ Installation completed but piper command not found"
|
|
124
|
-
echo ""
|
|
125
|
-
echo " Try these steps:"
|
|
126
|
-
echo " 1. Run: pipx ensurepath"
|
|
127
|
-
echo " 2. Restart your terminal"
|
|
128
|
-
echo " 3. Run: export PATH=\"\$HOME/.local/bin:\$PATH\""
|
|
129
|
-
exit 1
|
|
130
|
-
fi
|
|
75
|
+
echo ""
|
|
76
|
+
echo "❌ Installation completed but piper command not found in PATH"
|
|
77
|
+
echo ""
|
|
78
|
+
echo " Try running: pipx ensurepath"
|
|
79
|
+
echo " Then restart your terminal"
|
|
80
|
+
exit 1
|
|
131
81
|
fi
|
|
132
82
|
|
|
133
83
|
echo ""
|
|
@@ -79,15 +79,7 @@ if [[ -z "$TEXT" ]]; then
|
|
|
79
79
|
fi
|
|
80
80
|
|
|
81
81
|
# Check if Piper is installed
|
|
82
|
-
|
|
83
|
-
if command -v piper &> /dev/null; then
|
|
84
|
-
PIPER_CMD="piper"
|
|
85
|
-
elif [[ -x "$HOME/.local/bin/piper" ]]; then
|
|
86
|
-
# Check pipx installation directory
|
|
87
|
-
PIPER_CMD="$HOME/.local/bin/piper"
|
|
88
|
-
echo "⚠️ Using Piper from: $PIPER_CMD"
|
|
89
|
-
echo " Add to PATH: export PATH=\"\$HOME/.local/bin:\$PATH\""
|
|
90
|
-
else
|
|
82
|
+
if ! command -v piper &> /dev/null; then
|
|
91
83
|
echo "❌ Error: Piper TTS not installed"
|
|
92
84
|
echo "Install with: pipx install piper-tts"
|
|
93
85
|
echo "Or run: .claude/hooks/piper-installer.sh"
|
|
@@ -160,7 +152,7 @@ TEMP_FILE="$AUDIO_DIR/tts-$(date +%s).wav"
|
|
|
160
152
|
# @exitcode 0=success, 4=synthesis error
|
|
161
153
|
# @sideeffects Creates audio file
|
|
162
154
|
# @edgecases Handles piper errors, invalid models
|
|
163
|
-
echo "$TEXT" |
|
|
155
|
+
echo "$TEXT" | piper --model "$VOICE_PATH" --output_file "$TEMP_FILE" 2>/dev/null
|
|
164
156
|
|
|
165
157
|
if [[ ! -f "$TEMP_FILE" ]] || [[ ! -s "$TEMP_FILE" ]]; then
|
|
166
158
|
echo "❌ Failed to synthesize speech with Piper"
|
|
@@ -18,37 +18,6 @@ VOICE_OVERRIDE="$2" # Optional: voice name or ID
|
|
|
18
18
|
# Get script directory
|
|
19
19
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
20
|
|
|
21
|
-
# Check if we're in an SSH session and should use remote TTS
|
|
22
|
-
if [ -n "$SSH_CONNECTION" ] || [ -n "$SSH_CLIENT" ]; then
|
|
23
|
-
# Check if remote TTS forwarding is enabled
|
|
24
|
-
if [ -f "$HOME/.claude/tts-remote-forward" ] || [ "$AGENTVIBES_REMOTE_TTS" = "true" ]; then
|
|
25
|
-
# In SSH session with forwarding enabled - generate locally but don't play
|
|
26
|
-
# The audio data should be captured and sent to the client
|
|
27
|
-
|
|
28
|
-
# Source provider manager to get active provider
|
|
29
|
-
source "$SCRIPT_DIR/provider-manager.sh"
|
|
30
|
-
ACTIVE_PROVIDER=$(get_active_provider)
|
|
31
|
-
|
|
32
|
-
case "$ACTIVE_PROVIDER" in
|
|
33
|
-
piper)
|
|
34
|
-
# Generate audio and output to stdout for SSH forwarding
|
|
35
|
-
exec "$SCRIPT_DIR/play-tts-remote.sh" "$TEXT"
|
|
36
|
-
;;
|
|
37
|
-
elevenlabs)
|
|
38
|
-
# For ElevenLabs, we might need a different approach
|
|
39
|
-
# since it requires API calls
|
|
40
|
-
exec "$SCRIPT_DIR/play-tts-elevenlabs.sh" "$TEXT" "$VOICE_OVERRIDE"
|
|
41
|
-
;;
|
|
42
|
-
*)
|
|
43
|
-
echo "❌ Unknown provider: $ACTIVE_PROVIDER" >&2
|
|
44
|
-
exit 1
|
|
45
|
-
;;
|
|
46
|
-
esac
|
|
47
|
-
exit 0
|
|
48
|
-
fi
|
|
49
|
-
fi
|
|
50
|
-
|
|
51
|
-
# Normal local playback path
|
|
52
21
|
# Source provider manager to get active provider
|
|
53
22
|
source "$SCRIPT_DIR/provider-manager.sh"
|
|
54
23
|
|
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml)
|
|
12
12
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
13
13
|
|
|
14
|
-
**Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v2.0.
|
|
14
|
+
**Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v2.0.13
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
|
|
46
46
|
## 📰 Latest Release
|
|
47
47
|
|
|
48
|
-
**[v2.0.0 - The Multi-Provider Revolution](https://github.com/paulpreibisch/AgentVibes/releases/tag/v2.0.
|
|
48
|
+
**[v2.0.0 - The Multi-Provider Revolution](https://github.com/paulpreibisch/AgentVibes/releases/tag/v2.0.13)** 🎉
|
|
49
49
|
|
|
50
50
|
The biggest update ever! **Multi-provider TTS support** (ElevenLabs + Piper TTS), **30+ languages**, expanded voice library (27+ voices), advanced sentiment system, enhanced BMAD integration, and comprehensive multilingual support. Choose between premium ElevenLabs voices or free offline Piper TTS!
|
|
51
51
|
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,204 +1,5 @@
|
|
|
1
1
|
# 🎤 AgentVibes Release Notes
|
|
2
2
|
|
|
3
|
-
## 📦 v2.0.12 - Remote TTS & BMAD Command Fix (2025-01-10)
|
|
4
|
-
|
|
5
|
-
### 🤖 AI Summary
|
|
6
|
-
|
|
7
|
-
This patch release adds powerful remote TTS audio forwarding for WSL/remote server environments and fixes the missing `/agent-vibes:bmad` slash command. Users working on remote servers or WSL can now hear TTS audio on their local machine through SSH forwarding, while BMAD users can finally access the voice integration command that was previously undetected.
|
|
8
|
-
|
|
9
|
-
### ✨ New Features
|
|
10
|
-
|
|
11
|
-
#### Remote TTS Audio Forwarding
|
|
12
|
-
- **SSH audio forwarding** - TTS audio plays on your local machine when working remotely
|
|
13
|
-
- **Automatic detection** - Detects SSH_CONNECTION and forwards audio automatically
|
|
14
|
-
- **Multiple forwarding methods**:
|
|
15
|
-
- OSC 52 clipboard (terminals supporting OSC sequences)
|
|
16
|
-
- HTTP server (Python-based local audio player)
|
|
17
|
-
- SSH tunnel (port forwarding setup)
|
|
18
|
-
- **WSL compatibility** - Perfect for WSL users who want audio on Windows host
|
|
19
|
-
- **Configuration guide** - New `docs/REMOTE_TTS_SETUP.md` with setup instructions
|
|
20
|
-
- **Fallback support** - Gracefully falls back to local playback if forwarding fails
|
|
21
|
-
|
|
22
|
-
**New Scripts:**
|
|
23
|
-
- `.claude/hooks/play-tts-remote.sh` - Remote audio forwarding logic
|
|
24
|
-
- `.claude/hooks/play-tts-local-wrapper.sh` - Local playback wrapper for HTTP method
|
|
25
|
-
- `docs/REMOTE_TTS_SETUP.md` - Complete setup guide
|
|
26
|
-
|
|
27
|
-
#### Enhanced Piper TTS Installation
|
|
28
|
-
- **PATH detection** - Automatically finds Piper in `~/.local/bin` even if not in PATH
|
|
29
|
-
- **Installation validation** - Verifies Piper installation success before proceeding
|
|
30
|
-
- **Better error handling** - Clear messages when Piper isn't found
|
|
31
|
-
- **Automatic voice download prompts** - Offers to download voice models after installation
|
|
32
|
-
|
|
33
|
-
### 🐛 Bug Fixes
|
|
34
|
-
|
|
35
|
-
#### BMAD Command Detection Fix
|
|
36
|
-
- **Fixed**: `/agent-vibes:bmad` command not appearing in Claude Code slash command list
|
|
37
|
-
- **Root Cause**: Missing YAML frontmatter and bash directive in command file
|
|
38
|
-
- **Impact**: BMAD voice integration features are now accessible
|
|
39
|
-
- **Added**:
|
|
40
|
-
- YAML frontmatter with description and argument-hint
|
|
41
|
-
- `!bash .claude/hooks/bmad-voice-manager.sh $ARGUMENTS` directive
|
|
42
|
-
- **File**: `.claude/commands/agent-vibes/bmad.md`
|
|
43
|
-
|
|
44
|
-
**What Was Broken:**
|
|
45
|
-
```bash
|
|
46
|
-
# Before: Command not found
|
|
47
|
-
/agent-vibes:bmad status
|
|
48
|
-
# Error: Unknown command
|
|
49
|
-
|
|
50
|
-
# After: Works perfectly
|
|
51
|
-
/agent-vibes:bmad status
|
|
52
|
-
# ✅ BMAD voice plugin: ENABLED
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 🔧 Technical Changes
|
|
56
|
-
|
|
57
|
-
#### Remote TTS Architecture
|
|
58
|
-
**Main Router (`play-tts.sh`):**
|
|
59
|
-
- Detects `$SSH_CONNECTION` environment variable
|
|
60
|
-
- Routes to `play-tts-remote.sh` when SSH session detected
|
|
61
|
-
- Falls back to local playback for non-SSH sessions
|
|
62
|
-
|
|
63
|
-
**Forwarding Methods:**
|
|
64
|
-
1. **OSC 52 (Clipboard)**:
|
|
65
|
-
- Encodes audio as base64
|
|
66
|
-
- Sends via OSC 52 escape sequence
|
|
67
|
-
- Requires terminal supporting OSC 52
|
|
68
|
-
- Best for: iTerm2, Windows Terminal, Hyper
|
|
69
|
-
|
|
70
|
-
2. **HTTP Server**:
|
|
71
|
-
- Starts Python HTTP server on port 8765
|
|
72
|
-
- Serves audio files over SSH tunnel
|
|
73
|
-
- Opens browser to play audio
|
|
74
|
-
- Best for: All environments with Python
|
|
75
|
-
|
|
76
|
-
3. **SSH Tunnel**:
|
|
77
|
-
- Uses SSH reverse tunnel (-R)
|
|
78
|
-
- Forwards audio files to local machine
|
|
79
|
-
- Requires SSH agent forwarding
|
|
80
|
-
- Best for: Advanced users
|
|
81
|
-
|
|
82
|
-
**Configuration:**
|
|
83
|
-
```bash
|
|
84
|
-
# Set in .claude/tts-remote-method.txt (project-local)
|
|
85
|
-
# or ~/.claude/tts-remote-method.txt (global)
|
|
86
|
-
echo "http" > .claude/tts-remote-method.txt
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
#### Piper Installer Improvements
|
|
90
|
-
**Modified: `.claude/hooks/piper-installer.sh`**
|
|
91
|
-
- Added `~/.local/bin/piper` detection
|
|
92
|
-
- Checks for execution permission
|
|
93
|
-
- Validates installation with `piper --version`
|
|
94
|
-
- Shows PATH instructions when Piper found but not in PATH
|
|
95
|
-
- Auto-detects pipx installation directory
|
|
96
|
-
|
|
97
|
-
**Modified: `src/installer.js`**
|
|
98
|
-
- Enhanced Piper installation workflow
|
|
99
|
-
- Added PATH detection before installation
|
|
100
|
-
- Shows helpful PATH export command when needed
|
|
101
|
-
- Validates Piper is accessible after installation
|
|
102
|
-
|
|
103
|
-
### 📊 Files Changed
|
|
104
|
-
|
|
105
|
-
**Added (3 files):**
|
|
106
|
-
- `.claude/hooks/play-tts-remote.sh` (81 lines)
|
|
107
|
-
- `.claude/hooks/play-tts-local-wrapper.sh` (44 lines)
|
|
108
|
-
- `docs/REMOTE_TTS_SETUP.md` (190 lines)
|
|
109
|
-
|
|
110
|
-
**Modified (5 files):**
|
|
111
|
-
- `.claude/commands/agent-vibes/bmad.md` (8 insertions)
|
|
112
|
-
- `.claude/hooks/play-tts.sh` (31 insertions)
|
|
113
|
-
- `.claude/hooks/play-tts-piper.sh` (12 lines changed)
|
|
114
|
-
- `.claude/hooks/piper-installer.sh` (58 insertions, 6 deletions)
|
|
115
|
-
- `src/installer.js` (107 insertions, 6 deletions)
|
|
116
|
-
|
|
117
|
-
**Total Changes:** 545 insertions, 13 deletions across 8 files
|
|
118
|
-
|
|
119
|
-
### 🎯 User Impact
|
|
120
|
-
|
|
121
|
-
**Before v2.0.12:**
|
|
122
|
-
- Remote/WSL users couldn't hear TTS audio
|
|
123
|
-
- `/agent-vibes:bmad` command was invisible
|
|
124
|
-
- Piper installation didn't validate PATH
|
|
125
|
-
- No remote audio forwarding options
|
|
126
|
-
|
|
127
|
-
**After v2.0.12:**
|
|
128
|
-
- Remote TTS works via SSH forwarding
|
|
129
|
-
- BMAD command fully functional
|
|
130
|
-
- Piper installer validates PATH and accessibility
|
|
131
|
-
- Multiple forwarding methods for different environments
|
|
132
|
-
- Complete setup guide for remote audio
|
|
133
|
-
|
|
134
|
-
### 💡 Usage Examples
|
|
135
|
-
|
|
136
|
-
#### Remote TTS Setup
|
|
137
|
-
```bash
|
|
138
|
-
# Quick setup for HTTP method (recommended)
|
|
139
|
-
echo "http" > .claude/tts-remote-method.txt
|
|
140
|
-
|
|
141
|
-
# On your LOCAL machine, create SSH tunnel:
|
|
142
|
-
ssh -R 8765:localhost:8765 user@remote-server
|
|
143
|
-
|
|
144
|
-
# Now TTS audio plays on your local machine!
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
#### BMAD Voice Integration
|
|
148
|
-
```bash
|
|
149
|
-
# Enable BMAD plugin
|
|
150
|
-
/agent-vibes:bmad enable
|
|
151
|
-
|
|
152
|
-
# Check status
|
|
153
|
-
/agent-vibes:bmad status
|
|
154
|
-
|
|
155
|
-
# Set custom voice for agent
|
|
156
|
-
/agent-vibes:bmad set pm "Aria"
|
|
157
|
-
|
|
158
|
-
# List all agent mappings
|
|
159
|
-
/agent-vibes:bmad list
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### 🔄 Migration Notes
|
|
163
|
-
|
|
164
|
-
**For Remote/WSL Users:**
|
|
165
|
-
1. Update AgentVibes: `npx agentvibes update`
|
|
166
|
-
2. Read setup guide: `docs/REMOTE_TTS_SETUP.md`
|
|
167
|
-
3. Choose forwarding method (HTTP recommended)
|
|
168
|
-
4. Configure SSH tunnel for chosen method
|
|
169
|
-
5. Enjoy TTS audio on local machine!
|
|
170
|
-
|
|
171
|
-
**For BMAD Users:**
|
|
172
|
-
- Update to v2.0.12 to access `/agent-vibes:bmad` command
|
|
173
|
-
- No configuration changes needed
|
|
174
|
-
- All existing BMAD voice mappings preserved
|
|
175
|
-
|
|
176
|
-
**For All Users:**
|
|
177
|
-
- No breaking changes
|
|
178
|
-
- Remote TTS is optional (auto-detected)
|
|
179
|
-
- Local TTS works exactly as before
|
|
180
|
-
|
|
181
|
-
### 📝 Commits in This Release
|
|
182
|
-
|
|
183
|
-
```
|
|
184
|
-
ef99bda feat: add remote TTS audio forwarding support
|
|
185
|
-
156feb7 feat: enhance Piper TTS installation and audio forwarding support
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### 🙏 Credits
|
|
189
|
-
|
|
190
|
-
- Thanks to WSL and remote server users who requested audio forwarding
|
|
191
|
-
- Special appreciation to BMAD users who reported the missing command
|
|
192
|
-
- Python HTTP server method inspired by similar remote audio solutions
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
|
197
|
-
|
|
198
|
-
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
199
|
-
|
|
200
|
-
---
|
|
201
|
-
|
|
202
3
|
## 📦 v2.0.10 - GitHub Star Reminder & Provider Fixes (2025-01-10)
|
|
203
4
|
|
|
204
5
|
### 🤖 AI Summary
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "agentvibes",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.13",
|
|
5
5
|
"description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code with multi-provider support.",
|
|
6
6
|
"homepage": "https://agentvibes.org",
|
|
7
7
|
"keywords": [
|
package/src/installer.js
CHANGED
|
@@ -136,93 +136,8 @@ async function install(options = {}) {
|
|
|
136
136
|
|
|
137
137
|
selectedProvider = provider;
|
|
138
138
|
|
|
139
|
-
// If Piper selected,
|
|
139
|
+
// If Piper selected, ask for voice storage location
|
|
140
140
|
if (selectedProvider === 'piper') {
|
|
141
|
-
// Check if Piper is installed
|
|
142
|
-
let piperInstalled = false;
|
|
143
|
-
try {
|
|
144
|
-
const { execSync } = await import('node:child_process');
|
|
145
|
-
// First check if piper is in PATH
|
|
146
|
-
execSync('which piper', { stdio: 'ignore' });
|
|
147
|
-
piperInstalled = true;
|
|
148
|
-
} catch {
|
|
149
|
-
// If not in PATH, check if it exists in pipx installation directory
|
|
150
|
-
const homeDir = process.env.HOME || process.env.USERPROFILE;
|
|
151
|
-
const pipxPiperPath = path.join(homeDir, '.local', 'bin', 'piper');
|
|
152
|
-
try {
|
|
153
|
-
await fs.access(pipxPiperPath, fs.constants.X_OK);
|
|
154
|
-
piperInstalled = true;
|
|
155
|
-
console.log(chalk.yellow('\n⚠️ Piper is installed but not in PATH'));
|
|
156
|
-
console.log(chalk.gray(` Location: ${pipxPiperPath}`));
|
|
157
|
-
console.log(chalk.gray(' Run this to add to PATH:'));
|
|
158
|
-
console.log(chalk.cyan(' export PATH="$HOME/.local/bin:$PATH"\n'));
|
|
159
|
-
} catch {
|
|
160
|
-
// Piper not found anywhere
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (!piperInstalled) {
|
|
165
|
-
console.log(chalk.yellow('\n⚠️ Piper TTS is not installed'));
|
|
166
|
-
console.log(chalk.gray(' Piper is a free, offline neural TTS system'));
|
|
167
|
-
console.log(chalk.gray(' It needs to be installed separately via pipx\n'));
|
|
168
|
-
|
|
169
|
-
const { installPiper } = await inquirer.prompt([
|
|
170
|
-
{
|
|
171
|
-
type: 'confirm',
|
|
172
|
-
name: 'installPiper',
|
|
173
|
-
message: 'Would you like to install Piper TTS now?',
|
|
174
|
-
default: true,
|
|
175
|
-
},
|
|
176
|
-
]);
|
|
177
|
-
|
|
178
|
-
if (installPiper) {
|
|
179
|
-
console.log(chalk.cyan('\n🚀 Installing Piper TTS...\n'));
|
|
180
|
-
|
|
181
|
-
// Check if piper-installer.sh exists in the source directory
|
|
182
|
-
const piperInstallerPath = path.join(__dirname, '..', '.claude', 'hooks', 'piper-installer.sh');
|
|
183
|
-
|
|
184
|
-
try {
|
|
185
|
-
await fs.access(piperInstallerPath);
|
|
186
|
-
|
|
187
|
-
// Run the Piper installer
|
|
188
|
-
const { execSync } = await import('node:child_process');
|
|
189
|
-
try {
|
|
190
|
-
execSync(`bash "${piperInstallerPath}"`, {
|
|
191
|
-
stdio: 'inherit',
|
|
192
|
-
cwd: path.dirname(piperInstallerPath)
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
// Verify installation succeeded
|
|
196
|
-
try {
|
|
197
|
-
execSync('which piper', { stdio: 'ignore' });
|
|
198
|
-
console.log(chalk.green('\n✓ Piper TTS installed successfully!\n'));
|
|
199
|
-
piperInstalled = true;
|
|
200
|
-
} catch {
|
|
201
|
-
console.log(chalk.yellow('\n⚠️ Piper installed but not found in PATH'));
|
|
202
|
-
console.log(chalk.gray(' You may need to restart your terminal\n'));
|
|
203
|
-
}
|
|
204
|
-
} catch (error) {
|
|
205
|
-
console.log(chalk.red('\n✗ Piper installation failed'));
|
|
206
|
-
console.log(chalk.gray(' You can try installing manually later with:'));
|
|
207
|
-
console.log(chalk.cyan(' .claude/hooks/piper-installer.sh\n'));
|
|
208
|
-
}
|
|
209
|
-
} catch {
|
|
210
|
-
console.log(chalk.yellow('\n⚠️ Piper installer script not found'));
|
|
211
|
-
console.log(chalk.gray(' The installer will be copied during installation'));
|
|
212
|
-
console.log(chalk.gray(' You can install Piper later with:'));
|
|
213
|
-
console.log(chalk.cyan(' .claude/hooks/piper-installer.sh\n'));
|
|
214
|
-
}
|
|
215
|
-
} else {
|
|
216
|
-
console.log(chalk.yellow('\n⚠️ Skipping Piper installation'));
|
|
217
|
-
console.log(chalk.gray(' You can install it later with:'));
|
|
218
|
-
console.log(chalk.cyan(' .claude/hooks/piper-installer.sh'));
|
|
219
|
-
console.log(chalk.gray(' Or switch to ElevenLabs with:'));
|
|
220
|
-
console.log(chalk.cyan(' /agent-vibes:provider switch elevenlabs\n'));
|
|
221
|
-
}
|
|
222
|
-
} else {
|
|
223
|
-
console.log(chalk.green('\n✓ Piper TTS is already installed\n'));
|
|
224
|
-
}
|
|
225
|
-
|
|
226
141
|
const homeDir = process.env.HOME || process.env.USERPROFILE;
|
|
227
142
|
const defaultPiperPath = path.join(homeDir, '.claude', 'piper-voices');
|
|
228
143
|
|
|
@@ -379,32 +294,6 @@ async function install(options = {}) {
|
|
|
379
294
|
} else {
|
|
380
295
|
selectedProvider = 'piper';
|
|
381
296
|
console.log(chalk.green('✓ Using Piper TTS (free option)\n'));
|
|
382
|
-
|
|
383
|
-
// Check if Piper is installed in auto mode
|
|
384
|
-
let piperInstalled = false;
|
|
385
|
-
const homeDir = process.env.HOME || process.env.USERPROFILE;
|
|
386
|
-
const pipxPiperPath = path.join(homeDir, '.local', 'bin', 'piper');
|
|
387
|
-
|
|
388
|
-
try {
|
|
389
|
-
const { execSync } = await import('node:child_process');
|
|
390
|
-
execSync('which piper', { stdio: 'ignore' });
|
|
391
|
-
piperInstalled = true;
|
|
392
|
-
console.log(chalk.green('✓ Piper TTS is already installed\n'));
|
|
393
|
-
} catch {
|
|
394
|
-
// Check if it exists in pipx installation directory
|
|
395
|
-
try {
|
|
396
|
-
await fs.access(pipxPiperPath, fs.constants.X_OK);
|
|
397
|
-
piperInstalled = true;
|
|
398
|
-
console.log(chalk.yellow('⚠️ Piper is installed but not in PATH'));
|
|
399
|
-
console.log(chalk.gray(` Location: ${pipxPiperPath}`));
|
|
400
|
-
console.log(chalk.gray(' Add to PATH with:'));
|
|
401
|
-
console.log(chalk.cyan(' export PATH="$HOME/.local/bin:$PATH"\n'));
|
|
402
|
-
} catch {
|
|
403
|
-
console.log(chalk.yellow('⚠️ Piper TTS is not installed'));
|
|
404
|
-
console.log(chalk.gray(' Install it after setup with:'));
|
|
405
|
-
console.log(chalk.cyan(' .claude/hooks/piper-installer.sh\n'));
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
297
|
}
|
|
409
298
|
}
|
|
410
299
|
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Local TTS Wrapper for AgentVibes
|
|
4
|
-
# This script runs on your local Windows WSL and receives audio from remote server
|
|
5
|
-
# Usage: ./play-tts-local-wrapper.sh "Text to speak"
|
|
6
|
-
|
|
7
|
-
# Configuration
|
|
8
|
-
REMOTE_HOST="${AGENTVIBES_REMOTE_HOST:-ubuntu-rdp}"
|
|
9
|
-
REMOTE_SCRIPT=".claude/hooks/play-tts-remote.sh"
|
|
10
|
-
|
|
11
|
-
# Get text from arguments or stdin
|
|
12
|
-
if [ $# -gt 0 ]; then
|
|
13
|
-
TEXT="$*"
|
|
14
|
-
else
|
|
15
|
-
TEXT=$(cat)
|
|
16
|
-
fi
|
|
17
|
-
|
|
18
|
-
# Function to play audio based on what's available
|
|
19
|
-
play_audio() {
|
|
20
|
-
# Try paplay first (WSLg PulseAudio)
|
|
21
|
-
if command -v paplay &> /dev/null; then
|
|
22
|
-
paplay --format=s16le --channels=1 --rate=22050
|
|
23
|
-
# Try aplay next
|
|
24
|
-
elif command -v aplay &> /dev/null; then
|
|
25
|
-
aplay -f S16_LE -c 1 -r 22050
|
|
26
|
-
# Try PowerShell audio playback as last resort
|
|
27
|
-
elif command -v powershell.exe &> /dev/null; then
|
|
28
|
-
# Save to temp file and play with Windows Media Player
|
|
29
|
-
TEMP_FILE="/tmp/tts_audio_$$.wav"
|
|
30
|
-
cat > "$TEMP_FILE"
|
|
31
|
-
powershell.exe -Command "& {(New-Object Media.SoundPlayer '$TEMP_FILE').PlaySync()}" 2>/dev/null
|
|
32
|
-
rm -f "$TEMP_FILE"
|
|
33
|
-
else
|
|
34
|
-
echo "Error: No audio playback method available" >&2
|
|
35
|
-
exit 1
|
|
36
|
-
fi
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
# SSH to remote, generate TTS, and pipe back for local playback
|
|
40
|
-
echo "$TEXT" | ssh "$REMOTE_HOST" "bash $REMOTE_SCRIPT" | play_audio
|
|
41
|
-
|
|
42
|
-
# Alternative method if you want to save the audio file
|
|
43
|
-
# echo "$TEXT" | ssh "$REMOTE_HOST" "bash $REMOTE_SCRIPT" > /tmp/tts_output.wav
|
|
44
|
-
# paplay /tmp/tts_output.wav
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Remote TTS Generator for AgentVibes
|
|
4
|
-
# This script generates TTS on the remote server and outputs audio data
|
|
5
|
-
# that can be piped through SSH for local playback
|
|
6
|
-
|
|
7
|
-
# Default voice model
|
|
8
|
-
DEFAULT_MODEL="$HOME/.claude/piper-voices/en_US-lessac-medium.onnx"
|
|
9
|
-
DEFAULT_VOICE="Aria"
|
|
10
|
-
|
|
11
|
-
# Get text from arguments or stdin
|
|
12
|
-
if [ $# -gt 0 ]; then
|
|
13
|
-
TEXT="$*"
|
|
14
|
-
else
|
|
15
|
-
TEXT=$(cat)
|
|
16
|
-
fi
|
|
17
|
-
|
|
18
|
-
# Check if we're in an SSH session or force remote mode
|
|
19
|
-
if [ -n "$SSH_CONNECTION" ] || [ -n "$SSH_CLIENT" ] || [ "$FORCE_REMOTE_TTS" = "true" ]; then
|
|
20
|
-
# We're on a remote server or forcing remote mode
|
|
21
|
-
|
|
22
|
-
# Check for piper
|
|
23
|
-
if command -v piper &> /dev/null; then
|
|
24
|
-
PIPER_CMD="piper"
|
|
25
|
-
elif [ -f "$HOME/.local/share/pipx/venvs/piper-tts/bin/piper" ]; then
|
|
26
|
-
PIPER_CMD="$HOME/.local/share/pipx/venvs/piper-tts/bin/piper"
|
|
27
|
-
elif [ -f "$HOME/bin/piper" ]; then
|
|
28
|
-
PIPER_CMD="$HOME/bin/piper"
|
|
29
|
-
else
|
|
30
|
-
# Fallback to espeak-ng if available
|
|
31
|
-
if command -v espeak-ng &> /dev/null; then
|
|
32
|
-
echo "$TEXT" | espeak-ng --stdout
|
|
33
|
-
exit 0
|
|
34
|
-
else
|
|
35
|
-
echo "Error: No TTS engine found (piper or espeak-ng)" >&2
|
|
36
|
-
exit 1
|
|
37
|
-
fi
|
|
38
|
-
fi
|
|
39
|
-
|
|
40
|
-
# Check for voice model
|
|
41
|
-
if [ -f "$DEFAULT_MODEL" ]; then
|
|
42
|
-
MODEL="$DEFAULT_MODEL"
|
|
43
|
-
elif [ -f "$HOME/.local/share/piper/voices/en_US-lessac-medium.onnx" ]; then
|
|
44
|
-
MODEL="$HOME/.local/share/piper/voices/en_US-lessac-medium.onnx"
|
|
45
|
-
else
|
|
46
|
-
echo "Error: No voice model found" >&2
|
|
47
|
-
exit 1
|
|
48
|
-
fi
|
|
49
|
-
|
|
50
|
-
# Generate TTS and output raw audio to stdout
|
|
51
|
-
echo "$TEXT" | "$PIPER_CMD" -m "$MODEL" -f - 2>/dev/null
|
|
52
|
-
|
|
53
|
-
else
|
|
54
|
-
# We're running locally in WSL - still generate TTS for testing
|
|
55
|
-
# Check for piper in WSL
|
|
56
|
-
if [ -f "$HOME/.local/share/pipx/venvs/piper-tts/bin/piper" ]; then
|
|
57
|
-
PIPER_CMD="$HOME/.local/share/pipx/venvs/piper-tts/bin/piper"
|
|
58
|
-
elif [ -f "$HOME/bin/piper" ]; then
|
|
59
|
-
PIPER_CMD="$HOME/bin/piper"
|
|
60
|
-
elif command -v pipx &> /dev/null; then
|
|
61
|
-
# Try using pipx run as fallback
|
|
62
|
-
echo "$TEXT" | pipx run piper-tts -m "$DEFAULT_MODEL" -f - 2>/dev/null
|
|
63
|
-
exit 0
|
|
64
|
-
else
|
|
65
|
-
echo "Error: No TTS engine found in local WSL" >&2
|
|
66
|
-
exit 1
|
|
67
|
-
fi
|
|
68
|
-
|
|
69
|
-
# Check for voice model
|
|
70
|
-
if [ -f "$DEFAULT_MODEL" ]; then
|
|
71
|
-
MODEL="$DEFAULT_MODEL"
|
|
72
|
-
elif [ -f "$HOME/.local/share/piper/voices/en_US-lessac-medium.onnx" ]; then
|
|
73
|
-
MODEL="$HOME/.local/share/piper/voices/en_US-lessac-medium.onnx"
|
|
74
|
-
else
|
|
75
|
-
echo "Error: No voice model found" >&2
|
|
76
|
-
exit 1
|
|
77
|
-
fi
|
|
78
|
-
|
|
79
|
-
# Generate TTS and output raw audio to stdout
|
|
80
|
-
echo "$TEXT" | "$PIPER_CMD" -m "$MODEL" -f - 2>/dev/null
|
|
81
|
-
fi
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Add a new custom ElevenLabs TTS voice
|
|
3
|
-
argument-hint: <voice_name> <voice_id>
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Add a new custom ElevenLabs TTS voice to your voice library.
|
|
7
|
-
|
|
8
|
-
Usage:
|
|
9
|
-
- `/agent-vibes:add "My Custom Voice" abc123xyz456789`
|
|
10
|
-
- `/agent-vibes:add Narrator KTPVrSVAEUSJRClDzBw7`
|
|
11
|
-
|
|
12
|
-
The voice ID should be a 15-30 character alphanumeric string from your ElevenLabs account.
|
|
13
|
-
|
|
14
|
-
To find your voice IDs:
|
|
15
|
-
1. Go to https://elevenlabs.io/app/voice-library
|
|
16
|
-
2. Click on a voice
|
|
17
|
-
3. Copy the voice ID from the URL or settings
|
|
18
|
-
|
|
19
|
-
After adding, you can switch to it with `/agent-vibes:switch "Voice Name"`
|
|
20
|
-
|
|
21
|
-
!bash .claude/hooks/voice-manager.sh add $ARGUMENTS
|