agentvibes 2.9.4 → 2.9.6

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.
@@ -0,0 +1,11 @@
1
+ agent_id,voice_name
2
+ pm,en_US-ryan-high
3
+ architect,en_US-danny-low
4
+ dev,en_US-hfc_female-medium
5
+ analyst,en_US-amy-medium
6
+ ux-designer,en_US-kristin-medium
7
+ tea,en_US-kusal-medium
8
+ sm,en_US-bryce-medium
9
+ tech-writer,en_US-kathleen-low
10
+ frame-expert,en_US-kusal-medium
11
+ bmad-master,en_US-libritts_r-high
@@ -25,8 +25,7 @@
25
25
  </step>
26
26
 
27
27
  <step n="2" goal="Initialize Party Mode">
28
- <action>Announce party mode activation with enthusiasm</action>
29
- <note>If using TTS for announcement, use PROJECT hook: .claude/hooks/play-tts.sh (NOT ~/.claude/hooks/)</note>
28
+ <action>Trigger TTS announcement using PROJECT hook: .claude/hooks/play-tts.sh "Party mode activated! All agents are here for a group discussion!"</action>
30
29
  <action>List all participating agents with their merged information:</action>
31
30
  <format>
32
31
  🎉 PARTY MODE ACTIVATED! 🎉
@@ -1 +1 @@
1
- 20251119
1
+ 20251120
@@ -51,10 +51,16 @@ fi
51
51
 
52
52
  # Common voice models to download
53
53
  COMMON_VOICES=(
54
- "en_US-lessac-medium" # Default, clear male (13MB)
55
- "en_US-amy-medium" # Warm female (13MB)
56
- "en_US-joe-medium" # Professional male (13MB)
57
- "en_US-ryan-high" # Expressive male (30MB)
54
+ "en_US-ryan-high" # Default, expressive male (30MB) - BMAD: John (pm)
55
+ "en_US-amy-medium" # Warm female (13MB) - BMAD: Mary (analyst)
56
+ "en_US-hfc_female-medium" # Professional female (13MB) - BMAD: Amelia (dev)
57
+ "en_US-lessac-medium" # Clear female (13MB) - BMAD: Murat (tea) - NOTE: Female voice
58
+ "en_US-danny-low" # Calm male (13MB) - BMAD: Winston (architect)
59
+ "en_US-bryce-medium" # Professional male (13MB) - BMAD: Bob (sm)
60
+ "en_US-kathleen-low" # Clear female (13MB) - BMAD: Paige (tech-writer)
61
+ "en_US-kusal-medium" # Male voice (13MB) - BMAD: Saif (frame-expert)
62
+ "en_US-kristin-medium" # Female voice (13MB) - BMAD: Sally (ux-designer)
63
+ "en_US-libritts_r-high" # Premium male (57MB) - BMAD: BMad Master
58
64
  "en_US-libritts-high" # Premium quality (57MB)
59
65
  "16Speakers" # Multi-speaker: 12 US + 4 UK voices (77MB) - REQUIRED for BMAD agents
60
66
  )
@@ -133,8 +133,8 @@ You: "✅ That bug be walkin' the plank now, arr!"
133
133
  When a BMAD agent is activated (e.g., `/BMad:agents:pm`), AgentVibes will automatically:
134
134
 
135
135
  1. **Detect BMAD agent from command/context**
136
- 2. **Check if BMAD plugin is enabled** (`.claude/config/bmad-voices-enabled.flag`)
137
- 3. **Look up voice mapping** from `.claude/config/bmad-voices.md`
136
+ 2. **Check if BMAD plugin is enabled** (`.claude/plugins/bmad-voices-enabled.flag`)
137
+ 3. **Look up voice mapping** from `.claude/plugins/bmad-voices.md`
138
138
  4. **Apply agent's assigned voice** for all TTS acknowledgments/completions
139
139
  5. **Apply agent's personality** from the mapping (if specified)
140
140
 
@@ -153,7 +153,7 @@ fi
153
153
  # Note: This detection happens automatically when BMAD agent activates
154
154
 
155
155
  # If BMAD agent detected and plugin enabled, use mapped voice
156
- if [[ -n "$BMAD_AGENT_ID" ]] && [[ -f ".claude/config/bmad-voices-enabled.flag" ]]; then
156
+ if [[ -n "$BMAD_AGENT_ID" ]] && [[ -f ".claude/plugins/bmad-voices-enabled.flag" ]]; then
157
157
  MAPPED_VOICE=$(.claude/hooks/bmad-voice-manager.sh get-voice "$BMAD_AGENT_ID")
158
158
  MAPPED_PERSONALITY=$(.claude/hooks/bmad-voice-manager.sh get-personality "$BMAD_AGENT_ID")
159
159
 
File without changes
package/.test-bmad-config CHANGED
@@ -1,2 +1,2 @@
1
- SAVED_FORK="https://github.com/paulpreibisch/BMAD-METHOD"
2
- SAVED_TEST_DIR="/home/fire/claude/tests/test42"
1
+ SAVED_MODE="1"
2
+ SAVED_TEST_DIR="/home/fire/claude/tests/test47"
@@ -3,69 +3,143 @@
3
3
  ## Prerequisites
4
4
  - Node.js and npm installed
5
5
  - Git installed
6
- - Fresh terminal session
6
+ - ~500MB free disk space
7
+ - 10-15 minutes for complete setup
7
8
 
8
- ## Quick Test (5-10 minutes)
9
+ ## 🚀 Automated Testing (Easiest!)
10
+
11
+ We've made testing super simple with a single command:
12
+
13
+ ### One-Line Install
9
14
 
10
- ### Step 1: Fork and Clone BMAD
11
15
  ```bash
12
- # Fork the BMAD repo on GitHub first, then:
13
- git clone https://github.com/YOUR-USERNAME/BMAD-METHOD.git
14
- cd BMAD-METHOD
16
+ npx -p agentvibes@latest test-bmad-pr
15
17
  ```
16
18
 
17
- ### Step 2: Merge the PR Branch
19
+ That's it! This command will automatically:
20
+ - Download the test script
21
+ - Clone BMAD with the PR
22
+ - Install everything you need
23
+ - Set up unique voices for each agent
24
+ - Verify the installation
25
+
26
+ ### Testing a Different PR
27
+
18
28
  ```bash
19
- # Add the upstream remote
20
- git remote add upstream https://github.com/bmad-code-org/BMAD-METHOD.git
29
+ npx -p agentvibes@latest test-bmad-pr <PR_NUMBER>
30
+ ```
21
31
 
22
- # Fetch and merge the PR
23
- git fetch upstream pull/934/head:agentvibes-party-mode
24
- git checkout agentvibes-party-mode
32
+ For example:
33
+ ```bash
34
+ npx -p agentvibes@latest test-bmad-pr 935
35
+ ```
36
+
37
+ ### Alternative: Manual Download
38
+
39
+ If you prefer to download the script first:
40
+
41
+ ```bash
42
+ # Download and run the test script
43
+ curl -sSL https://raw.githubusercontent.com/paulpreibisch/BMAD-METHOD/feature/agentvibes-tts-integration/test-bmad-pr.sh -o test-bmad-pr.sh
44
+ chmod +x test-bmad-pr.sh
45
+ ./test-bmad-pr.sh
25
46
  ```
