Skip to content

feat: AgentVibes TTS integration — install prompt + core skill#2181

Open
paulpreibisch wants to merge 3 commits intobmad-code-org:mainfrom
paulpreibisch:feat/agentvibes-install-skill
Open

feat: AgentVibes TTS integration — install prompt + core skill#2181
paulpreibisch wants to merge 3 commits intobmad-code-org:mainfrom
paulpreibisch:feat/agentvibes-install-skill

Conversation

@paulpreibisch
Copy link
Copy Markdown
Contributor

Summary

Adds optional AgentVibes TTS integration to the BMAD install flow, giving users an easy path to voice-enable their agents (especially party mode).

Changes

src/core-skills/bmad-install-agentvibes/ (new skill)

  • Guides users through npx agentvibes install post-BMAD-setup
  • Documents per-agent voice config, platform support, and troubleshooting
  • Registered in module-help.csv with menu code AV

tools/installer/core/installer.js

  • After the install summary, shows a 3-option select prompt:
    • Yes — runs npx agentvibes install inline
    • No — skip, reminder shown in Next Steps
    • Tell me more — displays description + GitHub link without leaving the installer
  • Non-fatal: cancelled prompt or install failure doesn't affect the BMAD install result
  • Default is No so it's fully opt-in and non-intrusive

Why

Party mode agents are currently silent unless users independently discover and install AgentVibes. This surfaces the integration at exactly the right moment — right after BMAD is set up.

Testing

```bash
npm link # from BMAD-METHOD root
mkdir ~/test-project && cd ~/test-project
bmad install

AgentVibes prompt appears after install summary

```

🤖 Generated with Claude Code

paulpreibisch and others added 3 commits April 1, 2026 09:57
Adds a new core skill that guides users through installing AgentVibes
TTS so BMAD party mode agents speak with unique voices.

- New skill: src/core-skills/bmad-install-agentvibes/SKILL.md
  Documents npx agentvibes install, post-install voice config via
  /agent-vibes:bmad, and troubleshooting steps
- module-help.csv: registers skill with menu code AV under Core module

AgentVibes is cross-platform (Windows/Mac/Linux/WSL) and integrates
with bmad-party-mode so each agent speaks with their own distinct voice.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- renderInstallSummary now shows AgentVibes mention in Next Steps
- After summary, prompts user: install AgentVibes now? (default: no)
  If yes, runs `npx agentvibes install` inline
- Non-fatal: cancelled prompt or install failure doesn't break bmad install

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace yes/no confirm with: install now / skip / tell me more.
'Tell me more' shows description + GitHub link inline without leaving
the installer flow.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@augmentcode
Copy link
Copy Markdown

augmentcode bot commented Apr 1, 2026

🤖 Augment PR Summary

Summary: Adds an optional AgentVibes TTS integration surfaced at the end of the BMAD install flow to help users voice-enable their agents (especially party mode).

Changes:

  • Introduces a new core skill bmad-install-agentvibes with install/config/troubleshooting guidance
  • Extends the installer “Next steps” summary with an AgentVibes callout
  • Adds a 3-choice installer prompt (install / skip / info) and runs npx agentvibes install when opted in
Notes: Intended to be fully opt-in and not impact BMAD installation success if skipped or AgentVibes setup fails.

🤖 Was this summary useful? React with 👍 or 👎

Copy link
Copy Markdown

@augmentcode augmentcode bot left a comment

Choose a reason for hiding this comment

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

Review completed. 4 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

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.

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.

' 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.

## 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.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 1, 2026

📝 Walkthrough

Walkthrough

This PR adds AgentVibes TTS integration to BMAD by introducing skill documentation for the installation process and modifying the installer to prompt users about AgentVibes installation following successful BMAD setup, with options to install, skip, or view details.

Changes

Cohort / File(s) Summary
AgentVibes Integration
src/core-skills/bmad-install-agentvibes/SKILL.md, tools/installer/core/installer.js
Adds skill documentation describing AgentVibes as an open-source TTS system for agent voices and personalities, including installation instructions and troubleshooting. Installer now displays an AgentVibes callout post-installation with conditional prompt offering installation via npx agentvibes install, info display, or skip options; failures are silently caught.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • BMAD-METHOD#1932: Modifies the same installer summary output by separating skill vs. agent counts, creating potential interaction with this AgentVibes callout addition.

Suggested reviewers

  • bmadcode
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: adding AgentVibes TTS integration with both an install prompt and a core skill documentation.
Description check ✅ Passed The description clearly explains the feature, changes made, rationale, and testing instructions, all directly related to the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
tools/installer/core/installer.js (1)

1-1: ⚠️ Potential issue | 🟡 Minor

Fix Prettier formatting issues.

The pipeline reports code style issues. Run prettier --write tools/installer/core/installer.js to resolve.

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

