diff --git a/src/modules/bmb/workflows/convert-legacy/checklist.md b/src/modules/bmb/workflows/convert-legacy/checklist.md
index 44db1396..3bc3b2c4 100644
--- a/src/modules/bmb/workflows/convert-legacy/checklist.md
+++ b/src/modules/bmb/workflows/convert-legacy/checklist.md
@@ -38,7 +38,7 @@
- [ ] Config values use {config_source}: pattern
- [ ] Agent follows naming conventions (kebab-case for files)
- [ ] ALL paths reference {project-root}/{bmad_folder}/{{module}}/ locations, NOT src/
-- [ ] exec, data, run-workflow commands point to final BMAD installation paths
+- [ ] exec, data, workflow commands point to final BMAD installation paths
### For Template/Workflow Conversions
diff --git a/src/modules/bmb/workflows/convert-legacy/instructions.md b/src/modules/bmb/workflows/convert-legacy/instructions.md
index b8194099..61dc64fc 100644
--- a/src/modules/bmb/workflows/convert-legacy/instructions.md
+++ b/src/modules/bmb/workflows/convert-legacy/instructions.md
@@ -156,7 +156,7 @@ For Modules:
Example path conversions:
- exec="{project-root}/{bmad_folder}/{{target_module}}/tasks/task-name.md"
-- run-workflow="{project-root}/{bmad_folder}/{{target_module}}/workflows/workflow-name/workflow.yaml"
+- workflow="{project-root}/{bmad_folder}/{{target_module}}/workflows/workflow-name/workflow.yaml"
- data="{project-root}/{bmad_folder}/{{target_module}}/data/data-file.yaml"
Save to: {bmad_folder}/{{target_module}}/agents/{{agent_name}}.agent.yaml (physical location)
diff --git a/src/modules/bmm/agents/analyst.agent.yaml b/src/modules/bmm/agents/analyst.agent.yaml
index 37a8b964..1398183e 100644
--- a/src/modules/bmm/agents/analyst.agent.yaml
+++ b/src/modules/bmm/agents/analyst.agent.yaml
@@ -20,19 +20,19 @@ agent:
menu:
- trigger: brainstorm-project
workflow: "{project-root}/{bmad_folder}/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml"
- description: Guided Brainstorming
+ description: Guided Brainstorming scoped to product development ideation and problem discovery
- trigger: research
workflow: "{project-root}/{bmad_folder}/bmm/workflows/1-analysis/research/workflow.yaml"
- description: Guided Research
+ description: Guided Research scoped to market and competitive analysis of a product or feature
- trigger: product-brief
workflow: "{project-root}/{bmad_folder}/bmm/workflows/1-analysis/product-brief/workflow.yaml"
- description: Create a Product Brief
+ description: Create a Product Brief, a great input to then drive a PRD
- trigger: document-project
workflow: "{project-root}/{bmad_folder}/bmm/workflows/document-project/workflow.yaml"
- description: Generate comprehensive documentation of an existing Project
+ description: Generate comprehensive documentation of an existing codebase, including architecture, data flows, and API contracts, and other details to aid project understanding.
- trigger: party-mode
workflow: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.yaml"
diff --git a/src/modules/bmm/agents/architect.agent.yaml b/src/modules/bmm/agents/architect.agent.yaml
index b64cca05..dd8dd7fe 100644
--- a/src/modules/bmm/agents/architect.agent.yaml
+++ b/src/modules/bmm/agents/architect.agent.yaml
@@ -24,7 +24,6 @@ agent:
- trigger: validate-architecture
validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/architecture/workflow.yaml"
- checklist: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/architecture/checklist.md"
description: Validate Architecture Document
- trigger: implementation-readiness
diff --git a/src/modules/bmm/agents/pm.agent.yaml b/src/modules/bmm/agents/pm.agent.yaml
index 272901a0..7280dc57 100644
--- a/src/modules/bmm/agents/pm.agent.yaml
+++ b/src/modules/bmm/agents/pm.agent.yaml
@@ -25,13 +25,11 @@ agent:
- trigger: validate-prd
validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/workflow.yaml"
- checklist: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/checklist.md"
- document: "{output_folder}/PRD.md"
- description: Validate PRD + Epics + Stories completeness and quality
+ description: Validate PRD
- trigger: create-epics-and-stories
workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml"
- description: Break PRD requirements into implementable epics and stories after the architecture is defined
+ description: Create Epics and User Stories from PRD (Its recommended to not do this until the architecture is complete)
- trigger: correct-course
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/correct-course/workflow.yaml"
diff --git a/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml b/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml
index 53dad26a..424d9754 100644
--- a/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml
+++ b/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml
@@ -19,7 +19,6 @@ agent:
- Find if this exists, if it does, always treat it as the bible I plan and execute against: `**/project-context.md ``
menu:
- # Quick-Flow workflows - Barry owns the entire quick-flow path from spec to ship
- trigger: create-tech-spec
workflow: "{project-root}/{bmad_folder}/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml"
description: Architect a technical spec with implementation-ready stories
diff --git a/src/modules/bmm/agents/ux-designer.agent.yaml b/src/modules/bmm/agents/ux-designer.agent.yaml
index 17497633..fd8b28af 100644
--- a/src/modules/bmm/agents/ux-designer.agent.yaml
+++ b/src/modules/bmm/agents/ux-designer.agent.yaml
@@ -25,12 +25,10 @@ agent:
menu:
- trigger: create-ux-design
workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml"
- description: Conduct Design Thinking Workshop to Define the User Specification
+ description: Conduct Design Thinking Workshop to Define the User Specification with PRD as input
- trigger: validate-design
validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml"
- checklist: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md"
- document: "{output_folder}/ux-spec.md"
description: Validate UX Specification and Design Artifacts
- trigger: create-excalidraw-wireframe
diff --git a/src/modules/cis/agents/README.md b/src/modules/cis/agents/README.md
index e65dc518..4df34e79 100644
--- a/src/modules/cis/agents/README.md
+++ b/src/modules/cis/agents/README.md
@@ -83,7 +83,7 @@ Master storyteller with 50+ years crafting compelling narratives across multiple
All CIS agents are **Module Agents** with:
- Integration with CIS module configuration
-- Access to workflow invocation via `run-workflow` or `exec` attributes
+- Access to workflow invocation via `workflow` or `exec` attributes
- Standard critical actions for config loading and user context
- Simple command structure focused on workflow facilitation
diff --git a/src/utility/models/agent-activation-ide.xml b/src/utility/models/agent-activation-ide.xml
index 8e913f6d..02cd032a 100644
--- a/src/utility/models/agent-activation-ide.xml
+++ b/src/utility/models/agent-activation-ide.xml
@@ -8,16 +8,8 @@
Number → cmd[n] | Text → fuzzy match *commands
- exec, tmpl, data, action, run-workflow, validate-workflow
+ exec, tmpl, data, action, validate-workflow
-
- When command has: run-workflow="path/to/x.yaml" You MUST:
- 1. CRITICAL: Always LOAD {project-root}/{bmad_folder}/core/tasks/workflow.xml
- 2. READ its entire contents - the is the CORE OS for EXECUTING workflows
- 3. Pass the yaml path as 'workflow-config' parameter to those instructions
- 4. Follow workflow.xml instructions EXACTLY as written
- 5. Save outputs after EACH section (never batch)
-
When command has: run-progressive-workflow="path/to/x.yaml" You MUST:
1. CRITICAL: Always LOAD {project-root}/{bmad_folder}/core/tasks/workflow.xml
diff --git a/src/utility/models/agent-activation-web.xml b/src/utility/models/agent-activation-web.xml
index a07d9ed0..95e23dc5 100644
--- a/src/utility/models/agent-activation-web.xml
+++ b/src/utility/models/agent-activation-web.xml
@@ -21,18 +21,8 @@
Number → cmd[n] | Text → fuzzy match *commands
- exec, tmpl, data, action, run-workflow, validate-workflow
+ exec, tmpl, data, action, validate-workflow
-
- When command has: run-workflow="path/to/x.yaml" You MUST:
- 1. CRITICAL: Locate <file id="{bmad_folder}/core/tasks/workflow.xml"> in this XML bundle
- 2. Extract and READ its CDATA content - this is the CORE OS for EXECUTING workflows
- 3. Locate <file id="path/to/x.yaml"> for the workflow config
- 4. Pass the yaml content as 'workflow-config' parameter to workflow.xml instructions
- 5. Follow workflow.xml instructions EXACTLY as written
- 6. When workflow references other files, locate them by id in <file> elements
- 7. Save outputs after EACH section (never batch)
-
When command has: action="#id" → Find prompt with id="id" in current agent XML, execute its content
When command has: action="text" → Execute the text directly as a critical action prompt
diff --git a/test/README.md b/test/README.md
index 82fde79b..6253bd7e 100644
--- a/test/README.md
+++ b/test/README.md
@@ -116,7 +116,7 @@ Tests required menu structure:
Tests menu item command targets:
-- ✅ Valid: All 7 command types (`workflow`, `validate-workflow`, `exec`, `action`, `tmpl`, `data`, `run-workflow`)
+- ✅ Valid: All 6 command types (`workflow`, `validate-workflow`, `exec`, `action`, `tmpl`, `data`)
- ✅ Valid: Multiple command targets in one menu item
- ❌ Invalid: No command target fields
- ❌ Invalid: Empty string command targets
diff --git a/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml b/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml
index 4edb2c06..eaa2a891 100644
--- a/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml
+++ b/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml
@@ -34,6 +34,4 @@ agent:
- trigger: data-test
description: Test data command
data: path/to/data
- - trigger: run-workflow-test
- description: Test run-workflow command
- run-workflow: path/to/workflow
+
\ No newline at end of file
diff --git a/tools/cli/bundlers/web-bundler.js b/tools/cli/bundlers/web-bundler.js
index b83f2c2f..aafec6cb 100644
--- a/tools/cli/bundlers/web-bundler.js
+++ b/tools/cli/bundlers/web-bundler.js
@@ -748,10 +748,9 @@ class WebBundler {
}
}
- // Extract workflow references - both 'workflow' and 'run-workflow' attributes
+ // Extract workflow references from agent files
const workflowPatterns = [
/workflow="([^"]+)"/g, // Menu items with workflow attribute
- /run-workflow="([^"]+)"/g, // Commands with run-workflow attribute
/validate-workflow="([^"]+)"/g, // Validation workflow references
];
@@ -789,16 +788,6 @@ class WebBundler {
// Match: ...
const itemWorkflowPattern = new RegExp(`\\s*]*workflow="[^"]*${escapedPath}"[^>]*>.*?\\s*`, 'gs');
modifiedXml = modifiedXml.replace(itemWorkflowPattern, '');
-
- // Pattern 2: Remove tags with run-workflow attribute
- // Match: ...
- const itemRunWorkflowPattern = new RegExp(`\\s*]*run-workflow="[^"]*${escapedPath}"[^>]*>.*?\\s*`, 'gs');
- modifiedXml = modifiedXml.replace(itemRunWorkflowPattern, '');
-
- // Pattern 3: Remove tags with run-workflow attribute (legacy)
- // Match: ...
- const cPattern = new RegExp(`\\s*]*run-workflow="[^"]*${escapedPath}"[^>]*>.*?\\s*`, 'gs');
- modifiedXml = modifiedXml.replace(cPattern, '');
}
return modifiedXml;
diff --git a/tools/cli/lib/agent/compiler.js b/tools/cli/lib/agent/compiler.js
index 4aaa2d9f..a734dde2 100644
--- a/tools/cli/lib/agent/compiler.js
+++ b/tools/cli/lib/agent/compiler.js
@@ -49,9 +49,10 @@ You must fully embody this agent's persona and follow all activation instruction
* Build simple activation block for custom agents
* @param {Array} criticalActions - Agent-specific critical actions
* @param {Array} menuItems - Menu items to determine which handlers to include
+ * @param {string} deploymentType - 'ide' or 'web' - filters commands based on ide-only/web-only flags
* @returns {string} Activation XML
*/
-function buildSimpleActivation(criticalActions = [], menuItems = []) {
+function buildSimpleActivation(criticalActions = [], menuItems = [], deploymentType = 'ide') {
let activation = '\n';
let stepNum = 1;
@@ -75,13 +76,28 @@ function buildSimpleActivation(criticalActions = [], menuItems = []) {
activation += ` On user input: Number → execute menu item[n] | Text → case-insensitive substring match | Multiple matches → ask user
to clarify | No match → show "Not recognized"\n`;
- // Detect which handlers are actually used
+ // Filter menu items based on deployment type
+ const filteredMenuItems = menuItems.filter((item) => {
+ // Skip web-only commands for IDE deployment
+ if (deploymentType === 'ide' && item['web-only'] === true) {
+ return false;
+ }
+ // Skip ide-only commands for web deployment
+ if (deploymentType === 'web' && item['ide-only'] === true) {
+ return false;
+ }
+ return true;
+ });
+
+ // Detect which handlers are actually used in the filtered menu
const usedHandlers = new Set();
- for (const item of menuItems) {
+ for (const item of filteredMenuItems) {
if (item.action) usedHandlers.add('action');
if (item.workflow) usedHandlers.add('workflow');
if (item.exec) usedHandlers.add('exec');
if (item.tmpl) usedHandlers.add('tmpl');
+ if (item.data) usedHandlers.add('data');
+ if (item['validate-workflow']) usedHandlers.add('validate-workflow');
}
// Only include menu-handlers section if handlers are used
@@ -124,6 +140,25 @@ function buildSimpleActivation(criticalActions = [], menuItems = []) {
\n`;
}
+ if (usedHandlers.has('data')) {
+ activation += `
+ When menu item has: data="path/to/x.json|yaml|yml"
+ Load the file, parse as JSON/YAML, make available as {data} to subsequent operations
+ \n`;
+ }
+
+ if (usedHandlers.has('validate-workflow')) {
+ activation += `
+ When menu item has: validate-workflow="path/to/workflow.yaml"
+ 1. CRITICAL: Always LOAD {project-root}/{bmad_folder}/core/tasks/validate-workflow.xml
+ 2. Read the complete file - this is the CORE OS for validating BMAD workflows
+ 3. Pass the workflow.yaml path as 'workflow' parameter to those instructions
+ 4. Pass any checklist.md from the workflow location as 'checklist' parameter if available
+ 5. Execute validate-workflow.xml instructions precisely following all steps
+ 6. Generate validation report with thorough analysis
+ \n`;
+ }
+
activation += `
\n`;
}
@@ -275,8 +310,8 @@ function compileToXml(agentYaml, agentName = '', targetPath = '') {
xml += `\n`;
- // Activation block - pass menu items to determine which handlers to include
- xml += buildSimpleActivation(agent.critical_actions || [], agent.menu || []);
+ // Activation block - pass menu items and deployment type to determine which handlers to include
+ xml += buildSimpleActivation(agent.critical_actions || [], agent.menu || [], 'ide');
// Persona section
xml += buildPersonaXml(agent.persona);
diff --git a/tools/schema/agent.js b/tools/schema/agent.js
index d246578a..c3348a6d 100644
--- a/tools/schema/agent.js
+++ b/tools/schema/agent.js
@@ -2,7 +2,7 @@
const assert = require('node:assert');
const { z } = require('zod');
-const COMMAND_TARGET_KEYS = ['workflow', 'validate-workflow', 'exec', 'action', 'tmpl', 'data', 'run-workflow'];
+const COMMAND_TARGET_KEYS = ['workflow', 'validate-workflow', 'exec', 'action', 'tmpl', 'data'];
const TRIGGER_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
// Public API ---------------------------------------------------------------
@@ -180,7 +180,6 @@ function buildMenuItemSchema() {
action: createNonEmptyString('agent.menu[].action').optional(),
tmpl: createNonEmptyString('agent.menu[].tmpl').optional(),
data: createNonEmptyString('agent.menu[].data').optional(),
- 'run-workflow': createNonEmptyString('agent.menu[].run-workflow').optional(),
checklist: createNonEmptyString('agent.menu[].checklist').optional(),
document: createNonEmptyString('agent.menu[].document').optional(),
'ide-only': z.boolean().optional(),