diff --git a/README.md b/README.md index 84dc0e91..b8be3e55 100644 --- a/README.md +++ b/README.md @@ -97,10 +97,10 @@ The BMad Method (BMM) is a complete AI-driven agile development framework that r - **PM** - Product planning and requirements - **Analyst** - Research and business analysis - **Architect** - Technical architecture and design -- **Game Designer** - Game-specific design and documentation - **Scrum Master** - Sprint planning and story management - **Developer** - Implementation with senior dev review -- **And more** - UX, Test Architect, specialized game roles +- **Game Development** (Optional) - Game Designer, Game Developer, Game Architect +- **And more** - UX, Test Architect, and other specialized roles ### Documentation @@ -168,6 +168,7 @@ The interactive installer will guide you through: 1. **Project location** - Where to install BMad 2. **Module selection** - Choose which modules you need (BMM, BMB, CIS) 3. **Configuration** - Set your name, language preferences, and module options + - **Game Development (Optional)**: When installing BMM, you can optionally include game development agents and workflow! 4. **IDE integration** - Configure your development environment ### What Gets Installed diff --git a/bmad/bmb/workflows/create-agent/agent-architecture.md b/bmad/bmb/workflows/create-agent/agent-architecture.md index 46ad6441..9a6d0732 100644 --- a/bmad/bmb/workflows/create-agent/agent-architecture.md +++ b/bmad/bmb/workflows/create-agent/agent-architecture.md @@ -230,7 +230,7 @@ Bad: ../../../relative/paths/ ```xml + data="{project-root}/bmad/_cfg/agent-manifest.csv"> Run daily standup ``` diff --git a/bmad/bmb/workflows/create-agent/agent-command-patterns.md b/bmad/bmb/workflows/create-agent/agent-command-patterns.md index f4c4cbe5..84d64911 100644 --- a/bmad/bmb/workflows/create-agent/agent-command-patterns.md +++ b/bmad/bmb/workflows/create-agent/agent-command-patterns.md @@ -119,7 +119,7 @@ Execute single operations + data="{project-root}/bmad/_cfg/agent-manifest.csv"> Run agile team standup ``` diff --git a/src/modules/bmb/workflows/create-agent/agent-architecture.md b/src/modules/bmb/workflows/create-agent/agent-architecture.md index 0fb4e60b..f025cdde 100644 --- a/src/modules/bmb/workflows/create-agent/agent-architecture.md +++ b/src/modules/bmb/workflows/create-agent/agent-architecture.md @@ -230,7 +230,7 @@ Bad: ../../../relative/paths/ ```xml + data="{project-root}/bmad/_cfg/agent-manifest.csv"> Run daily standup ``` diff --git a/src/modules/bmb/workflows/create-agent/agent-command-patterns.md b/src/modules/bmb/workflows/create-agent/agent-command-patterns.md index f4c4cbe5..84d64911 100644 --- a/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +++ b/src/modules/bmb/workflows/create-agent/agent-command-patterns.md @@ -119,7 +119,7 @@ Execute single operations + data="{project-root}/bmad/_cfg/agent-manifest.csv"> Run agile team standup ``` diff --git a/src/modules/bmm/README.md b/src/modules/bmm/README.md index e63369f1..ed92f354 100644 --- a/src/modules/bmm/README.md +++ b/src/modules/bmm/README.md @@ -21,6 +21,15 @@ Specialized AI agents for different development roles: - **UX** - User experience design - And more specialized roles +**Game Development Agents** (Optional): +During installation, you can optionally include game development specialists: + +- **Game Designer** - Creative vision and game design documents (GDD) +- **Game Developer** - Game-specific implementation +- **Game Architect** - Game systems and technical infrastructure + +These agents come with specialized workflows (`brainstorm-game`, `game-brief`, `gdd`) and are only installed if you select "Include Game Planning Agents and Workflows" during BMM installation. + ### 📋 `/workflows` The heart of BMM - structured workflows for the four development phases: diff --git a/src/modules/bmm/_module-installer/install-config.yaml b/src/modules/bmm/_module-installer/install-config.yaml index 8ec4c7c4..285feb20 100644 --- a/src/modules/bmm/_module-installer/install-config.yaml +++ b/src/modules/bmm/_module-installer/install-config.yaml @@ -19,6 +19,11 @@ project_name: default: "{directory_name}" result: "{value}" +include_game_planning: + prompt: "Include Game Planning Agents and Workflows?" + default: false + result: "{value}" + user_skill_level: prompt: - "What is your technical experience level?" diff --git a/src/modules/bmm/agents/sm.agent.yaml b/src/modules/bmm/agents/sm.agent.yaml index 8f627d7a..cb71525e 100644 --- a/src/modules/bmm/agents/sm.agent.yaml +++ b/src/modules/bmm/agents/sm.agent.yaml @@ -47,7 +47,7 @@ agent: - trigger: retrospective workflow: "{project-root}/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml" - data: "{project-root}/bmad/_cfg/agent-party.xml" + data: "{project-root}/bmad/_cfg/agent-manifest.csv" description: Facilitate team retrospective after epic/sprint - trigger: correct-course diff --git a/src/modules/bmm/tasks/daily-standup.xml b/src/modules/bmm/tasks/daily-standup.xml index 90c5f048..4fa9fa34 100644 --- a/src/modules/bmm/tasks/daily-standup.xml +++ b/src/modules/bmm/tasks/daily-standup.xml @@ -26,7 +26,7 @@ - Blockers: {{blockers-from-story}} Team assembled based on story participants: - {{ List Agents from {project-root}/bmad/_cfg/agent-party.xml }} + {{ List Agents from {project-root}/bmad/_cfg/agent-manifest.csv }} diff --git a/src/modules/bmm/teams/team-gamedev.yaml b/src/modules/bmm/teams/team-gamedev.yaml index 0f1000e0..f2c8e702 100644 --- a/src/modules/bmm/teams/team-gamedev.yaml +++ b/src/modules/bmm/teams/team-gamedev.yaml @@ -7,3 +7,8 @@ agents: - game-designer - game-dev - game-architect + +workflows: + - brainstorm-game + - game-brief + - gdd diff --git a/tools/cli/README.md b/tools/cli/README.md index fd66209c..68b1e38b 100644 --- a/tools/cli/README.md +++ b/tools/cli/README.md @@ -66,7 +66,7 @@ node tools/cli/bundlers/bundle-web.js agent bmm pm # One agent ```bash npm run bmad:status # Installation status npm run validate:bundles # Validate web bundles -node tools/cli/regenerate-manifests.js # Regenerate agent-party.xml files +node tools/cli/regenerate-manifests.js # Regenerate agent-manifest.csv files ``` --- @@ -566,10 +566,10 @@ To add a new handler type (e.g., `validate-workflow`): ### Regenerating Manifests ```bash -# Regenerate agent-party.xml for all modules +# Regenerate agent-manifest.csv for all modules node tools/cli/regenerate-manifests.js -# Location: src/modules/{module}/agents/agent-party.xml +# Location: src/modules/{module}/agents/agent-manifest.csv ``` --- diff --git a/tools/cli/bundlers/test-bundler.js b/tools/cli/bundlers/test-bundler.js index 1ea108cc..6e17cc2e 100755 --- a/tools/cli/bundlers/test-bundler.js +++ b/tools/cli/bundlers/test-bundler.js @@ -45,7 +45,7 @@ async function testWebBundler() { const hasPersona = content.includes(''); const activationBeforePersona = content.indexOf(''); const hasManifests = - content.includes('') && content.includes(''); + content.includes('') && content.includes(''); const hasDependencies = content.includes(''); console.log(chalk.green('✓ Analyst bundle created successfully')); diff --git a/tools/cli/bundlers/web-bundler.js b/tools/cli/bundlers/web-bundler.js index 382e261b..e31abe1b 100644 --- a/tools/cli/bundlers/web-bundler.js +++ b/tools/cli/bundlers/web-bundler.js @@ -620,8 +620,8 @@ class WebBundler { } processed.add(filePath); - // Skip agent-party.xml manifest for web bundles (agents are already bundled) - if (filePath === 'bmad/_cfg/agent-party.xml' || filePath.endsWith('/agent-party.xml')) { + // Skip agent-manifest.csv manifest for web bundles (agents are already bundled) + if (filePath === 'bmad/_cfg/agent-manifest.csv' || filePath.endsWith('/agent-manifest.csv')) { return; } @@ -1393,8 +1393,8 @@ class WebBundler { // Ensure temp directory exists await fs.ensureDir(this.tempManifestDir); - // Generate agent-party.xml using shared generator - const agentPartyPath = path.join(this.tempManifestDir, 'agent-party.xml'); + // Generate agent-manifest.csv using shared generator + const agentPartyPath = path.join(this.tempManifestDir, 'agent-manifest.csv'); await AgentPartyGenerator.writeAgentParty(agentPartyPath, this.discoveredAgents, { forWeb: true }); console.log(chalk.dim(' ✓ Created temporary manifest files')); diff --git a/tools/cli/installers/lib/core/installer.js b/tools/cli/installers/lib/core/installer.js index ea2e6dae..318160ad 100644 --- a/tools/cli/installers/lib/core/installer.js +++ b/tools/cli/installers/lib/core/installer.js @@ -912,6 +912,9 @@ class Installer { * @param {Object} moduleFiles - Module files to install */ async installModuleWithDependencies(moduleName, bmadDir, moduleFiles) { + // Get module configuration for conditional installation + const moduleConfig = this.configCollector.collectedConfig[moduleName] || {}; + // Use existing module manager for full installation with file tracking // Note: Module-specific installers are called separately after IDE setup await this.moduleManager.install( @@ -922,6 +925,7 @@ class Installer { }, { skipModuleInstaller: true, // We'll run it later after IDE setup + moduleConfig: moduleConfig, // Pass module config for conditional filtering }, ); @@ -1990,7 +1994,7 @@ class Installer { * @param {Array} agentDetails - Array of agent details */ async generateAgentManifest(bmadDir, agentDetails) { - const manifestPath = path.join(bmadDir, '_cfg', 'agent-party.xml'); + const manifestPath = path.join(bmadDir, '_cfg', 'agent-manifest.csv'); await AgentPartyGenerator.writeAgentParty(manifestPath, agentDetails, { forWeb: false }); } diff --git a/tools/cli/installers/lib/modules/manager.js b/tools/cli/installers/lib/modules/manager.js index 0724751d..06a5d531 100644 --- a/tools/cli/installers/lib/modules/manager.js +++ b/tools/cli/installers/lib/modules/manager.js @@ -113,7 +113,7 @@ class ModuleManager { } // Copy module files with filtering - await this.copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback); + await this.copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback, options.moduleConfig); // Process agent files to inject activation block await this.processAgentFiles(targetPath, moduleName); @@ -231,14 +231,26 @@ class ModuleManager { } /** - * Copy module with filtering for localskip agents + * Copy module with filtering for localskip agents and conditional content * @param {string} sourcePath - Source module path * @param {string} targetPath - Target module path + * @param {Function} fileTrackingCallback - Optional callback to track installed files + * @param {Object} moduleConfig - Module configuration with conditional flags */ - async copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback = null) { + async copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback = null, moduleConfig = {}) { // Get all files in source const sourceFiles = await this.getFileList(sourcePath); + // Game development files to conditionally exclude + const gameDevFiles = [ + 'agents/game-architect.agent.yaml', + 'agents/game-designer.agent.yaml', + 'agents/game-dev.agent.yaml', + 'workflows/1-analysis/brainstorm-game', + 'workflows/1-analysis/game-brief', + 'workflows/2-plan-workflows/gdd', + ]; + for (const file of sourceFiles) { // Skip sub-modules directory - these are IDE-specific and handled separately if (file.startsWith('sub-modules/')) { @@ -255,6 +267,19 @@ class ModuleManager { continue; } + // Skip game development content if include_game_planning is false + if (moduleConfig.include_game_planning === false) { + const shouldSkipGameDev = gameDevFiles.some((gamePath) => { + // Check if file path starts with or is within any game dev directory + return file === gamePath || file.startsWith(gamePath + '/') || file.startsWith(gamePath + '\\'); + }); + + if (shouldSkipGameDev) { + console.log(chalk.dim(` Skipping game dev content: ${file}`)); + continue; + } + } + const sourceFile = path.join(sourcePath, file); const targetFile = path.join(targetPath, file); diff --git a/tools/cli/lib/agent-party-generator.js b/tools/cli/lib/agent-party-generator.js index 03995c3f..1528ae68 100644 --- a/tools/cli/lib/agent-party-generator.js +++ b/tools/cli/lib/agent-party-generator.js @@ -3,7 +3,7 @@ const fs = require('fs-extra'); const AgentPartyGenerator = { /** - * Generate agent-party.xml content + * Generate agent-manifest.csv content * @param {Array} agentDetails - Array of agent details * @param {Object} options - Generation options * @returns {string} XML content @@ -28,7 +28,7 @@ const AgentPartyGenerator = { let xmlContent = ` - + Complete roster of ${forWeb ? 'bundled' : 'installed'} BMAD agents with summarized personas for efficient multi-agent orchestration. Used by party-mode and other multi-agent coordination features. @@ -193,7 +193,7 @@ const AgentPartyGenerator = { }, /** - * Write agent-party.xml to file + * Write agent-manifest.csv to file */ async writeAgentParty(filePath, agentDetails, options = {}) { const content = this.generateAgentParty(agentDetails, options);