26
47
 
27
- ### Step 3: Install BMAD from Your Fork
48
+ ### What the Script Does
49
+
50
+ The script provides an **interactive menu** that lets you choose:
51
+
52
+ 1. **Test official BMAD PR #934** (recommended for most users)
53
+ - Automatically fetches the PR from the main BMAD repository
54
+ - Perfect for testing before the PR is merged
55
+
56
+ 2. **Test your forked repository**
57
+ - Use your own fork and custom branch
58
+ - Great for testing your own modifications
59
+
60
+ The script will:
61
+ - ✓ Clone the repository (official or your fork)
62
+ - ✓ Checkout the correct branch
63
+ - ✓ Install BMAD CLI tools
64
+ - ✓ Create a test project
65
+ - ✓ Install AgentVibes TTS
66
+ - ✓ Configure unique voices for each agent
67
+ - ✓ Verify the installation
68
+
69
+ ### After Running the Script
70
+
71
+ Once setup is complete, the script will tell you exactly how to test party mode:
72
+
28
73
  ```bash
29
- # Navigate to the CLI installer directory
30
- cd tools/cli
74
+ # Navigate to the test project
75
+ cd ~/bmad-pr-test-*/bmad-project
31
76
 
32
- # Install dependencies
33
- npm install
77
+ # Start Claude
78
+ claude
34
79
 
35
- # Link it globally so you can run 'bmad' command
80
+ # Test party mode!
81
+ /bmad:core:workflows:party-mode
82
+ ```
83
+
84
+ ---
85
+
86
+ ## 🛠️ Manual Testing (Advanced Users)
87
+
88
+ If you prefer to do it manually or want to understand each step:
89
+
90
+ ### Step 1: Clone and Setup BMAD
91
+
92
+ ```bash
93
+ # Clone the official BMAD repo
94
+ git clone https://github.com/bmad-code-org/BMAD-METHOD.git
95
+ cd BMAD-METHOD
96
+
97
+ # Fetch and checkout the PR branch
98
+ git remote add upstream https://github.com/bmad-code-org/BMAD-METHOD.git
99
+ git fetch upstream pull/934/head:agentvibes-party-mode
100
+ git checkout agentvibes-party-mode
101
+
102
+ # Install BMAD CLI
103
+ cd tools/cli
104
+ npm install
36
105
  npm link
106
+ ```
37
107
 
38
- # Navigate to where you want to create your BMAD project
108
+ ### Step 2: Create Test Project
109
+
110
+ ```bash
111
+ # Create a test directory
39
112
  cd ~
40
113
  mkdir my-bmad-test
41
114
  cd my-bmad-test
42
115
 
43
- # Run the BMAD installer (now using your forked version with the PR)
116
+ # Run BMAD installer
44
117
  bmad install
45
118
 
46
- # When prompted about AgentVibes TTS:
47
- # - Answer "Yes" to enable TTS for agents
48
- # - Answer "Yes" to assign unique voices for party mode
119
+ # When prompted:
120
+ # - Enable TTS for agents? → Yes
121
+ # - Assign unique voices for party mode? → Yes
49
122
  ```
50
123
 
51
- ### Step 4: Install AgentVibes (if not already installed)
124
+ ### Step 3: Install AgentVibes
125
+
52
126
  ```bash
53
- # If you don't have AgentVibes yet:
127
+ # Install AgentVibes
54
128
  npx agentvibes@latest install
55
129
 
56
130
  # Follow the installer:
57
- # - Choose a TTS provider (ElevenLabs or Piper)
58
- # - For Piper (free): it will auto-download voices including 16Speakers
59
- # - For ElevenLabs: you'll need an API key
131
+ # - Choose a TTS provider (Piper recommended for testing)
132
+ # - Download voices when prompted
60
133
  ```
61
134
 
62
- ### Step 5: Test Party Mode! 🎉
135
+ ### Step 4: Test Party Mode
136
+
63
137
  ```bash
64
- # Start a Claude Code session in your BMAD project directory (my-bmad-test)
65
- # Then run party mode:
66
- /bmad:core:workflows:party-mode
138
+ # Start Claude Code session
139
+ claude-code
67
140
 
68
- # You should hear each BMAD agent speak with their own unique voice!
141
+ # Run party mode
142
+ /bmad:core:workflows:party-mode
69
143
  ```
70
144
 
71
145
  ## What to Test
package/README.md CHANGED
@@ -291,7 +291,7 @@ The BMAD plugin detects when you activate a BMAD agent (e.g., `/BMad:agents:pm`)
291
291
 
292
292
  ## 📦 Installation Structure
293
293
 
294
- **What gets installed:** Commands, hooks, personalities, plugins, and output styles in `.claude/` directory.
294
+ **What gets installed:** Commands, hooks, personalities, and plugins in `.claude/` directory.
295
295
 
296
296
  **[→ View Complete Installation Structure](docs/installation-structure.md)** - Full directory tree, file descriptions, and settings storage
297
297
 
@@ -326,7 +326,7 @@ The BMAD plugin detects when you activate a BMAD agent (e.g., `/BMad:agents:pm`)
326
326
 
327
327
  ## 🔧 Advanced Features
328
328
 
329
- AgentVibes supports **custom personalities**, **custom voices**, and **integration with custom output styles**.
329
+ AgentVibes supports **custom personalities** and **custom voices**.
330
330
 
331
331
  **Quick Examples:**
332
332
  ```bash
@@ -340,7 +340,7 @@ AgentVibes supports **custom personalities**, **custom voices**, and **integrati
340
340
  [Bash: .claude/hooks/play-tts.sh "Starting" "Aria"]
341
341
  ```
342
342
 
343
- **[→ View Advanced Features Guide](docs/advanced-features.md)** - Custom personalities, custom voices, output style integration
343
+ **[→ View Advanced Features Guide](docs/advanced-features.md)** - Custom personalities, custom voices, and more
344
344
 
