bmad-method 6.0.0-alpha.20 → 6.0.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/package.json +2 -2
  3. package/samples/sample-custom-modules/sample-unitary-module/agents/commit-poet/commit-poet.agent.yaml +1 -1
  4. package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith.agent.yaml +1 -1
  5. package/src/core/agents/bmad-master.agent.yaml +4 -8
  6. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +1 -1
  7. package/src/modules/bmb/agents/agent-builder.agent.yaml +36 -0
  8. package/src/modules/bmb/agents/module-builder.agent.yaml +48 -0
  9. package/src/modules/bmb/agents/workflow-builder.agent.yaml +40 -0
  10. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +2 -1
  11. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +8 -13
  12. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +10 -14
  13. package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +1 -1
  14. package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +1 -1
  15. package/src/modules/bmgd/agents/game-architect.agent.yaml +8 -17
  16. package/src/modules/bmgd/agents/game-designer.agent.yaml +21 -33
  17. package/src/modules/bmgd/agents/game-dev.agent.yaml +12 -16
  18. package/src/modules/bmgd/agents/game-qa.agent.yaml +16 -20
  19. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +16 -20
  20. package/src/modules/bmgd/agents/game-solo-dev.agent.yaml +14 -18
  21. package/src/modules/bmgd/module.yaml +1 -1
  22. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +1 -1
  23. package/src/modules/bmgd/workflows/3-technical/generate-project-context/steps/step-01-discover.md +1 -1
  24. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +1 -1
  25. package/src/modules/bmm/_module-installer/installer.js +0 -34
  26. package/src/modules/bmm/agents/analyst.agent.yaml +10 -22
  27. package/src/modules/bmm/agents/architect.agent.yaml +6 -23
  28. package/src/modules/bmm/agents/dev.agent.yaml +2 -6
  29. package/src/modules/bmm/agents/pm.agent.yaml +10 -19
  30. package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +6 -2
  31. package/src/modules/bmm/agents/sm.agent.yaml +12 -24
  32. package/src/modules/bmm/agents/tea.agent.yaml +20 -25
  33. package/src/modules/bmm/agents/tech-writer.agent.yaml +18 -31
  34. package/src/modules/bmm/agents/ux-designer.agent.yaml +8 -20
  35. package/src/modules/bmm/module.yaml +3 -3
  36. package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +21 -32
  37. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +19 -44
  38. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +1 -1
  39. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +2 -2
  40. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +2 -2
  41. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +2 -2
  42. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +2 -2
  43. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +2 -2
  44. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +2 -2
  45. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +3 -3
  46. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +2 -2
  47. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +2 -2
  48. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +2 -2
  49. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +2 -2
  50. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +5 -4
  51. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +0 -15
  52. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -5
  53. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +22 -69
  54. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +2 -2
  55. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +3 -3
  56. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +3 -3
  57. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +3 -3
  58. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +3 -3
  59. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +3 -3
  60. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +3 -3
  61. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +3 -3
  62. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +3 -3
  63. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +3 -3
  64. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +5 -43
  65. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +1 -1
  66. package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +8 -8
  67. package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +1 -1
  68. package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +2 -2
  69. package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +24 -53
  70. package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +1 -1
  71. package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +1 -1
  72. package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +1 -1
  73. package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +1 -1
  74. package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +1 -1
  75. package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +1 -1
  76. package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +6 -6
  77. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +1 -1
  78. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +1 -1
  79. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +2 -11
  80. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +2 -11
  81. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +2 -11
  82. package/src/modules/cis/agents/innovation-strategist.agent.yaml +2 -11
  83. package/src/modules/cis/agents/presentation-master.agent.yaml +14 -23
  84. package/src/modules/cis/agents/storyteller/storyteller.agent.yaml +2 -11
  85. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +6 -6
  86. package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +8 -8
  87. package/test/fixtures/agent-schema/{invalid → valid}/metadata/core-agent-with-module.agent.yaml +4 -7
  88. package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +22 -0
  89. package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +23 -0
  90. package/test/test-installation-components.js +1 -1
  91. package/tools/cli/installers/lib/core/config-collector.js +1 -1
  92. package/tools/cli/installers/lib/core/installer.js +4 -4
  93. package/tools/cli/installers/lib/ide/antigravity.js +3 -3
  94. package/tools/cli/installers/lib/ide/claude-code.js +3 -3
  95. package/tools/cli/installers/lib/ide/codex.js +1 -1
  96. package/tools/cli/installers/lib/ide/github-copilot.js +1 -1
  97. package/tools/cli/lib/agent/compiler.js +4 -3
  98. package/tools/cli/lib/ui.js +1 -1
  99. package/tools/platform-codes.yaml +13 -1
  100. package/tools/schema/agent.js +30 -52
  101. package/src/modules/bmb/agents/bmad-builder.agent.yaml +0 -94
  102. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/README.md +0 -242
  103. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/breakthroughs.md +0 -24
  104. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/instructions.md +0 -108
  105. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/memories.md +0 -46
  106. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/mood-patterns.md +0 -39
  107. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +0 -152
  108. package/src/modules/bmb/reference/agents/module-examples/README.md +0 -49
  109. package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +0 -53
  110. package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +0 -57
  111. package/src/modules/bmb/reference/agents/simple-examples/commit-poet.agent.yaml +0 -126
  112. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-wrong-shortcut.agent.yaml +0 -24
  113. package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +0 -25
  114. package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +0 -26
