From e3ed97a6902b2051af2020671255e8929d80e1b1 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Fri, 6 Jun 2025 23:12:58 -0500 Subject: [PATCH] Simplify agent configurations and fix team bundle builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Major refactoring to streamline agent configuration structure and improve build reliability: Agent Configuration Simplification: - Remove environment sections from all agent YAML files - Add single 'persona' property to agent configs pointing to persona file - All agents now use consistent, simplified structure without web/ide environment splits - Fix dev agent to be available for web environment (was causing team-dev bundle build failure) Build System Updates: - Update dependency-resolver.js to use new persona property instead of environments.web.persona_file - Update bundle-optimizer.js to load personas using agent's persona property - Remove environment availability checks since all agents are now web-compatible - Change output directory from dist/web/bundles/ to dist/web/teams/ for clarity File Organization: - Move IDE-specific personas (dev.ide.md, devops-pe.ide.md, sm.ide.md) to bmad-core/ide-agents/ - Rename team bundles for clarity: - team-full.yml → team-full-app.yml (web application teams) - team-planning.yml → team-small-service.yml (backend service teams) - Remove team-full-ide.yml (IDE teams will be handled separately) This change ensures all 3 web team bundles build successfully and simplifies future agent maintenance. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- agents/analyst.yml | 10 +-------- agents/architect.yml | 12 ++--------- agents/bmad.yml | 9 +------- agents/design-architect.yml | 12 ++--------- agents/dev.yml | 15 ++----------- agents/devops.yml | 13 +----------- agents/pm.yml | 12 ++--------- agents/po.yml | 12 ++--------- agents/sm.yml | 13 ++---------- agents/team-dev.yml | 7 +++---- agents/{team-full.yml => team-full-app.yml} | 6 ++---- agents/team-full-ide.yml | 17 --------------- ...am-planning.yml => team-small-service.yml} | 6 ++---- bmad-core/data/technical-preferences.md | 11 +--------- bmad-core/{personas => ide-agents}/dev.ide.md | 0 .../{personas => ide-agents}/devops-pe.ide.md | 0 bmad-core/{personas => ide-agents}/sm.ide.md | 0 bmad-core/utils/orchestrator-commands.md | 3 ++- build/builders/web-builder.js | 10 ++++----- build/lib/bundle-optimizer.js | 21 ++++++++++++------- build/lib/dependency-resolver.js | 15 ++++--------- 21 files changed, 47 insertions(+), 157 deletions(-) rename agents/{team-full.yml => team-full-app.yml} (70%) delete mode 100644 agents/team-full-ide.yml rename agents/{team-planning.yml => team-small-service.yml} (57%) rename bmad-core/{personas => ide-agents}/dev.ide.md (100%) rename bmad-core/{personas => ide-agents}/devops-pe.ide.md (100%) rename bmad-core/{personas => ide-agents}/sm.ide.md (100%) diff --git a/agents/analyst.yml b/agents/analyst.yml index 0dcb69ba..d907b333 100644 --- a/agents/analyst.yml +++ b/agents/analyst.yml @@ -1,11 +1,10 @@ -# Analyst Agent Configuration - agent: name: Mary id: analyst version: 1.0.0 title: Analyst description: Project Analyst and Brainstorming Coach + persona: analyst customize: >- You are a bit of a know-it-all, and like to verbalize and emote as if you were a physical person. @@ -17,10 +16,3 @@ dependencies: - project-brief-tmpl checklists: [] data: [] -environments: - ide: - persona_file: analyst - command_prefix: '*' - web: - persona_file: analyst - command_prefix: / diff --git a/agents/architect.yml b/agents/architect.yml index 016cb852..6f11e4d4 100644 --- a/agents/architect.yml +++ b/agents/architect.yml @@ -1,12 +1,11 @@ -# Architect Agent Configuration - agent: name: Fred id: architect version: 1.0.0 title: Architect description: For system architecture, technical design, architecture checklists. - customize: '' + persona: architect + customize: "" dependencies: tasks: - create-architecture @@ -21,10 +20,3 @@ dependencies: - architect-checklist data: - technical-preferences -environments: - ide: - persona_file: architect - command_prefix: '*' - web: - persona_file: architect - command_prefix: / diff --git a/agents/bmad.yml b/agents/bmad.yml index ec93128c..beabdf66 100644 --- a/agents/bmad.yml +++ b/agents/bmad.yml @@ -1,5 +1,4 @@ # BMAD Agent Configuration -# ONLY agent with bmad-kb access agent: name: BMAD @@ -7,6 +6,7 @@ agent: version: 1.0.0 title: BMAD description: For general BMAD Method or Agent queries, oversight, or advice and guidance when unsure. + persona: bmad customize: >- Helpful, hand holding level guidance when needed. Loves the BMad Method and will help you customize and use it to your needs, which also orchestrating and ensuring the agents he becomes @@ -19,10 +19,3 @@ dependencies: - bmad-kb utils: - orchestrator-commands -environments: - ide: - persona_file: bmad - command_prefix: '*' - web: - persona_file: bmad - command_prefix: / diff --git a/agents/design-architect.yml b/agents/design-architect.yml index 0533f07d..a0cb98f4 100644 --- a/agents/design-architect.yml +++ b/agents/design-architect.yml @@ -1,12 +1,11 @@ -# Design Architect Agent Configuration - agent: name: Jane id: design-architect version: 1.0.0 title: Design Architect description: For UI/UX specifications, front-end architecture, and UI 1-shot prompting. - customize: '' + persona: design-architect + customize: "" dependencies: tasks: - create-frontend-architecture @@ -19,10 +18,3 @@ dependencies: - frontend-architecture-checklist data: - technical-preferences -environments: - ide: - persona_file: design-architect - command_prefix: '*' - web: - persona_file: design-architect - command_prefix: / diff --git a/agents/dev.yml b/agents/dev.yml index ddde3bfe..71fa991a 100644 --- a/agents/dev.yml +++ b/agents/dev.yml @@ -1,12 +1,11 @@ -# Full Stack Dev Agent Configuration - agent: name: James id: dev version: 1.0.0 title: Full Stack Dev description: Master Generalist Expert Senior Senior Full Stack Developer - customize: '' + persona: dev + customize: "" dependencies: tasks: [] templates: [] @@ -14,13 +13,3 @@ dependencies: - story-dod-checklist data: - technical-preferences -environments: - ide: - persona_file: dev.ide.md - command_prefix: '*' - supports_file_operations: true - ide_only: true - web: - persona_file: dev - command_prefix: / - available: false diff --git a/agents/devops.yml b/agents/devops.yml index 3e85b34c..b25383c7 100644 --- a/agents/devops.yml +++ b/agents/devops.yml @@ -1,5 +1,3 @@ -# Platform Engineer Agent Configuration - agent: name: Alex id: devops @@ -10,6 +8,7 @@ agent: have the production environment as resilient and reliable for the customer as possible. He is a Master Expert Senior Platform Engineer with 15+ years of experience in DevSecOps, Cloud Engineering, and Platform Engineering with a deep, profound knowledge of SRE. + persona: devops customize: >- Specialized in cloud-native system architectures and tools, like Kubernetes, Docker, GitHub Actions, CI/CD pipelines, and infrastructure-as-code practices (e.g., Terraform, CloudFormation, @@ -25,13 +24,3 @@ dependencies: - infrastructure-checklist data: - technical-preferences -environments: - ide: - persona_file: devops-pe.ide - command_prefix: '*' - supports_file_operations: true - ide_only: true - web: - persona_file: devops - command_prefix: / - available: false diff --git a/agents/pm.yml b/agents/pm.yml index 662f06da..a0341496 100644 --- a/agents/pm.yml +++ b/agents/pm.yml @@ -1,5 +1,3 @@ -# Product Manager Agent Configuration - agent: name: John id: pm @@ -8,7 +6,8 @@ agent: description: >- Main goal is to help produce or maintain the best possible PRD and represent the end user the product will serve. - customize: '' + persona: pm + customize: "" dependencies: tasks: - create-doc-from-template @@ -21,10 +20,3 @@ dependencies: - change-checklist data: - technical-preferences -environments: - ide: - persona_file: pm - command_prefix: '*' - web: - persona_file: pm - command_prefix: / diff --git a/agents/po.yml b/agents/po.yml index 2a9dc089..d0cccdf5 100644 --- a/agents/po.yml +++ b/agents/po.yml @@ -1,5 +1,3 @@ -# PO Agent Configuration - agent: name: Sarah id: po @@ -8,7 +6,8 @@ agent: description: >- Product Owner helps validate the artifacts are all cohesive with a master checklist, and also helps coach significant changes - customize: '' + persona: po + customize: "" dependencies: tasks: - checklist-run-task @@ -20,10 +19,3 @@ dependencies: - po-master-checklist - change-checklist data: [] -environments: - ide: - persona_file: po - command_prefix: '*' - web: - persona_file: po - command_prefix: / diff --git a/agents/sm.yml b/agents/sm.yml index 63edbe18..87b58f9a 100644 --- a/agents/sm.yml +++ b/agents/sm.yml @@ -1,12 +1,11 @@ -# SM Agent Configuration - agent: name: Bob id: sm version: 1.0.0 title: SM description: A very Technical Scrum Master helps the team run the Scrum process. - customize: '' + persona: sm + customize: "" dependencies: tasks: - create-next-story-task @@ -15,11 +14,3 @@ dependencies: checklists: - story-draft-checklist data: [] -environments: - ide: - persona_file: sm - command_prefix: '*' - has_specialized_version: true - web: - persona_file: sm - command_prefix: / diff --git a/agents/team-dev.yml b/agents/team-dev.yml index f75a1f5e..200b869e 100644 --- a/agents/team-dev.yml +++ b/agents/team-dev.yml @@ -1,11 +1,10 @@ -# Development Team Bundle - bundle: name: Development Team Bundle - filename: team-dev-bundle.txt + filename: team-dev.txt target_environment: web agents: - bmad - po - - sm \ No newline at end of file + - sm + - dev diff --git a/agents/team-full.yml b/agents/team-full-app.yml similarity index 70% rename from agents/team-full.yml rename to agents/team-full-app.yml index 83b69805..b1788b2f 100644 --- a/agents/team-full.yml +++ b/agents/team-full-app.yml @@ -1,8 +1,6 @@ -# Full Team Bundle - bundle: name: Full Team Bundle - filename: team-full-bundle.txt + filename: team-full.txt target_environment: web agents: @@ -12,4 +10,4 @@ agents: - architect - design-architect - po - - sm \ No newline at end of file + - sm diff --git a/agents/team-full-ide.yml b/agents/team-full-ide.yml deleted file mode 100644 index d4e0676d..00000000 --- a/agents/team-full-ide.yml +++ /dev/null @@ -1,17 +0,0 @@ -# Full IDE Team Bundle - -bundle: - name: Full IDE Team Bundle - filename: team-full-ide - target_environment: ide - -agents: - - bmad - - analyst - - pm - - architect - - design-architect - - po - - sm - - dev - - devops \ No newline at end of file diff --git a/agents/team-planning.yml b/agents/team-small-service.yml similarity index 57% rename from agents/team-planning.yml rename to agents/team-small-service.yml index 618303fa..4ddac66c 100644 --- a/agents/team-planning.yml +++ b/agents/team-small-service.yml @@ -1,12 +1,10 @@ -# Planning Team Bundle - bundle: name: Planning Team Bundle - filename: team-planning-bundle.txt + filename: team-backend-planning.txt target_environment: web agents: - bmad - analyst - pm - - architect \ No newline at end of file + - architect diff --git a/bmad-core/data/technical-preferences.md b/bmad-core/data/technical-preferences.md index e7a19422..2eb79b4d 100644 --- a/bmad-core/data/technical-preferences.md +++ b/bmad-core/data/technical-preferences.md @@ -1,12 +1,3 @@ # User-Defined Preferred Patterns and Preferences -List out your preferred: -- technical preferences -- design patterns -- languages -- framework -- etc... - -Anything you learn or prefer over time to drive future project choices, add them here. - -These will be used by the agents when producing PRD and Architectures +None Listed diff --git a/bmad-core/personas/dev.ide.md b/bmad-core/ide-agents/dev.ide.md similarity index 100% rename from bmad-core/personas/dev.ide.md rename to bmad-core/ide-agents/dev.ide.md diff --git a/bmad-core/personas/devops-pe.ide.md b/bmad-core/ide-agents/devops-pe.ide.md similarity index 100% rename from bmad-core/personas/devops-pe.ide.md rename to bmad-core/ide-agents/devops-pe.ide.md diff --git a/bmad-core/personas/sm.ide.md b/bmad-core/ide-agents/sm.ide.md similarity index 100% rename from bmad-core/personas/sm.ide.md rename to bmad-core/ide-agents/sm.ide.md diff --git a/bmad-core/utils/orchestrator-commands.md b/bmad-core/utils/orchestrator-commands.md index ea640dff..023d57cb 100644 --- a/bmad-core/utils/orchestrator-commands.md +++ b/bmad-core/utils/orchestrator-commands.md @@ -18,7 +18,8 @@ When these commands are used, perform the listed action: ## Agent-Specific Commands The `/{agent}` command switches to any agent included in the bundle. The command accepts either: + - The agent's role identifier (e.g., `/pm`, `/architect`, `/dev`) - The agent's configured name (e.g., `/john` if PM is named John, `/fred` if Architect is named Fred) -The BMAD orchestrator determines available agents from the bundle configuration at runtime. \ No newline at end of file +The BMAD orchestrator determines available agents from the bundle configuration at runtime. diff --git a/build/builders/web-builder.js b/build/builders/web-builder.js index 2015b685..61a32b5c 100644 --- a/build/builders/web-builder.js +++ b/build/builders/web-builder.js @@ -118,14 +118,14 @@ class WebBuilder { } // Write output files - const outputDir = path.join(this.outputPath, 'bundles'); + const outputDir = path.join(this.outputPath, 'teams'); this.ensureDirectory(outputDir); const outputs = []; // Default to single_file format if not specified const outputFormat = bundleConfig.output?.format || 'single_file'; - const outputFilename = bundleConfig.output?.filename || bundleConfig.filename || `${bundleConfig.name.toLowerCase().replace(/\s+/g, '-')}-bundle.txt`; + const outputFilename = bundleConfig.output?.filename || bundleConfig.filename || `${bundleConfig.name.toLowerCase().replace(/\s+/g, '-')}.txt`; if (outputFormat === 'single_file') { // Create single bundle file @@ -160,7 +160,7 @@ class WebBuilder { const outputDir = path.join(this.outputPath, 'agents'); this.ensureDirectory(outputDir); - const agentFile = path.join(outputDir, `${agentId}-agent-bundle.txt`); + const agentFile = path.join(outputDir, `${agentId}.txt`); fs.writeFileSync(agentFile, optimizedBundle.standaloneContent); return { @@ -208,7 +208,7 @@ class WebBuilder { */ createOrchestratorFiles(bundle, config) { const files = []; - const outputDir = path.join(this.outputPath, 'bundles'); + const outputDir = path.join(this.outputPath, 'teams'); // Create agent-config.txt const agentConfigContent = yaml.dump({ @@ -368,7 +368,7 @@ class WebBuilder { */ ensureOutputDirectory() { this.ensureDirectory(this.outputPath); - this.ensureDirectory(path.join(this.outputPath, 'bundles')); + this.ensureDirectory(path.join(this.outputPath, 'teams')); this.ensureDirectory(path.join(this.outputPath, 'agents')); } } diff --git a/build/lib/bundle-optimizer.js b/build/lib/bundle-optimizer.js index 1589451b..83acfe5d 100644 --- a/build/lib/bundle-optimizer.js +++ b/build/lib/bundle-optimizer.js @@ -49,7 +49,7 @@ class BundleOptimizer { }); // Load and process resources - this.loadResources(optimizedBundle, agentDependencies.bundleResources); + this.loadResources(optimizedBundle, agentDependencies.bundleResources, agentDependencies.agents); // Create optimized sections for web output if (bundleConfig.target_environment === 'web') { @@ -65,7 +65,7 @@ class BundleOptimizer { /** * Load resources from core directory */ - loadResources(bundle, resourceLists) { + loadResources(bundle, resourceLists, agentDeps = []) { const resourceTypes = ['tasks', 'templates', 'checklists', 'data', 'utils']; resourceTypes.forEach(type => { @@ -85,11 +85,13 @@ class BundleOptimizer { // Load personas for agents const personaDir = path.join(this.corePath, 'personas'); - Object.keys(bundle.agents).forEach(agentId => { - const personaContent = this.loadResourceFile(personaDir, agentId); + agentDeps.forEach(agentDep => { + const agentId = agentDep.agent; + const personaName = agentDep.config.persona || agentId; + const personaContent = this.loadResourceFile(personaDir, personaName); if (personaContent) { bundle.resources.personas[agentId] = { - name: agentId, + name: personaName, content: personaContent, size: personaContent.length }; @@ -202,7 +204,9 @@ class BundleOptimizer { content += `${agent.description}\n\n`; if (persona) { - content += `## Agent Persona\n\n${persona.content}\n\n`; + content += `==================== START: personas#${agentId} ====================\n`; + content += `${persona.content}\n`; + content += `==================== END: personas#${agentId} ====================\n\n`; } // Add required resources inline @@ -210,9 +214,10 @@ class BundleOptimizer { resourceTypes.forEach(type => { const resources = bundle.resources[type]; if (Object.keys(resources).length > 0) { - content += `## ${type.charAt(0).toUpperCase() + type.slice(1)}\n\n`; Object.entries(resources).forEach(([name, resource]) => { - content += `### ${name}\n\n${resource.content}\n\n`; + content += `==================== START: ${type}#${name} ====================\n`; + content += `${resource.content}\n`; + content += `==================== END: ${type}#${name} ====================\n\n`; }); } }); diff --git a/build/lib/dependency-resolver.js b/build/lib/dependency-resolver.js index 919bfa79..4a642eeb 100644 --- a/build/lib/dependency-resolver.js +++ b/build/lib/dependency-resolver.js @@ -39,9 +39,6 @@ class DependencyResolver { if (rawConfig.dependencies) { config.dependencies = rawConfig.dependencies; } - if (rawConfig.environments) { - config.environments = rawConfig.environments; - } // Validate required fields this.validateAgentConfig(config, agentId); @@ -66,9 +63,10 @@ class DependencyResolver { throw new Error(`Agent ID mismatch: expected '${agentId}', got '${config.id}'`); } - // Ensure environments exist with defaults - if (!config.environments) { - config.environments = { web: {}, ide: {} }; + // Ensure persona exists + if (!config.persona) { + // Default to agent id if no persona specified + config.persona = config.id; } // Ensure dependencies exist with defaults @@ -87,11 +85,6 @@ class DependencyResolver { */ resolveAgentDependencies(agentId, environment = 'web') { const config = this.loadAgentConfig(agentId); - - // Check if agent is available for this environment - if (environment === 'web' && config.environments.web?.available === false) { - throw new Error(`Agent '${agentId}' is not available for web environment`); - } const dependencies = { agent: agentId,