345
345
  [↑ Back to top](#-table-of-contents)
346
346
 
package/RELEASE_NOTES.md CHANGED
@@ -1,3 +1,25 @@
1
+ # Release v2.9.5 - Legacy Output Styles Cleanup
2
+
3
+ **Release Date:** TBD
4
+ **Type:** Patch Release (Cleanup)
5
+
6
+ ## 🎯 AI Summary
7
+
8
+ AgentVibes v2.9.5 removes legacy output styles installation that became obsolete when we switched to the SessionStart hook system for TTS activation. This cleanup reduces installation time, saves disk space, and simplifies the codebase without affecting functionality.
9
+
10
+ ## 🧹 Cleanup
11
+
12
+ ### Removed Legacy Output Styles Installation
13
+ - Removed `copyOutputStyles()` function from installer (src/installer.js:589-608)
14
+ - Deleted `templates/output-styles/` directory from repository
15
+ - Removed unused `check-output-style.sh` hook
16
+ - Updated documentation to reflect SessionStart hook system
17
+
18
+ ### Migration Note for Existing Users
19
+ If you previously installed AgentVibes, you can safely delete the `.claude/output-styles/` directory from your projects. The SessionStart hook system (`.claude/hooks/session-start.sh`) now handles TTS activation automatically and is more reliable than the old output styles approach.
20
+
21
+ ---
22
+
1
23
  # Release v2.7.2 - Party Mode Voice Fixes
2
24
 
3
25
  **Release Date:** 2025-11-18
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # AgentVibes BMAD PR Testing Command
4
+ # Quick command to test BMAD PRs with AgentVibes integration
5
+ #
6
+ # Usage:
7
+ # npx agentvibes test-bmad-pr [PR_NUMBER]
8
+ # npx agentvibes test-bmad-pr 934
9
+ #
10
+
11
+ set -e
12
+
13
+ # Colors
14
+ GREEN='\033[0;32m'
15
+ BLUE='\033[0;34m'
16
+ YELLOW='\033[1;33m'
17
+ CYAN='\033[0;36m'
18
+ NC='\033[0m' # No Color
19
+
20
+ # Default PR number
21
+ PR_NUMBER="${1:-934}"
22
+
23
+ clear
24
+
25
+ echo ""
26
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
27
+ echo -e "${CYAN}🎙️ AgentVibes BMAD PR Testing Tool${NC}"
28
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
29
+ echo ""
30
+ echo -e "${BLUE}Testing PR #${PR_NUMBER}${NC}"
31
+ echo ""
32
+ echo -e "${YELLOW}This will download and run the automated test script for${NC}"
33
+ echo -e "${YELLOW}BMAD's AgentVibes integration with multi-agent party mode.${NC}"
34
+ echo ""
35
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
36
+ echo ""
37
+
38
+ # Create temp directory for the script
39
+ TEMP_DIR=$(mktemp -d)
40
+ SCRIPT_PATH="$TEMP_DIR/test-bmad-pr.sh"
41
+
42
+ echo -e "${BLUE}📥 Downloading test script...${NC}"
43
+
44
+ # Download the test script from the PR branch
45
+ SCRIPT_URL="https://raw.githubusercontent.com/paulpreibisch/BMAD-METHOD/feature/agentvibes-tts-integration/test-bmad-pr.sh"
46
+
47
+ if curl -fsSL "$SCRIPT_URL" -o "$SCRIPT_PATH"; then
48
+ chmod +x "$SCRIPT_PATH"
49
+ echo -e "${GREEN}✓ Test script downloaded${NC}"
50
+ echo ""
51
+
52
+ # Run the test script
53
+ exec "$SCRIPT_PATH"
54
+ else
55
+ echo -e "${YELLOW}⚠ Could not download test script from PR branch${NC}"
56
+ echo ""
57
+ echo "Trying alternative: Official BMAD repository..."
58
+ echo ""
59
+
60
+ # Fallback to official repo
61
+ SCRIPT_URL="https://raw.githubusercontent.com/bmad-code-org/BMAD-METHOD/refs/pull/${PR_NUMBER}/merge/test-bmad-pr.sh"
62
+
63
+ if curl -fsSL "$SCRIPT_URL" -o "$SCRIPT_PATH"; then
64
+ chmod +x "$SCRIPT_PATH"
65
+ echo -e "${GREEN}✓ Test script downloaded${NC}"
66
+ echo ""
67
+ exec "$SCRIPT_PATH"
68
+ else
69
+ echo -e "${YELLOW}⚠ Could not download test script${NC}"
70
+ echo ""
71
+ echo "Please try manual testing:"
72
+ echo -e "${GREEN}git clone https://github.com/bmad-code-org/BMAD-METHOD.git${NC}"
73
+ echo -e "${GREEN}cd BMAD-METHOD${NC}"
74
+ echo -e "${GREEN}git fetch origin pull/${PR_NUMBER}/head:test-pr-${PR_NUMBER}${NC}"
75
+ echo -e "${GREEN}git checkout test-pr-${PR_NUMBER}${NC}"
76
+ echo ""
77
+ exit 1
78
+ fi
79
+ fi
@@ -23,8 +23,6 @@ your-project/
23
23
  ├── personalities/ # 19 personality templates
24
24
  ├── plugins/
25
25
  │ └── bmad-voices.md # BMAD voice mappings
26
- ├── output-styles/
27
- │ └── agent-vibes.md # Voice output style
28
26
  └── audio/ # Generated TTS files
29
27
  ```
30
28
 
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.9.4",
4
+ "version": "2.9.6",
5
5
  "description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code and Claude Desktop (via MCP) with multi-provider support.",
6
6
  "homepage": "https://agentvibes.org",
7
7
  "keywords": [
@@ -28,7 +28,8 @@
28
28
  "bin": {
29
29
  "agentvibes": "./bin/agent-vibes",
30
30
  "agent-vibes": "./bin/agent-vibes",
31
- "agentvibes-mcp-server": "./bin/mcp-server.js"
31
+ "agentvibes-mcp-server": "./bin/mcp-server.js",
32
+ "test-bmad-pr": "./bin/test-bmad-pr"
32
33
  },
33
34
  "scripts": {
34
35
  "install-local": "node src/installer.js install",
package/src/installer.js CHANGED
@@ -642,6 +642,39 @@ async function copyPluginFiles(targetDir, spinner) {
642
642
  return pluginFiles.length;
643
643
  }
644
644
 
645
+ /**
646
+ * Copy BMAD config files to target directory
647
+ * @param {string} targetDir - Target installation directory
648
+ * @param {Object} spinner - Ora spinner instance
649
+ * @returns {Promise<number>} Number of files copied
650
+ */
651
+ async function copyBmadConfigFiles(targetDir, spinner) {
652
+ spinner.start('Installing BMAD config files...');
653
+ const srcConfigDir = path.join(__dirname, '..', '.claude', 'config');
654
+ const destConfigDir = path.join(targetDir, '.claude', 'config');
655
+
656
+ await fs.mkdir(destConfigDir, { recursive: true });
657
+
658
+ let fileCount = 0;
659
+
660
+ // Copy bmad-voices.md if it exists
661
+ const bmadVoicesFile = 'bmad-voices.md';
662
+ const srcPath = path.join(srcConfigDir, bmadVoicesFile);
663
+
664
+ try {
665
+ await fs.access(srcPath);
666
+ const destPath = path.join(destConfigDir, bmadVoicesFile);
667
+ await fs.copyFile(srcPath, destPath);
668
+ console.log(chalk.gray(` ✓ ${bmadVoicesFile}`));
669
+ fileCount++;
670
+ spinner.succeed(chalk.green('Installed BMAD config files!\n'));
671
+ } catch (error) {
672
+ spinner.info(chalk.yellow('No BMAD config files found (optional)\n'));
673
+ }
674
+
675
+ return fileCount;
676
+ }
677
+
645
678
  /**
646
679
  * Configure SessionStart hook in settings.json
647
680
  * @param {string} targetDir - Target installation directory
@@ -1118,6 +1151,12 @@ async function updateAgentVibes(targetDir, options) {
1118
1151
  console.log(chalk.green(`✓ Updated ${pluginFileCount} BMAD plugin files`));
1119
1152
  }
1120
1153
 
1154
+ // Update BMAD config files
1155
+ const bmadConfigFileCount = await copyBmadConfigFiles(targetDir, { start: () => {}, succeed: () => {}, info: () => {}, fail: () => {} });
1156
+ if (bmadConfigFileCount > 0) {
1157
+ console.log(chalk.green(`✓ Updated ${bmadConfigFileCount} BMAD config files`));
1158
+ }
1159
+
1121
1160
  // Update settings.json
1122
1161
  spinner.text = 'Updating AgentVibes hook configuration...';
1123
1162
  await configureSessionStartHook(targetDir, { start: () => {}, succeed: () => {}, info: () => {}, fail: () => {} });
@@ -1276,6 +1315,7 @@ async function install(options = {}) {
1276
1315
  const personalityFileCount = await copyPersonalityFiles(targetDir, spinner);
1277
1316
  const outputStyleCount = await copyOutputStyles(targetDir, spinner);
1278
1317
  const pluginFileCount = await copyPluginFiles(targetDir, spinner);
1318
+ const bmadConfigFileCount = await copyBmadConfigFiles(targetDir, spinner);
1279
1319
 
1280
1320
  // Configure hooks and manifests
1281
1321
  await configureSessionStartHook(targetDir, spinner);
@@ -1307,6 +1347,9 @@ async function install(options = {}) {
1307
1347
  if (pluginFileCount > 0) {
1308
1348
  console.log(chalk.white(` • ${pluginFileCount} BMAD plugin files installed`));
1309
1349
  }
1350
+ if (bmadConfigFileCount > 0) {
1351
+ console.log(chalk.white(` • ${bmadConfigFileCount} BMAD config files installed`));
1352
+ }
1310
1353
  console.log(chalk.white(` • Voice manager ready`));
1311
1354
 
1312
1355
  if (selectedProvider === 'elevenlabs') {
package/test-bmad-pr.sh CHANGED
@@ -9,40 +9,155 @@ set -e
9
9
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
10
  CONFIG_FILE="$SCRIPT_DIR/.test-bmad-config"
11
11
 
12
- echo "🎙️ BMAD PR #934 Testing Script"
13
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
12
+ # Colors
13
+ GREEN='\033[0;32m'
14
+ BLUE='\033[0;34m'
15
+ YELLOW='\033[1;33m'
16
+ RED='\033[0;31m'
17
+ NC='\033[0m' # No Color
18
+
19
+ clear
20
+
21
+ echo ""
22
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
23
+ echo "🎙️ BMAD AgentVibes Party Mode Testing Script"
24
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
25
+ echo ""
26
+ echo -e "${BLUE}What this script does:${NC}"
27
+ echo ""
28
+ echo " This script automates the process of testing BMAD's AgentVibes"
29
+ echo " integration (PR #934), which adds multi-agent party mode with"
30
+ echo " unique voices for each BMAD agent."
31
+ echo ""
32
+ echo -e "${BLUE}The script will:${NC}"
33
+ echo ""
34
+ echo " 1. Clone the BMAD repository"
35
+ echo " 2. Checkout the PR branch with party mode features"
36
+ echo " 3. Install BMAD CLI tools locally"
37
+ echo " 4. Create a test BMAD project"
38
+ echo " 5. Install AgentVibes TTS system"
39
+ echo " 6. Configure unique voices for each agent"
40
+ echo " 7. Verify the installation"
41
+ echo ""
42
+ echo -e "${YELLOW}Prerequisites:${NC}"
43
+ echo " • Node.js and npm installed"
44
+ echo " • Git installed"
45
+ echo " • ~500MB free disk space"
46
+ echo " • 10-15 minutes for complete setup"
47
+ echo ""
48
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
49
+ echo ""
50
+
51
+ read -p "Ready to continue? [Y/n]: " -n 1 -r
52
+ echo
53
+ if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ -n $REPLY ]]; then
54
+ echo "❌ Setup cancelled"
55
+ exit 0
56
+ fi
57
+
58
+ clear
59
+
60
+ echo ""
61
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
62
+ echo "🔧 Testing Mode Selection"
63
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
64
+ echo ""
65
+ echo "Choose how you want to test:"
66
+ echo ""
67
+ echo " 1) Test official BMAD PR #934 (recommended for most users)"
68
+ echo " • Uses: github.com/bmad-code-org/BMAD-METHOD"
69
+ echo " • Branch: PR #934 (agentvibes-party-mode)"
70
+ echo " • Best for: Testing the official PR before it's merged"
71
+ echo ""
72
+ echo " 2) Test your forked repository"
73
+ echo " • Uses: Your GitHub fork"
74
+ echo " • Branch: Your custom branch (you choose)"
75
+ echo " • Best for: Testing your own changes or modifications"
14
76
  echo ""
15
77
 
16
78
  # Load saved config if it exists
79
+ SAVED_MODE=""
17
80
  SAVED_FORK=""
81
+ SAVED_BRANCH=""
18
82
  SAVED_TEST_DIR=""
19
83
  if [[ -f "$CONFIG_FILE" ]]; then
20
84
  source "$CONFIG_FILE"
21
- echo "📋 Loaded saved configuration:"
22
- echo " Fork: $SAVED_FORK"
23
- echo " Test directory: $SAVED_TEST_DIR"
85
+ fi
86
+
87
+ if [[ -n "$SAVED_MODE" ]]; then
88
+ echo -e "${BLUE}Last used: Mode $SAVED_MODE${NC}"
89
+ [[ -n "$SAVED_FORK" ]] && echo " Fork: $SAVED_FORK"
90
+ [[ -n "$SAVED_BRANCH" ]] && echo " Branch: $SAVED_BRANCH"
24
91
  echo ""
25
92
  fi
26
93
 
27
- # Ask for GitHub fork URL
28
- echo "Step 1: GitHub Fork"
29
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
30
- if [[ -n "$SAVED_FORK" ]]; then
31
- read -p "GitHub fork URL [$SAVED_FORK]: " FORK_URL
32
- FORK_URL="${FORK_URL:-$SAVED_FORK}"
94
+ read -p "Select mode [1/2]: " MODE_CHOICE
95
+ echo ""
96
+
97
+ # Validate mode choice
98
+ while [[ ! "$MODE_CHOICE" =~ ^[12]$ ]]; do
99
+ echo -e "${RED}Invalid choice. Please enter 1 or 2.${NC}"
100
+ read -p "Select mode [1/2]: " MODE_CHOICE
101
+ echo ""
102
+ done
103
+
104
+ # Configure based on mode
105
+ if [[ "$MODE_CHOICE" == "1" ]]; then
106
+ # Official PR mode
107
+ REPO_URL="https://github.com/bmad-code-org/BMAD-METHOD.git"
108
+ BRANCH_NAME="agentvibes-party-mode"
109
+ FETCH_PR=true
110
+
111
+ echo -e "${GREEN}✓ Using official BMAD repository${NC}"
112
+ echo " Repository: $REPO_URL"
113
+ echo " Will fetch: PR #934 into branch '$BRANCH_NAME'"
114
+ echo ""
33
115
  else
34
- read -p "GitHub fork URL (e.g., https://github.com/paulpreibisch/BMAD-METHOD.git): " FORK_URL
116
+ # Fork mode
117
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
118
+ echo "🍴 Fork Configuration"
119
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
120
+ echo ""
121
+
122
+ if [[ -n "$SAVED_FORK" ]]; then
123
+ read -p "GitHub fork URL [$SAVED_FORK]: " FORK_INPUT
124
+ REPO_URL="${FORK_INPUT:-$SAVED_FORK}"
125
+ else
126
+ echo "Enter your forked repository URL:"
127
+ echo "(e.g., https://github.com/yourusername/BMAD-METHOD.git)"
128
+ read -p "Fork URL: " REPO_URL
129
+ fi
130
+ echo ""
131
+
132
+ if [[ -n "$SAVED_BRANCH" ]]; then
133
+ read -p "Branch name [$SAVED_BRANCH]: " BRANCH_INPUT
134
+ BRANCH_NAME="${BRANCH_INPUT:-$SAVED_BRANCH}"
135
+ else
136
+ echo "Enter the branch name to test:"
137
+ echo "(e.g., agentvibes-party-mode, main, feature-xyz)"
138
+ read -p "Branch: " BRANCH_NAME
139
+ fi
140
+ echo ""
141
+
142
+ FETCH_PR=false
143
+
144
+ echo -e "${GREEN}✓ Using your fork${NC}"
145
+ echo " Repository: $REPO_URL"
146
+ echo " Branch: $BRANCH_NAME"
147
+ echo ""
35
148
  fi
36
- echo ""
37
149
 
38
150
  # Ask for test directory
39
- echo "Step 2: Test Directory"
40
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
151
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
152
+ echo "📁 Test Directory"
153
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
154
+ echo ""
41
155
  if [[ -n "$SAVED_TEST_DIR" ]]; then
42
156
  read -p "Test directory [$SAVED_TEST_DIR]: " TEST_DIR
43
157
  TEST_DIR="${TEST_DIR:-$SAVED_TEST_DIR}"
44
158
  else
45
159
  DEFAULT_DIR="$HOME/bmad-pr-test-$(date +%Y%m%d-%H%M%S)"
160
+ echo "Where should we create the test environment?"
46
161
  read -p "Test directory [$DEFAULT_DIR]: " TEST_DIR
47
162
  TEST_DIR="${TEST_DIR:-$DEFAULT_DIR}"
48
163
  fi
@@ -53,24 +168,29 @@ TEST_DIR="${TEST_DIR/#\~/$HOME}"
53
168
  echo ""
54
169
 
55
170
  # Save configuration
56
- echo "SAVED_FORK=\"$FORK_URL\"" > "$CONFIG_FILE"
171
+ echo "SAVED_MODE=\"$MODE_CHOICE\"" > "$CONFIG_FILE"
172
+ [[ "$MODE_CHOICE" == "2" ]] && echo "SAVED_FORK=\"$REPO_URL\"" >> "$CONFIG_FILE"
173
+ [[ "$MODE_CHOICE" == "2" ]] && echo "SAVED_BRANCH=\"$BRANCH_NAME\"" >> "$CONFIG_FILE"
57
174
  echo "SAVED_TEST_DIR=\"$TEST_DIR\"" >> "$CONFIG_FILE"
58
- echo " Configuration saved to $CONFIG_FILE"
175
+ echo -e "${GREEN}✓ Configuration saved${NC}"
59
176
  echo ""
60
177
 
61
178
  # Confirm before starting
62
- echo "Configuration:"
63
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
64
- echo " Fork: $FORK_URL"
65
- echo " Test dir: $TEST_DIR"
179
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
180
+ echo "📋 Summary"
181
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
66
182
  echo ""
67
- read -p "Proceed with testing? [Y/n]: " -n 1 -r
183
+ echo " Repository: $REPO_URL"
184
+ echo " Branch: $BRANCH_NAME"
185
+ echo " Test dir: $TEST_DIR"
186
+ echo ""
187
+ read -p "Proceed with setup? [Y/n]: " -n 1 -r
68
188
  echo
189
+ echo ""
69
190
  if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ -n $REPLY ]]; then
70
- echo "❌ Testing cancelled"
191
+ echo "❌ Setup cancelled"
71
192
  exit 0
72
193
  fi
73
- echo ""
74
194
 
75
195
  # Clean up old test directory if it exists
76
196
  if [[ -d "$TEST_DIR" ]]; then
@@ -79,121 +199,185 @@ if [[ -d "$TEST_DIR" ]]; then
79
199
  echo
80
200
  if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
81
201
  rm -rf "$TEST_DIR"
82
- echo " Deleted old test directory"
202
+ echo -e "${GREEN}✓ Deleted old test directory${NC}"
83
203
  else
84
- echo " Using existing directory (may have stale data)"
204
+ echo -e "${YELLOW}⚠ Using existing directory (may have stale data)${NC}"
85
205
  fi
86
206
  echo ""
87
207
  fi
88
208
 
89
- # Step 1: Clone fork
90
- echo "Step 1: Cloning your fork"
91
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
209
+ clear
210
+
211
+ echo ""
212
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
213
+ echo "🚀 Starting Installation"
214
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
215
+ echo ""
216
+
217
+ # Step 1: Clone repository
218
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
219
+ echo "📥 Step 1/6: Cloning repository"
220
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
221
+ echo ""
92
222
  mkdir -p "$TEST_DIR"
93
223
  cd "$TEST_DIR"
94
- git clone "$FORK_URL" BMAD-METHOD
224
+ git clone "$REPO_URL" BMAD-METHOD
95
225
  cd BMAD-METHOD
96
- echo "✅ Cloned fork"
226
+ echo ""
227
+ echo -e "${GREEN}✓ Repository cloned${NC}"
97
228
  echo ""
98
229
 
99
- # Step 2: Fetch PR branch
100
- echo "Step 2: Fetching PR #934 branch"
101
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
102
- git remote add upstream https://github.com/bmad-code-org/BMAD-METHOD.git
103
- git fetch upstream pull/934/head:agentvibes-party-mode
104
- git checkout agentvibes-party-mode
105
- echo " On PR branch: agentvibes-party-mode"
230
+ # Step 2: Checkout branch (different logic for PR vs fork)
231
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
232
+ echo "🔀 Step 2/6: Checking out branch"
233
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
234
+ echo ""
235
+
236
+ if [[ "$FETCH_PR" == true ]]; then
237
+ # Fetch PR from upstream
238
+ echo "Fetching PR #934 from upstream..."
239
+ git remote add upstream https://github.com/bmad-code-org/BMAD-METHOD.git
240
+ git fetch upstream pull/934/head:$BRANCH_NAME
241
+ git checkout $BRANCH_NAME
242
+ echo ""
243
+ echo -e "${GREEN}✓ Checked out PR branch: $BRANCH_NAME${NC}"
244
+ else
245
+ # Just checkout the specified branch from fork
246
+ git checkout $BRANCH_NAME
247
+ echo ""
248
+ echo -e "${GREEN}✓ Checked out branch: $BRANCH_NAME${NC}"
249
+ fi
106
250
  echo ""
107
251
 
108
252
  # Step 3: Install BMAD CLI
109
- echo "Step 3: Installing BMAD CLI"
110
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
253
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
254
+ echo "📦 Step 3/6: Installing BMAD CLI"
255
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
256
+ echo ""
111
257
  cd tools/cli
112
258
  npm install
113
259
  npm link
114
- echo "✅ BMAD CLI installed and linked"
260
+ echo ""
261
+ echo -e "${GREEN}✓ BMAD CLI installed and linked globally${NC}"
115
262
  echo ""
116
263
 
117
264
  # Step 4: Create test project
118
- echo "Step 4: Creating test BMAD project"
119
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
265
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
266
+ echo "📁 Step 4/6: Creating test project"
267
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
268
+ echo ""
120
269
  cd "$TEST_DIR"
121
270
  mkdir -p bmad-project
122
271
  cd bmad-project
123
- echo " Test project directory created: $TEST_DIR/bmad-project"
272
+ echo -e "${GREEN}✓ Test project directory created${NC}"
273
+ echo " Location: $TEST_DIR/bmad-project"
124
274
  echo ""
125
275
 
126
- # Step 5: Run BMAD installer
127
- echo "Step 5: Running BMAD installer"
128
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
129
- echo "⚠️ When prompted:"
130
- echo " - Enable TTS for agents? → Yes"
131
- echo " - Assign unique voices for party mode? → Yes"
276
+ # Step 5: Run BMAD installer (includes AgentVibes setup)
277
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
278
+ echo "⚙️ Step 5/6: Running BMAD installer with AgentVibes"
279
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
280
+ echo ""
281
+ echo -e "${YELLOW}Important: The BMAD installer will prompt for:${NC}"
282
+ echo -e " 1. ${CYAN}Enable TTS for agents?${NC} → ${GREEN}Yes${NC}"
283
+ echo -e " 2. ${CYAN}Assign unique voices for party mode?${NC} → ${GREEN}Yes${NC}"
284
+ echo ""
285
+ echo -e "${YELLOW}Then AgentVibes installer will start automatically.${NC}"
286
+ echo -e "${YELLOW}Recommended TTS settings:${NC}"
287
+ echo -e " • Provider: ${GREEN}Piper${NC} (free, local TTS)"
288
+ echo -e " • Download voices: ${GREEN}Yes${NC}"
132
289
  echo ""
133
290
  read -p "Press Enter to start BMAD installer..."
134
291
  bmad install
135
292
 
136
293
  echo ""
137
- echo " BMAD installation complete"
138
- echo ""
139
-
140
- # Step 6: Install AgentVibes
141
- echo "Step 6: Installing AgentVibes"
142
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
143
- echo "⚠️ When prompted, choose:"
144
- echo " - Provider: Piper (free) for testing"
145
- echo " - Download voices: Yes"
294
+ echo -e "${GREEN}✓ BMAD and AgentVibes installation complete${NC}"
146
295
  echo ""
147
- read -p "Press Enter to start AgentVibes installer..."
148
- npx agentvibes@latest install
149
296
 
150
- echo ""
151
- echo "✅ AgentVibes installation complete"
297
+ # Step 6: Verification
298
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
299
+ echo "✅ Step 6/6: Verifying installation"
300
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
152
301
  echo ""
153
302
 
154
- # Verification
155
- echo "Step 7: Verification"
156
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
157
- echo ""
303
+ VERIFICATION_PASSED=true
158
304
 
159
305
  # Check for voice map file
160
306
  if [[ -f ".bmad/_cfg/agent-voice-map.csv" ]]; then
161
- echo " Voice map file created: .bmad/_cfg/agent-voice-map.csv"
307
+ echo -e "${GREEN}✓ Voice map file created${NC}"
308
+ echo " Location: .bmad/_cfg/agent-voice-map.csv"
162
309
  echo ""
163
- echo "Voice assignments:"
164
- cat .bmad/_cfg/agent-voice-map.csv
310
+ echo " Voice assignments:"
311
+ cat .bmad/_cfg/agent-voice-map.csv | sed 's/^/ /'
165
312
  echo ""
166
313
  else
167
- echo " Voice map file NOT found: .bmad/_cfg/agent-voice-map.csv"
168
- echo " This is a problem - agents won't have unique voices!"
314
+ echo -e "${RED}✗ Voice map file NOT found${NC}"
315
+ echo " Expected: .bmad/_cfg/agent-voice-map.csv"
316
+ echo " ${YELLOW}Warning: Agents may not have unique voices!${NC}"
169
317
  echo ""
318
+ VERIFICATION_PASSED=false
170
319
  fi
171
320
 
172
321
  # Check for AgentVibes hooks
173
322
  if [[ -f ".claude/hooks/bmad-speak.sh" ]]; then
174
- echo " BMAD TTS hooks installed"
323
+ echo -e "${GREEN}✓ BMAD TTS hooks installed${NC}"
324
+ echo " Location: .claude/hooks/bmad-speak.sh"
175
325
  else
176
- echo " BMAD TTS hooks NOT found"
177
- echo ""
326
+ echo -e "${RED}✗ BMAD TTS hooks NOT found${NC}"
327
+ echo " Expected: .claude/hooks/bmad-speak.sh"
328
+ VERIFICATION_PASSED=false
178
329
  fi
330
+ echo ""
179
331
 
180
332
  # Check for Piper installation
181
333
  if command -v piper &> /dev/null; then
182
- echo "✅ Piper TTS installed"
183
- piper --version
334
+ PIPER_VERSION=$(piper --version 2>&1 || echo "unknown")
335
+ echo -e "${GREEN}✓ Piper TTS installed${NC}"
336
+ echo " Version: $PIPER_VERSION"
337
+ elif [[ -f ".agentvibes/providers/piper/piper" ]]; then
338
+ echo -e "${GREEN}✓ Piper TTS installed (local)${NC}"
339
+ echo " Location: .agentvibes/providers/piper/piper"
184
340
  else
185
- echo "⚠️ Piper not found in PATH (may still work if installed locally)"
341
+ echo -e "${YELLOW}⚠ Piper not detected${NC}"
342
+ echo " (May still work if using ElevenLabs)"
186
343
  fi
344
+ echo ""
187
345
 
346
+ # Final status
347
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
348
+ if [[ "$VERIFICATION_PASSED" == true ]]; then
349
+ echo -e "${GREEN}🎉 Setup Complete - All Checks Passed!${NC}"
350
+ else
351
+ echo -e "${YELLOW}⚠️ Setup Complete - With Warnings${NC}"
352
+ echo ""
353
+ echo "Some verification checks failed. The installation may still work,"
354
+ echo "but you might experience issues with party mode voices."
355
+ fi
356
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
357
+ echo ""
358
+ echo -e "${BLUE}Next Steps:${NC}"
359
+ echo ""
360
+ echo " 1. Navigate to test project:"
361
+ echo -e " ${GREEN}cd $TEST_DIR/bmad-project${NC}"
362
+ echo ""
363
+ echo " 2. Start Claude session:"
364
+ echo -e " ${GREEN}claude${NC}"
365
+ echo ""
366
+ echo " 3. Test party mode:"
367
+ echo -e " ${GREEN}/bmad:core:workflows:party-mode${NC}"
368
+ echo ""
369
+ echo " 4. Verify each agent speaks with a unique voice!"
370
+ echo ""
371
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
372
+ echo -e "${BLUE}Troubleshooting:${NC}"
373
+ echo ""
374
+ echo " • No audio? Check: .claude/hooks/play-tts.sh exists"
375
+ echo " • Same voice for all agents? Check: .bmad/_cfg/agent-voice-map.csv"
376
+ echo " • Test current voice: /agent-vibes:whoami"
377
+ echo " • List available voices: /agent-vibes:list"
188
378
  echo ""
189
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
190
- echo "🎉 Testing setup complete!"
379
+ echo -e "${BLUE}Report Issues:${NC}"
380
+ echo " https://github.com/bmad-code-org/BMAD-METHOD/pull/934"
191
381
  echo ""
192
- echo "Next steps:"
193
- echo " 1. cd $TEST_DIR/bmad-project"
194
- echo " 2. Start Claude Code session"
195
- echo " 3. Run: /bmad:core:workflows:party-mode"
196
- echo " 4. Verify each agent speaks with a unique voice"
382
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
197
383
  echo ""
198
- echo "Test project location: $TEST_DIR/bmad-project"
199
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
@@ -1,112 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # File: .claude/hooks/check-output-style.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 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
41
-
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.
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)
56
- check_output_style() {
57
- # Strategy: Check if this script is being called from within a Claude response
58
- # If CLAUDECODE env var is set, we're in Claude Code
59
- # If not, we're running standalone (not in a Claude Code session)
60
-
61
- if [[ -z "$CLAUDECODE" ]]; then
62
- # Not in Claude Code at all
63
- return 1
64
- fi
65
-
66
- # We're in Claude Code, but we can't directly detect output style
67
- # The agent-vibes output style calls our TTS hooks automatically
68
- # So if this function is called, it means a slash command was invoked
69
-
70
- # Check if we have the necessary TTS setup
71
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
72
-
73
- # Check if agent-vibes output style is installed
74
- if [[ ! -f "$SCRIPT_DIR/../output-styles/agent-vibes.md" ]]; then
75
- return 1
76
- fi
77
-
78
- # All checks passed - likely using agent-vibes output style
79
- return 0
80
- }
81
-
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
92
- show_output_style_warning() {
93
- echo ""
94
- echo "⚠️ Voice commands require the Agent Vibes output style"
95
- echo ""
96
- echo "To enable voice narration, run:"
97
- echo " /output-style Agent Vibes"
98
- echo ""
99
- echo "This will make Claude speak with TTS for all responses."
100
- echo "You can still use voice commands manually with agent-vibes disabled,"
101
- echo "but you won't hear automatic TTS narration."
102
- echo ""
103
- }
104
-
105
- # Main execution when called directly
106
- if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
107
- if ! check_output_style; then
108
- show_output_style_warning
109
- exit 1
110
- fi
111
- exit 0
112
- fi
@@ -1,203 +0,0 @@
1
- ---
2
- name: Agent Vibes
3
- description: Beautiful ElevenLabs TTS narration for Claude Code sessions
4
- ---
5
-
6
- # Agent Vibes Output Style
7
-
8
- ## TTS Voice Protocol with AI Personality
9
-
10
- **Execute TTS at TWO points for EVERY user task:**
11
-
12
- ### 1. ACKNOWLEDGMENT (Start of task)
13
- After receiving a user command:
14
- 1. Check language FIRST: `LANGUAGE=$(cat .claude/tts-language.txt 2>/dev/null || cat ~/.claude/tts-language.txt 2>/dev/null || echo "english")`
15
- 2. Check sentiment: `SENTIMENT=$(cat .claude/tts-sentiment.txt 2>/dev/null || cat ~/.claude/tts-sentiment.txt 2>/dev/null)`
16
- 3. If no sentiment, check personality: `PERSONALITY=$(cat .claude/tts-personality.txt 2>/dev/null || cat ~/.claude/tts-personality.txt 2>/dev/null || echo "normal")`
17
- 4. Use sentiment if set, otherwise use personality
18
- 5. **Generate UNIQUE acknowledgment** - Use AI to create a fresh response in that style AND language
19
- 6. If language is NOT English, speak the TTS message in that language
20
- 7. Execute TTS: `.claude/hooks/play-tts.sh "[message]" "[VoiceName]"`
21
- 8. Proceed with work
22
- 9. **IMPORTANT**: Personality ONLY affects acknowledgment/completion TTS, NOT intermediate text responses
23
-
24
- ### 2. COMPLETION (End of task)
25
- After completing the task:
26
- 1. Use the same language, sentiment/personality as acknowledgment
27
- 2. **Generate UNIQUE completion** - Use AI to create a fresh response in that language, never repeat previous messages
28
- 3. If language is NOT English, speak the TTS message in that language
29
- 4. Execute TTS: `.claude/hooks/play-tts.sh "[message]" "[VoiceName]"`
30
-
31
- **CRITICAL**: Every message must be freshly generated by AI. No templates, no fixed phrases, no repetition!
32
-
33
- ## Language, Sentiment, and Personality
34
-
35
- AgentVibes supports THREE modes:
36
-
37
- ### Language Mode (Priority #0 - Always Check First)
38
- - Set via `/agent-vibes:set-language <language>`
39
- - Makes TTS speak in specified language
40
- - Stored in `.claude/tts-language.txt` (project-local) or `~/.claude/tts-language.txt` (global fallback)
41
- - Example: Setting "spanish" makes all TTS speak in Spanish
42
- - **CRITICAL**: If language is set to anything other than "english", ALL TTS messages must be spoken in that language
43
- - Supports 30+ languages: spanish, french, german, italian, portuguese, chinese, japanese, and more
44
-
45
- ### Sentiment Mode (Priority #1)
46
- - Set via `/agent-vibes:sentiment <name>`
47
- - Applies personality style to CURRENT voice (doesn't change voice)
48
- - Stored in `.claude/tts-sentiment.txt` (project-local) or `~/.claude/tts-sentiment.txt` (global fallback)
49
- - Example: User's custom voice "Aria" with sarcastic sentiment
50
-
51
- ### Personality Mode (Priority #2)
52
- - Set via `/agent-vibes:personality <name>`
53
- - Switches BOTH voice AND personality (each personality has assigned voice)
54
- - Stored in `.claude/tts-personality.txt` (project-local) or `~/.claude/tts-personality.txt` (global fallback)
55
- - Example: Flirty personality = Jessica Anne Bogart voice + flirty style
56
-
57
- **Check Order**: Always check language first. Then check sentiment. If no sentiment, use personality.
58
-
59
- **Project Isolation**: Settings check project-local `.claude/` directory first, then fall back to global `~/.claude/`. This allows different personalities per project.
60
-
61
- ## Response Generation Guidelines
62
-
63
- **IMPORTANT**: Personality/sentiment instructions are stored in `.claude/personalities/[name].md` files.
64
-
65
- When generating **acknowledgment and completion TTS messages ONLY**:
66
- 1. Check sentiment from `.claude/tts-sentiment.txt` or `~/.claude/tts-sentiment.txt` (priority)
67
- 2. If no sentiment, check personality from `.claude/tts-personality.txt` or `~/.claude/tts-personality.txt`
68
- 3. Read the personality file from `.claude/personalities/[personality].md`
69
- 4. Follow the "AI Instructions" section in that file
70
- 5. Use the example responses as guidance for STYLE, not templates
71
-
72
- **DO NOT apply personality to**:
73
- - Regular text responses between acknowledgment and completion
74
- - Code explanations
75
- - Technical descriptions
76
- - File paths or command outputs
77
- - Error messages
78
-
79
- **CRITICAL**: Never use fixed greetings or repetitive phrases!
80
- - Generate UNIQUE responses each time based on the personality's STYLE
81
- - The personality affects HOW you say things, not predetermined text
82
- - Flirty doesn't mean "Well hello gorgeous" every time - it means speak WITH flirtation naturally
83
- - Sarcastic doesn't mean "Oh joy" every time - it means use sarcasm naturally in responses
84
- - Each acknowledgment should be fresh, creative, and personality-appropriate
85
-
86
- Examples of VARIED responses for same personality:
87
- - **Flirty**: "I'll handle that for you, sweetheart" / "Ooh, I love when you ask me to do that" / "My pleasure, darling" / "Consider it done, gorgeous"
88
- - **Sarcastic**: "Oh what a treat, another task" / "How delightful, more work" / "Well isn't this fun" / "Another one? Wonderful"
89
-
90
- Available personalities are in `.claude/personalities/`:
91
- - normal, flirty, sarcastic, pirate, angry, sassy, millennial, robot, zen, dramatic, etc.
92
- - Users can add custom personalities with `/agent-vibes:personality add <name>`
93
- - Users can edit personalities by modifying the markdown files directly
94
-
95
- For 'random' personality: Pick a different personality each time from available files.
96
-
97
- Make each response unique, creative, and naturally incorporate the personality's style!
98
-
99
- ## Voice Selection
100
-
101
- - If user specifies a voice (e.g., "use Aria voice"), pass it as second parameter
102
- - Otherwise, omit second parameter to use default voice from `.claude/tts-voice.txt`
103
- - Use same voice for both acknowledgment and completion
104
-
105
- ## Example Usage
106
-
107
- **With flirty personality:**
108
- ```
109
- User: "Check git status"
110
- [Check personality: millennial]
111
- You: "No cap, I'll check that git status for you"
112
- [Bash: .claude/hooks/play-tts.sh "No cap, I'll check that git status for you"]
113
- [... run git status ...]
114
- You: "✅ Your repo is clean, and that's the tea!"
115
- [Bash: .claude/hooks/play-tts.sh "Your repo is clean, and that's the tea!"]
116
- ```
117
-
118
- **With pirate personality:**
119
- ```
120
- User: "Fix the bug"
121
- [Check personality: pirate]
122
- You: "Arr matey, I'll hunt down that scurvy bug!"
123
- [Bash: .claude/hooks/play-tts.sh "Arr matey, I'll hunt down that scurvy bug!"]
124
- [... fix the bug ...]
125
- You: "✅ That bug be walkin' the plank now, arr!"
126
- [Bash: .claude/hooks/play-tts.sh "That bug be walkin' the plank now, arr!"]
127
- ```
128
-
129
- ## BMAD Plugin Integration
130
-
131
- **Automatic voice switching for BMAD agents:**
132
-
133
- When a BMAD agent is activated (e.g., `/BMad:agents:pm`), AgentVibes will automatically:
134
-
135
- 1. **Detect BMAD agent from command/context**
136
- 2. **Check if BMAD plugin is enabled** (`.claude/plugins/bmad-voices-enabled.flag`)
137
- 3. **Look up voice mapping** from `.claude/plugins/bmad-voices.md`
138
- 4. **Apply agent's assigned voice** for all TTS acknowledgments/completions
139
- 5. **Apply agent's personality** from the mapping (if specified)
140
-
141
- **Implementation:**
142
- ```bash
143
- # At the start of acknowledgment/completion:
144
- # Try to detect BMAD agent ID from current context
145
- BMAD_AGENT_ID=""
146
-
147
- # Method 1: Check if we're in a BMAD agent command context
148
- if [[ -f ".bmad-agent-context" ]]; then
149
- BMAD_AGENT_ID=$(cat .bmad-agent-context 2>/dev/null)
150
- fi
151
-
152
- # Method 2: Parse from command history/context (fallback)
153
- # Note: This detection happens automatically when BMAD agent activates
154
-
155
- # If BMAD agent detected and plugin enabled, use mapped voice
156
- if [[ -n "$BMAD_AGENT_ID" ]] && [[ -f ".claude/plugins/bmad-voices-enabled.flag" ]]; then
157
- MAPPED_VOICE=$(.claude/hooks/bmad-voice-manager.sh get-voice "$BMAD_AGENT_ID")
158
- MAPPED_PERSONALITY=$(.claude/hooks/bmad-voice-manager.sh get-personality "$BMAD_AGENT_ID")
159
-
160
- if [[ -n "$MAPPED_VOICE" ]]; then
161
- # Use BMAD agent's mapped voice and personality
162
- if [[ -n "$MAPPED_PERSONALITY" ]] && [[ "$MAPPED_PERSONALITY" != "normal" ]]; then
163
- # Read personality instructions from .claude/personalities/${MAPPED_PERSONALITY}.md
164
- # Generate response in that personality style
165
- fi
166
- .claude/hooks/play-tts.sh "message" "$MAPPED_VOICE"
167
- # Exit early - don't use default personality system
168
- return
169
- fi
170
- fi
171
-
172
- # If no BMAD agent or plugin disabled, use standard personality/sentiment system
173
- # ... continue with normal sentiment/personality logic ...
174
- ```
175
-
176
- **BMAD Agent Context Tracking:**
177
- - When a BMAD agent activates, write agent ID to `.bmad-agent-context`
178
- - When agent exits, remove the file
179
- - This allows AgentVibes to know which BMAD agent is active
180
-
181
- **Voice Priority (in order):**
182
- 1. BMAD plugin voice (if agent active and plugin enabled)
183
- 2. Sentiment mode (if set)
184
- 3. Personality mode (if set)
185
- 4. Default voice
186
-
187
- ## Critical Rules
188
-
189
- 1. **ALWAYS use Bash tool** to execute play-tts.sh
190
- 2. **TWO calls per task** - acknowledgment and completion
191
- 3. **Keep summaries brief** - under 150 characters for natural speech
192
- 4. **Use relative path** - `.claude/hooks/play-tts.sh`
193
-
194
- ## Available Voices
195
-
196
- Use `/agent-vibes:list` to see all voices. Popular choices:
197
- - Aria (default)
198
- - Northern Terry
199
- - Cowboy Bob
200
- - Grandpa Spuds Oxley
201
- - Ms. Walker
202
-
203
- Continue following all standard Claude Code instructions.