@@ -15,15 +15,6 @@ agent:
15
15
  principles: Design is about THEM not us. Validate through real human interaction. Failure is feedback. Design WITH users not FOR them.
16
16
 
17
17
  menu:
18
- - trigger: design
18
+ - trigger: DT or fuzzy match on design-thinking
19
19
  workflow: "{project-root}/_bmad/cis/workflows/design-thinking/workflow.yaml"
20
- description: Guide human-centered design process
21
-
22
- - trigger: party-mode
23
- exec: "{project-root}/_bmad/core/workflows/party-mode/workflow.md"
24
- description: Consult with other expert agents from the party
25
-
26
- - trigger: advanced-elicitation
27
- exec: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml"
28
- description: Advanced elicitation techniques to challenge the LLM to get better results
29
- web-only: true
20
+ description: "[DT] Guide human-centered design process"
@@ -15,15 +15,6 @@ agent:
15
15
  principles: Markets reward genuine new value. Innovation without business model thinking is theater. Incremental thinking means obsolete.
16
16
 
17
17
  menu:
18
- - trigger: innovate
18
+ - trigger: IS or fuzzy match on innovation-strategy
19
19
  workflow: "{project-root}/_bmad/cis/workflows/innovation-strategy/workflow.yaml"
20
- description: Identify disruption opportunities and business model innovation
21
-
22
- - trigger: party-mode
23
- exec: "{project-root}/_bmad/core/workflows/party-mode/workflow.md"
24
- description: Consult with other expert agents from the party
25
-
26
- - trigger: advanced-elicitation
27
- exec: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml"
28
- description: Advanced elicitation techniques to challenge the LLM to get better results
29
- web-only: true
20
+ description: "[IS] Identify disruption opportunities and business model innovation"
@@ -23,39 +23,30 @@ agent:
23
23
  - Story structure applies everywhere - hook, build tension, deliver payoff
24
24
 
25
25
  menu:
26
- - trigger: slide-deck
26
+ - trigger: SD or fuzzy match on slide-deck
27
27
  workflow: "todo"
28
- description: Create multi-slide presentation with professional layouts and visual hierarchy
28
+ description: "[SD] Create multi-slide presentation with professional layouts and visual hierarchy"
29
29
 
30
- - trigger: explainer
30
+ - trigger: EX or fuzzy match on youtube-explainer
31
31
  workflow: "todo"
32
- description: Design YouTube/video explainer layout with visual script and engagement hooks
32
+ description: "[EX] Design YouTube/video explainer layout with visual script and engagement hooks"
33
33
 
34
- - trigger: pitch-deck
34
+ - trigger: PD or fuzzy match on pitch-deck
35
35
  workflow: "todo"
36
- description: Craft investor pitch presentation with data visualization and narrative arc
36
+ description: "[PD] Craft investor pitch presentation with data visualization and narrative arc"
37
37
 
38
- - trigger: talk
38
+ - trigger: CT or fuzzy match on conference-talk
39
39
  workflow: "todo"
40
- description: Build conference or workshop presentation materials with speaker notes
40
+ description: "[CT] Build conference talk or workshop presentation materials with speaker notes"
41
41
 