In `@tools/installer/core/installer.js` at line 1, Prettier flagged formatting in
the require line; run the formatter and commit the change: run `prettier
--write` on the file containing the `const path = require('node:path');` line
(or apply your editor's Prettier fix), ensure the `const path =
require('node:path');` statement matches the project's Prettier style, then
stage and commit the formatted file.
🧹 Nitpick comments (3)
tools/installer/core/installer.js (3)

1159-1163: Consider adding a timeout to the execSync call.

If npx agentvibes install hangs (network issues, user prompt inside AgentVibes, etc.), the BMAD installer will block indefinitely. Consider adding a reasonable timeout.

⏱️ Proposed fix to add timeout
         if (agentVibesChoice === 'install') {
           const { execSync } = require('node:child_process');
           await prompts.log.step('Running npx agentvibes install...');
-          execSync('npx agentvibes install', { stdio: 'inherit' });
+          execSync('npx agentvibes install', { stdio: 'inherit', timeout: 300000 }); // 5 min timeout
🤖 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 1159 - 1163, The execSync
call running 'npx agentvibes install' can hang; update the block handling
agentVibesChoice (the branch that checks agentVibesChoice === 'install') to pass
a timeout option to execSync (e.g., { stdio: 'inherit', timeout: 5*60*1000 })
and wrap the execSync invocation in a try/catch to handle timeout errors and log
a helpful message (or abort gracefully) so the installer won't block
indefinitely.

1172-1174: Silent catch may hide useful diagnostic information.

The catch block intentionally swallows errors to keep the flow non-fatal, which aligns with PR objectives. However, logging at debug/verbose level could help diagnose AgentVibes installation failures without breaking the flow.

🔍 Proposed enhancement for debugging
       } catch {
-        // Prompt cancelled or AgentVibes install failed — non-fatal
+        // Prompt cancelled or AgentVibes install failed — non-fatal
+        // Consider: if (process.env.BMAD_VERBOSE_INSTALL) await prompts.log.warn('AgentVibes prompt skipped or install failed');
       }
🤖 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 1172 - 1174, The empty catch
swallowing AgentVibes install errors should be changed to capture the exception
and log it at debug/verbose level without altering the non-fatal behavior:
change the catch to catch (err) and call the project's debug logger (e.g.,
logger.debug or processLogger.debug) with a clear message like "AgentVibes
install cancelled/failed" plus the err object; ensure the flow still
returns/continues as before so behavior remains non-fatal.

1163-1171: "Tell me more" doesn't offer a follow-up action.

After displaying the info, the flow exits without re-prompting. Users who selected "Tell me more" must manually run npx agentvibes install afterwards. Consider looping back to the prompt or explicitly noting this in the output.

🤖 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 1163 - 1171, The "Tell me
more" branch (when agentVibesChoice === 'info') currently only calls
prompts.log.info and then exits, so users are left without a follow-up action;
update this branch so after prompts.log.info(...) you either loop back to the
agentVibes selection prompt (re-evaluating agentVibesChoice) or present a clear
next-step prompt offering to run the installer (e.g., ask "Run npx agentvibes
install now?") and act on the response; modify the code around agentVibesChoice
and the prompts.log.info call to implement the re-prompt or the explicit
follow-up install prompt.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/core-skills/bmad-install-agentvibes/SKILL.md`:
- Around line 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).

In `@tools/installer/core/installer.js`:
- Around line 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.

---

Outside diff comments:
In `@tools/installer/core/installer.js`:
- Line 1: Prettier flagged formatting in the require line; run the formatter and
commit the change: run `prettier --write` on the file containing the `const path
= require('node:path');` line (or apply your editor's Prettier fix), ensure the
`const path = require('node:path');` statement matches the project's Prettier
style, then stage and commit the formatted file.

---

Nitpick comments:
In `@tools/installer/core/installer.js`:
- Around line 1159-1163: The execSync call running 'npx agentvibes install' can
hang; update the block handling agentVibesChoice (the branch that checks
agentVibesChoice === 'install') to pass a timeout option to execSync (e.g., {
stdio: 'inherit', timeout: 5*60*1000 }) and wrap the execSync invocation in a
try/catch to handle timeout errors and log a helpful message (or abort
gracefully) so the installer won't block indefinitely.
- Around line 1172-1174: The empty catch swallowing AgentVibes install errors
should be changed to capture the exception and log it at debug/verbose level
without altering the non-fatal behavior: change the catch to catch (err) and
call the project's debug logger (e.g., logger.debug or processLogger.debug) with
a clear message like "AgentVibes install cancelled/failed" plus the err object;
ensure the flow still returns/continues as before so behavior remains non-fatal.
- Around line 1163-1171: The "Tell me more" branch (when agentVibesChoice ===
'info') currently only calls prompts.log.info and then exits, so users are left
without a follow-up action; update this branch so after prompts.log.info(...)
you either loop back to the agentVibes selection prompt (re-evaluating
agentVibesChoice) or present a clear next-step prompt offering to run the
installer (e.g., ask "Run npx agentvibes install now?") and act on the response;
modify the code around agentVibesChoice and the prompts.log.info call to
implement the re-prompt or the explicit follow-up install prompt.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 9d7de8ce-b481-410a-b2c2-cbd2f9b278c0

📥 Commits

Reviewing files that changed from the base of the PR and between 2ea917e and adb2506.

⛔ Files ignored due to path filters (1)
  • src/core-skills/module-help.csv is excluded by !**/*.csv
📒 Files selected for processing (2)
  • src/core-skills/bmad-install-agentvibes/SKILL.md
  • tools/installer/core/installer.js

Comment on lines +64 to +65
- GitHub: https://github.com/paulpreibisch/AgentVibes
- Docs: `agentvibes --help`
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).

Comment on lines +1135 to +1175
if (!this._silentConfig) {
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' });
} 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 {
// Prompt cancelled or AgentVibes install failed — non-fatal
}
}
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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant