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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions src/core-skills/bmad-install-agentvibes/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
---
name: bmad-install-agentvibes
description: 'Install AgentVibes TTS voice system for BMAD agents. Gives each agent a unique voice, personality, and audio effects. Use when user wants to add voice/TTS to their BMAD setup, or when bmad-party-mode is active and agents are silent.'
---

# Install AgentVibes

AgentVibes is an open-source Text-to-Speech system that gives BMAD agents unique voices, personalities, and audio effects. Once installed, party mode agents speak aloud — each with their own voice.

## What AgentVibes Provides

- **Per-agent voices** — each BMAD agent gets a distinct voice via `bmad-voice-map.json`
- **Cross-platform** — Windows (SAPI + Piper), macOS, Linux, WSL
- **Personalities & effects** — reverb, background music, speed, sentiment
- **Party mode integration** — agents introduce themselves and speak sequentially

## Installation

Run the installer in the terminal:

```bash
npx agentvibes install
```

Or if you prefer a global install first:

```bash
npm install -g agentvibes
agentvibes install
```

**The installer will:**
1. Detect your platform (Windows/Mac/Linux/WSL)
2. Install the appropriate TTS provider (Piper recommended for best quality, SAPI as zero-dependency fallback on Windows)
3. Configure Claude Code hooks so agents speak automatically
4. Set up `bmad-speak.sh` / `bmad-speak.ps1` integration for party mode

## Post-Install: Configure Agent Voices

After installing, configure per-agent voices for party mode:

```
/agent-vibes:bmad
```

This opens the BMAD voice configuration where you can assign each agent a distinct voice, personality, and effects profile.

## Verify Installation

```bash
agentvibes whoami
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This skill mixes npx agentvibes ... with bare agentvibes ... commands; if the user followed the npx agentvibes install path (no global install), agentvibes may not be on PATH, so the verify/troubleshooting commands could fail. It may help to keep the invocation consistent (or explicitly require global install for the non-npx commands).

Severity: low

Other Locations
  • src/core-skills/bmad-install-agentvibes/SKILL.md:58
  • src/core-skills/bmad-install-agentvibes/SKILL.md:60
  • src/core-skills/bmad-install-agentvibes/SKILL.md:65

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

```

Should display the active voice and provider. If party mode is active, agents will now speak when you run `/bmad-party-mode`.

## Troubleshooting

- **Agents still silent after install**: Run `agentvibes install` again — it is idempotent
- **Windows users**: Ensure PowerShell execution policy allows scripts: `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`
- **Voice quality**: Install Piper for neural TTS — `agentvibes install` will prompt you

## More Info

- GitHub: https://github.com/paulpreibisch/AgentVibes
- Docs: `agentvibes --help`
Comment on lines +64 to +65
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix bare URL to resolve linting failure.

The pipeline fails with MD034 (no-bare-urls). Convert the bare URL to a proper Markdown link.

🔧 Proposed fix
-- GitHub: https://github.com/paulpreibisch/AgentVibes
+- GitHub: <https://github.com/paulpreibisch/AgentVibes>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- GitHub: https://github.com/paulpreibisch/AgentVibes
- Docs: `agentvibes --help`
- GitHub: <https://github.com/paulpreibisch/AgentVibes>
- Docs: `agentvibes --help`
🧰 Tools
🪛 GitHub Actions: Quality & Validation

