agentvibes 2.0.17 → 2.0.18
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/activation-instructions +54 -0
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/bmad-tts-injector.sh +33 -4
- package/.claude/hooks/bmad-voice-manager.sh +146 -10
- package/.claude/hooks/check-output-style.sh +60 -8
- package/.claude/hooks/github-star-reminder.sh +67 -7
- package/.claude/hooks/language-manager.sh +34 -2
- package/.claude/hooks/learn-manager.sh +34 -2
- package/.claude/hooks/personality-manager.sh +34 -1
- package/.claude/hooks/piper-download-voices.sh +131 -9
- package/.claude/hooks/piper-installer.sh +38 -4
- package/.claude/hooks/piper-voice-manager.sh +102 -36
- package/.claude/hooks/play-tts-elevenlabs.sh +32 -6
- package/.claude/hooks/play-tts-piper.sh +79 -18
- package/.claude/hooks/play-tts.sh +34 -3
- package/.claude/hooks/provider-commands.sh +36 -1
- package/.claude/hooks/provider-manager.sh +32 -1
- package/.claude/hooks/replay-target-audio.sh +34 -3
- package/.claude/hooks/sentiment-manager.sh +39 -1
- package/.claude/hooks/speed-manager.sh +36 -2
- package/.claude/hooks/voice-manager.sh +85 -6
- package/.claude/hooks/voices-config.sh +39 -2
- package/README.md +77 -137
- package/RELEASE_NOTES.md +269 -0
- package/RELEASE_NOTES_v2.0.17_DRAFT.md +650 -0
- package/docs/ai-optimized-documentation-standards.md +78 -4
- package/docs/bryce-beattie-voice-licensing.md +131 -0
- package/docs/commands.md +21 -1
- package/docs/mcp-setup.md +1 -6
- package/github-star-reminder.txt +1 -0
- package/mcp-server/WINDOWS_SETUP.md +182 -199
- package/mcp-server/docs/elevenlabs-setup.md +213 -0
- package/mcp-server/docs/troubleshooting-audio.md +316 -0
- package/mcp-server/server.py +38 -4
- package/mcp-server/test_server.py +38 -3
- package/package.json +1 -1
- package/test/helpers/test-helper.bash +31 -4
- package/test/unit/personality-manager.bats +22 -6
- package/test/unit/play-tts.bats +21 -3
- package/test/unit/provider-manager.bats +508 -0
- package/test/unit/speed-manager.bats +436 -0
- package/test/unit/voice-manager.bats +4 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# BMAD Agent Activation Instructions
|
|
2
|
+
|
|
3
|
+
When a BMAD agent activates, follow these steps EXACTLY:
|
|
4
|
+
|
|
5
|
+
## STEP 3.5a: Create BMAD Context File (CRITICAL)
|
|
6
|
+
|
|
7
|
+
**IMMEDIATELY after agent identification, create the context file:**
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
echo "$AGENT_ID" > .bmad-agent-context
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Where `$AGENT_ID` is one of:
|
|
14
|
+
- `pm` (Product Manager)
|
|
15
|
+
- `dev` (Developer)
|
|
16
|
+
- `qa` (QA)
|
|
17
|
+
- `architect` (Architect)
|
|
18
|
+
- `po` (Product Owner)
|
|
19
|
+
- `analyst` (Analyst)
|
|
20
|
+
- `sm` (Scrum Master)
|
|
21
|
+
- `ux-expert` (UX Expert)
|
|
22
|
+
- `bmad-master` (BMAD Master)
|
|
23
|
+
- `bmad-orchestrator` (Orchestrator)
|
|
24
|
+
|
|
25
|
+
**Example:**
|
|
26
|
+
```bash
|
|
27
|
+
# For Product Manager agent
|
|
28
|
+
echo "pm" > .bmad-agent-context
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This file allows AgentVibes to:
|
|
32
|
+
1. Detect which BMAD agent is active
|
|
33
|
+
2. Look up the correct voice mapping
|
|
34
|
+
3. Automatically speak questions using the agent's assigned voice
|
|
35
|
+
|
|
36
|
+
## STEP 10: Clean Up on Exit
|
|
37
|
+
|
|
38
|
+
**Before exiting the agent, remove the context file:**
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
rm -f .bmad-agent-context
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
This ensures voice switching only happens when an agent is active.
|
|
45
|
+
|
|
46
|
+
## Why This Matters
|
|
47
|
+
|
|
48
|
+
Without the `.bmad-agent-context` file:
|
|
49
|
+
- AgentVibes cannot detect which agent is active
|
|
50
|
+
- Questions won't be spoken automatically
|
|
51
|
+
- Voice switching won't work
|
|
52
|
+
- The BMAD voice plugin becomes non-functional
|
|
53
|
+
|
|
54
|
+
**This is MANDATORY for BMAD voice integration to work!**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
20251017
|
|
@@ -1,9 +1,38 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
3
|
+
# File: .claude/hooks/bmad-tts-injector.sh
|
|
4
|
+
#
|
|
5
|
+
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
+
# Website: https://agentvibes.org
|
|
7
|
+
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
+
#
|
|
9
|
+
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
+
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
+
#
|
|
12
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
# you may not use this file except in compliance with the License.
|
|
14
|
+
# You may obtain a copy of the License at
|
|
15
|
+
#
|
|
16
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
#
|
|
18
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
# See the License for the specific language governing permissions and
|
|
22
|
+
# limitations under the License.
|
|
23
|
+
#
|
|
24
|
+
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
+
# express or implied. Use at your own risk. See the Apache License for details.
|
|
26
|
+
#
|
|
27
|
+
# ---
|
|
28
|
+
#
|
|
29
|
+
# @fileoverview BMAD TTS Injection Manager - Patches BMAD agents for TTS integration
|
|
30
|
+
# @context Automatically modifies BMAD agent YAML files to include AgentVibes TTS capabilities
|
|
31
|
+
# @architecture Injects TTS hooks into activation-instructions and core_principles sections
|
|
32
|
+
# @dependencies bmad-core/agents/*.md files, play-tts.sh, bmad-voice-manager.sh
|
|
33
|
+
# @entrypoints Called via bmad-tts-injector.sh {enable|disable|status|restore}
|
|
34
|
+
# @patterns File patching with backup, provider-aware voice mapping, injection markers for idempotency
|
|
35
|
+
# @related play-tts.sh, bmad-voice-manager.sh, .bmad-core/agents/*.md
|
|
7
36
|
#
|
|
8
37
|
|
|
9
38
|
set -e # Exit on error
|
|
@@ -1,10 +1,62 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# File: .claude/hooks/bmad-voice-manager.sh
|
|
4
|
+
#
|
|
5
|
+
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
+
# Website: https://agentvibes.org
|
|
7
|
+
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
+
#
|
|
9
|
+
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
+
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
+
#
|
|
12
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
# you may not use this file except in compliance with the License.
|
|
14
|
+
# You may obtain a copy of the License at
|
|
15
|
+
#
|
|
16
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
#
|
|
18
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
# See the License for the specific language governing permissions and
|
|
22
|
+
# limitations under the License.
|
|
23
|
+
#
|
|
24
|
+
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
+
# express or implied, including but not limited to the warranties of
|
|
26
|
+
# merchantability, fitness for a particular purpose and noninfringement.
|
|
27
|
+
# In no event shall the authors or copyright holders be liable for any claim,
|
|
28
|
+
# damages or other liability, whether in an action of contract, tort or
|
|
29
|
+
# otherwise, arising from, out of or in connection with the software or the
|
|
30
|
+
# use or other dealings in the software.
|
|
31
|
+
#
|
|
32
|
+
# ---
|
|
33
|
+
#
|
|
34
|
+
# @fileoverview BMAD Voice Plugin Manager - Maps BMAD agents to unique TTS voices
|
|
35
|
+
# @context Enables each BMAD agent to have its own distinct voice for multi-agent sessions
|
|
36
|
+
# @architecture Markdown table-based voice mapping with enable/disable flag, auto-detection of BMAD
|
|
37
|
+
# @dependencies .claude/plugins/bmad-voices.md (voice mappings), bmad-tts-injector.sh, .bmad-core/ (BMAD installation)
|
|
38
|
+
# @entrypoints Called by /agent-vibes:bmad commands, auto-enabled on BMAD detection
|
|
39
|
+
# @patterns Plugin architecture, auto-enable on dependency detection, state backup/restore on toggle
|
|
40
|
+
# @related bmad-tts-injector.sh, .claude/plugins/bmad-voices.md, .bmad-agent-context file
|
|
2
41
|
|
|
3
42
|
PLUGIN_DIR=".claude/plugins"
|
|
4
43
|
PLUGIN_FILE="$PLUGIN_DIR/bmad-voices.md"
|
|
5
44
|
ENABLED_FLAG="$PLUGIN_DIR/bmad-voices-enabled.flag"
|
|
6
45
|
|
|
7
|
-
# Auto-enable
|
|
46
|
+
# AI NOTE: Auto-enable pattern - When BMAD is detected via .bmad-core/install-manifest.yaml,
|
|
47
|
+
# automatically enable the voice plugin to provide seamless multi-agent voice support.
|
|
48
|
+
# This avoids requiring manual plugin activation after BMAD installation.
|
|
49
|
+
|
|
50
|
+
# @function auto_enable_if_bmad_detected
|
|
51
|
+
# @intent Automatically enable BMAD voice plugin when BMAD framework is detected
|
|
52
|
+
# @why Provide seamless integration - users shouldn't need to manually enable voice mapping
|
|
53
|
+
# @param None
|
|
54
|
+
# @returns None
|
|
55
|
+
# @exitcode 0=auto-enabled, 1=not enabled (already enabled or BMAD not detected)
|
|
56
|
+
# @sideeffects Creates enabled flag file, creates plugin directory
|
|
57
|
+
# @edgecases Only auto-enables if plugin not already enabled, silent operation
|
|
58
|
+
# @calledby get_agent_voice
|
|
59
|
+
# @calls mkdir, touch
|
|
8
60
|
auto_enable_if_bmad_detected() {
|
|
9
61
|
# Check if BMAD is installed
|
|
10
62
|
if [[ -f ".bmad-core/install-manifest.yaml" ]] && [[ ! -f "$ENABLED_FLAG" ]]; then
|
|
@@ -16,7 +68,16 @@ auto_enable_if_bmad_detected() {
|
|
|
16
68
|
return 1
|
|
17
69
|
}
|
|
18
70
|
|
|
19
|
-
#
|
|
71
|
+
# @function get_agent_voice
|
|
72
|
+
# @intent Retrieve TTS voice assigned to specific BMAD agent
|
|
73
|
+
# @why Each BMAD agent needs unique voice for multi-agent conversation differentiation
|
|
74
|
+
# @param $1 {string} agent_id - BMAD agent identifier (pm, dev, qa, architect, etc.)
|
|
75
|
+
# @returns Echoes voice name to stdout, empty string if plugin disabled or agent not found
|
|
76
|
+
# @exitcode Always 0
|
|
77
|
+
# @sideeffects May auto-enable plugin if BMAD detected
|
|
78
|
+
# @edgecases Returns empty string if plugin disabled/missing, parses markdown table syntax
|
|
79
|
+
# @calledby bmad-tts-injector.sh, play-tts.sh when BMAD agent is active
|
|
80
|
+
# @calls auto_enable_if_bmad_detected, grep, awk, sed
|
|
20
81
|
get_agent_voice() {
|
|
21
82
|
local agent_id="$1"
|
|
22
83
|
|
|
@@ -41,7 +102,16 @@ get_agent_voice() {
|
|
|
41
102
|
echo "$voice"
|
|
42
103
|
}
|
|
43
104
|
|
|
44
|
-
#
|
|
105
|
+
# @function get_agent_personality
|
|
106
|
+
# @intent Retrieve TTS personality assigned to specific BMAD agent
|
|
107
|
+
# @why Agents may have distinct speaking styles (friendly, professional, energetic, etc.)
|
|
108
|
+
# @param $1 {string} agent_id - BMAD agent identifier
|
|
109
|
+
# @returns Echoes personality name to stdout, empty string if not found
|
|
110
|
+
# @exitcode Always 0
|
|
111
|
+
# @sideeffects None
|
|
112
|
+
# @edgecases Returns empty string if plugin file missing, parses column 5 of markdown table
|
|
113
|
+
# @calledby bmad-tts-injector.sh for personality-aware voice synthesis
|
|
114
|
+
# @calls grep, awk, sed
|
|
45
115
|
get_agent_personality() {
|
|
46
116
|
local agent_id="$1"
|
|
47
117
|
|
|
@@ -57,12 +127,31 @@ get_agent_personality() {
|
|
|
57
127
|
echo "$personality"
|
|
58
128
|
}
|
|
59
129
|
|
|
60
|
-
#
|
|
130
|
+
# @function is_plugin_enabled
|
|
131
|
+
# @intent Check if BMAD voice plugin is currently enabled
|
|
132
|
+
# @why Allow conditional logic based on plugin state
|
|
133
|
+
# @param None
|
|
134
|
+
# @returns Echoes "true" or "false" to stdout
|
|
135
|
+
# @exitcode Always 0
|
|
136
|
+
# @sideeffects None
|
|
137
|
+
# @edgecases None
|
|
138
|
+
# @calledby show_status, enable_plugin, disable_plugin
|
|
139
|
+
# @calls None (file existence check)
|
|
61
140
|
is_plugin_enabled() {
|
|
62
141
|
[[ -f "$ENABLED_FLAG" ]] && echo "true" || echo "false"
|
|
63
142
|
}
|
|
64
143
|
|
|
65
|
-
#
|
|
144
|
+
# @function enable_plugin
|
|
145
|
+
# @intent Enable BMAD voice plugin and backup current voice settings
|
|
146
|
+
# @why Allow users to switch to per-agent voices while preserving original configuration
|
|
147
|
+
# @param None
|
|
148
|
+
# @returns None
|
|
149
|
+
# @exitcode Always 0
|
|
150
|
+
# @sideeffects Creates flag file, backs up current voice/personality/sentiment to .bmad-previous-settings
|
|
151
|
+
# @sideeffects Creates activation-instructions file for BMAD agents, calls bmad-tts-injector.sh
|
|
152
|
+
# @edgecases Handles missing settings files gracefully with defaults
|
|
153
|
+
# @calledby Main command dispatcher with "enable" argument
|
|
154
|
+
# @calls mkdir, cat, source, list_mappings, bmad-tts-injector.sh
|
|
66
155
|
enable_plugin() {
|
|
67
156
|
mkdir -p "$PLUGIN_DIR"
|
|
68
157
|
|
|
@@ -193,7 +282,16 @@ ACTIVATION_EOF
|
|
|
193
282
|
fi
|
|
194
283
|
}
|
|
195
284
|
|
|
196
|
-
#
|
|
285
|
+
# @function disable_plugin
|
|
286
|
+
# @intent Disable BMAD voice plugin and restore previous voice settings
|
|
287
|
+
# @why Allow users to return to single-voice mode with their original configuration
|
|
288
|
+
# @param None
|
|
289
|
+
# @returns None
|
|
290
|
+
# @exitcode Always 0
|
|
291
|
+
# @sideeffects Removes flag file, restores settings from backup, calls bmad-tts-injector.sh disable
|
|
292
|
+
# @edgecases Handles missing backup file gracefully, warns user if no backup exists
|
|
293
|
+
# @calledby Main command dispatcher with "disable" argument
|
|
294
|
+
# @calls source, rm, echo, bmad-tts-injector.sh
|
|
197
295
|
disable_plugin() {
|
|
198
296
|
BACKUP_FILE="$PLUGIN_DIR/.bmad-previous-settings"
|
|
199
297
|
|
|
@@ -250,7 +348,16 @@ disable_plugin() {
|
|
|
250
348
|
fi
|
|
251
349
|
}
|
|
252
350
|
|
|
253
|
-
#
|
|
351
|
+
# @function list_mappings
|
|
352
|
+
# @intent Display all BMAD agent-to-voice mappings in readable format
|
|
353
|
+
# @why Help users see which voice is assigned to each agent
|
|
354
|
+
# @param None
|
|
355
|
+
# @returns None
|
|
356
|
+
# @exitcode 0=success, 1=plugin file not found
|
|
357
|
+
# @sideeffects Writes formatted output to stdout
|
|
358
|
+
# @edgecases Parses markdown table format, skips header and separator rows
|
|
359
|
+
# @calledby enable_plugin, show_status, main command dispatcher with "list"
|
|
360
|
+
# @calls grep, sed, echo
|
|
254
361
|
list_mappings() {
|
|
255
362
|
if [[ ! -f "$PLUGIN_FILE" ]]; then
|
|
256
363
|
echo "❌ Plugin file not found: $PLUGIN_FILE"
|
|
@@ -271,7 +378,18 @@ list_mappings() {
|
|
|
271
378
|
done
|
|
272
379
|
}
|
|
273
380
|
|
|
274
|
-
#
|
|
381
|
+
# @function set_agent_voice
|
|
382
|
+
# @intent Update voice and personality mapping for specific BMAD agent
|
|
383
|
+
# @why Allow customization of agent voices to user preferences
|
|
384
|
+
# @param $1 {string} agent_id - BMAD agent identifier
|
|
385
|
+
# @param $2 {string} voice - New voice name
|
|
386
|
+
# @param $3 {string} personality - New personality (optional, defaults to "normal")
|
|
387
|
+
# @returns None
|
|
388
|
+
# @exitcode 0=success, 1=plugin file not found or agent not found
|
|
389
|
+
# @sideeffects Modifies plugin file, creates .bak backup
|
|
390
|
+
# @edgecases Validates agent exists before updating
|
|
391
|
+
# @calledby Main command dispatcher with "set" argument
|
|
392
|
+
# @calls grep, sed
|
|
275
393
|
set_agent_voice() {
|
|
276
394
|
local agent_id="$1"
|
|
277
395
|
local voice="$2"
|
|
@@ -294,7 +412,16 @@ set_agent_voice() {
|
|
|
294
412
|
echo "✅ Updated $agent_id → $voice [$personality]"
|
|
295
413
|
}
|
|
296
414
|
|
|
297
|
-
#
|
|
415
|
+
# @function show_status
|
|
416
|
+
# @intent Display plugin status, BMAD detection, and current voice mappings
|
|
417
|
+
# @why Provide comprehensive overview of plugin state for troubleshooting
|
|
418
|
+
# @param None
|
|
419
|
+
# @returns None
|
|
420
|
+
# @exitcode Always 0
|
|
421
|
+
# @sideeffects Writes status information to stdout
|
|
422
|
+
# @edgecases Checks for BMAD installation via manifest file
|
|
423
|
+
# @calledby Main command dispatcher with "status" argument
|
|
424
|
+
# @calls is_plugin_enabled, list_mappings
|
|
298
425
|
show_status() {
|
|
299
426
|
# Check for BMAD installation
|
|
300
427
|
local bmad_installed="false"
|
|
@@ -317,7 +444,16 @@ show_status() {
|
|
|
317
444
|
list_mappings
|
|
318
445
|
}
|
|
319
446
|
|
|
320
|
-
#
|
|
447
|
+
# @function edit_plugin
|
|
448
|
+
# @intent Open plugin configuration file for manual editing
|
|
449
|
+
# @why Allow advanced users to modify voice mappings directly
|
|
450
|
+
# @param None
|
|
451
|
+
# @returns None
|
|
452
|
+
# @exitcode 0=success, 1=plugin file not found
|
|
453
|
+
# @sideeffects Displays file path and instructions
|
|
454
|
+
# @edgecases Does not actually open editor, just provides guidance
|
|
455
|
+
# @calledby Main command dispatcher with "edit" argument
|
|
456
|
+
# @calls echo
|
|
321
457
|
edit_plugin() {
|
|
322
458
|
if [[ ! -f "$PLUGIN_FILE" ]]; then
|
|
323
459
|
echo "❌ Plugin file not found: $PLUGIN_FILE"
|
|
@@ -1,15 +1,58 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
#
|
|
3
|
-
#
|
|
4
|
-
# @context Detects if agent-vibes output style is active
|
|
5
|
-
# @architecture Helper for slash commands to warn users
|
|
6
|
-
# @why Voice commands won't work without agent-vibes output style
|
|
3
|
+
# File: .claude/hooks/check-output-style.sh
|
|
7
4
|
#
|
|
5
|
+
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
+
# Website: https://agentvibes.org
|
|
7
|
+
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
+
#
|
|
9
|
+
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
+
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
+
#
|
|
12
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
# you may not use this file except in compliance with the License.
|
|
14
|
+
# You may obtain a copy of the License at
|
|
15
|
+
#
|
|
16
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
#
|
|
18
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
# See the License for the specific language governing permissions and
|
|
22
|
+
# limitations under the License.
|
|
23
|
+
#
|
|
24
|
+
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
+
# express or implied, including but not limited to the warranties of
|
|
26
|
+
# merchantability, fitness for a particular purpose and noninfringement.
|
|
27
|
+
# In no event shall the authors or copyright holders be liable for any claim,
|
|
28
|
+
# damages or other liability, whether in an action of contract, tort or
|
|
29
|
+
# otherwise, arising from, out of or in connection with the software or the
|
|
30
|
+
# use or other dealings in the software.
|
|
31
|
+
#
|
|
32
|
+
# ---
|
|
33
|
+
#
|
|
34
|
+
# @fileoverview Output Style Detection - Detects if Agent Vibes output style is active in Claude Code
|
|
35
|
+
# @context Voice commands require the Agent Vibes output style to work properly with automatic TTS
|
|
36
|
+
# @architecture Heuristic detection using environment variables and file system checks
|
|
37
|
+
# @dependencies CLAUDECODE environment variable, .claude/output-styles/agent-vibes.md file
|
|
38
|
+
# @entrypoints Called by slash commands to warn users if output style is incorrect
|
|
39
|
+
# @patterns Environment-based detection, graceful degradation with helpful error messages
|
|
40
|
+
# @related .claude/output-styles/agent-vibes.md, Claude Code output style system
|
|
8
41
|
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
42
|
+
# AI NOTE: Output style detection is heuristic-based because Claude Code does not expose
|
|
43
|
+
# the active output style via environment variables. We check for CLAUDECODE env var and
|
|
44
|
+
# the presence of the agent-vibes.md output style file as indicators.
|
|
12
45
|
|
|
46
|
+
# @function check_output_style
|
|
47
|
+
# @intent Detect if Agent Vibes output style is likely active in Claude Code session
|
|
48
|
+
# @why Voice commands depend on output style hooks that automatically invoke TTS
|
|
49
|
+
# @param None
|
|
50
|
+
# @returns None
|
|
51
|
+
# @exitcode 0=likely using agent-vibes style, 1=not using or cannot detect
|
|
52
|
+
# @sideeffects None (read-only checks)
|
|
53
|
+
# @edgecases Cannot directly detect output style, relies on CLAUDECODE env var and file presence
|
|
54
|
+
# @calledby Main execution block, slash command validation
|
|
55
|
+
# @calls None (direct environment and file checks)
|
|
13
56
|
check_output_style() {
|
|
14
57
|
# Strategy: Check if this script is being called from within a Claude response
|
|
15
58
|
# If CLAUDECODE env var is set, we're in Claude Code
|
|
@@ -36,7 +79,16 @@ check_output_style() {
|
|
|
36
79
|
return 0
|
|
37
80
|
}
|
|
38
81
|
|
|
39
|
-
#
|
|
82
|
+
# @function show_output_style_warning
|
|
83
|
+
# @intent Display helpful warning about enabling Agent Vibes output style
|
|
84
|
+
# @why Users need guidance on how to enable automatic TTS narration
|
|
85
|
+
# @param None
|
|
86
|
+
# @returns None
|
|
87
|
+
# @exitcode Always 0
|
|
88
|
+
# @sideeffects Writes warning message to stdout
|
|
89
|
+
# @edgecases None
|
|
90
|
+
# @calledby Main execution block when check_output_style fails
|
|
91
|
+
# @calls echo
|
|
40
92
|
show_output_style_warning() {
|
|
41
93
|
echo ""
|
|
42
94
|
echo "⚠️ Voice commands require the Agent Vibes output style"
|
|
@@ -1,10 +1,43 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
#
|
|
3
|
-
#
|
|
4
|
-
# @context Shows a gentle reminder once per day to star the repo
|
|
5
|
-
# @architecture Tracks last reminder date in a timestamp file
|
|
6
|
-
# @why Encourage users to support the project without being annoying
|
|
3
|
+
# File: .claude/hooks/github-star-reminder.sh
|
|
7
4
|
#
|
|
5
|
+
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
+
# Website: https://agentvibes.org
|
|
7
|
+
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
+
#
|
|
9
|
+
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
+
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
+
#
|
|
12
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
# you may not use this file except in compliance with the License.
|
|
14
|
+
# You may obtain a copy of the License at
|
|
15
|
+
#
|
|
16
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
#
|
|
18
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
# See the License for the specific language governing permissions and
|
|
22
|
+
# limitations under the License.
|
|
23
|
+
#
|
|
24
|
+
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
+
# express or implied, including but not limited to the warranties of
|
|
26
|
+
# merchantability, fitness for a particular purpose and noninfringement.
|
|
27
|
+
# In no event shall the authors or copyright holders be liable for any claim,
|
|
28
|
+
# damages or other liability, whether in an action of contract, tort or
|
|
29
|
+
# otherwise, arising from, out of or in connection with the software or the
|
|
30
|
+
# use or other dealings in the software.
|
|
31
|
+
#
|
|
32
|
+
# ---
|
|
33
|
+
#
|
|
34
|
+
# @fileoverview GitHub Star Reminder System - Gentle daily reminder to star repository
|
|
35
|
+
# @context Shows a once-per-day reminder to encourage users to support the project without being annoying
|
|
36
|
+
# @architecture Timestamp-based tracking using daily date comparison in a state file
|
|
37
|
+
# @dependencies date command for timestamp generation
|
|
38
|
+
# @entrypoints Called by play-tts.sh router on every TTS execution, sourced or executed directly
|
|
39
|
+
# @patterns Rate-limiting via file-based state, graceful degradation, user-opt-out support
|
|
40
|
+
# @related .claude/github-star-reminder.txt (state file), .claude/github-star-reminder-disabled.flag (opt-out)
|
|
8
41
|
|
|
9
42
|
# Determine config directory (project-local or global)
|
|
10
43
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
@@ -20,7 +53,16 @@ fi
|
|
|
20
53
|
|
|
21
54
|
GITHUB_REPO="https://github.com/paulpreibisch/AgentVibes"
|
|
22
55
|
|
|
23
|
-
#
|
|
56
|
+
# @function is_reminder_disabled
|
|
57
|
+
# @intent Check if GitHub star reminders have been disabled by the user
|
|
58
|
+
# @why Respect user preferences and provide opt-out mechanism for reminders
|
|
59
|
+
# @param None
|
|
60
|
+
# @returns None
|
|
61
|
+
# @exitcode 0=reminders disabled, 1=reminders enabled
|
|
62
|
+
# @sideeffects Reads flag files from local/global .claude directories
|
|
63
|
+
# @edgecases Checks both flag file and "disabled" text in reminder file for backward compatibility
|
|
64
|
+
# @calledby should_show_reminder
|
|
65
|
+
# @calls cat for reading reminder file content
|
|
24
66
|
is_reminder_disabled() {
|
|
25
67
|
# Check for disable flag file
|
|
26
68
|
local disable_file_local="$CLAUDE_DIR/github-star-reminder-disabled.flag"
|
|
@@ -41,7 +83,16 @@ is_reminder_disabled() {
|
|
|
41
83
|
return 1 # Not disabled
|
|
42
84
|
}
|
|
43
85
|
|
|
44
|
-
#
|
|
86
|
+
# @function should_show_reminder
|
|
87
|
+
# @intent Determine if reminder should be displayed based on date and disable status
|
|
88
|
+
# @why Implement once-per-day rate limiting to avoid annoying users
|
|
89
|
+
# @param None
|
|
90
|
+
# @returns None
|
|
91
|
+
# @exitcode 0=should show, 1=should not show
|
|
92
|
+
# @sideeffects Reads .claude/github-star-reminder.txt for last reminder date
|
|
93
|
+
# @edgecases Shows reminder if file doesn't exist (first run), compares YYYYMMDD format dates
|
|
94
|
+
# @calledby Main execution block
|
|
95
|
+
# @calls is_reminder_disabled, cat, date
|
|
45
96
|
should_show_reminder() {
|
|
46
97
|
# Check if disabled first
|
|
47
98
|
if is_reminder_disabled; then
|
|
@@ -65,7 +116,16 @@ should_show_reminder() {
|
|
|
65
116
|
return 1
|
|
66
117
|
}
|
|
67
118
|
|
|
68
|
-
#
|
|
119
|
+
# @function show_reminder
|
|
120
|
+
# @intent Display friendly GitHub star reminder with opt-out instructions
|
|
121
|
+
# @why Encourage community support while being respectful and non-intrusive
|
|
122
|
+
# @param None
|
|
123
|
+
# @returns None
|
|
124
|
+
# @exitcode Always 0
|
|
125
|
+
# @sideeffects Updates reminder file with current date, writes to stdout
|
|
126
|
+
# @edgecases None
|
|
127
|
+
# @calledby Main execution block when should_show_reminder returns true
|
|
128
|
+
# @calls date, echo
|
|
69
129
|
show_reminder() {
|
|
70
130
|
echo ""
|
|
71
131
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
#
|
|
2
|
+
#
|
|
3
|
+
# File: .claude/hooks/language-manager.sh
|
|
4
|
+
#
|
|
5
|
+
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
+
# Website: https://agentvibes.org
|
|
7
|
+
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
+
#
|
|
9
|
+
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
+
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
+
#
|
|
12
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
# you may not use this file except in compliance with the License.
|
|
14
|
+
# You may obtain a copy of the License at
|
|
15
|
+
#
|
|
16
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
#
|
|
18
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
# See the License for the specific language governing permissions and
|
|
22
|
+
# limitations under the License.
|
|
23
|
+
#
|
|
24
|
+
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
+
# express or implied. Use at your own risk. See the Apache License for details.
|
|
26
|
+
#
|
|
27
|
+
# ---
|
|
28
|
+
#
|
|
29
|
+
# @fileoverview Language Manager - Manages multilingual TTS with 30+ language support
|
|
30
|
+
# @context Enables TTS in multiple languages with provider-specific voice recommendations (ElevenLabs multilingual vs Piper native)
|
|
31
|
+
# @architecture Dual-map system: ELEVENLABS_VOICES and PIPER_VOICES for provider-aware voice selection
|
|
32
|
+
# @dependencies provider-manager.sh for active provider detection, .claude/tts-language.txt for state
|
|
33
|
+
# @entrypoints Called by /agent-vibes:language commands, play-tts-*.sh for voice resolution
|
|
34
|
+
# @patterns Provider abstraction, language-to-voice mapping, backward compatibility with legacy LANGUAGE_VOICES
|
|
35
|
+
# @related play-tts-elevenlabs.sh, play-tts-piper.sh, provider-manager.sh, learn-manager.sh
|
|
4
36
|
|
|
5
37
|
# Determine target .claude directory based on context
|
|
6
38
|
# Priority:
|
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
#
|
|
2
|
+
#
|
|
3
|
+
# File: .claude/hooks/learn-manager.sh
|
|
4
|
+
#
|
|
5
|
+
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
+
# Website: https://agentvibes.org
|
|
7
|
+
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
+
#
|
|
9
|
+
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
+
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
+
#
|
|
12
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
# you may not use this file except in compliance with the License.
|
|
14
|
+
# You may obtain a copy of the License at
|
|
15
|
+
#
|
|
16
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
#
|
|
18
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
# See the License for the specific language governing permissions and
|
|
22
|
+
# limitations under the License.
|
|
23
|
+
#
|
|
24
|
+
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
+
# express or implied. Use at your own risk. See the Apache License for details.
|
|
26
|
+
#
|
|
27
|
+
# ---
|
|
28
|
+
#
|
|
29
|
+
# @fileoverview Language Learning Mode Manager - Enables dual-language TTS for immersive learning
|
|
30
|
+
# @context Speaks responses in both main language (English) and target language (Spanish, French, etc.) for language practice
|
|
31
|
+
# @architecture Manages main/target language pairs with voice mappings, auto-configures recommended voices per language
|
|
32
|
+
# @dependencies play-tts.sh (dual invocation), language-manager.sh (voice recommendations), .claude/tts-*.txt state files
|
|
33
|
+
# @entrypoints Called by /agent-vibes:learn commands to enable/disable learning mode
|
|
34
|
+
# @patterns Dual-voice orchestration, auto-configuration, greeting on activation, provider-aware voice selection
|
|
35
|
+
# @related language-manager.sh, play-tts.sh, .claude/tts-learn-mode.txt, .claude/tts-target-language.txt
|
|
4
36
|
|
|
5
37
|
set -e
|
|
6
38
|
|
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
#
|
|
2
|
+
#
|
|
3
|
+
# File: .claude/hooks/personality-manager.sh
|
|
4
|
+
#
|
|
5
|
+
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
+
# Website: https://agentvibes.org
|
|
7
|
+
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
+
#
|
|
9
|
+
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
+
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
+
#
|
|
12
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
# you may not use this file except in compliance with the License.
|
|
14
|
+
# You may obtain a copy of the License at
|
|
15
|
+
#
|
|
16
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
#
|
|
18
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
# See the License for the specific language governing permissions and
|
|
22
|
+
# limitations under the License.
|
|
23
|
+
#
|
|
24
|
+
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
+
# express or implied. Use at your own risk. See the Apache License for details.
|
|
26
|
+
#
|
|
27
|
+
# ---
|
|
28
|
+
#
|
|
29
|
+
# @fileoverview Personality Manager - Adds character and emotional style to TTS voices
|
|
30
|
+
# @context Enables voices to have distinct personalities (flirty, sarcastic, pirate, etc.) with provider-aware voice assignment
|
|
31
|
+
# @architecture Markdown-based personality templates with provider-specific voice mappings (ElevenLabs vs Piper)
|
|
32
|
+
# @dependencies .claude/personalities/*.md files, voice-manager.sh, play-tts.sh, provider-manager.sh
|
|
33
|
+
# @entrypoints Called by /agent-vibes:personality slash commands
|
|
34
|
+
# @patterns Template-based configuration, provider abstraction, random personality support
|
|
35
|
+
# @related .claude/personalities/*.md, voice-manager.sh, .claude/tts-personality.txt
|
|
3
36
|
|
|
4
37
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
38
|
PERSONALITIES_DIR="$SCRIPT_DIR/../personalities"
|