5.2 KiB

Installers Domain

File Index

Core CLI

  • @/tools/cli/bmad-cli.js - Main CLI entry (uses Commander.js, auto-loads commands)
  • @/tools/cli/README.md - CLI documentation

Commands Directory

  • @/tools/cli/commands/install.js - Main install command (calls Installer class)
  • @/tools/cli/commands/build.js - Build operations
  • @/tools/cli/commands/list.js - List resources
  • @/tools/cli/commands/update.js - Update operations
  • @/tools/cli/commands/status.js - Status checks
  • @/tools/cli/commands/agent-install.js - Custom agent installation
  • @/tools/cli/commands/uninstall.js - Uninstall operations

Core Installer Logic

  • @/tools/cli/installers/lib/core/installer.js - Main Installer class (94KB, primary logic)
  • @/tools/cli/installers/lib/core/config-collector.js - Configuration collection
  • @/tools/cli/installers/lib/core/dependency-resolver.js - Dependency resolution
  • @/tools/cli/installers/lib/core/detector.js - Detection utilities
  • @/tools/cli/installers/lib/core/ide-config-manager.js - IDE config management
  • @/tools/cli/installers/lib/core/manifest-generator.js - Manifest generation
  • @/tools/cli/installers/lib/core/manifest.js - Manifest utilities

IDE Manager & Base

  • @/tools/cli/installers/lib/ide/manager.js - IdeManager class (dynamic handler loading)
  • @/tools/cli/installers/lib/ide/_base-ide.js - BaseIdeSetup class (all handlers extend this)

Shared Utilities

  • @/tools/cli/installers/lib/ide/shared/agent-command-generator.js
  • @/tools/cli/installers/lib/ide/shared/workflow-command-generator.js
  • @/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js
  • @/tools/cli/installers/lib/ide/shared/module-injections.js
  • @/tools/cli/installers/lib/ide/shared/bmad-artifacts.js

CLI Library Files

  • @/tools/cli/lib/ui.js - User interface prompts
  • @/tools/cli/lib/config.js - Configuration utilities
  • @/tools/cli/lib/project-root.js - Project root detection
  • @/tools/cli/lib/platform-codes.js - Platform code definitions
  • @/tools/cli/lib/xml-handler.js - XML processing
  • @/tools/cli/lib/yaml-format.js - YAML formatting
  • @/tools/cli/lib/file-ops.js - File operations
  • @/tools/cli/lib/agent/compiler.js - Agent YAML to XML compilation
  • @/tools/cli/lib/agent/installer.js - Agent installation
  • @/tools/cli/lib/agent/template-engine.js - Template processing

IDE Handler Registry (16 IDEs)

Preferred IDEs (shown first in installer)

IDE Name Config Location File Format
claude-code Claude Code .claude/commands/ .md with frontmatter
codex Codex (varies) .md
cursor Cursor .cursor/rules/bmad/ .mdc with MDC frontmatter
github-copilot GitHub Copilot .github/ .md
opencode OpenCode .opencode/ .md
windsurf Windsurf .windsurf/workflows/bmad/ .md with workflow frontmatter

Other IDEs

IDE Name Config Location
antigravity Google Antigravity .agent/
auggie Auggie CLI .augment/
cline Cline .clinerules/
crush Crush .crush/
gemini Gemini CLI .gemini/
iflow iFlow CLI .iflow/
kilo Kilo Code .kilocodemodes (file)
qwen Qwen Code .qwen/
roo Roo Code .roomodes (file)
trae Trae .trae/

Architecture Patterns

IDE Handler Interface

Each handler must implement:

  • constructor() - Call super(name, displayName, preferred)
  • setup(projectDir, bmadDir, options) - Main installation
  • cleanup(projectDir) - Remove old installation
  • installCustomAgentLauncher(...) - Custom agent support

Module Installer Pattern

Modules can have custom installers at: src/modules/{module-name}/_module-installer/installer.js

Export: async function install(options) with:

  • options.projectRoot
  • options.config
  • options.installedIDEs
  • options.logger

Sub-module Pattern (IDE-specific customizations)

Location: src/modules/{module-name}/sub-modules/{ide-name}/ Contains:

  • injections.yaml - Content injections
  • config.yaml - Configuration
  • sub-agents/ - IDE-specific agents

Common Tasks

  • Add new IDE handler: Create file in /tools/cli/installers/lib/ide/, extend BaseIdeSetup
  • Fix installer bug: Check installer.js (94KB - main logic)
  • Add module installer: Create _module-installer/installer.js if custom installer logic needed
  • Update shared generators: Modify files in /shared/ directory

Relationships

  • Installers may trigger bundlers for web output
  • Installers create files that tests validate
  • Changes here often need docs updates
  • IDE handlers use shared generators

Domain Memories