[error] 64-64: markdownlint-cli2 reported MD034/no-bare-urls: Bare URL used [Context: "https://github.com/paulpreibis..."]

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/core-skills/bmad-install-agentvibes/SKILL.md` around lines 64 - 65,
Replace the bare URL on the "GitHub:
https://github.com/paulpreibisch/AgentVibes" line with a Markdown link to
satisfy MD034; e.g., change that line in SKILL.md to "GitHub:
[paulpreibisch/AgentVibes](https://github.com/paulpreibisch/AgentVibes)" (leave
the "Docs: `agentvibes --help`" line unchanged).

1 change: 1 addition & 0 deletions src/core-skills/module-help.csv
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs
Core,bmad-brainstorming,Brainstorming,BSP,Use early in ideation or when stuck generating ideas.,,anytime,,,false,{output_folder}/brainstorming,brainstorming session
Core,bmad-party-mode,Party Mode,PM,Orchestrate multi-agent discussions when you need multiple perspectives or want agents to collaborate.,,anytime,,,false,,
Core,bmad-install-agentvibes,Install AgentVibes,AV,Install AgentVibes TTS so party mode agents speak with unique voices. Run once after BMAD setup.,,anytime,,,false,,
Core,bmad-help,BMad Help,BH,,,anytime,,,false,,
Core,bmad-index-docs,Index Docs,ID,Use when LLM needs to understand available docs without loading everything.,,anytime,,,false,,
Core,bmad-shard-doc,Shard Document,SD,Use when doc becomes too large (>500 lines) to manage effectively.,[path],anytime,,,false,,
Expand Down
51 changes: 51 additions & 0 deletions tools/installer/core/installer.js
Original file line number Diff line number Diff line change
Expand Up @@ -1121,7 +1121,58 @@ class Installer {
lines.push(` Invoke the ${color.cyan('bmad-help')} skill in your IDE Agent to get started`);
}

// AgentVibes TTS suggestion
lines.push(
'',
` ${color.cyan('🎙 Want your BMAD agents to speak?')}`,
` Install AgentVibes TTS: ${color.dim('npx agentvibes install')}`,
` Gives each agent a unique voice in party mode and beyond.`,
);

await prompts.note(lines.join('\n'), 'BMAD is ready to use!');

// Optional AgentVibes install prompt
if (!this._silentConfig) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this._silentConfig doesn’t appear to be initialized anywhere in Installer, so this condition will always pass and the AgentVibes prompt will still show in non-interactive/--yes flows. That can unexpectedly block headless installs waiting for user input.

Severity: medium

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

try {
const agentVibesChoice = await prompts.select({
message: '🎙 Give your BMAD agents a voice? (AgentVibes TTS)',
choices: [
{
name: 'Yes — install AgentVibes now',
value: 'install',
hint: 'runs npx agentvibes install',
},
{
name: 'No — I\'ll do it later',
value: 'skip',
hint: 'npx agentvibes install',
},
{
name: 'Tell me more',
value: 'info',
hint: 'github.com/paulpreibisch/AgentVibes',
},
],
default: 'skip',
});

if (agentVibesChoice === 'install') {
const { execSync } = require('node:child_process');
await prompts.log.step('Running npx agentvibes install...');
execSync('npx agentvibes install', { stdio: 'inherit' });
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

execSync('npx agentvibes install', ...) runs in the current process working directory, not necessarily the configured install --directory target. If the user runs bmad install --directory ... from elsewhere, AgentVibes may install/configure hooks in the wrong project context.

Severity: medium

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

} else if (agentVibesChoice === 'info') {
await prompts.log.info(
'AgentVibes gives each BMAD agent a unique TTS voice, personality, and audio effects.\n' +
' Works on Windows (SAPI + Piper), macOS, Linux, and WSL.\n' +
' Party mode agents speak with their own voice — no more silent roundtables.\n\n' +
' GitHub: https://github.com/paulpreibisch/AgentVibes\n' +
' Install: npx agentvibes install'
);
}
} catch {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The empty catch {} makes an opted-in AgentVibes install failure silent, which can leave the user thinking TTS was installed successfully when it wasn’t. Consider at least emitting a warning/info message on failure while keeping the install non-fatal.

Severity: medium

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

// Prompt cancelled or AgentVibes install failed — non-fatal
}
}
Comment on lines +1135 to +1175
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if _silentConfig is ever set on Installer instances
rg -n '_silentConfig' tools/installer/

Repository: bmad-code-org/BMAD-METHOD

Length of output: 626


🏁 Script executed:

#!/bin/bash
# Check the Installer class definition and constructor
head -100 tools/installer/core/installer.js | cat -n

# Look for class definition and constructor
rg -n 'class Installer|constructor\s*\(' tools/installer/core/installer.js | head -20

Repository: bmad-code-org/BMAD-METHOD

Length of output: 5054


🏁 Script executed:

#!/bin/bash
# Check if Installer extends OfficialModules or has any relationship
rg -n 'extends|OfficialModules' tools/installer/core/installer.js | head -20

Repository: bmad-code-org/BMAD-METHOD

Length of output: 728


🏁 Script executed:

#!/bin/bash
# Check where renderInstallSummary is called from
rg -n 'renderInstallSummary' tools/installer/

Repository: bmad-code-org/BMAD-METHOD

Length of output: 247


🏁 Script executed:

#!/bin/bash
# Check if _silentConfig is initialized anywhere in Installer constructor
sed -n '1,150p' tools/installer/core/installer.js | rg -n 'this\._'

Repository: bmad-code-org/BMAD-METHOD

Length of output: 724


🏁 Script executed:

#!/bin/bash
# Check renderInstallSummary method signature
sed -n '1060,1080p' tools/installer/core/installer.js | cat -n

Repository: bmad-code-org/BMAD-METHOD

Length of output: 888


🏁 Script executed:

#!/bin/bash
# Check if context parameter contains _silentConfig or if it should
sed -n '1060,1085p' tools/installer/core/installer.js

Repository: bmad-code-org/BMAD-METHOD

Length of output: 835


_silentConfig is never initialized on Installer — AgentVibes prompt will always display.

The guard !this._silentConfig checks a property that does not exist on the Installer class. Since _silentConfig is only set in OfficialModules (a separate, independent instance) and never initialized in Installer's constructor, this._silentConfig will always be undefined, making the condition always true. The AgentVibes prompt will display in all installation scenarios, even if silent/non-interactive operation is expected.

Wire up _silentConfig to the installer's configuration state (or pass it via the context parameter to renderInstallSummary), or clarify if the prompt is intentionally always-on.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tools/installer/core/installer.js` around lines 1135 - 1175, The Installer
class uses this._silentConfig in renderInstallSummary but _silentConfig is never
initialized on Installer (only set on OfficialModules), so the AgentVibes prompt
always shows; fix by adding a boolean silentConfig property to Installer
(initialize it in the Installer constructor from the installer config or context
passed into renderInstallSummary) and use that property instead of an undefined
field, or update renderInstallSummary signature to accept a context/use
OfficialModules flag (e.g., pass a silent flag into renderInstallSummary and
check that instead of this._silentConfig); update references to
this._silentConfig in renderInstallSummary to the newly initialized property or
the passed-in parameter so the prompt is suppressed in silent/non-interactive
runs.

}

/**
Expand Down
Loading