BMAD-METHOD/tools/cli
Paul Preibisch 5702195ef7
Add Text-to-Speech Integration via TTS_INJECTION System (#934)
* feat: Add provider-agnostic TTS integration via injection point system

Implements comprehensive Text-to-Speech integration for BMAD agents using a generic
TTS_INJECTION marker system. When AgentVibes (or any compatible TTS provider) is
installed, all BMAD agents can speak their responses with unique AI voices.

## Key Features

**Provider-Agnostic Architecture**
- Uses generic `TTS_INJECTION` markers instead of vendor-specific naming
- Future-proof for multiple TTS providers beyond AgentVibes
- Clean separation - BMAD stays TTS-agnostic, providers handle injection

**Installation Flow**
- BMAD → AgentVibes: TTS instructions injected when AgentVibes detects existing BMAD installation
- AgentVibes → BMAD: TTS instructions injected during BMAD installation when AgentVibes detected
- User must manually create voice assignment file when AgentVibes installs first (documented limitation)

**Party Mode Voice Support**
- Each agent speaks with unique assigned voice in multi-agent discussions
- PM, Architect, Developer, Analyst, UX Designer, etc. - all with distinct voices

**Zero Breaking Changes**
- Fully backward compatible - works without any TTS provider
- `TTS_INJECTION` markers are benign HTML comments if not processed
- No changes to existing agent behavior or non-TTS workflows

## Implementation Details

**Files Modified:**
- `tools/cli/installers/lib/core/installer.js` - TTS injection processing logic
- `tools/cli/lib/ui.js` - AgentVibes detection and installation prompts
- `tools/cli/commands/install.js` - Post-install guidance for AgentVibes setup
- `src/utility/models/fragments/activation-rules.xml` - TTS_INJECTION marker for agents
- `src/core/workflows/party-mode/instructions.md` - TTS_INJECTION marker for party mode

**Injection Point System:**
```xml
<rules>
  - ALWAYS communicate in {communication_language}
  <!-- TTS_INJECTION:agent-tts -->
  - Stay in character until exit selected
</rules>
```

When AgentVibes is detected, the installer replaces this marker with:
```
- When responding to user messages, speak your responses using TTS:
  Call: `.claude/hooks/bmad-speak.sh '{agent-id}' '{response-text}'` after each response
  IMPORTANT: Use single quotes - do NOT escape special characters like ! or $
```

**Special Character Handling:**
- Explicit guidance to use single quotes without escaping
- Prevents "backslash exclamation" artifacts in speech

**User Experience:**
```
User: "How should we architect this feature?"
Architect: [Text response] + 🔊 [Professional voice explains architecture]
```

Party Mode:
```
PM (John): "I'll focus on user value..." 🔊 [Male professional voice]
UX Designer (Sara): "From a user perspective..." 🔊 [Female voice]
Architect (Marcus): "The technical approach..." 🔊 [Male technical voice]
```

## Testing

**Unit Tests:**  62/62 passing
- 49/49 schema validation tests
- 13/13 installation component tests

**Integration Testing:**
-  BMAD → AgentVibes (automatic injection)
-  AgentVibes → BMAD (automatic injection)
-  No TTS provider (markers remain as comments)

## Documentation

Comprehensive testing guide created with:
- Both installation scenario walkthroughs
- Verification commands and expected outputs
- Troubleshooting guidance

## Known Limitations

**AgentVibes → BMAD Installation Order:**
When AgentVibes installs first, voice assignment file must be created manually:
```bash
mkdir -p .bmad/_cfg
cat > .bmad/_cfg/agent-voice-map.csv << 'EOF'
agent_id,voice_name
pm,en_US-ryan-high
architect,en_US-danny-low
dev,en_US-joe-medium
EOF
```

This limitation exists to prevent false legacy v4 detection warnings from BMAD installer.

**Recommended:** Install BMAD first, then AgentVibes for automatic voice assignment.

## Related Work

**Companion Implementation:**
- Repository: paulpreibisch/AgentVibes
- Commits: 6 commits implementing injection processing and voice routing
- Features: Retroactive injection, file path extraction, escape stripping

**GitHub Issues:**
- paulpreibisch/AgentVibes#36 - BMAD agent ID support

## Breaking Changes

None. Feature is opt-in and requires separate TTS provider installation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: Enforce project hooks over global hooks in party mode

before, claude would sometimes favor global agent vibes hooks over project specific

* feat: Automate AgentVibes installer invocation after BMAD install

Instead of showing manual installation instructions, the installer now:
- Prompts "Press Enter to start AgentVibes installer..."
- Automatically runs npx agentvibes@latest install
- Handles errors gracefully with fallback instructions

This provides a seamless installation flow matching the test script's
interactive approach.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs: Add automated testing script and guide for PR #934

Added comprehensive testing tools for AgentVibes party mode integration:

- test-bmad-pr.sh: Fully automated installation and verification script
  - Interactive mode selection (official PR or custom fork)
  - Automatic BMAD CLI setup and linking
  - AgentVibes installation with guided prompts
  - Built-in verification checks for voice maps and hooks
  - Saved configuration for quick re-testing

- TESTING.md: Complete testing documentation
  - Quick start with one-line npx command
  - Manual installation alternative
  - Troubleshooting guide
  - Cleanup instructions

Testers can now run a single command to test the full AgentVibes integration
without needing to understand the complex setup process.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: Add shell: true to npx execSync to prevent permission denied error

The execSync call for 'npx agentvibes@latest install' was failing with
'Permission denied' because the shell was trying to execute 'agentvibes@latest'
directly instead of passing it as an argument to npx.

Adding shell: true ensures the command runs in a proper shell context
where npx can correctly interpret the @latest version syntax.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: Remove duplicate AgentVibes installation step from test script

The test script was calling AgentVibes installer twice:
1. BMAD installer now automatically runs AgentVibes (new feature)
2. Test script had a separate Step 6 that also ran AgentVibes

This caused the installer to run twice, with the second call failing
because it was already installed.

Changes:
- Removed redundant Step 6 (AgentVibes installation)
- Updated Step 5 to indicate it includes AgentVibes
- Updated step numbers from 7 to 6 throughout
- Added guidance that AgentVibes runs automatically

Now the flow is cleaner: BMAD installer handles everything!

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: Address bmadcode review - preserve variables and move TTS logic to injection

Fixes requested changes from PR review:

1. Preserve {bmad_folder} variable placeholder
   - Changed: {project_root}/.bmad/core/tasks/workflow.xml
   - To: {project_root}/{bmad_folder}/core/tasks/workflow.xml
   - Allows users to choose custom BMAD folder names during installation

2. Move TTS-specific hook guidance to injection system
   - Removed hardcoded hook enforcement from source files
   - Added hook guidance to processTTSInjectionPoints() in installer.js
   - Now only appears when AgentVibes is installed (via TTS_INJECTION)

3. Maintain TTS-agnostic source architecture
   - Source files remain clean of TTS-specific instructions
   - TTS details injected at install-time only when needed
   - Preserves provider-agnostic design principle

Changes made:
- src/core/workflows/party-mode/instructions.md
  - Reverted .bmad to {bmad_folder} variable
  - Replaced hardcoded hook guidance with <!-- TTS_INJECTION:party-mode -->
  - Removed <note> about play-tts.sh hook location

- tools/cli/installers/lib/core/installer.js
  - Added hook enforcement to party-mode injection replacement
  - Guidance now injected only when enableAgentVibes is true

Addresses review comments from bmadcode:
- "needs to remain the variable. it will get set in the file at the install destination."
- "items like this we will need to inject if user is using claude and TTS"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: Change 'claude-code' to 'claude' in test script instructions

The correct command to start Claude is 'claude', not 'claude-code'.
Updated line 362-363 in test-bmad-pr.sh to show the correct command.

* fix: Remove npm link from test script to avoid global namespace pollution

- Removed 'npm link' command that was installing BMAD globally
- Changed 'bmad install' to direct node execution using local clone
- Updated success message to reflect no global installation

This keeps testing fully isolated and prevents conflicts with:
- Existing BMAD installations
- Future official BMAD installs
- Orphaned symlinks when test directory is deleted

The test script now runs completely self-contained without modifying
the user's global npm environment.

---------

Co-authored-by: Claude Code <claude@anthropic.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Paul Preibisch <paul@paulpreibisch.com>
Co-authored-by: Brian <bmadcode@gmail.com>
2025-11-26 09:51:57 -06:00
..
bundlers fix: optimize agent compiler and complete handler cleanup 2025-11-23 21:28:50 -06:00
commands Add Text-to-Speech Integration via TTS_INJECTION System (#934) 2025-11-26 09:51:57 -06:00
installers/lib Add Text-to-Speech Integration via TTS_INJECTION System (#934) 2025-11-26 09:51:57 -06:00
lib Add Text-to-Speech Integration via TTS_INJECTION System (#934) 2025-11-26 09:51:57 -06:00
README.md feat: Adding support for Rovo Dev (#975) 2025-11-26 09:05:04 -06:00
bmad-cli.js npx with version selector 2025-10-26 23:42:56 -05:00
regenerate-manifests.js fix(installer): enforce manifest ide selection (#684) 2025-10-06 14:08:36 -05:00
test-yaml-builder.js agent updates 2025-10-02 21:45:59 -05:00

README.md

BMad CLI Tool

The BMad CLI handles installation and web bundling for the BMAD-METHOD framework. It compiles YAML agents into two distinct formats: IDE-integrated agents (filesystem-aware, customizable) and web bundles (self-contained, dependency-embedded).

Table of Contents


Overview

The CLI provides two primary functions:

  1. Installation: Compiles agents from YAML and installs to IDE environments with full customization support
  2. Bundling: Packages agents and dependencies into standalone web-ready XML files

Both use the same YAML→XML compilation engine but produce different outputs optimized for their environments.


Commands

Installation

# Interactive installation
npm run install:bmad

# Direct CLI usage
node tools/cli/bmad-cli.js install --target /path/to/project --modules bmm,bmb --ides codex

# Flags:
#   --target <path>        Target project directory
#   --modules <list>       Comma-separated: bmm, bmb, cis
#   --ides <list>          Comma-separated IDE codes (see IDE Support)
#   --non-interactive      Skip all prompts

Bundling

# Bundle all modules
npm run bundle

# Bundle specific items
node tools/cli/bundlers/bundle-web.js all              # Everything
node tools/cli/bundlers/bundle-web.js module bmm       # One module
node tools/cli/bundlers/bundle-web.js agent bmm pm     # One agent

Utilities

npm run bmad:status              # Installation status
npm run validate:bundles         # Validate web bundles
node tools/cli/regenerate-manifests.js    # Regenerate agent-manifest.csv files

Installation System

The installer is a multi-stage system that handles agent compilation, IDE integration, module configuration, platform-specific behaviors, and manifest generation.

Installation Flow

1. Collect User Input
   - Target directory, modules, IDEs
   - Custom module configuration (via install-config.yaml)

2. Pre-Installation
   - Validate target, check conflicts, backup existing installations
   - Resolve module dependencies (4-pass system)

3. Install Core + Modules
   - Copy files to {target}/{bmad_folder}/
   - Compile agents: YAML → Markdown/XML (forWebBundle: false)
   - Merge customize.yaml files if they exist
   - Inject activation blocks based on agent capabilities

4. IDE Integration
   - Initialize selected IDE handlers
   - Generate IDE-specific artifacts (commands/rules/workflows)
   - Execute platform-specific hooks (IDE+module combinations)

5. Generate Manifests
   - manifest.yaml (installation metadata)
   - workflow-manifest.csv (workflow catalog)
   - agent-manifest.csv (agent metadata)
   - task-manifest.csv (legacy)
   - files-manifest.csv (all files with SHA256 hashes)

6. Validate & Finalize
   - Verify file integrity, agent compilation, IDE artifacts
   - Display summary and next steps

Output Structure:

{target}/
├── {bmad_folder}/
│   ├── core/              # Always installed
│   ├── {module}/          # Selected modules
│   │   ├── agents/        # Compiled .md files
│   │   ├── workflows/
│   │   └── config.yaml
│   └── _cfg/              # Manifests
└── .{ide}/                # IDE-specific artifacts
    └── ...                # Format varies by IDE

IDE Support

The installer supports 15 IDE environments through a base-derived architecture. Each IDE handler extends BaseIDE and implements IDE-specific artifact generation.

Supported IDEs (as of v6-alpha):

Code Name Artifact Location
codex Claude Code .claude/commands/
claude-code Claude Code (alt) .claude/commands/
opencode OpenCode .opencode
windsurf Windsurf .windsurf/workflows/
cursor Cursor .cursor/rules/
cline Cline .clinerules/workflows/
github-copilot GitHub Copilot .github/copilot/
crush Crush .crush/
auggie Auggie .auggie/
gemini Google Gemini .gemini/
qwen Qwen .qwen/
roo Roo .roo/
rovo-dev Rovo .rovodev/
trae Trae .trae/
iflow iFlow .iflow/
kilo Kilo .kilo/

Handler Architecture:

  • Base class: tools/cli/installers/lib/ide/_base-ide.js
  • Handler implementations: tools/cli/installers/lib/ide/{ide-code}.js
  • Dynamic discovery: IDE manager scans directory and auto-registers handlers
  • Each handler implements: setup(), createArtifacts(), cleanup(), getAgentsFromBmad()

Adding New IDE Support:

  1. Create handler file: tools/cli/installers/lib/ide/your-ide.js
  2. Extend BaseIDE, set ideCode, ideName, artifactType
  3. Implement artifact generation methods
  4. IDE auto-discovered on next run

Custom Module Configuration

Modules define interactive configuration menus via install-config.yaml files in their _module-installer/ directories.

Config File Location:

  • Core: src/core/_module-installer/install-config.yaml
  • Modules: src/modules/{module}/_module-installer/install-config.yaml

Configuration Types:

  • select: Radio button choices
  • multiselect: Checkboxes
  • input: Text input with validation
  • confirm: Yes/no

Variable Substitution:

  • {project-root} → Absolute target path
  • {directory_name} → Project directory basename
  • {module} → Current module name
  • {value:config_id} → Reference another config value

Config Persistence:

  • Values saved to module's config.yaml
  • Existing values detected on reinstall
  • User prompted: "Use existing or change?"

Processor: tools/cli/installers/lib/core/config-collector.js

Platform Specifics

Platform specifics are IDE+module combination hooks that execute custom logic when specific IDE and module are installed together.

Two-Layer Architecture:

  1. Module-Level: src/modules/{module}/_module-installer/platform-specifics/{ide}.js

    • Module provides custom behavior for specific IDEs
    • Example: BMM creates subagents when installed with Claude Code
  2. IDE-Level: Embedded in IDE handler's createArtifacts() method

    • IDE provides custom handling for specific modules
    • Example: Windsurf configures cascade workflows for BMM

Execution Timing: After standard installation, before validation

Common Use Cases:

  • Creating subagent variations (PM-technical, PM-market)
  • Configuring IDE-specific workflow integrations
  • Adding custom commands or rules based on module features
  • Adjusting UI/UX for module-specific patterns

Platform Registry: tools/cli/installers/lib/ide/shared/platform-codes.js

Manifest System

The installer generates 5 manifest files in {target}/{bmad_folder}/_cfg/:

1. Installation Manifest (manifest.yaml)

  • Installation metadata: version, timestamps, target directory
  • Installed modules and versions
  • Integrated IDEs and their configurations
  • User configuration values

2. Workflow Manifest (workflow-manifest.csv)

  • Columns: module, workflow_path, workflow_name, description, scale_level
  • Used by workflow command generators
  • RFC 4180 compliant CSV format

3. Agent Manifest (agent-manifest.csv)

  • Columns: module, agent_path, agent_name, role, identity_summary, communication_style, expertise, approach, responsibilities, workflows
  • 10-column metadata for each agent
  • Used by IDE integrations and documentation

4. Task Manifest (task-manifest.csv)

  • Legacy compatibility (deprecated in v6)
  • Columns: module, task_path, task_name, objective, agent

5. Files Manifest (files-manifest.csv)

  • Complete file tracking with SHA256 hashes
  • Columns: file_path, file_type, module, hash
  • Enables integrity validation and change detection

Generator: tools/cli/installers/lib/core/manifest-generator.js

Use Cases:

  • Update detection (compare current vs manifest hashes)
  • Workflow command generation for IDEs
  • Installation validation and integrity checks
  • Rollback capability

Advanced Features

Dependency Resolution (4-Pass System):

  • Pass 1: Explicit dependencies from module metadata
  • Pass 2: Template references in workflows
  • Pass 3: Cross-module workflow/agent references
  • Pass 4: Transitive dependencies

Agent Activation Injection:

  • Detects which handlers each agent uses (workflow, exec, tmpl, data, action)
  • Injects only needed handler fragments from src/utility/models/fragments/
  • Keeps compiled agents lean and purpose-built

Module Injection System:

  • Conditional content injection based on user config
  • Can inject menu items, text blocks, workflow steps
  • File: tools/cli/installers/lib/ide/shared/module-injections.js

Conflict Resolution:

  • Detects existing installations
  • Options: Update (preserve customizations), Backup (timestamp), Cancel
  • Auto-backup to .bmad-backup-{timestamp} if selected

Workflow Command Auto-Generation:

  • Reads workflow-manifest.csv
  • Generates IDE commands for each workflow
  • IDE-specific formatting (Claude Code .md, Windsurf YAML, etc.)

Validation & Integrity:

  • Verifies all manifest files exist
  • Validates file hashes against files-manifest.csv
  • Checks agent compilation completeness
  • Confirms IDE artifacts created

Bundling System

Web bundling creates self-contained XML packages with all dependencies embedded for web deployment.

Bundling Flow

1. Discover modules and agents from src/modules/
2. For each agent:
   - Compile with YamlXmlBuilder (forWebBundle: true)
   - Use web-bundle-activation-steps.xml fragment
   - Resolve ALL dependencies recursively:
     - Scan menu items for workflow references
     - Load workflows → extract web_bundle section
     - Find all file references (templates, data, sub-workflows)
     - Wrap each in <file id="path"><![CDATA[...]]></file>
   - Build consolidated bundle: agent + all deps
3. Output to: web-bundles/{module}/agents/{name}.xml

Key Differences from Installation:

  • No customize.yaml merging (base agents only)
  • No metadata (reduces file size)
  • All dependencies bundled inline (no filesystem access)
  • Uses web-specific activation fragment
  • Output: Standalone XML files

Output Structure:

web-bundles/
├── bmm/
│   ├── agents/
│   │   ├── pm.xml
│   │   ├── architect.xml
│   │   ├── sm.xml
│   │   └── dev.xml
│   └── teams/
│       └── dev-team.xml
├── bmb/
│   └── agents/
│       └── bmad-builder.xml
└── cis/
    └── agents/
        └── creative-director.xml

Bundler: tools/cli/bundlers/web-bundler.js


Agent Compilation

Both installation and bundling use the same YAML→XML compiler with different configurations.

Compilation Engine

Core File: tools/cli/lib/yaml-xml-builder.js

Process:

  1. Load YAML agent definition
  2. Merge with customize.yaml (installation only)
  3. Analyze agent to detect required handlers
  4. Build activation block:
    • IDE: Uses activation-steps.xml (filesystem-aware)
    • Web: Uses web-bundle-activation-steps.xml (bundled files)
  5. Convert to XML structure
  6. Output as markdown (IDE) or standalone XML (web)

Key Option Flags:

  • forWebBundle: true - Use web activation, omit metadata
  • includeMetadata: true - Include build hash (IDE only)
  • skipActivation: true - Omit activation (team bundles)

Fragment System

Reusable XML fragments in src/utility/models/fragments/:

  • activation-steps.xml - IDE activation (loads config.yaml at runtime)
  • web-bundle-activation-steps.xml - Web activation (uses bundled files)
  • activation-rules.xml - Validation rules (IDE only)
  • menu-handlers.xml - Menu handler wrapper
  • handler-workflow.xml - Workflow handler
  • handler-exec.xml - Exec command handler
  • handler-tmpl.xml - Template handler
  • handler-data.xml - Data handler
  • handler-action.xml - Action handler

Dynamic Injection: Agent analyzer detects which handlers are used, activation builder injects only those fragments.

Input: Agent YAML

agent:
  metadata:
    id: 'bmad/bmm/agents/pm.md'
    name: 'PM'
    title: 'Product Manager'
  persona:
    role: 'Product Manager'
    identity: 'You are an experienced PM...'
  menu:
    - trigger: '*create-brief'
      workflow: '{project-root}/{bmad_folder}/bmm/workflows/.../workflow.yaml'

Output: IDE (Markdown with XML)

<!-- Powered by BMAD-CORE™ -->

# Product Manager

```xml
<agent id="..." name="PM">
  <activation critical="MANDATORY">
    <step n="2">Load {project-root}/{bmad_folder}/bmm/config.yaml at runtime</step>
    ...
  </activation>
  <persona>...</persona>
  <menu>...</menu>
</agent>
```

### Output: Web (Standalone XML)

```xml
<agent id="..." name="PM">
  <activation critical="MANDATORY">
    <step n="2">All dependencies bundled inline below</step>
    ...
  </activation>
  <persona>...</persona>
  <menu>...</menu>
  <bundled-files>
    <file id="bmad/bmm/config.yaml"><![CDATA[...]]></file>
    <file id="bmad/bmm/workflows/.../workflow.yaml"><![CDATA[...]]></file>
    ...
  </bundled-files>
</agent>

Architecture

Directory Structure

tools/cli/
├── bmad-cli.js                 # Main CLI entry
├── commands/                   # CLI command handlers
│   ├── install.js
│   ├── status.js
│   ├── list.js
│   ├── update.js
│   └── uninstall.js
├── bundlers/                   # Web bundling
│   ├── bundle-web.js          # CLI entry
│   └── web-bundler.js         # WebBundler class
├── installers/
│   └── lib/
│       ├── core/              # Core installer logic
│       │   ├── installer.js
│       │   ├── manifest-generator.js
│       │   ├── manifest.js
│       │   ├── dependency-resolver.js
│       │   ├── config-collector.js
│       │   └── csv-parser.js
│       ├── modules/           # Module processing
│       │   └── manager.js
│       └── ide/               # IDE integrations
│           ├── _base-ide.js
│           ├── {14 IDE handlers}.js
│           ├── manager.js
│           └── shared/
│               ├── bmad-artifacts.js
│               ├── platform-codes.js
│               ├── module-injections.js
│               └── workflow-command-generator.js
├── lib/                       # Shared compilation
│   ├── yaml-xml-builder.js   # YAML→XML compiler
│   ├── activation-builder.js # Activation generator
│   ├── agent-analyzer.js     # Handler detection
│   ├── xml-handler.js        # Builder wrapper
│   └── paths.js
├── regenerate-manifests.js
└── test-yaml-builder.js

Fragment Library

src/utility/models/fragments/
├── activation-steps.xml
├── web-bundle-activation-steps.xml
├── activation-rules.xml
├── menu-handlers.xml
└── handler-*.xml              # 5 handler types

Key Differences: Installation vs Bundling

Aspect Installation (IDE) Bundling (Web)
Trigger npm run install:bmad npm run bundle
Entry Point commands/install.js bundlers/bundle-web.js
Compiler Flag forWebBundle: false forWebBundle: true
Output Format Markdown .md Standalone XML .xml
Output Location {target}/{bmad_folder}/ + IDE dirs web-bundles/
Customization Merges customize.yaml Base agents only
Dependencies Referenced by path Bundled inline (CDATA)
Activation Fragment activation-steps.xml web-bundle-activation-steps.xml
Filesystem Access Required Not needed
Build Metadata Included (hash) Excluded
Path Format {project-root} placeholders Stripped, wrapped as <file>
Use Case Local IDE development Web deployment

Activation Differences:

  • IDE: Loads config.yaml at runtime from filesystem
  • Web: Accesses bundled content via <file id> references

Development Workflows

Testing Compilation

# Test YAML→XML compiler
node tools/cli/test-yaml-builder.js

# Test installation
node tools/cli/bmad-cli.js install --target ./test-project --modules bmm --ides codex

# Test bundling
node tools/cli/bundlers/bundle-web.js agent bmm pm

# Validate bundles
npm run validate:bundles

Adding New Menu Handlers

To add a new handler type (e.g., validate-workflow):

  1. Create fragment: src/utility/models/fragments/handler-validate-workflow.xml
  2. Update agent-analyzer.js to detect the new attribute
  3. Update activation-builder.js to load/inject the fragment
  4. Test with an agent using the handler

Regenerating Manifests

# Regenerate agent-manifest.csv for all modules
node tools/cli/regenerate-manifests.js

# Location: src/modules/{module}/agents/agent-manifest.csv

  • Project Guide: CLAUDE.md
  • BMM Workflows: src/modules/bmm/workflows/README.md
  • Module Structure: src/modules/bmb/workflows/create-module/module-structure.md
  • Agent Creation: src/modules/bmb/workflows/create-agent/README.md

Support