42
- - trigger: infographic
42
+ - trigger: IN or fuzzy match on infographic
43
43
  workflow: "todo"
44
- description: Design creative information visualization with visual storytelling
44
+ description: "[IN] Design creative information visualization with visual storytelling"
45
45
 
46
- - trigger: visual-metaphor
46
+ - trigger: VM or fuzzy match on visual-metaphor
47
47
  workflow: "todo"
48
- description: Create conceptual illustrations (Rube Goldberg machines, journey maps, creative processes)
48
+ description: "[VM] Create conceptual illustrations (Rube Goldberg machines, journey maps, creative processes)"
49
49
 
50
- - trigger: concept-visual
50
+ - trigger: CV or fuzzy match on concept-visual
51
51
  workflow: "todo"
52
- description: Generate single expressive image that explains ideas creatively and memorably
53
-
54
- - trigger: party-mode
55
- exec: "{project-root}/_bmad/core/workflows/party-mode/workflow.md"
56
- description: Consult with other expert agents from the party
57
-
58
- - trigger: advanced-elicitation
59
- exec: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml"
60
- description: Advanced elicitation techniques to challenge the LLM to get better results
61
- web-only: true
52
+ description: "[CV] Generate single expressive image that explains ideas creatively and memorably"
@@ -20,15 +20,6 @@ agent:
20
20
  - "Load COMPLETE file {project-root}/_bmad/_memory/storyteller-sidecar/stories-told.md and review the history of stories created for this user"
21
21
 
22
22
  menu:
23
- - trigger: story
23
+ - trigger: ST or fuzzy match on story
24
24
  exec: "{project-root}/_bmad/cis/workflows/storytelling/workflow.yaml"
25
- description: Craft compelling narrative using proven frameworks
26
-
27
- - trigger: party-mode
28
- exec: "{project-root}/_bmad/core/workflows/party-mode/workflow.md"
29
- description: Consult with other expert agents from the party
30
-
31
- - trigger: advanced-elicitation
32
- exec: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml"
33
- description: Advanced elicitation techniques to challenge the LLM to get better results
34
- web-only: true
25
+ description: "[ST] Craft compelling narrative using proven frameworks"
@@ -1,14 +1,14 @@
1
- # Test: Compound trigger with mismatched kebab portions
1
+ # Test: Compound trigger with old format (no longer supported)
2
2
  # Expected: FAIL
3
3
  # Error code: custom
4
4
  # Error path: agent.menu[0].trigger
5
- # Error message: agent.menu[].trigger compound format error: kebab-case trigger mismatch: "tech-spec" vs "other-thing"
5
+ # Error message: agent.menu[].trigger compound format error: invalid compound trigger format
6
6
 
7
7
  agent:
8
8
  metadata:
9
9
  id: compound-mismatched-kebab
10
- name: Mismatched Kebab
11
- title: Mismatched Kebab Test
10
+ name: Old Format
11
+ title: Old Format Test
12
12
  icon: 🧪
13
13
 
14
14
  persona:
@@ -19,6 +19,6 @@ agent:
19
19
  - Test principle
20
20
 
21
21
  menu:
22
- - trigger: TS or tech-spec or fuzzy match on other-thing
23
- description: Kebab portions do not match
22
+ - trigger: TS or tech-spec or fuzzy match on tech-spec
23
+ description: Old format with middle kebab-case (no longer supported)
24
24
  action: test
@@ -16,15 +16,15 @@ agent:
16
16
  - Test compound format
17
17
 
18
18
  menu:
19
- - trigger: TS or tech-spec or fuzzy match on tech-spec
20
- description: Two-word compound trigger
19
+ - trigger: TS or fuzzy match on tech-spec
20
+ description: "[TS] Two-word compound trigger"
21
21
  action: tech_spec
22
- - trigger: DS or dev-story or fuzzy match on dev-story
23
- description: Another two-word compound trigger
22
+ - trigger: DS or fuzzy match on dev-story
23
+ description: "[DS] Another two-word compound trigger"
24
24
  action: dev_story
25
- - trigger: WI or workflow-init-process or fuzzy match on workflow-init-process
26
- description: Three-word compound trigger (uses first 2 words for shortcut)
25
+ - trigger: WI or fuzzy match on workflow-init-process
26
+ description: "[WI] Three-word compound trigger (uses first 2 words for shortcut)"
27
27
  action: workflow_init
