agentvibes 1.0.13 → 1.0.15
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 +132 -0
- package/.claude/hooks/bmad-voice-manager.sh +278 -0
- package/.claude/hooks/voices-config.sh +5 -0
- package/.claude/output-styles/agent-vibes.md +58 -0
- package/.claude/personalities/grandpa.md +1 -1
- package/.claude/plugins/bmad-voices-enabled.flag +0 -0
- package/.claude/plugins/bmad-voices.md +42 -0
- package/README.md +228 -201
- package/package.json +1 -1
- package/templates/output-styles/agent-vibes.md +58 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# /agent-vibes:bmad Command
|
|
2
|
+
|
|
3
|
+
Manage BMAD voice plugin integration for automatic voice assignment to BMAD agents.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/agent-vibes:bmad <subcommand> [arguments]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Subcommands
|
|
12
|
+
|
|
13
|
+
### `enable`
|
|
14
|
+
Enables automatic voice assignment for BMAD agents.
|
|
15
|
+
|
|
16
|
+
**Example:**
|
|
17
|
+
```
|
|
18
|
+
/agent-vibes:bmad enable
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Output:**
|
|
22
|
+
- Creates `.claude/plugins/bmad-voices-enabled.flag`
|
|
23
|
+
- Shows current agent voice mappings
|
|
24
|
+
- Confirms activation
|
|
25
|
+
|
|
26
|
+
### `disable`
|
|
27
|
+
Disables BMAD voice plugin (reverts to default AgentVibes behavior).
|
|
28
|
+
|
|
29
|
+
**Example:**
|
|
30
|
+
```
|
|
31
|
+
/agent-vibes:bmad disable
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Output:**
|
|
35
|
+
- Removes activation flag
|
|
36
|
+
- AgentVibes uses default voice settings
|
|
37
|
+
|
|
38
|
+
### `status`
|
|
39
|
+
Shows plugin status and current voice mappings.
|
|
40
|
+
|
|
41
|
+
**Example:**
|
|
42
|
+
```
|
|
43
|
+
/agent-vibes:bmad status
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Output:**
|
|
47
|
+
```
|
|
48
|
+
✅ BMAD voice plugin: ENABLED
|
|
49
|
+
|
|
50
|
+
📊 BMAD Agent Voice Mappings:
|
|
51
|
+
pm → Matthew Schmitz [professional]
|
|
52
|
+
dev → Jessica Anne Bogart [normal]
|
|
53
|
+
qa → Ralf Eisend [professional]
|
|
54
|
+
...
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### `list`
|
|
58
|
+
Lists all BMAD agents and their assigned voices.
|
|
59
|
+
|
|
60
|
+
**Example:**
|
|
61
|
+
```
|
|
62
|
+
/agent-vibes:bmad list
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### `set <agent-id> <voice> [personality]`
|
|
66
|
+
Quickly change voice for specific agent.
|
|
67
|
+
|
|
68
|
+
**Examples:**
|
|
69
|
+
```
|
|
70
|
+
/agent-vibes:bmad set pm "Aria"
|
|
71
|
+
/agent-vibes:bmad set dev "Cowboy Bob" sarcastic
|
|
72
|
+
/agent-vibes:bmad set qa "Northern Terry" professional
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Arguments:**
|
|
76
|
+
- `agent-id`: BMAD agent identifier (pm, dev, qa, architect, po, analyst, sm, ux-expert, bmad-master, bmad-orchestrator)
|
|
77
|
+
- `voice`: Valid AgentVibes voice name
|
|
78
|
+
- `personality` (optional): Personality to apply (default: normal)
|
|
79
|
+
|
|
80
|
+
### `edit`
|
|
81
|
+
Opens `.claude/plugins/bmad-voices.md` for manual editing.
|
|
82
|
+
|
|
83
|
+
**Example:**
|
|
84
|
+
```
|
|
85
|
+
/agent-vibes:bmad edit
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Usage:**
|
|
89
|
+
Edit the markdown table directly to change voice mappings.
|
|
90
|
+
|
|
91
|
+
## How It Works
|
|
92
|
+
|
|
93
|
+
1. **Plugin File**: `.claude/plugins/bmad-voices.md` contains voice mappings
|
|
94
|
+
2. **Activation Flag**: `.claude/plugins/bmad-voices-enabled.flag` enables/disables plugin
|
|
95
|
+
3. **Auto-Detection**: When a BMAD agent activates (e.g., `/BMad:agents:pm`), AgentVibes automatically:
|
|
96
|
+
- Detects the agent ID from the command
|
|
97
|
+
- Looks up voice mapping in plugin file
|
|
98
|
+
- Uses assigned voice for TTS acknowledgments/completions
|
|
99
|
+
|
|
100
|
+
## Available BMAD Agents
|
|
101
|
+
|
|
102
|
+
| Agent ID | Role | Default Voice |
|
|
103
|
+
|----------|------|---------------|
|
|
104
|
+
| pm | Product Manager | Matthew Schmitz |
|
|
105
|
+
| dev | Developer | Jessica Anne Bogart |
|
|
106
|
+
| qa | QA Engineer | Ralf Eisend |
|
|
107
|
+
| architect | Architect | Michael |
|
|
108
|
+
| po | Product Owner | Amy |
|
|
109
|
+
| analyst | Analyst | Lutz Laugh |
|
|
110
|
+
| sm | Scrum Master | Ms. Walker |
|
|
111
|
+
| ux-expert | UX Expert | Aria |
|
|
112
|
+
| bmad-master | BMAD Master | Aria |
|
|
113
|
+
| bmad-orchestrator | Orchestrator | Ms. Walker |
|
|
114
|
+
|
|
115
|
+
## Implementation Details
|
|
116
|
+
|
|
117
|
+
**For AgentVibes Developers:**
|
|
118
|
+
|
|
119
|
+
The plugin integrates with the Agent Vibes output style through bash hooks:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Check if BMAD agent is active
|
|
123
|
+
BMAD_AGENT_ID=$(echo "$COMMAND" | grep -oP '/BMad:agents:\K[a-z-]+')
|
|
124
|
+
|
|
125
|
+
# Get voice from plugin if enabled
|
|
126
|
+
if [[ -n "$BMAD_AGENT_ID" ]]; then
|
|
127
|
+
MAPPED_VOICE=$(.claude/hooks/bmad-voice-manager.sh get-voice "$BMAD_AGENT_ID")
|
|
128
|
+
if [[ -n "$MAPPED_VOICE" ]]; then
|
|
129
|
+
.claude/hooks/play-tts.sh "message" "$MAPPED_VOICE"
|
|
130
|
+
fi
|
|
131
|
+
fi
|
|
132
|
+
```
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
PLUGIN_DIR=".claude/plugins"
|
|
4
|
+
PLUGIN_FILE="$PLUGIN_DIR/bmad-voices.md"
|
|
5
|
+
ENABLED_FLAG="$PLUGIN_DIR/bmad-voices-enabled.flag"
|
|
6
|
+
|
|
7
|
+
# Auto-enable plugin if BMAD is detected
|
|
8
|
+
auto_enable_if_bmad_detected() {
|
|
9
|
+
# Check if BMAD is installed
|
|
10
|
+
if [[ -f ".bmad-core/install-manifest.yaml" ]] && [[ ! -f "$ENABLED_FLAG" ]]; then
|
|
11
|
+
# BMAD detected but plugin not enabled - enable it silently
|
|
12
|
+
mkdir -p "$PLUGIN_DIR"
|
|
13
|
+
touch "$ENABLED_FLAG"
|
|
14
|
+
return 0
|
|
15
|
+
fi
|
|
16
|
+
return 1
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
# Parse markdown table to get voice mapping
|
|
20
|
+
get_agent_voice() {
|
|
21
|
+
local agent_id="$1"
|
|
22
|
+
|
|
23
|
+
# Auto-enable if BMAD is detected
|
|
24
|
+
auto_enable_if_bmad_detected
|
|
25
|
+
|
|
26
|
+
if [[ ! -f "$ENABLED_FLAG" ]]; then
|
|
27
|
+
echo "" # Plugin disabled
|
|
28
|
+
return
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
if [[ ! -f "$PLUGIN_FILE" ]]; then
|
|
32
|
+
echo "" # Plugin file missing
|
|
33
|
+
return
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
# Extract voice from markdown table
|
|
37
|
+
local voice=$(grep "^| $agent_id " "$PLUGIN_FILE" | \
|
|
38
|
+
awk -F'|' '{print $4}' | \
|
|
39
|
+
sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
40
|
+
|
|
41
|
+
echo "$voice"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# Get personality for agent
|
|
45
|
+
get_agent_personality() {
|
|
46
|
+
local agent_id="$1"
|
|
47
|
+
|
|
48
|
+
if [[ ! -f "$PLUGIN_FILE" ]]; then
|
|
49
|
+
echo ""
|
|
50
|
+
return
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
local personality=$(grep "^| $agent_id " "$PLUGIN_FILE" | \
|
|
54
|
+
awk -F'|' '{print $5}' | \
|
|
55
|
+
sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
56
|
+
|
|
57
|
+
echo "$personality"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# Check if plugin is enabled
|
|
61
|
+
is_plugin_enabled() {
|
|
62
|
+
[[ -f "$ENABLED_FLAG" ]] && echo "true" || echo "false"
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# Enable plugin
|
|
66
|
+
enable_plugin() {
|
|
67
|
+
mkdir -p "$PLUGIN_DIR"
|
|
68
|
+
|
|
69
|
+
# Save current settings before enabling
|
|
70
|
+
BACKUP_FILE="$PLUGIN_DIR/.bmad-previous-settings"
|
|
71
|
+
|
|
72
|
+
# Save current voice
|
|
73
|
+
if [[ -f ".claude/tts-voice.txt" ]]; then
|
|
74
|
+
CURRENT_VOICE=$(cat .claude/tts-voice.txt 2>/dev/null)
|
|
75
|
+
elif [[ -f "$HOME/.claude/tts-voice.txt" ]]; then
|
|
76
|
+
CURRENT_VOICE=$(cat "$HOME/.claude/tts-voice.txt" 2>/dev/null)
|
|
77
|
+
else
|
|
78
|
+
CURRENT_VOICE="Aria"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Save current personality
|
|
82
|
+
if [[ -f ".claude/tts-personality.txt" ]]; then
|
|
83
|
+
CURRENT_PERSONALITY=$(cat .claude/tts-personality.txt 2>/dev/null)
|
|
84
|
+
elif [[ -f "$HOME/.claude/tts-personality.txt" ]]; then
|
|
85
|
+
CURRENT_PERSONALITY=$(cat "$HOME/.claude/tts-personality.txt" 2>/dev/null)
|
|
86
|
+
else
|
|
87
|
+
CURRENT_PERSONALITY="normal"
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
# Save current sentiment
|
|
91
|
+
if [[ -f ".claude/tts-sentiment.txt" ]]; then
|
|
92
|
+
CURRENT_SENTIMENT=$(cat .claude/tts-sentiment.txt 2>/dev/null)
|
|
93
|
+
elif [[ -f "$HOME/.claude/tts-sentiment.txt" ]]; then
|
|
94
|
+
CURRENT_SENTIMENT=$(cat "$HOME/.claude/tts-sentiment.txt" 2>/dev/null)
|
|
95
|
+
else
|
|
96
|
+
CURRENT_SENTIMENT=""
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
# Write backup
|
|
100
|
+
cat > "$BACKUP_FILE" <<EOF
|
|
101
|
+
VOICE=$CURRENT_VOICE
|
|
102
|
+
PERSONALITY=$CURRENT_PERSONALITY
|
|
103
|
+
SENTIMENT=$CURRENT_SENTIMENT
|
|
104
|
+
EOF
|
|
105
|
+
|
|
106
|
+
touch "$ENABLED_FLAG"
|
|
107
|
+
echo "✅ BMAD voice plugin enabled"
|
|
108
|
+
echo "💾 Previous settings backed up:"
|
|
109
|
+
echo " Voice: $CURRENT_VOICE"
|
|
110
|
+
echo " Personality: $CURRENT_PERSONALITY"
|
|
111
|
+
[[ -n "$CURRENT_SENTIMENT" ]] && echo " Sentiment: $CURRENT_SENTIMENT"
|
|
112
|
+
echo ""
|
|
113
|
+
list_mappings
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
# Disable plugin
|
|
117
|
+
disable_plugin() {
|
|
118
|
+
BACKUP_FILE="$PLUGIN_DIR/.bmad-previous-settings"
|
|
119
|
+
|
|
120
|
+
# Check if we have a backup to restore
|
|
121
|
+
if [[ -f "$BACKUP_FILE" ]]; then
|
|
122
|
+
source "$BACKUP_FILE"
|
|
123
|
+
|
|
124
|
+
echo "❌ BMAD voice plugin disabled"
|
|
125
|
+
echo "🔄 Restoring previous settings:"
|
|
126
|
+
echo " Voice: $VOICE"
|
|
127
|
+
echo " Personality: $PERSONALITY"
|
|
128
|
+
[[ -n "$SENTIMENT" ]] && echo " Sentiment: $SENTIMENT"
|
|
129
|
+
|
|
130
|
+
# Restore voice
|
|
131
|
+
if [[ -n "$VOICE" ]]; then
|
|
132
|
+
echo "$VOICE" > .claude/tts-voice.txt 2>/dev/null || echo "$VOICE" > "$HOME/.claude/tts-voice.txt"
|
|
133
|
+
fi
|
|
134
|
+
|
|
135
|
+
# Restore personality
|
|
136
|
+
if [[ -n "$PERSONALITY" ]] && [[ "$PERSONALITY" != "normal" ]]; then
|
|
137
|
+
echo "$PERSONALITY" > .claude/tts-personality.txt 2>/dev/null || echo "$PERSONALITY" > "$HOME/.claude/tts-personality.txt"
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
# Restore sentiment
|
|
141
|
+
if [[ -n "$SENTIMENT" ]]; then
|
|
142
|
+
echo "$SENTIMENT" > .claude/tts-sentiment.txt 2>/dev/null || echo "$SENTIMENT" > "$HOME/.claude/tts-sentiment.txt"
|
|
143
|
+
fi
|
|
144
|
+
|
|
145
|
+
# Clean up backup
|
|
146
|
+
rm -f "$BACKUP_FILE"
|
|
147
|
+
else
|
|
148
|
+
echo "❌ BMAD voice plugin disabled"
|
|
149
|
+
echo "⚠️ No previous settings found to restore"
|
|
150
|
+
echo "AgentVibes will use current voice/personality settings"
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
rm -f "$ENABLED_FLAG"
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
# List all mappings
|
|
157
|
+
list_mappings() {
|
|
158
|
+
if [[ ! -f "$PLUGIN_FILE" ]]; then
|
|
159
|
+
echo "❌ Plugin file not found: $PLUGIN_FILE"
|
|
160
|
+
return 1
|
|
161
|
+
fi
|
|
162
|
+
|
|
163
|
+
echo "📊 BMAD Agent Voice Mappings:"
|
|
164
|
+
echo ""
|
|
165
|
+
|
|
166
|
+
grep "^| " "$PLUGIN_FILE" | grep -v "Agent ID" | grep -v "^|---" | \
|
|
167
|
+
while IFS='|' read -r _ agent_id name voice personality _; do
|
|
168
|
+
agent_id=$(echo "$agent_id" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
169
|
+
name=$(echo "$name" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
170
|
+
voice=$(echo "$voice" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
171
|
+
personality=$(echo "$personality" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
172
|
+
|
|
173
|
+
[[ -n "$agent_id" ]] && echo " $agent_id → $voice [$personality]"
|
|
174
|
+
done
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
# Set voice for agent
|
|
178
|
+
set_agent_voice() {
|
|
179
|
+
local agent_id="$1"
|
|
180
|
+
local voice="$2"
|
|
181
|
+
local personality="${3:-normal}"
|
|
182
|
+
|
|
183
|
+
if [[ ! -f "$PLUGIN_FILE" ]]; then
|
|
184
|
+
echo "❌ Plugin file not found: $PLUGIN_FILE"
|
|
185
|
+
return 1
|
|
186
|
+
fi
|
|
187
|
+
|
|
188
|
+
# Check if agent exists
|
|
189
|
+
if ! grep -q "^| $agent_id " "$PLUGIN_FILE"; then
|
|
190
|
+
echo "❌ Agent '$agent_id' not found in plugin"
|
|
191
|
+
return 1
|
|
192
|
+
fi
|
|
193
|
+
|
|
194
|
+
# Update the voice and personality in the table
|
|
195
|
+
sed -i.bak "s/^| $agent_id |.*| .* | .* |$/| $agent_id | $(grep "^| $agent_id " "$PLUGIN_FILE" | awk -F'|' '{print $3}') | $voice | $personality |/" "$PLUGIN_FILE"
|
|
196
|
+
|
|
197
|
+
echo "✅ Updated $agent_id → $voice [$personality]"
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
# Show status
|
|
201
|
+
show_status() {
|
|
202
|
+
# Check for BMAD installation
|
|
203
|
+
local bmad_installed="false"
|
|
204
|
+
if [[ -f ".bmad-core/install-manifest.yaml" ]]; then
|
|
205
|
+
bmad_installed="true"
|
|
206
|
+
fi
|
|
207
|
+
|
|
208
|
+
if [[ $(is_plugin_enabled) == "true" ]]; then
|
|
209
|
+
echo "✅ BMAD voice plugin: ENABLED"
|
|
210
|
+
if [[ "$bmad_installed" == "true" ]]; then
|
|
211
|
+
echo "🔍 BMAD detected: Auto-enabled"
|
|
212
|
+
fi
|
|
213
|
+
else
|
|
214
|
+
echo "❌ BMAD voice plugin: DISABLED"
|
|
215
|
+
if [[ "$bmad_installed" == "true" ]]; then
|
|
216
|
+
echo "⚠️ BMAD detected but plugin disabled (enable with: /agent-vibes-bmad enable)"
|
|
217
|
+
fi
|
|
218
|
+
fi
|
|
219
|
+
echo ""
|
|
220
|
+
list_mappings
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
# Edit plugin file
|
|
224
|
+
edit_plugin() {
|
|
225
|
+
if [[ ! -f "$PLUGIN_FILE" ]]; then
|
|
226
|
+
echo "❌ Plugin file not found: $PLUGIN_FILE"
|
|
227
|
+
return 1
|
|
228
|
+
fi
|
|
229
|
+
|
|
230
|
+
echo "Opening $PLUGIN_FILE for editing..."
|
|
231
|
+
echo "Edit the markdown table to change voice mappings"
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
# Main command dispatcher
|
|
235
|
+
case "${1:-help}" in
|
|
236
|
+
enable)
|
|
237
|
+
enable_plugin
|
|
238
|
+
;;
|
|
239
|
+
disable)
|
|
240
|
+
disable_plugin
|
|
241
|
+
;;
|
|
242
|
+
status)
|
|
243
|
+
show_status
|
|
244
|
+
;;
|
|
245
|
+
list)
|
|
246
|
+
list_mappings
|
|
247
|
+
;;
|
|
248
|
+
set)
|
|
249
|
+
if [[ -z "$2" ]] || [[ -z "$3" ]]; then
|
|
250
|
+
echo "Usage: bmad-voice-manager.sh set <agent-id> <voice> [personality]"
|
|
251
|
+
exit 1
|
|
252
|
+
fi
|
|
253
|
+
set_agent_voice "$2" "$3" "$4"
|
|
254
|
+
;;
|
|
255
|
+
get-voice)
|
|
256
|
+
get_agent_voice "$2"
|
|
257
|
+
;;
|
|
258
|
+
get-personality)
|
|
259
|
+
get_agent_personality "$2"
|
|
260
|
+
;;
|
|
261
|
+
edit)
|
|
262
|
+
edit_plugin
|
|
263
|
+
;;
|
|
264
|
+
*)
|
|
265
|
+
echo "Usage: bmad-voice-manager.sh {enable|disable|status|list|set|get-voice|get-personality|edit}"
|
|
266
|
+
echo ""
|
|
267
|
+
echo "Commands:"
|
|
268
|
+
echo " enable Enable BMAD voice plugin"
|
|
269
|
+
echo " disable Disable BMAD voice plugin"
|
|
270
|
+
echo " status Show plugin status and mappings"
|
|
271
|
+
echo " list List all agent voice mappings"
|
|
272
|
+
echo " set <id> <voice> Set voice for agent"
|
|
273
|
+
echo " get-voice <id> Get voice for agent"
|
|
274
|
+
echo " get-personality <id> Get personality for agent"
|
|
275
|
+
echo " edit Edit plugin configuration"
|
|
276
|
+
exit 1
|
|
277
|
+
;;
|
|
278
|
+
esac
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
declare -A VOICES=(
|
|
6
6
|
["Amy"]="bhJUNIXWQQ94l8eI2VUf"
|
|
7
|
+
["Archer"]="L0Dsvb3SLTyegXwtm47J"
|
|
7
8
|
["Aria"]="TC0Zp7WVFzhA8zpTlRqV"
|
|
9
|
+
["Burt Reynolds"]="4YYIPFl9wE5c4L2eu2Gb"
|
|
8
10
|
["Cowboy Bob"]="KTPVrSVAEUSJRClDzBw7"
|
|
9
11
|
["Demon Monster"]="vfaqCOvlrKi4Zp7C2IAm"
|
|
10
12
|
["Dr. Von Fusion"]="yjJ45q8TVCrtMhEKurxY"
|
|
@@ -12,6 +14,7 @@ declare -A VOICES=(
|
|
|
12
14
|
["Grandpa Spuds Oxley"]="NOpBlnGInO9m6vDvFkFC"
|
|
13
15
|
["Grandpa Werthers"]="MKlLqCItoCkvdhrxgtLv"
|
|
14
16
|
["Jessica Anne Bogart"]="flHkNRp1BlvT73UL6gyz"
|
|
17
|
+
["Juniper"]="aMSt68OGf4xUZAnLpTU8"
|
|
15
18
|
["Lutz Laugh"]="9yzdeviXkFddZ4Oz8Mok"
|
|
16
19
|
["Matthew Schmitz"]="0SpgpJ4D3MpHCiWdyTg3"
|
|
17
20
|
["Michael"]="U1Vk2oyatMdYs096Ety7"
|
|
@@ -19,4 +22,6 @@ declare -A VOICES=(
|
|
|
19
22
|
["Northern Terry"]="wo6udizrrtpIxWGp2qJk"
|
|
20
23
|
["Pirate Marshal"]="PPzYpIqttlTYA83688JI"
|
|
21
24
|
["Ralf Eisend"]="A9evEp8yGjv4c3WsIKuY"
|
|
25
|
+
["Tiffany"]="6aDn1KB0hjpdcocrUkmq"
|
|
26
|
+
["Tom"]="DYkrAHD8iwork3YSUBbs"
|
|
22
27
|
)
|
|
@@ -115,6 +115,64 @@ You: "✅ That bug be walkin' the plank now, arr!"
|
|
|
115
115
|
[Bash: .claude/hooks/play-tts.sh "That bug be walkin' the plank now, arr!"]
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
+
## BMAD Plugin Integration
|
|
119
|
+
|
|
120
|
+
**Automatic voice switching for BMAD agents:**
|
|
121
|
+
|
|
122
|
+
When a BMAD agent is activated (e.g., `/BMad:agents:pm`), AgentVibes will automatically:
|
|
123
|
+
|
|
124
|
+
1. **Detect BMAD agent from command/context**
|
|
125
|
+
2. **Check if BMAD plugin is enabled** (`.claude/plugins/bmad-voices-enabled.flag`)
|
|
126
|
+
3. **Look up voice mapping** from `.claude/plugins/bmad-voices.md`
|
|
127
|
+
4. **Apply agent's assigned voice** for all TTS acknowledgments/completions
|
|
128
|
+
5. **Apply agent's personality** from the mapping (if specified)
|
|
129
|
+
|
|
130
|
+
**Implementation:**
|
|
131
|
+
```bash
|
|
132
|
+
# At the start of acknowledgment/completion:
|
|
133
|
+
# Try to detect BMAD agent ID from current context
|
|
134
|
+
BMAD_AGENT_ID=""
|
|
135
|
+
|
|
136
|
+
# Method 1: Check if we're in a BMAD agent command context
|
|
137
|
+
if [[ -f ".bmad-agent-context" ]]; then
|
|
138
|
+
BMAD_AGENT_ID=$(cat .bmad-agent-context 2>/dev/null)
|
|
139
|
+
fi
|
|
140
|
+
|
|
141
|
+
# Method 2: Parse from command history/context (fallback)
|
|
142
|
+
# Note: This detection happens automatically when BMAD agent activates
|
|
143
|
+
|
|
144
|
+
# If BMAD agent detected and plugin enabled, use mapped voice
|
|
145
|
+
if [[ -n "$BMAD_AGENT_ID" ]] && [[ -f ".claude/plugins/bmad-voices-enabled.flag" ]]; then
|
|
146
|
+
MAPPED_VOICE=$(.claude/hooks/bmad-voice-manager.sh get-voice "$BMAD_AGENT_ID")
|
|
147
|
+
MAPPED_PERSONALITY=$(.claude/hooks/bmad-voice-manager.sh get-personality "$BMAD_AGENT_ID")
|
|
148
|
+
|
|
149
|
+
if [[ -n "$MAPPED_VOICE" ]]; then
|
|
150
|
+
# Use BMAD agent's mapped voice and personality
|
|
151
|
+
if [[ -n "$MAPPED_PERSONALITY" ]] && [[ "$MAPPED_PERSONALITY" != "normal" ]]; then
|
|
152
|
+
# Read personality instructions from .claude/personalities/${MAPPED_PERSONALITY}.md
|
|
153
|
+
# Generate response in that personality style
|
|
154
|
+
fi
|
|
155
|
+
.claude/hooks/play-tts.sh "message" "$MAPPED_VOICE"
|
|
156
|
+
# Exit early - don't use default personality system
|
|
157
|
+
return
|
|
158
|
+
fi
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
# If no BMAD agent or plugin disabled, use standard personality/sentiment system
|
|
162
|
+
# ... continue with normal sentiment/personality logic ...
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**BMAD Agent Context Tracking:**
|
|
166
|
+
- When a BMAD agent activates, write agent ID to `.bmad-agent-context`
|
|
167
|
+
- When agent exits, remove the file
|
|
168
|
+
- This allows AgentVibes to know which BMAD agent is active
|
|
169
|
+
|
|
170
|
+
**Voice Priority (in order):**
|
|
171
|
+
1. BMAD plugin voice (if agent active and plugin enabled)
|
|
172
|
+
2. Sentiment mode (if set)
|
|
173
|
+
3. Personality mode (if set)
|
|
174
|
+
4. Default voice
|
|
175
|
+
|
|
118
176
|
## Critical Rules
|
|
119
177
|
|
|
120
178
|
1. **ALWAYS use Bash tool** to execute play-tts.sh
|
|
File without changes
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
plugin: bmad-voices
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
enabled: true
|
|
5
|
+
description: Voice mappings for BMAD agents
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# BMAD Voice Plugin
|
|
9
|
+
|
|
10
|
+
This plugin automatically assigns voices to BMAD agents based on their role.
|
|
11
|
+
|
|
12
|
+
## Agent Voice Mappings
|
|
13
|
+
|
|
14
|
+
| Agent ID | Agent Name | Voice | Personality |
|
|
15
|
+
|----------|------------|-------|-------------|
|
|
16
|
+
| pm | John (Product Manager) | Jessica Anne Bogart | professional |
|
|
17
|
+
| dev | James (Developer) | Matthew Schmitz | normal |
|
|
18
|
+
| qa | Quinn (QA) | Burt Reynolds | professional |
|
|
19
|
+
| architect | Winston (Architect) | Michael | normal |
|
|
20
|
+
| po | Product Owner | Tiffany | professional |
|
|
21
|
+
| analyst | Analyst | Ralf Eisend | normal |
|
|
22
|
+
| sm | Scrum Master | Ms. Walker | professional |
|
|
23
|
+
| ux-expert | UX Expert | Aria | normal |
|
|
24
|
+
| bmad-master | BMAD Master | Archer | zen |
|
|
25
|
+
| bmad-orchestrator | Orchestrator | Tom | professional |
|
|
26
|
+
|
|
27
|
+
## How to Edit
|
|
28
|
+
|
|
29
|
+
Simply edit the table above to change voice mappings. The format is:
|
|
30
|
+
- **Agent ID**: Must match BMAD's `agent.id` field
|
|
31
|
+
- **Agent Name**: Display name (for reference only)
|
|
32
|
+
- **Voice**: Must be a valid AgentVibes voice name
|
|
33
|
+
- **Personality**: Optional personality to apply (or "normal" for none)
|
|
34
|
+
|
|
35
|
+
## Commands
|
|
36
|
+
|
|
37
|
+
- `/agent-vibes:bmad enable` - Enable BMAD voice plugin
|
|
38
|
+
- `/agent-vibes:bmad disable` - Disable BMAD voice plugin
|
|
39
|
+
- `/agent-vibes:bmad status` - Show plugin status
|
|
40
|
+
- `/agent-vibes:bmad edit` - Open this file for editing
|
|
41
|
+
- `/agent-vibes:bmad list` - List all agent voice mappings
|
|
42
|
+
- `/agent-vibes:bmad set <agent-id> <voice> [personality]` - Set voice for specific agent
|
package/README.md
CHANGED
|
@@ -13,9 +13,36 @@
|
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
+
## 📑 Table of Contents
|
|
17
|
+
|
|
18
|
+
### Getting Started
|
|
19
|
+
- [🚀 Quick Start](#-quick-start) - Install in 3 steps
|
|
20
|
+
- [✨ What is AgentVibes?](#-what-is-agentvibes) - Overview & key features
|
|
21
|
+
- [📰 Latest Release](#-latest-release) - What's new
|
|
22
|
+
|
|
23
|
+
### Core Features
|
|
24
|
+
- [🎤 Commands Reference](#-commands-reference) - All available commands
|
|
25
|
+
- [🎭 Personalities vs Sentiments](#-personalities-vs-sentiments) - Two systems explained
|
|
26
|
+
- [🗣️ Voice Library](#️-voice-library) - 17+ professional voices
|
|
27
|
+
- [🔌 BMAD Plugin](#-bmad-plugin) - Auto voice switching for BMAD agents
|
|
28
|
+
|
|
29
|
+
### Advanced Topics
|
|
30
|
+
- [📦 Installation Structure](#-installation-structure) - What gets installed
|
|
31
|
+
- [💡 Usage Examples](#-usage-examples) - Common workflows
|
|
32
|
+
- [🔧 Advanced Features](#-advanced-features) - Custom voices & personalities
|
|
33
|
+
- [💰 Pricing & Usage](#-pricing--usage) - ElevenLabs costs & monitoring
|
|
34
|
+
- [❓ Troubleshooting](#-troubleshooting) - Common issues & fixes
|
|
35
|
+
|
|
36
|
+
### Additional Resources
|
|
37
|
+
- [🔄 Updating](#-updating) - Keep AgentVibes current
|
|
38
|
+
- [🙏 Credits](#-credits) - Acknowledgments
|
|
39
|
+
- [🤝 Contributing](#-contributing) - Show support
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
16
43
|
## 📰 Latest Release
|
|
17
44
|
|
|
18
|
-
**[v1.0.13 -
|
|
45
|
+
**[v1.0.13 - Release Notes](https://github.com/paulpreibisch/AgentVibes/releases/tag/v1.0.13)** 🐛
|
|
19
46
|
|
|
20
47
|
Critical bug fixes for update command and personality system, plus new dry humor personality and comprehensive voice mapping tests.
|
|
21
48
|
|
|
@@ -34,11 +61,14 @@ Imagine Claude speaking to you with different voices and personalities as you co
|
|
|
34
61
|
- 🎙️ **17+ Professional AI Voices** - Character voices, accents, and unique personalities
|
|
35
62
|
- 🎭 **19 Built-in Personalities** - From sarcastic to flirty, pirate to dry humor
|
|
36
63
|
- 💬 **Sentiment System** - Apply personality styles to ANY voice
|
|
64
|
+
- 🔌 **BMAD Plugin** - Auto voice switching for BMAD agents
|
|
37
65
|
- 🔊 **Live Audio Feedback** - Hear task acknowledgments and completions
|
|
38
66
|
- 🎵 **Voice Preview** - Listen before you choose
|
|
39
67
|
- 🔄 **Audio Replay** - Replay the last 10 TTS messages
|
|
40
68
|
- ⚡ **One-Command Install** - Get started in seconds
|
|
41
69
|
|
|
70
|
+
[↑ Back to top](#-table-of-contents)
|
|
71
|
+
|
|
42
72
|
---
|
|
43
73
|
|
|
44
74
|
## 🚀 Quick Start
|
|
@@ -89,9 +119,11 @@ source ~/.bashrc
|
|
|
89
119
|
|
|
90
120
|
**That's it! Claude will now speak to you!** 🎉
|
|
91
121
|
|
|
122
|
+
[↑ Back to top](#-table-of-contents)
|
|
123
|
+
|
|
92
124
|
---
|
|
93
125
|
|
|
94
|
-
## 🎤
|
|
126
|
+
## 🎤 Commands Reference
|
|
95
127
|
|
|
96
128
|
All commands are prefixed with `/agent-vibes:`
|
|
97
129
|
|
|
@@ -128,11 +160,18 @@ All commands are prefixed with `/agent-vibes:`
|
|
|
128
160
|
| `/agent-vibes:sentiment get` | Show current sentiment |
|
|
129
161
|
| `/agent-vibes:sentiment clear` | Remove sentiment |
|
|
130
162
|
|
|
131
|
-
###
|
|
163
|
+
### BMAD Plugin Commands
|
|
132
164
|
|
|
133
165
|
| Command | Description |
|
|
134
166
|
|---------|-------------|
|
|
135
|
-
| `/agent-vibes
|
|
167
|
+
| `/agent-vibes-bmad status` | Show BMAD plugin status & mappings |
|
|
168
|
+
| `/agent-vibes-bmad enable` | Enable automatic voice switching |
|
|
169
|
+
| `/agent-vibes-bmad disable` | Disable plugin (restores previous settings) |
|
|
170
|
+
| `/agent-vibes-bmad list` | List all BMAD agent voice mappings |
|
|
171
|
+
| `/agent-vibes-bmad set <agent> <voice> [personality]` | Update agent mapping |
|
|
172
|
+
| `/agent-vibes-bmad edit` | Edit configuration file |
|
|
173
|
+
|
|
174
|
+
[↑ Back to top](#-table-of-contents)
|
|
136
175
|
|
|
137
176
|
---
|
|
138
177
|
|
|
@@ -147,13 +186,14 @@ All commands are prefixed with `/agent-vibes:`
|
|
|
147
186
|
| **sarcastic** | Jessica Anne Bogart | Dry wit and cutting observations |
|
|
148
187
|
| **flirty** | Jessica Anne Bogart | Playful charm and compliments |
|
|
149
188
|
| **pirate** | Pirate Marshal | Seafaring swagger - "Arr matey!" |
|
|
150
|
-
| **grandpa** | Grandpa
|
|
151
|
-
| **
|
|
189
|
+
| **grandpa** | Grandpa Spuds Oxley | Rambling nostalgic stories |
|
|
190
|
+
| **dry-humor** | Aria | British wit and deadpan delivery |
|
|
191
|
+
| **angry** | Demon Monster | Frustrated and loud |
|
|
152
192
|
| **robot** | Dr. Von Fusion | Mechanical and precise |
|
|
153
193
|
| **zen** | Aria | Peaceful and mindful |
|
|
154
|
-
| **professional** |
|
|
194
|
+
| **professional** | Matthew Schmitz | Formal and corporate |
|
|
155
195
|
|
|
156
|
-
**All
|
|
196
|
+
**All 19 personalities:** sarcastic, flirty, pirate, grandpa, dry-humor, angry, robot, zen, professional, dramatic, millennial, surfer-dude, sassy, poetic, moody, funny, annoying, crass, normal, random
|
|
157
197
|
|
|
158
198
|
```bash
|
|
159
199
|
/agent-vibes:personality sarcastic
|
|
@@ -184,64 +224,114 @@ All commands are prefixed with `/agent-vibes:`
|
|
|
184
224
|
/agent-vibes:switch Aria --sentiment sarcastic
|
|
185
225
|
```
|
|
186
226
|
|
|
227
|
+
[↑ Back to top](#-table-of-contents)
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 🗣️ Voice Library
|
|
232
|
+
|
|
233
|
+
AgentVibes includes **22 unique ElevenLabs voices:**
|
|
234
|
+
|
|
235
|
+
| Voice | Character | Best For |
|
|
236
|
+
|-------|-----------|----------|
|
|
237
|
+
| [Aria](https://elevenlabs.io/voice-library/aria-professional-narration/TC0Zp7WVFzhA8zpTlRqV) | Clear professional | Default, all-purpose |
|
|
238
|
+
| [Archer](https://elevenlabs.io/voice-library/archer/L0Dsvb3SLTyegXwtm47J) | Authoritative, commanding | Leadership, orchestration |
|
|
239
|
+
| [Jessica Anne Bogart](https://elevenlabs.io/voice-library/jessica-anne-bogart/flHkNRp1BlvT73UL6gyz) | Wickedly eloquent | Sarcastic, flirty |
|
|
240
|
+
| [Pirate Marshal](https://elevenlabs.io/voice-library/pirate-marshal/PPzYpIqttlTYA83688JI) | Authentic pirate | Pirate personality |
|
|
241
|
+
| [Grandpa Spuds Oxley](https://elevenlabs.io/voice-library/grandpa-spuds-oxley/NOpBlnGInO9m6vDvFkFC) | Wise elder | Grandpa personality |
|
|
242
|
+
| [Matthew Schmitz](https://elevenlabs.io/voice-library/matthew-schmitz/0SpgpJ4D3MpHCiWdyTg3) | Deep baritone | Professional |
|
|
243
|
+
| [Cowboy Bob](https://elevenlabs.io/voice-library/cowboy-bob/KTPVrSVAEUSJRClDzBw7) | Western charm | Casual, friendly |
|
|
244
|
+
| [Northern Terry](https://elevenlabs.io/voice-library/northern-terry/wo6udizrrtpIxWGp2qJk) | Eccentric British | Quirky responses |
|
|
245
|
+
| [Ms. Walker](https://elevenlabs.io/voice-library/ms-walker/DLsHlh26Ugcm6ELvS0qi) | Warm teacher | Professional |
|
|
246
|
+
| [Dr. Von Fusion](https://elevenlabs.io/voice-library/dr-von-fusion/yjJ45q8TVCrtMhEKurxY) | Mad scientist | Robot personality |
|
|
247
|
+
| [Michael](https://elevenlabs.io/voice-library/michael/U1Vk2oyatMdYs096Ety7) | British urban | Professional |
|
|
248
|
+
| [Ralf Eisend](https://elevenlabs.io/voice-library/ralf-eisend/A9evEp8yGjv4c3WsIKuY) | International | Multi-cultural |
|
|
249
|
+
| [Amy](https://elevenlabs.io/voice-library/amy/bhJUNIXWQQ94l8eI2VUf) | Chinese accent | Diverse |
|
|
250
|
+
| [Lutz Laugh](https://elevenlabs.io/voice-library/lutz-laugh/9yzdeviXkFddZ4Oz8Mok) | Jovial | Funny |
|
|
251
|
+
| [Burt Reynolds](https://elevenlabs.io/voice-library/burt-reynolds/4YYIPFl9wE5c4L2eu2Gb) | Smooth baritone | Confident, charismatic |
|
|
252
|
+
| [Juniper](https://elevenlabs.io/voice-library/juniper/aMSt68OGf4xUZAnLpTU8) | Warm, friendly | Stakeholder relations |
|
|
253
|
+
| [Tiffany](https://elevenlabs.io/voice-library/tiffany/6aDn1KB0hjpdcocrUkmq) | Professional, clear | Product ownership, leadership |
|
|
254
|
+
| [Tom](https://elevenlabs.io/voice-library/tom/DYkrAHD8iwork3YSUBbs) | Professional, organized | Orchestration, coordination |
|
|
255
|
+
| [Demon Monster](https://elevenlabs.io/voice-library/demon-monster/vfaqCOvlrKi4Zp7C2IAm) | Deep and spooky | Dramatic |
|
|
256
|
+
|
|
257
|
+
💡 **Tip:** Click voice names to hear samples on ElevenLabs!
|
|
258
|
+
|
|
259
|
+
[↑ Back to top](#-table-of-contents)
|
|
260
|
+
|
|
187
261
|
---
|
|
188
262
|
|
|
189
|
-
##
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
|
198
|
-
|
|
199
|
-
|
|
|
200
|
-
|
|
|
201
|
-
|
|
|
202
|
-
|
|
|
203
|
-
|
|
|
204
|
-
|
|
|
205
|
-
|
|
|
206
|
-
|
|
|
207
|
-
|
|
|
208
|
-
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
263
|
+
## 🔌 BMAD Plugin
|
|
264
|
+
|
|
265
|
+
**Automatically switch voices when using BMAD agents!**
|
|
266
|
+
|
|
267
|
+
The BMAD plugin detects when you activate a BMAD agent (e.g., `/BMad:agents:pm`) and automatically uses the assigned voice for that role.
|
|
268
|
+
|
|
269
|
+
### Default BMAD Voice Mappings
|
|
270
|
+
|
|
271
|
+
| Agent | Role | Voice | Personality |
|
|
272
|
+
|-------|------|-------|-------------|
|
|
273
|
+
| **pm** | Product Manager | Jessica Anne Bogart | professional |
|
|
274
|
+
| **dev** | Developer | Matthew Schmitz | normal |
|
|
275
|
+
| **qa** | QA Engineer | Burt Reynolds | professional |
|
|
276
|
+
| **architect** | Architect | Michael | normal |
|
|
277
|
+
| **po** | Product Owner | Tiffany | professional |
|
|
278
|
+
| **analyst** | Analyst | Ralf Eisend | normal |
|
|
279
|
+
| **sm** | Scrum Master | Ms. Walker | professional |
|
|
280
|
+
| **ux-expert** | UX Expert | Aria | normal |
|
|
281
|
+
| **bmad-master** | BMAD Master | Archer | zen |
|
|
282
|
+
| **bmad-orchestrator** | Orchestrator | Tom | professional |
|
|
283
|
+
|
|
284
|
+
### Plugin Management
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
# Check status (auto-enables if BMAD detected)
|
|
288
|
+
/agent-vibes-bmad status
|
|
289
|
+
|
|
290
|
+
# Disable plugin
|
|
291
|
+
/agent-vibes-bmad disable
|
|
292
|
+
|
|
293
|
+
# Re-enable plugin
|
|
294
|
+
/agent-vibes-bmad enable
|
|
295
|
+
|
|
296
|
+
# Customize agent voice
|
|
297
|
+
/agent-vibes-bmad set pm "Aria" zen
|
|
298
|
+
|
|
299
|
+
# Edit configuration
|
|
300
|
+
/agent-vibes-bmad edit
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### How It Works
|
|
304
|
+
|
|
305
|
+
1. **Auto-Detection**: Plugin checks for `.bmad-core/install-manifest.yaml`
|
|
306
|
+
2. **Auto-Enable**: Enables automatically when BMAD is detected
|
|
307
|
+
3. **Settings Preservation**: Saves your previous voice/personality when enabling
|
|
308
|
+
4. **Restore on Disable**: Restores previous settings when disabling
|
|
309
|
+
|
|
310
|
+
[↑ Back to top](#-table-of-contents)
|
|
213
311
|
|
|
214
312
|
---
|
|
215
313
|
|
|
216
|
-
## 📦
|
|
314
|
+
## 📦 Installation Structure
|
|
217
315
|
|
|
218
316
|
```
|
|
219
317
|
your-project/
|
|
220
318
|
└── .claude/
|
|
221
319
|
├── commands/
|
|
222
|
-
│
|
|
223
|
-
│
|
|
224
|
-
│ ├── agent-vibes:list.md
|
|
225
|
-
│ ├── agent-vibes:switch.md
|
|
226
|
-
│ ├── agent-vibes:whoami.md
|
|
227
|
-
│ ├── agent-vibes:personality.md
|
|
228
|
-
│ ├── agent-vibes:sentiment.md
|
|
229
|
-
│ └── ... (12 total)
|
|
320
|
+
│ ├── agent-vibes/ # Voice commands
|
|
321
|
+
│ └── agent-vibes-bmad.md # BMAD plugin command
|
|
230
322
|
├── hooks/
|
|
231
323
|
│ ├── voice-manager.sh # Voice switching
|
|
232
324
|
│ ├── personality-manager.sh # Personality system
|
|
233
325
|
│ ├── sentiment-manager.sh # Sentiment system
|
|
326
|
+
│ ├── bmad-voice-manager.sh # BMAD plugin
|
|
234
327
|
│ ├── play-tts.sh # TTS playback
|
|
235
328
|
│ └── voices-config.sh # Voice ID mappings
|
|
236
|
-
├── personalities/ #
|
|
237
|
-
|
|
238
|
-
│
|
|
239
|
-
│ ├── pirate.md
|
|
240
|
-
│ └── ... (15 more)
|
|
329
|
+
├── personalities/ # 19 personality templates
|
|
330
|
+
├── plugins/
|
|
331
|
+
│ └── bmad-voices.md # BMAD voice mappings
|
|
241
332
|
├── output-styles/
|
|
242
333
|
│ └── agent-vibes.md # Voice output style
|
|
243
334
|
└── audio/ # Generated TTS files
|
|
244
|
-
└── tts-*.mp3 # Last 10 kept
|
|
245
335
|
```
|
|
246
336
|
|
|
247
337
|
### Voice Settings Storage
|
|
@@ -252,20 +342,7 @@ your-project/
|
|
|
252
342
|
|
|
253
343
|
Settings persist across Claude Code sessions!
|
|
254
344
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
## 🔧 CLI Management
|
|
258
|
-
|
|
259
|
-
```bash
|
|
260
|
-
# Check installation status
|
|
261
|
-
node ~/claude/AgentVibes/bin/agent-vibes status
|
|
262
|
-
|
|
263
|
-
# Update to latest version
|
|
264
|
-
node ~/claude/AgentVibes/bin/agent-vibes update
|
|
265
|
-
|
|
266
|
-
# Install with options
|
|
267
|
-
node ~/claude/AgentVibes/bin/agent-vibes install --yes --directory ~/my-project
|
|
268
|
-
```
|
|
345
|
+
[↑ Back to top](#-table-of-contents)
|
|
269
346
|
|
|
270
347
|
---
|
|
271
348
|
|
|
@@ -285,8 +362,8 @@ node ~/claude/AgentVibes/bin/agent-vibes install --yes --directory ~/my-project
|
|
|
285
362
|
```bash
|
|
286
363
|
/agent-vibes:personality sarcastic # Sarcastic + Jessica Anne Bogart
|
|
287
364
|
/agent-vibes:personality pirate # Pirate + Pirate Marshal
|
|
288
|
-
/agent-vibes:personality
|
|
289
|
-
/agent-vibes:personality list # See all
|
|
365
|
+
/agent-vibes:personality dry-humor # British wit + Aria
|
|
366
|
+
/agent-vibes:personality list # See all 19 personalities
|
|
290
367
|
```
|
|
291
368
|
|
|
292
369
|
### Use Sentiments
|
|
@@ -312,50 +389,11 @@ node ~/claude/AgentVibes/bin/agent-vibes install --yes --directory ~/my-project
|
|
|
312
389
|
/agent-vibes:preview last 5 # Hear last 5
|
|
313
390
|
```
|
|
314
391
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
## 🌟 Best Voice/Personality Combos
|
|
318
|
-
|
|
319
|
-
- **Debugging**: Sarcastic + Jessica Anne Bogart 😏
|
|
320
|
-
- **Learning**: Professional + Michael 📚
|
|
321
|
-
- **Fun Coding**: Pirate + Pirate Marshal 🏴☠️
|
|
322
|
-
- **Late Night**: Zen + Aria 🧘
|
|
323
|
-
- **Pair Programming**: Grandpa + Grandpa Werthers 👴
|
|
392
|
+
[↑ Back to top](#-table-of-contents)
|
|
324
393
|
|
|
325
394
|
---
|
|
326
395
|
|
|
327
|
-
##
|
|
328
|
-
|
|
329
|
-
### No Audio Playing?
|
|
330
|
-
|
|
331
|
-
1. Check API key: `echo $ELEVENLABS_API_KEY`
|
|
332
|
-
2. Check output style: `/output-style agent-vibes`
|
|
333
|
-
3. Test playback: `/agent-vibes:sample Aria`
|
|
334
|
-
|
|
335
|
-
### Commands Not Found?
|
|
336
|
-
|
|
337
|
-
```bash
|
|
338
|
-
# Verify installation
|
|
339
|
-
node ~/claude/AgentVibes/bin/agent-vibes status
|
|
340
|
-
|
|
341
|
-
# Reinstall
|
|
342
|
-
node ~/claude/AgentVibes/bin/agent-vibes install --yes
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
### Wrong Voice Playing?
|
|
346
|
-
|
|
347
|
-
```bash
|
|
348
|
-
# Check current setup
|
|
349
|
-
/agent-vibes:whoami
|
|
350
|
-
|
|
351
|
-
# Reset if needed
|
|
352
|
-
/agent-vibes:personality reset
|
|
353
|
-
/agent-vibes:sentiment clear
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
---
|
|
357
|
-
|
|
358
|
-
## 🔧 Advanced Usage
|
|
396
|
+
## 🔧 Advanced Features
|
|
359
397
|
|
|
360
398
|
### Custom Personalities
|
|
361
399
|
|
|
@@ -388,7 +426,7 @@ node ~/claude/AgentVibes/bin/agent-vibes install --yes
|
|
|
388
426
|
/agent-vibes:add "My Voice" abc123xyz789
|
|
389
427
|
```
|
|
390
428
|
|
|
391
|
-
### Use in Output Styles
|
|
429
|
+
### Use in Custom Output Styles
|
|
392
430
|
|
|
393
431
|
```markdown
|
|
394
432
|
I'll do the task
|
|
@@ -400,133 +438,118 @@ I'll do the task
|
|
|
400
438
|
[Bash: .claude/hooks/play-tts.sh "Complete" "Cowboy Bob"]
|
|
401
439
|
```
|
|
402
440
|
|
|
441
|
+
[↑ Back to top](#-table-of-contents)
|
|
442
|
+
|
|
403
443
|
---
|
|
404
444
|
|
|
405
|
-
##
|
|
445
|
+
## 💰 Pricing & Usage
|
|
406
446
|
|
|
407
|
-
###
|
|
408
|
-
```bash
|
|
409
|
-
npx agentvibes update --yes
|
|
410
|
-
```
|
|
447
|
+
### ElevenLabs Pricing (2025)
|
|
411
448
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
449
|
+
| Plan | Monthly Cost | Characters/Month | Best For |
|
|
450
|
+
|------|-------------|------------------|----------|
|
|
451
|
+
| **Free** | $0 | 10,000 | Trying it out, light use |
|
|
452
|
+
| **Starter** | $5 | 30,000 | Casual coding (1-2 hrs/day) |
|
|
453
|
+
| **Creator** | $22 | 100,000 | Regular coding (4-5 hrs/day) |
|
|
454
|
+
| **Pro** | $99 | 500,000 | Heavy daily use (8+ hrs/day) |
|
|
455
|
+
| **Scale** | $330 | 2,000,000 | Professional/teams |
|
|
417
456
|
|
|
418
|
-
###
|
|
419
|
-
```bash
|
|
420
|
-
cd ~/AgentVibes
|
|
421
|
-
git pull origin master
|
|
422
|
-
npm install
|
|
423
|
-
node bin/agent-vibes update --yes
|
|
424
|
-
```
|
|
457
|
+
### Monitor Your Usage
|
|
425
458
|
|
|
426
|
-
|
|
427
|
-
- ✅ Update all slash commands
|
|
428
|
-
- ✅ Update TTS scripts
|
|
429
|
-
- ✅ Add new personalities (keeps your custom ones)
|
|
430
|
-
- ✅ Update output styles
|
|
431
|
-
- ⚠️ Preserves your voice settings and configurations
|
|
459
|
+
**Track consumption in real-time:**
|
|
432
460
|
|
|
433
|
-
|
|
461
|
+
1. **Go to ElevenLabs Dashboard**: https://elevenlabs.io/app/usage
|
|
462
|
+
2. **Monitor**: Credits used, character breakdown, billing period
|
|
463
|
+
3. **Set alerts**: Check usage weekly, watch for spikes
|
|
434
464
|
|
|
435
|
-
|
|
465
|
+
### Tips to Manage Costs
|
|
436
466
|
|
|
437
|
-
|
|
467
|
+
1. **Use selectively**: Disable TTS when doing quick edits
|
|
468
|
+
```bash
|
|
469
|
+
/output-style default # Turn off voice
|
|
470
|
+
/output-style agent-vibes # Turn back on
|
|
471
|
+
```
|
|
438
472
|
|
|
439
|
-
|
|
473
|
+
2. **Monitor analytics**: Check usage dashboard regularly
|
|
440
474
|
|
|
441
|
-
|
|
475
|
+
3. **Shorter messages**: "Normal" personality = shortest messages
|
|
442
476
|
|
|
443
|
-
**
|
|
444
|
-
- ~50-100 TTS messages
|
|
445
|
-
- ~2,500-5,000 characters/day
|
|
446
|
-
- ✅ **Free tier works** (10,000 chars/month)
|
|
477
|
+
4. **Upgrade proactively**: If coding 8+ hrs/day, start with Creator plan
|
|
447
478
|
|
|
448
|
-
|
|
449
|
-
- ~200-300 TTS messages
|
|
450
|
-
- ~10,000-15,000 characters/day
|
|
451
|
-
- ⚠️ **Starter plan needed** ($5/month, 30,000 chars)
|
|
479
|
+
### Useful Links
|
|
452
480
|
|
|
453
|
-
**
|
|
454
|
-
-
|
|
455
|
-
-
|
|
456
|
-
- ⚠️ **Creator/Pro plan needed** ($22-$99/month)
|
|
457
|
-
- 💡 **May need to upgrade mid-month** if coding intensively
|
|
481
|
+
- 📊 **Usage Dashboard**: https://elevenlabs.io/app/usage
|
|
482
|
+
- 💳 **Pricing Page**: https://elevenlabs.io/pricing
|
|
483
|
+
- 🆘 **Support**: https://help.elevenlabs.io/
|
|
458
484
|
|
|
459
|
-
|
|
485
|
+
[↑ Back to top](#-table-of-contents)
|
|
460
486
|
|
|
461
|
-
|
|
462
|
-
|------|-------------|------------------|----------|
|
|
463
|
-
| **Free** | $0 | 10,000 | Trying it out, light use |
|
|
464
|
-
| **Starter** | $5 | 30,000 | Casual coding |
|
|
465
|
-
| **Creator** | $22 | 100,000 | Regular coding |
|
|
466
|
-
| **Pro** | $99 | 500,000 | Heavy daily use |
|
|
467
|
-
| **Scale** | $330 | 2,000,000 | Professional/teams |
|
|
487
|
+
---
|
|
468
488
|
|
|
469
|
-
|
|
470
|
-
- Creator: $0.30 per 1,000 characters
|
|
471
|
-
- Pro: $0.24 per 1,000 characters
|
|
472
|
-
- Scale: $0.18 per 1,000 characters
|
|
489
|
+
## ❓ Troubleshooting
|
|
473
490
|
|
|
474
|
-
###
|
|
491
|
+
### No Audio Playing?
|
|
475
492
|
|
|
476
|
-
|
|
493
|
+
1. Check API key: `echo $ELEVENLABS_API_KEY`
|
|
494
|
+
2. Check output style: `/output-style agent-vibes`
|
|
495
|
+
3. Test playback: `/agent-vibes:sample Aria`
|
|
477
496
|
|
|
478
|
-
|
|
479
|
-
- Visit: https://elevenlabs.io/app/usage
|
|
480
|
-
- Click "My Account" → "Usage Analytics"
|
|
481
|
-
- Or: "Developers" → "Usage" tab
|
|
497
|
+
### Commands Not Found?
|
|
482
498
|
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
499
|
+
```bash
|
|
500
|
+
# Verify installation
|
|
501
|
+
node ~/claude/AgentVibes/bin/agent-vibes status
|
|
502
|
+
|
|
503
|
+
# Reinstall
|
|
504
|
+
node ~/claude/AgentVibes/bin/agent-vibes install --yes
|
|
505
|
+
```
|
|
488
506
|
|
|
489
|
-
|
|
490
|
-
- Check your usage weekly
|
|
491
|
-
- Watch for unexpected spikes
|
|
492
|
-
- Upgrade before hitting limits
|
|
507
|
+
### Wrong Voice Playing?
|
|
493
508
|
|
|
494
|
-
|
|
509
|
+
```bash
|
|
510
|
+
# Check current setup
|
|
511
|
+
/agent-vibes:whoami
|
|
495
512
|
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
```
|
|
513
|
+
# Reset if needed
|
|
514
|
+
/agent-vibes:personality reset
|
|
515
|
+
/agent-vibes:sentiment clear
|
|
516
|
+
```
|
|
501
517
|
|
|
502
|
-
|
|
518
|
+
[↑ Back to top](#-table-of-contents)
|
|
503
519
|
|
|
504
|
-
|
|
505
|
-
- "Normal" personality = shortest messages
|
|
506
|
-
- "Sarcastic/Grandpa" = longer messages
|
|
520
|
+
---
|
|
507
521
|
|
|
508
|
-
|
|
522
|
+
## 🔄 Updating
|
|
509
523
|
|
|
510
|
-
###
|
|
524
|
+
### If installed via npx:
|
|
525
|
+
```bash
|
|
526
|
+
npx agentvibes update --yes
|
|
527
|
+
```
|
|
511
528
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
529
|
+
### If installed globally via npm:
|
|
530
|
+
```bash
|
|
531
|
+
npm update -g agentvibes
|
|
532
|
+
agentvibes update --yes
|
|
533
|
+
```
|
|
516
534
|
|
|
517
|
-
###
|
|
535
|
+
### If installed from source:
|
|
536
|
+
```bash
|
|
537
|
+
cd ~/AgentVibes
|
|
538
|
+
git pull origin master
|
|
539
|
+
npm install
|
|
540
|
+
node bin/agent-vibes update --yes
|
|
541
|
+
```
|
|
518
542
|
|
|
519
|
-
|
|
520
|
-
-
|
|
521
|
-
-
|
|
522
|
-
-
|
|
543
|
+
The update command will:
|
|
544
|
+
- ✅ Update all slash commands
|
|
545
|
+
- ✅ Update TTS scripts and plugins
|
|
546
|
+
- ✅ Add new personalities (keeps your custom ones)
|
|
547
|
+
- ✅ Update output styles
|
|
548
|
+
- ⚠️ Preserves your voice settings and configurations
|
|
523
549
|
|
|
524
|
-
|
|
525
|
-
- **Pro plan ($99/month)** minimum
|
|
526
|
-
- Or **Creator plan + overages** (~$140/month)
|
|
527
|
-
- Possibly **two Pro subscriptions** if coding intensively 6-7 days/week
|
|
550
|
+
[↑ Back to top](#-table-of-contents)
|
|
528
551
|
|
|
529
|
-
|
|
552
|
+
---
|
|
530
553
|
|
|
531
554
|
## 🙏 Credits
|
|
532
555
|
|
|
@@ -542,11 +565,13 @@ If you're coding **8 hours/day with Claude Code**, expect to use:
|
|
|
542
565
|
- Licensed under Apache 2.0
|
|
543
566
|
|
|
544
567
|
**Inspired by:**
|
|
545
|
-
- 💡 [Claude Code Hooks Mastery](https://github.com/disler/claude-code-hooks-mastery) by [@disler](https://github.com/disler)
|
|
568
|
+
- 💡 [Claude Code Hooks Mastery](https://github.com/disler/claude-code-hooks-mastery) by [@disler](https://github.com/disler)
|
|
569
|
+
|
|
570
|
+
[↑ Back to top](#-table-of-contents)
|
|
546
571
|
|
|
547
572
|
---
|
|
548
573
|
|
|
549
|
-
## 🤝
|
|
574
|
+
## 🤝 Contributing
|
|
550
575
|
|
|
551
576
|
If AgentVibes makes your coding more fun:
|
|
552
577
|
- ⭐ **Star this repo** on GitHub
|
|
@@ -557,3 +582,5 @@ If AgentVibes makes your coding more fun:
|
|
|
557
582
|
---
|
|
558
583
|
|
|
559
584
|
**Ready to give Claude a voice? Install now and code with personality! 🎤✨**
|
|
585
|
+
|
|
586
|
+
[↑ Back to top](#-table-of-contents)
|
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": "1.0.
|
|
4
|
+
"version": "1.0.15",
|
|
5
5
|
"description": "Beautiful ElevenLabs TTS voice commands for Claude Code - Add professional narration to your AI coding sessions",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"elevenlabs",
|
|
@@ -115,6 +115,64 @@ You: "✅ That bug be walkin' the plank now, arr!"
|
|
|
115
115
|
[Bash: .claude/hooks/play-tts.sh "That bug be walkin' the plank now, arr!"]
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
+
## BMAD Plugin Integration
|
|
119
|
+
|
|
120
|
+
**Automatic voice switching for BMAD agents:**
|
|
121
|
+
|
|
122
|
+
When a BMAD agent is activated (e.g., `/BMad:agents:pm`), AgentVibes will automatically:
|
|
123
|
+
|
|
124
|
+
1. **Detect BMAD agent from command/context**
|
|
125
|
+
2. **Check if BMAD plugin is enabled** (`.claude/plugins/bmad-voices-enabled.flag`)
|
|
126
|
+
3. **Look up voice mapping** from `.claude/plugins/bmad-voices.md`
|
|
127
|
+
4. **Apply agent's assigned voice** for all TTS acknowledgments/completions
|
|
128
|
+
5. **Apply agent's personality** from the mapping (if specified)
|
|
129
|
+
|
|
130
|
+
**Implementation:**
|
|
131
|
+
```bash
|
|
132
|
+
# At the start of acknowledgment/completion:
|
|
133
|
+
# Try to detect BMAD agent ID from current context
|
|
134
|
+
BMAD_AGENT_ID=""
|
|
135
|
+
|
|
136
|
+
# Method 1: Check if we're in a BMAD agent command context
|
|
137
|
+
if [[ -f ".bmad-agent-context" ]]; then
|
|
138
|
+
BMAD_AGENT_ID=$(cat .bmad-agent-context 2>/dev/null)
|
|
139
|
+
fi
|
|
140
|
+
|
|
141
|
+
# Method 2: Parse from command history/context (fallback)
|
|
142
|
+
# Note: This detection happens automatically when BMAD agent activates
|
|
143
|
+
|
|
144
|
+
# If BMAD agent detected and plugin enabled, use mapped voice
|
|
145
|
+
if [[ -n "$BMAD_AGENT_ID" ]] && [[ -f ".claude/plugins/bmad-voices-enabled.flag" ]]; then
|
|
146
|
+
MAPPED_VOICE=$(.claude/hooks/bmad-voice-manager.sh get-voice "$BMAD_AGENT_ID")
|
|
147
|
+
MAPPED_PERSONALITY=$(.claude/hooks/bmad-voice-manager.sh get-personality "$BMAD_AGENT_ID")
|
|
148
|
+
|
|
149
|
+
if [[ -n "$MAPPED_VOICE" ]]; then
|
|
150
|
+
# Use BMAD agent's mapped voice and personality
|
|
151
|
+
if [[ -n "$MAPPED_PERSONALITY" ]] && [[ "$MAPPED_PERSONALITY" != "normal" ]]; then
|
|
152
|
+
# Read personality instructions from .claude/personalities/${MAPPED_PERSONALITY}.md
|
|
153
|
+
# Generate response in that personality style
|
|
154
|
+
fi
|
|
155
|
+
.claude/hooks/play-tts.sh "message" "$MAPPED_VOICE"
|
|
156
|
+
# Exit early - don't use default personality system
|
|
157
|
+
return
|
|
158
|
+
fi
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
# If no BMAD agent or plugin disabled, use standard personality/sentiment system
|
|
162
|
+
# ... continue with normal sentiment/personality logic ...
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**BMAD Agent Context Tracking:**
|
|
166
|
+
- When a BMAD agent activates, write agent ID to `.bmad-agent-context`
|
|
167
|
+
- When agent exits, remove the file
|
|
168
|
+
- This allows AgentVibes to know which BMAD agent is active
|
|
169
|
+
|
|
170
|
+
**Voice Priority (in order):**
|
|
171
|
+
1. BMAD plugin voice (if agent active and plugin enabled)
|
|
172
|
+
2. Sentiment mode (if set)
|
|
173
|
+
3. Personality mode (if set)
|
|
174
|
+
4. Default voice
|
|
175
|
+
|
|
118
176
|
## Critical Rules
|
|
119
177
|
|
|
120
178
|
1. **ALWAYS use Bash tool** to execute play-tts.sh
|