28
- - trigger: H or help or fuzzy match on help
29
- description: Single-word compound trigger (1-letter shortcut)
28
+ - trigger: H or fuzzy match on help
29
+ description: "[H] Single-word compound trigger (1-letter shortcut)"
30
30
  action: help
@@ -1,16 +1,13 @@
1
- # Test: Core agent with unexpected module field
2
- # Expected: FAIL
3
- # Error code: custom
4
- # Error path: agent.metadata.module
5
- # Error message: core agents must not include agent.metadata.module
6
- # Path context: src/core/agents/core-agent-with-module.agent.yaml
1
+ # Test: Core agent can have module field
2
+ # Expected: PASS
3
+ # Note: Core agents can now include module field if needed
7
4
 
8
5
  agent:
9
6
  metadata:
10
7
  id: core-with-module
11
8
  name: Core With Module
12
9
  title: Core Agent
13
- icon:
10
+ icon:
14
11
  module: bmm
15
12
 
16
13
  persona:
@@ -0,0 +1,22 @@
1
+ # Test: Module agent can omit module field
2
+ # Expected: PASS
3
+ # Note: Module field is optional
4
+
5
+ agent:
6
+ metadata:
7
+ id: bmm-missing-module
8
+ name: No Module
9
+ title: Optional Module
10
+ icon: ✅
11
+
12
+ persona:
13
+ role: Test agent
14
+ identity: Test identity
15
+ communication_style: Test style
16
+ principles:
17
+ - Test principle
18
+
19
+ menu:
20
+ - trigger: help
21
+ description: Show help
22
+ action: display_help
@@ -0,0 +1,23 @@
1
+ # Test: Module agent can have any module value
2
+ # Expected: PASS
3
+ # Note: Module validation removed - agents can declare any module
4
+
5
+ agent:
6
+ metadata:
7
+ id: wrong-module
8
+ name: Any Module
9
+ title: Any Module Value
10
+ icon: ✅
11
+ module: cis
12
+
13
+ persona:
14
+ role: Test agent
15
+ identity: Test identity
16
+ communication_style: Test style
17
+ principles:
18
+ - Test principle
19
+
20
+ menu:
21
+ - trigger: help
22
+ description: Show help
23
+ action: display_help
@@ -175,7 +175,7 @@ async function runTests() {
175
175
 
176
176
  assert(compiled.includes('testarch/knowledge'), 'TEA agent compilation includes knowledge base path');
177
177
 
178
- assert(compiled.includes('*test-design'), 'TEA agent menu includes test-design workflow');
178
+ assert(compiled.includes('test-design'), 'TEA agent menu includes test-design workflow');
179
179
 
180
180
  // Cleanup
181
181
  await fs.remove(tempOutput);
@@ -2,7 +2,7 @@ const path = require('node:path');
2
2
  const fs = require('fs-extra');
3
3
  const yaml = require('yaml');
4
4
  const chalk = require('chalk');
5
- const inquirer = require('inquirer');
5
+ const inquirer = require('inquirer').default || require('inquirer');
6
6
  const { getProjectRoot, getModulePath } = require('../../../lib/project-root');
7
7
  const { CLIUtils } = require('../../../lib/cli-utils');
8
8
 
@@ -2,7 +2,7 @@ const path = require('node:path');
2
2
  const fs = require('fs-extra');
3
3
  const chalk = require('chalk');
4
4
  const ora = require('ora');
5
- const inquirer = require('inquirer');
5
+ const inquirer = require('inquirer').default || require('inquirer');
6
6
  const { Detector } = require('./detector');
7
7
  const { Manifest } = require('./manifest');
8
8
  const { ModuleManager } = require('../modules/manager');
@@ -2140,7 +2140,7 @@ class Installer {
2140
2140
  * Private: Prompt for update action
2141
2141
  */
2142
2142
  async promptUpdateAction() {
2143
- const inquirer = require('inquirer');
2143
+ const inquirer = require('inquirer').default || require('inquirer');
2144
2144
  return await inquirer.prompt([
2145
2145
  {
2146
2146
  type: 'list',
@@ -2170,7 +2170,7 @@ class Installer {
2170
2170
  return !name.startsWith('_bmad'); // Everything else is manual cleanup
2171
2171
  });
2172
2172
 
2173
- const inquirer = require('inquirer');
2173
+ const inquirer = require('inquirer').default || require('inquirer');
2174
2174
 
2175
2175
  // Show warning for other offending paths FIRST
2176
2176
  if (otherOffenders.length > 0) {
@@ -2469,7 +2469,7 @@ class Installer {
2469
2469
 
2470
2470
  console.log(chalk.yellow(`\n⚠️ Found ${customModulesWithMissingSources.length} custom module(s) with missing sources:`));
2471
2471
 
2472
- const inquirer = require('inquirer');
2472
+ const inquirer = require('inquirer').default || require('inquirer');
2473
2473
  let keptCount = 0;
2474
2474
  let updatedCount = 0;
2475
2475
  let removedCount = 0;
@@ -58,7 +58,7 @@ class AntigravitySetup extends BaseIdeSetup {
58
58
 
59
59
  if (config.subagentChoices.install !== 'none') {
60
60
  // Ask for installation location
61
- const inquirer = require('inquirer');
61
+ const inquirer = require('inquirer').default || require('inquirer');
62
62
  const locationAnswer = await inquirer.prompt([
63
63
  {
64
64
  type: 'list',
@@ -297,7 +297,7 @@ class AntigravitySetup extends BaseIdeSetup {
297
297
  choices = await this.promptSubagentInstallation(config.subagents);
298
298
 
299
299
  if (choices.install !== 'none') {
300
- const inquirer = require('inquirer');
300
+ const inquirer = require('inquirer').default || require('inquirer');
301
301
  const locationAnswer = await inquirer.prompt([
302
302
  {
303
303
  type: 'list',
@@ -334,7 +334,7 @@ class AntigravitySetup extends BaseIdeSetup {
334
334
  * Prompt user for subagent installation preferences
335
335
  */
336
336
  async promptSubagentInstallation(subagentConfig) {
337
- const inquirer = require('inquirer');
337
+ const inquirer = require('inquirer').default || require('inquirer');
338
338
 
339
339
  // First ask if they want to install subagents
340
340
  const { install } = await inquirer.prompt([
@@ -57,7 +57,7 @@ class ClaudeCodeSetup extends BaseIdeSetup {
57
57
 
58
58
  if (config.subagentChoices.install !== 'none') {
59
59
  // Ask for installation location
60
- const inquirer = require('inquirer');
60
+ const inquirer = require('inquirer').default || require('inquirer');
61
61
  const locationAnswer = await inquirer.prompt([
62
62
  {
63
63
  type: 'list',
@@ -305,7 +305,7 @@ class ClaudeCodeSetup extends BaseIdeSetup {
305
305
  choices = await this.promptSubagentInstallation(config.subagents);
306
306
 
307
307
  if (choices.install !== 'none') {
308
- const inquirer = require('inquirer');
308
+ const inquirer = require('inquirer').default || require('inquirer');
309
309
  const locationAnswer = await inquirer.prompt([
310
310
  {
311
311
  type: 'list',
@@ -342,7 +342,7 @@ class ClaudeCodeSetup extends BaseIdeSetup {
342
342
  * Prompt user for subagent installation preferences
343
343
  */
344
344
  async promptSubagentInstallation(subagentConfig) {
345
- const inquirer = require('inquirer');
345
+ const inquirer = require('inquirer').default || require('inquirer');
346
346
 
347
347
  // First ask if they want to install subagents
348
348
  const { install } = await inquirer.prompt([
@@ -21,7 +21,7 @@ class CodexSetup extends BaseIdeSetup {
21
21
  * @returns {Object} Collected configuration
22
22
  */
23
23
  async collectConfiguration(options = {}) {
24
- const inquirer = require('inquirer');
24
+ const inquirer = require('inquirer').default || require('inquirer');
25
25
 
26
26
  let confirmed = false;
27
27
  let installLocation = 'global';
@@ -1,7 +1,7 @@
1
1
  const path = require('node:path');
2
2
  const { BaseIdeSetup } = require('./_base-ide');
3
3
  const chalk = require('chalk');
4
- const inquirer = require('inquirer');
4
+ const inquirer = require('inquirer').default || require('inquirer');
5
5
  const { AgentCommandGenerator } = require('./shared/agent-command-generator');
6
6
 
7
7
  /**
@@ -128,7 +128,8 @@ function buildMenuXml(menuItems) {
128
128
  let xml = ' <menu>\n';
129
129
 
130
130
  // Always inject menu display option first
131
- xml += ` <item cmd="*menu">[M] Redisplay Menu Options</item>\n`;
131
+ xml += ` <item cmd="MH or fuzzy match on menu or help">[MH] Redisplay Menu Help</item>\n`;
132
+ xml += ` <item cmd="CH or fuzzy match on chat">[CH] Chat with the Agent about anything</item>\n`;
132
133
 
133
134
  // Add user-defined menu items
134
135
  if (menuItems && menuItems.length > 0) {
@@ -161,8 +162,8 @@ function buildMenuXml(menuItems) {
161
162
  }
162
163
  }
163
164
 
164
- // Always inject dismiss last
165
- xml += ` <item cmd="*dismiss">[D] Dismiss Agent</item>\n`;
165
+ xml += ` <item cmd="PM or fuzzy match on party-mode" exec="{project-root}/_bmad/core/workflows/party-mode/workflow.md">[PM] Start Party Mode</item>\n`;
166
+ xml += ` <item cmd="DA or fuzzy match on exit, leave, goodbye or dismiss agent">[DA] Dismiss Agent</item>\n`;
166
167
 
167
168
  xml += ' </menu>\n';
168
169
 
@@ -1,5 +1,5 @@
1
1
  const chalk = require('chalk');
2
- const inquirer = require('inquirer');
2
+ const inquirer = require('inquirer').default || require('inquirer');
3
3
  const path = require('node:path');
4
4
  const os = require('node:os');
5
5
  const fs = require('fs-extra');
@@ -56,11 +56,23 @@ platforms:
56
56
  description: "Enhanced Cline fork"
57
57
 
58
58
  rovo:
59
- name: "Rovo Dev"
59
+ name: "Rovo"
60
60
  preferred: false
61
61
  category: ide
62
62
  description: "Atlassian's AI coding assistant"
63
63
 
64
+ rovo-dev:
65
+ name: "Rovo Dev"
66
+ preferred: false
67
+ category: ide
68
+ description: "Atlassian's Rovo development environment"
69
+
70
+ kiro-cli:
71
+ name: "Kiro CLI"
72
+ preferred: false
73
+ category: cli
74
+ description: "Kiro command-line interface"
75
+
64
76
  github-copilot:
65
77
  name: "GitHub Copilot"
66
78
  preferred: false
@@ -4,7 +4,7 @@ const { z } = require('zod');
4
4
 
5
5
  const COMMAND_TARGET_KEYS = ['workflow', 'validate-workflow', 'exec', 'action', 'tmpl', 'data'];
6
6
  const TRIGGER_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
7
- const COMPOUND_TRIGGER_PATTERN = /^([A-Z]{1,2}) or ([a-z0-9]+(?:-[a-z0-9]+)*) or fuzzy match on ([a-z0-9]+(?:-[a-z0-9]+)*)$/;
7
+ const COMPOUND_TRIGGER_PATTERN = /^([A-Z]{1,3}) or fuzzy match on ([a-z0-9]+(?:-[a-z0-9]+)*)$/;
8
8
 
9
9
  /**
10
10
  * Derive the expected shortcut from a kebab-case trigger.
@@ -23,9 +23,9 @@ function deriveShortcutFromKebab(kebabTrigger) {
23
23
 
24
24
  /**
25
25
  * Parse and validate a compound trigger string.
26
- * Format: "<SHORTCUT> or <kebab-case> or fuzzy match on <kebab-case>"
26
+ * Format: "<SHORTCUT> or fuzzy match on <kebab-case>"
27
27
  * @param {string} triggerValue The trigger string to parse.
28
- * @returns {{ valid: boolean, kebabTrigger?: string, error?: string }}
28
+ * @returns {{ valid: boolean, shortcut?: string, kebabTrigger?: string, error?: string }}
29
29
  */
30
30
  function parseCompoundTrigger(triggerValue) {
31
31
  const match = COMPOUND_TRIGGER_PATTERN.exec(triggerValue);
@@ -33,26 +33,9 @@ function parseCompoundTrigger(triggerValue) {
33
33
  return { valid: false, error: 'invalid compound trigger format' };
34
34
  }
35
35
 
36
- const [, shortcut, kebabTrigger, fuzzyKebab] = match;
36
+ const [, shortcut, kebabTrigger] = match;
37
37
 
38
- // Validate both kebab instances are identical
39
- if (kebabTrigger !== fuzzyKebab) {
40
- return {
41
- valid: false,
42
- error: `kebab-case trigger mismatch: "${kebabTrigger}" vs "${fuzzyKebab}"`,
43
- };
44
- }
45
-
46
- // Validate shortcut matches derived value
47
- const expectedShortcut = deriveShortcutFromKebab(kebabTrigger);
48
- if (shortcut !== expectedShortcut) {
49
- return {
50
- valid: false,
51
- error: `shortcut "${shortcut}" does not match expected "${expectedShortcut}" for "${kebabTrigger}"`,
52
- };
53
- }
54
-
55
- return { valid: true, kebabTrigger };
38
+ return { valid: true, shortcut, kebabTrigger };
56
39
  }
57
40
 
58
41
  // Public API ---------------------------------------------------------------
@@ -115,6 +98,28 @@ function agentSchema(options = {}) {
115
98
  });
116
99
  return;
117
100
  }
101
+
102
+ // Validate that shortcut matches description brackets
103
+ const descriptionMatch = item.description?.match(/^\[([A-Z]{1,3})\]/);
104
+ if (!descriptionMatch) {
105
+ ctx.addIssue({
106
+ code: 'custom',
107
+ path: ['agent', 'menu', index, 'description'],
108
+ message: `agent.menu[].description must start with [SHORTCUT] where SHORTCUT matches the trigger shortcut "${result.shortcut}"`,
109
+ });
110
+ return;
111
+ }
112
+
113
+ const descriptionShortcut = descriptionMatch[1];
114
+ if (descriptionShortcut !== result.shortcut) {
115
+ ctx.addIssue({
116
+ code: 'custom',
117
+ path: ['agent', 'menu', index, 'description'],
118
+ message: `agent.menu[].description shortcut "[${descriptionShortcut}]" must match trigger shortcut "${result.shortcut}"`,
119
+ });
120
+ return;
121
+ }
122
+
118
123
  canonicalTrigger = result.kebabTrigger;
119
124
  } else if (!TRIGGER_PATTERN.test(triggerValue)) {
120
125
  ctx.addIssue({
@@ -213,8 +218,9 @@ function buildAgentSchema(expectedModule) {
213
218
  }
214
219
 
215
220
  /**
216
- * Validate metadata shape and cross-check module expectation against caller input.
221
+ * Validate metadata shape.
217
222
  * @param {string|null} expectedModule Trimmed module slug or null when core agent metadata is expected.
223
+ * Note: Module field is optional and can be any value - no validation against path.
218
224
  */
219
225
  function buildMetadataSchema(expectedModule) {
220
226
  const schemaShape = {
@@ -225,35 +231,7 @@ function buildMetadataSchema(expectedModule) {
225
231
  module: createNonEmptyString('agent.metadata.module').optional(),
226
232
  };
227
233
 
228
- return (
229
- z
230
- .object(schemaShape)
231
- .strict()
232
- // Refinement: guard presence and correctness of metadata.module.
233
- .superRefine((value, ctx) => {
234
- const moduleValue = typeof value.module === 'string' ? value.module.trim() : null;
235
-
236
- if (expectedModule && !moduleValue) {
237
- ctx.addIssue({
238
- code: 'custom',
239
- path: ['module'],
240
- message: 'module-scoped agents must declare agent.metadata.module',
241
- });
242
- } else if (!expectedModule && moduleValue) {
243
- ctx.addIssue({
244
- code: 'custom',
245
- path: ['module'],
246
- message: 'core agents must not include agent.metadata.module',
247
- });
248
- } else if (expectedModule && moduleValue !== expectedModule) {
249
- ctx.addIssue({
250
- code: 'custom',
251
- path: ['module'],
252
- message: `agent.metadata.module must equal "${expectedModule}"`,
253
- });
254
- }
255
- })
256
- );
234
+ return z.object(schemaShape).strict();
257
235
  }
258
236
 
259
237
  function buildPersonaSchema() {
@@ -1,94 +0,0 @@
1
- # BMad Builder Agent Definition
2
- # Master BMad Module Agent Team and Workflow Builder and Maintainer
3
-
4
- agent:
5
- webskip: true
6
- metadata:
7
- id: "_bmad/bmb/agents/bmad-builder.md"
8
- name: BMad Builder
9
- title: BMad Builder
10
- icon: 🧙
11
- module: bmb
12
-
13
- persona:
14
- role: Generalist Builder and BMAD System Maintainer
15
- identity: A hands-on builder who gets things done efficiently and maintains the entire BMAD ecosystem
16
- communication_style: Direct, action-oriented, and encouraging with a can-do attitude
17
- principles:
18
- - Execute resources directly without hesitation
19
- - Load resources at runtime never pre-load
20
- - Always present numbered lists for clear choices
21
- - Focus on practical implementation and results
22
- - Maintain system-wide coherence and standards
23
- - Balance speed with quality and compliance
24
-
25
- discussion: true
26
- conversational_knowledge:
27
- - agents: "{project-root}/_bmad/bmb/docs/agents/kb.csv"
28
- - workflows: "{project-root}/_bmad/bmb/docs/workflows/kb.csv"
29
- - modules: "{project-root}/_bmad/bmb/docs/modules/kb.csv"
30
-
31
- menu:
32
- - multi: "[CA] Create, [EA] Edit, or [VA] Validate with Compliance CheckBMAD agents with best practices"
33
- triggers:
34
- - create-agent:
35
- - input: CA or fuzzy match create agent
36
- - route: "{project-root}/_bmad/bmb/workflows/create-agent/workflow.md"
37
- - data: null
38
- - type: exec
39
- - edit-agent:
40
- - input: EA or fuzzy match edit agent
41
- - route: "{project-root}/_bmad/bmb/workflows/edit-agent/workflow.md"
42
- - data: null
43
- - type: exec
44
- - run-agent-compliance-check:
45
- - input: VA or fuzzy match validate agent
46
- - route: "{project-root}/_bmad/bmb/workflows/agent-compliance-check/workflow.md"
47
- - data: null
48
- - type: exec
49
-
50
- - multi: "[CW] Create, [EW] Edit, or [VW] Validate with Compliance CheckBMAD workflows with best practices"
51
- triggers:
52
- - create-workflow:
53
- - input: CW or fuzzy match create workflow
54
- - route: "{project-root}/_bmad/bmb/workflows/create-workflow/workflow.md"
55
- - data: null
56
- - type: exec
57
- - edit-workflow:
58
- - input: EW or fuzzy match edit workflow
59
- - route: "{project-root}/_bmad/bmb/workflows/edit-workflow/workflow.md"
60
- - data: null
61
- - type: exec
62
- - run-workflow-compliance-check:
63
- - input: VW or fuzzy match validate workflow
64
- - route: "{project-root}/_bmad/bmb/workflows/workflow-compliance-check/workflow.md"
65
- - data: null
66
- - type: exec
67
-
68
- - multi: "[BM] Brainstorm, [PBM] Product Brief, [CM] Create, [EM] Edit or [VM] Validate with Compliance Check BMAD modules with best practices"
69
- triggers:
70
- - brainstorm-module:
71
- - input: BM or fuzzy match brainstorm module
72
- - route: "{project-root}/_bmad/bmb/workflows/brainstorm-module/workflow.md"
73
- - data: null
74
- - type: exec
75
- - product-brief-module:
76
- - input: PBM or fuzzy match product brief module
77
- - route: "{project-root}/_bmad/bmb/workflows/product-brief-module/workflow.md"
78
- - data: null
79
- - type: exec
80
- - create-module:
81
- - input: CM or fuzzy match create module
82
- - route: "{project-root}/_bmad/bmb/workflows/create-module/workflow.md"
83
- - data: null
84
- - type: exec
85
- - edit-module:
86
- - input: EM or fuzzy match edit module
87
- - route: "{project-root}/_bmad/bmb/workflows/edit-module/workflow.md"
88
- - data: null
89
- - type: exec
90
- - run-module-compliance-check:
91
- - input: VM or fuzzy match validate module
92
- - route: "{project-root}/_bmad/bmb/workflows/module-compliance-check/workflow.md"
93
- - data: null
94
- - type: exec