bmad-method 6.0.0-alpha.7 → 6.0.0-alpha.9

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 (457) hide show
  1. package/.github/ISSUE_TEMPLATE/idea_submission.md +1 -1
  2. package/.github/workflows/bundle-latest.yaml +277 -0
  3. package/.github/workflows/manual-release.yaml +55 -16
  4. package/.vscode/settings.json +2 -1
  5. package/CHANGELOG.md +439 -1
  6. package/README.md +12 -4
  7. package/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
  8. package/docs/agent-customization-guide.md +208 -0
  9. package/docs/ide-info/crush.md +1 -1
  10. package/docs/ide-info/cursor.md +7 -7
  11. package/docs/ide-info/iflow.md +3 -3
  12. package/docs/ide-info/opencode.md +1 -1
  13. package/docs/index.md +3 -1
  14. package/docs/installers-bundlers/ide-injections.md +2 -2
  15. package/docs/installers-bundlers/installers-modules-platforms-reference.md +23 -23
  16. package/docs/v4-to-v6-upgrade.md +12 -12
  17. package/docs/web-bundles-gemini-gpt-guide.md +473 -0
  18. package/package.json +1 -1
  19. package/src/core/_module-installer/install-config.yaml +17 -10
  20. package/src/core/_module-installer/installer.js +0 -8
  21. package/src/core/agents/bmad-master.agent.yaml +5 -5
  22. package/src/core/agents/bmad-web-orchestrator.agent.xml +8 -17
  23. package/src/core/tasks/{adv-elicit.xml → advanced-elicitation.xml} +6 -4
  24. package/src/core/tasks/index-docs.xml +1 -1
  25. package/src/core/tasks/validate-workflow.xml +1 -1
  26. package/src/core/tasks/workflow.xml +125 -11
  27. package/src/core/tools/shard-doc.xml +45 -1
  28. package/src/core/workflows/brainstorming/README.md +6 -16
  29. package/src/core/workflows/brainstorming/instructions.md +6 -5
  30. package/src/core/workflows/brainstorming/template.md +4 -0
  31. package/src/core/workflows/brainstorming/workflow.yaml +8 -8
  32. package/src/core/workflows/party-mode/instructions.md +2 -7
  33. package/src/core/workflows/party-mode/workflow.yaml +10 -6
  34. package/src/modules/bmb/_module-installer/install-config.yaml +9 -4
  35. package/src/modules/bmb/agents/bmad-builder.agent.yaml +11 -10
  36. package/src/modules/bmb/workflows/audit-workflow/checklist.md +5 -6
  37. package/src/modules/bmb/workflows/audit-workflow/instructions.md +5 -5
  38. package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +2 -2
  39. package/src/modules/bmb/workflows/convert-legacy/README.md +5 -5
  40. package/src/modules/bmb/workflows/convert-legacy/checklist.md +2 -2
  41. package/src/modules/bmb/workflows/convert-legacy/instructions.md +17 -17
  42. package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +6 -6
  43. package/src/modules/bmb/workflows/create-agent/README.md +5 -5
  44. package/src/modules/bmb/workflows/create-agent/agent-architecture.md +15 -19
  45. package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +28 -28
  46. package/src/modules/bmb/workflows/create-agent/agent-types.md +15 -15
  47. package/src/modules/bmb/workflows/create-agent/checklist.md +3 -3
  48. package/src/modules/bmb/workflows/create-agent/instructions.md +24 -27
  49. package/src/modules/bmb/workflows/create-agent/workflow.yaml +12 -12
  50. package/src/modules/bmb/workflows/create-module/README.md +1 -1
  51. package/src/modules/bmb/workflows/create-module/checklist.md +1 -10
  52. package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +1 -1
  53. package/src/modules/bmb/workflows/create-module/instructions.md +12 -17
  54. package/src/modules/bmb/workflows/create-module/module-structure.md +7 -7
  55. package/src/modules/bmb/workflows/create-module/workflow.yaml +9 -9
  56. package/src/modules/bmb/workflows/create-workflow/README.md +4 -4
  57. package/src/modules/bmb/workflows/create-workflow/checklist.md +1 -1
  58. package/src/modules/bmb/workflows/create-workflow/instructions.md +29 -29
  59. package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +40 -42
  60. package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +2 -2
  61. package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +12 -12
  62. package/src/modules/bmb/workflows/create-workflow/workflow.yaml +5 -5
  63. package/src/modules/bmb/workflows/edit-agent/checklist.md +1 -1
  64. package/src/modules/bmb/workflows/edit-agent/instructions.md +2 -2
  65. package/src/modules/bmb/workflows/edit-agent/workflow.yaml +8 -8
  66. package/src/modules/bmb/workflows/edit-module/README.md +2 -2
  67. package/src/modules/bmb/workflows/edit-module/checklist.md +2 -2
  68. package/src/modules/bmb/workflows/edit-module/instructions.md +4 -4
  69. package/src/modules/bmb/workflows/edit-module/workflow.yaml +10 -10
  70. package/src/modules/bmb/workflows/edit-workflow/instructions.md +4 -4
  71. package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +5 -5
  72. package/src/modules/bmb/workflows/module-brief/README.md +2 -2
  73. package/src/modules/bmb/workflows/module-brief/checklist.md +2 -2
  74. package/src/modules/bmb/workflows/module-brief/instructions.md +2 -2
  75. package/src/modules/bmb/workflows/module-brief/workflow.yaml +4 -4
  76. package/src/modules/bmb/workflows/redoc/README.md +5 -5
  77. package/src/modules/bmb/workflows/redoc/instructions.md +1 -1
  78. package/src/modules/bmb/workflows/redoc/workflow.yaml +1 -1
  79. package/src/modules/bmgd/README.md +1 -1
  80. package/src/modules/bmgd/_module-installer/install-config.yaml +12 -24
  81. package/src/modules/bmgd/agents/game-architect.agent.yaml +15 -10
  82. package/src/modules/bmgd/agents/game-designer.agent.yaml +16 -11
  83. package/src/modules/bmgd/agents/game-dev.agent.yaml +18 -12
  84. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +30 -25
  85. package/src/modules/bmgd/teams/default-party.csv +10 -0
  86. package/src/modules/bmgd/teams/team-gamedev.yaml +2 -0
  87. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +1 -1
  88. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +9 -9
  89. package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +1 -1
  90. package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +8 -8
  91. package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +5 -10
  92. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +30 -30
  93. package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +1 -6
  94. package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +5 -5
  95. package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-patterns.yaml +0 -26
  96. package/src/modules/bmgd/workflows/3-technical/game-architecture/checklist.md +2 -6
  97. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +2 -7
  98. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +2 -2
  99. package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +25 -47
  100. package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +13 -32
  101. package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
  102. package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +7 -2
  103. package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +32 -25
  104. package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +20 -47
  105. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +16 -24
  106. package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +8 -3
  107. package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +30 -5
  108. package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +1 -1
  109. package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +10 -35
  110. package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +16 -24
  111. package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +18 -36
  112. package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +16 -37
  113. package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +11 -15
  114. package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +1 -1
  115. package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +8 -7
  116. package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +1 -1
  117. package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +1 -1
  118. package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +20 -45
  119. package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +15 -17
  120. package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +1 -1
  121. package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +5 -4
  122. package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +6 -6
  123. package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +5 -7
  124. package/src/modules/bmm/_module-installer/install-config.yaml +9 -28
  125. package/src/modules/bmm/_module-installer/installer.js +2 -2
  126. package/src/modules/bmm/agents/analyst.agent.yaml +20 -15
  127. package/src/modules/bmm/agents/architect.agent.yaml +17 -12
  128. package/src/modules/bmm/agents/dev.agent.yaml +9 -12
  129. package/src/modules/bmm/agents/pm.agent.yaml +24 -23
  130. package/src/modules/bmm/agents/sm.agent.yaml +24 -19
  131. package/src/modules/bmm/agents/tea.agent.yaml +23 -17
  132. package/src/modules/bmm/agents/tech-writer.agent.yaml +15 -11
  133. package/src/modules/bmm/agents/ux-designer.agent.yaml +16 -11
  134. package/src/modules/bmm/docs/agents-guide.md +4 -4
  135. package/src/modules/bmm/docs/brownfield-guide.md +4 -4
  136. package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
  137. package/src/modules/bmm/docs/faq.md +1 -1
  138. package/src/modules/bmm/docs/party-mode.md +3 -3
  139. package/src/modules/bmm/docs/quick-start.md +1 -1
  140. package/src/modules/bmm/docs/test-architecture.md +1 -1
  141. package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
  142. package/src/modules/bmm/teams/default-party.csv +19 -0
  143. package/src/modules/bmm/teams/team-fullstack.yaml +1 -0
  144. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +1 -1
  145. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +8 -8
  146. package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +1 -1
  147. package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +8 -21
  148. package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +10 -12
  149. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +13 -9
  150. package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +2 -2
  151. package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +2 -2
  152. package/src/modules/bmm/workflows/1-analysis/research/checklist.md +2 -2
  153. package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +1 -3
  154. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +2 -7
  155. package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +1 -1
  156. package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +1 -6
  157. package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +14 -14
  158. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +7 -2
  159. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +16 -10
  160. package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +8 -12
  161. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +28 -0
  162. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +146 -23
  163. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +7 -9
  164. package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +152 -35
  165. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +2 -2
  166. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +20 -16
  167. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +12 -9
  168. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -6
  169. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +434 -0
  170. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +129 -266
  171. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +15 -37
  172. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -26
  173. package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +3 -7
  174. package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +30 -38
  175. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +25 -43
  176. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +7 -13
  177. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +57 -60
  178. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +12 -12
  179. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +25 -47
  180. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +13 -32
  181. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
  182. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +7 -2
  183. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +32 -25
  184. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +20 -47
  185. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +16 -24
  186. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +8 -3
  187. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +30 -5
  188. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +1 -1
  189. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +10 -35
  190. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +16 -24
  191. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +18 -36
  192. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +16 -37
  193. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +11 -15
  194. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +1 -1
  195. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +8 -7
  196. package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +1 -1
  197. package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +1 -1
  198. package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +20 -45
  199. package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +15 -17
  200. package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +1 -1
  201. package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +5 -4
  202. package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +6 -6
  203. package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +5 -7
  204. package/src/modules/bmm/workflows/document-project/checklist.md +1 -1
  205. package/src/modules/bmm/workflows/document-project/instructions.md +5 -5
  206. package/src/modules/bmm/workflows/document-project/workflow.yaml +2 -2
  207. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +4 -4
  208. package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +5 -5
  209. package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +13 -13
  210. package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
  211. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +2 -2
  212. package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -2
  213. package/src/modules/bmm/workflows/testarch/automate/instructions.md +2 -2
  214. package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -2
  215. package/src/modules/bmm/workflows/testarch/ci/checklist.md +4 -4
  216. package/src/modules/bmm/workflows/testarch/ci/instructions.md +2 -2
  217. package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -2
  218. package/src/modules/bmm/workflows/testarch/framework/checklist.md +4 -4
  219. package/src/modules/bmm/workflows/testarch/framework/instructions.md +2 -2
  220. package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -2
  221. package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
  222. package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -2
  223. package/src/modules/bmm/workflows/testarch/test-design/checklist.md +4 -4
  224. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +175 -14
  225. package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +4 -4
  226. package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +7 -3
  227. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
  228. package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -2
  229. package/src/modules/bmm/workflows/testarch/trace/instructions.md +9 -9
  230. package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -2
  231. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +33 -31
  232. package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +5 -4
  233. package/src/modules/bmm/workflows/workflow-status/instructions.md +5 -4
  234. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +9 -16
  235. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +11 -18
  236. package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +8 -1
  237. package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +9 -2
  238. package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
  239. package/src/modules/bmm/workflows/workflow-status/workflow-status-template.yaml +2 -9
  240. package/src/modules/bmm/workflows/workflow-status/workflow.yaml +2 -2
  241. package/src/modules/cis/README.md +1 -1
  242. package/src/modules/cis/_module-installer/install-config.yaml +6 -4
  243. package/src/modules/cis/agents/README.md +1 -1
  244. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +13 -8
  245. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +13 -8
  246. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +13 -8
  247. package/src/modules/cis/agents/innovation-strategist.agent.yaml +13 -8
  248. package/src/modules/cis/agents/storyteller.agent.yaml +13 -8
  249. package/src/modules/cis/teams/creative-squad.yaml +1 -0
  250. package/src/modules/cis/teams/default-party.csv +11 -0
  251. package/src/modules/cis/workflows/README.md +1 -1
  252. package/src/modules/cis/workflows/design-thinking/instructions.md +2 -2
  253. package/src/modules/cis/workflows/design-thinking/workflow.yaml +7 -7
  254. package/src/modules/cis/workflows/innovation-strategy/instructions.md +2 -2
  255. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +7 -7
  256. package/src/modules/cis/workflows/problem-solving/instructions.md +2 -2
  257. package/src/modules/cis/workflows/problem-solving/workflow.yaml +7 -7
  258. package/src/modules/cis/workflows/storytelling/instructions.md +2 -2
  259. package/src/modules/cis/workflows/storytelling/workflow.yaml +7 -7
  260. package/src/utility/models/action-command-header.md +0 -0
  261. package/src/utility/models/agent-activation-ide.xml +3 -3
  262. package/src/utility/models/agent-activation-web.xml +4 -4
  263. package/src/utility/models/agent-command-header.md +1 -0
  264. package/src/utility/models/fragments/activation-steps.xml +3 -2
  265. package/src/utility/models/fragments/handler-validate-workflow.xml +1 -1
  266. package/src/utility/models/fragments/handler-workflow.xml +1 -1
  267. package/src/utility/models/fragments/web-bundle-activation-steps.xml +3 -3
  268. package/tools/cli/README.md +50 -32
  269. package/tools/cli/bundlers/web-bundler.js +86 -17
  270. package/tools/cli/commands/install.js +1 -4
  271. package/tools/cli/installers/lib/core/config-collector.js +201 -28
  272. package/tools/cli/installers/lib/core/detector.js +62 -7
  273. package/tools/cli/installers/lib/core/installer.js +175 -33
  274. package/tools/cli/installers/lib/core/manifest-generator.js +26 -115
  275. package/tools/cli/installers/lib/ide/_base-ide.js +57 -3
  276. package/tools/cli/installers/lib/ide/auggie.js +78 -224
  277. package/tools/cli/installers/lib/ide/claude-code.js +14 -22
  278. package/tools/cli/installers/lib/ide/cline.js +15 -18
  279. package/tools/cli/installers/lib/ide/codex.js +17 -48
  280. package/tools/cli/installers/lib/ide/crush.js +14 -50
  281. package/tools/cli/installers/lib/ide/cursor.js +51 -8
  282. package/tools/cli/installers/lib/ide/gemini.js +87 -37
  283. package/tools/cli/installers/lib/ide/github-copilot.js +47 -35
  284. package/tools/cli/installers/lib/ide/iflow.js +13 -30
  285. package/tools/cli/installers/lib/ide/kilo.js +20 -16
  286. package/tools/cli/installers/lib/ide/manager.js +15 -0
  287. package/tools/cli/installers/lib/ide/opencode.js +16 -17
  288. package/tools/cli/installers/lib/ide/qwen.js +39 -11
  289. package/tools/cli/installers/lib/ide/roo.js +27 -62
  290. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +90 -0
  291. package/tools/cli/installers/lib/ide/{task-tool-command-generator.js → shared/task-tool-command-generator.js} +1 -1
  292. package/tools/cli/installers/lib/ide/{workflow-command-generator.js → shared/workflow-command-generator.js} +11 -9
  293. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
  294. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
  295. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
  296. package/tools/cli/installers/lib/ide/{workflow-command-template.md → templates/workflow-command-template.md} +3 -5
  297. package/tools/cli/installers/lib/ide/trae.js +20 -32
  298. package/tools/cli/installers/lib/ide/windsurf.js +18 -8
  299. package/tools/cli/installers/lib/modules/manager.js +89 -17
  300. package/tools/cli/lib/cli-utils.js +52 -50
  301. package/tools/cli/lib/ui.js +29 -12
  302. package/tools/cli/lib/yaml-xml-builder.js +20 -2
  303. package/tools/schema/agent.js +7 -3
  304. package/.claude/commands/bmad/bmb/agents/bmad-builder.md +0 -70
  305. package/.claude/commands/bmad/bmb/workflows/audit-workflow.md +0 -15
  306. package/.claude/commands/bmad/bmb/workflows/convert-legacy.md +0 -15
  307. package/.claude/commands/bmad/bmb/workflows/create-agent.md +0 -15
  308. package/.claude/commands/bmad/bmb/workflows/create-module.md +0 -15
  309. package/.claude/commands/bmad/bmb/workflows/create-workflow.md +0 -15
  310. package/.claude/commands/bmad/bmb/workflows/edit-agent.md +0 -15
  311. package/.claude/commands/bmad/bmb/workflows/edit-module.md +0 -15
  312. package/.claude/commands/bmad/bmb/workflows/edit-workflow.md +0 -15
  313. package/.claude/commands/bmad/bmb/workflows/module-brief.md +0 -15
  314. package/.claude/commands/bmad/bmb/workflows/redoc.md +0 -15
  315. package/.claude/commands/bmad/core/agents/bmad-master.md +0 -71
  316. package/.claude/commands/bmad/core/tasks/index-docs.md +0 -9
  317. package/.claude/commands/bmad/core/tools/shard-doc.md +0 -9
  318. package/.claude/commands/bmad/core/workflows/brainstorming.md +0 -15
  319. package/.claude/commands/bmad/core/workflows/party-mode.md +0 -15
  320. package/.claude/settings.local.json +0 -22
  321. package/bmad/_cfg/agent-manifest.csv +0 -5
  322. package/bmad/_cfg/agents/bmb-bmad-builder.customize.yaml +0 -42
  323. package/bmad/_cfg/agents/core-bmad-master.customize.yaml +0 -42
  324. package/bmad/_cfg/files-manifest.csv +0 -82
  325. package/bmad/_cfg/ides/claude-code.yaml +0 -6
  326. package/bmad/_cfg/manifest.yaml +0 -11
  327. package/bmad/_cfg/task-manifest.csv +0 -13
  328. package/bmad/_cfg/tool-manifest.csv +0 -4
  329. package/bmad/_cfg/workflow-manifest.csv +0 -17
  330. package/bmad/bmb/README.md +0 -194
  331. package/bmad/bmb/agents/bmad-builder.md +0 -70
  332. package/bmad/bmb/config.yaml +0 -14
  333. package/bmad/bmb/workflows/audit-workflow/checklist.md +0 -143
  334. package/bmad/bmb/workflows/audit-workflow/instructions.md +0 -341
  335. package/bmad/bmb/workflows/audit-workflow/template.md +0 -118
  336. package/bmad/bmb/workflows/audit-workflow/workflow.yaml +0 -23
  337. package/bmad/bmb/workflows/convert-legacy/README.md +0 -262
  338. package/bmad/bmb/workflows/convert-legacy/checklist.md +0 -205
  339. package/bmad/bmb/workflows/convert-legacy/instructions.md +0 -377
  340. package/bmad/bmb/workflows/convert-legacy/workflow.yaml +0 -32
  341. package/bmad/bmb/workflows/create-agent/README.md +0 -203
  342. package/bmad/bmb/workflows/create-agent/agent-architecture.md +0 -419
  343. package/bmad/bmb/workflows/create-agent/agent-command-patterns.md +0 -759
  344. package/bmad/bmb/workflows/create-agent/agent-types.md +0 -292
  345. package/bmad/bmb/workflows/create-agent/brainstorm-context.md +0 -174
  346. package/bmad/bmb/workflows/create-agent/checklist.md +0 -62
  347. package/bmad/bmb/workflows/create-agent/communication-styles.md +0 -202
  348. package/bmad/bmb/workflows/create-agent/instructions.md +0 -459
  349. package/bmad/bmb/workflows/create-agent/workflow.yaml +0 -37
  350. package/bmad/bmb/workflows/create-module/README.md +0 -229
  351. package/bmad/bmb/workflows/create-module/brainstorm-context.md +0 -137
  352. package/bmad/bmb/workflows/create-module/checklist.md +0 -244
  353. package/bmad/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
  354. package/bmad/bmb/workflows/create-module/installer-templates/installer.js +0 -231
  355. package/bmad/bmb/workflows/create-module/instructions.md +0 -581
  356. package/bmad/bmb/workflows/create-module/module-structure.md +0 -400
  357. package/bmad/bmb/workflows/create-module/workflow.yaml +0 -42
  358. package/bmad/bmb/workflows/create-workflow/README.md +0 -277
  359. package/bmad/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
  360. package/bmad/bmb/workflows/create-workflow/checklist.md +0 -94
  361. package/bmad/bmb/workflows/create-workflow/instructions.md +0 -724
  362. package/bmad/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1308
  363. package/bmad/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
  364. package/bmad/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -13
  365. package/bmad/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
  366. package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -39
  367. package/bmad/bmb/workflows/create-workflow/workflow.yaml +0 -40
  368. package/bmad/bmb/workflows/edit-agent/README.md +0 -112
  369. package/bmad/bmb/workflows/edit-agent/checklist.md +0 -112
  370. package/bmad/bmb/workflows/edit-agent/instructions.md +0 -290
  371. package/bmad/bmb/workflows/edit-agent/workflow.yaml +0 -33
  372. package/bmad/bmb/workflows/edit-module/README.md +0 -187
  373. package/bmad/bmb/workflows/edit-module/checklist.md +0 -165
  374. package/bmad/bmb/workflows/edit-module/instructions.md +0 -339
  375. package/bmad/bmb/workflows/edit-module/workflow.yaml +0 -34
  376. package/bmad/bmb/workflows/edit-workflow/README.md +0 -119
  377. package/bmad/bmb/workflows/edit-workflow/checklist.md +0 -70
  378. package/bmad/bmb/workflows/edit-workflow/instructions.md +0 -342
  379. package/bmad/bmb/workflows/edit-workflow/workflow.yaml +0 -27
  380. package/bmad/bmb/workflows/module-brief/README.md +0 -264
  381. package/bmad/bmb/workflows/module-brief/checklist.md +0 -116
  382. package/bmad/bmb/workflows/module-brief/instructions.md +0 -267
  383. package/bmad/bmb/workflows/module-brief/template.md +0 -275
  384. package/bmad/bmb/workflows/module-brief/workflow.yaml +0 -29
  385. package/bmad/bmb/workflows/redoc/README.md +0 -87
  386. package/bmad/bmb/workflows/redoc/checklist.md +0 -99
  387. package/bmad/bmb/workflows/redoc/instructions.md +0 -265
  388. package/bmad/bmb/workflows/redoc/workflow.yaml +0 -32
  389. package/bmad/core/agents/bmad-master.md +0 -71
  390. package/bmad/core/agents/bmad-web-orchestrator.agent.xml +0 -122
  391. package/bmad/core/config.yaml +0 -9
  392. package/bmad/core/tasks/adv-elicit-methods.csv +0 -39
  393. package/bmad/core/tasks/adv-elicit.xml +0 -104
  394. package/bmad/core/tasks/index-docs.xml +0 -65
  395. package/bmad/core/tasks/validate-workflow.xml +0 -89
  396. package/bmad/core/tasks/workflow.xml +0 -156
  397. package/bmad/core/tools/shard-doc.xml +0 -65
  398. package/bmad/core/workflows/brainstorming/README.md +0 -271
  399. package/bmad/core/workflows/brainstorming/brain-methods.csv +0 -36
  400. package/bmad/core/workflows/brainstorming/instructions.md +0 -314
  401. package/bmad/core/workflows/brainstorming/template.md +0 -102
  402. package/bmad/core/workflows/brainstorming/workflow.yaml +0 -43
  403. package/bmad/core/workflows/party-mode/instructions.md +0 -188
  404. package/bmad/core/workflows/party-mode/workflow.yaml +0 -23
  405. package/bmad/docs/claude-code-instructions.md +0 -25
  406. package/bmd/README.md +0 -193
  407. package/bmd/agents/cli-chief-sidecar/instructions.md +0 -102
  408. package/bmd/agents/cli-chief-sidecar/knowledge/README.md +0 -68
  409. package/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +0 -123
  410. package/bmd/agents/cli-chief-sidecar/memories.md +0 -53
  411. package/bmd/agents/cli-chief.agent.yaml +0 -126
  412. package/bmd/agents/doc-keeper-sidecar/instructions.md +0 -177
  413. package/bmd/agents/doc-keeper-sidecar/knowledge/README.md +0 -81
  414. package/bmd/agents/doc-keeper-sidecar/memories.md +0 -88
  415. package/bmd/agents/doc-keeper.agent.yaml +0 -137
  416. package/bmd/agents/release-chief-sidecar/instructions.md +0 -164
  417. package/bmd/agents/release-chief-sidecar/knowledge/README.md +0 -82
  418. package/bmd/agents/release-chief-sidecar/memories.md +0 -73
  419. package/bmd/agents/release-chief.agent.yaml +0 -127
  420. package/bmd/bmad-custom-module-installer-plan.md +0 -1176
  421. package/bmd/config.yaml +0 -12
  422. package/src/modules/bmgd/workflows/4-production/dev-story/AUDIT-REPORT.md +0 -367
  423. package/src/modules/bmm/sub-modules/claude-code/README.md +0 -87
  424. package/src/modules/bmm/sub-modules/claude-code/config.yaml +0 -5
  425. package/src/modules/bmm/sub-modules/claude-code/injections.yaml +0 -242
  426. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/api-documenter.md +0 -102
  427. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/codebase-analyzer.md +0 -82
  428. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/data-analyst.md +0 -101
  429. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/pattern-detector.md +0 -84
  430. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/dependency-mapper.md +0 -83
  431. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/epic-optimizer.md +0 -81
  432. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/requirements-analyst.md +0 -61
  433. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/technical-decisions-curator.md +0 -168
  434. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/trend-spotter.md +0 -115
  435. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/user-journey-mapper.md +0 -123
  436. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/user-researcher.md +0 -72
  437. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-research/market-researcher.md +0 -51
  438. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-research/tech-debt-auditor.md +0 -106
  439. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/document-reviewer.md +0 -102
  440. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/technical-evaluator.md +0 -68
  441. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/test-coverage-analyzer.md +0 -108
  442. package/src/modules/bmm/tasks/daily-standup.xml +0 -85
  443. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +0 -200
  444. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +0 -451
  445. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +0 -189
  446. package/src/modules/bmm/workflows/4-implementation/dev-story/AUDIT-REPORT.md +0 -367
  447. package/src/modules/bmm/workflows/workflow-status/sample-level-3-workflow.yaml +0 -49
  448. package/test/fixtures/agent-schema/invalid/persona/principles-as-string.agent.yaml +0 -23
  449. package/web-bundles/bmm/agents/analyst.xml +0 -5028
  450. package/web-bundles/bmm/agents/architect.xml +0 -2047
  451. package/web-bundles/bmm/agents/dev.xml +0 -68
  452. package/web-bundles/bmm/agents/pm.xml +0 -3808
  453. package/web-bundles/bmm/agents/sm.xml +0 -77
  454. package/web-bundles/bmm/agents/tea.xml +0 -66
  455. package/web-bundles/bmm/agents/tech-writer.xml +0 -84
  456. package/web-bundles/bmm/agents/ux-designer.xml +0 -2018
  457. package/web-bundles/bmm/teams/team-fullstack.xml +0 -12039
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: '{{name}}'
3
+ description: '{{description}}'
4
+ ---
5
+
6
+ You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
7
+
8
+ <agent-activation CRITICAL="TRUE">
9
+ 1. LOAD the FULL agent file from @{bmad_folder}/{{module}}/agents/{{name}}.md
10
+ 2. READ its entire contents - this contains the complete agent persona, menu, and instructions
11
+ 3. Execute ALL activation steps exactly as written in the agent file
12
+ 4. Follow the agent's persona and menu system precisely
13
+ 5. Stay in character throughout the session
14
+ </agent-activation>
@@ -0,0 +1,14 @@
1
+ description = "Activates the {{title}} agent from the BMad Method."
2
+ prompt = """
3
+ CRITICAL: You are now the BMad '{{title}}' agent.
4
+
5
+ PRE-FLIGHT CHECKLIST:
6
+ 1. [ ] IMMEDIATE ACTION: Load and parse @{{bmad_folder}}/{{module}}/config.yaml - store ALL config values in memory for use throughout the session.
7
+ 2. [ ] IMMEDIATE ACTION: Read and internalize the full agent definition at @{{bmad_folder}}/{{module}}/agents/{{name}}.md.
8
+ 3. [ ] CONFIRM: The user's name from config is {user_name}.
9
+
10
+ Only after all checks are complete, greet the user by name and display the menu.
11
+ Acknowledge this checklist is complete in your first response.
12
+
13
+ AGENT DEFINITION: @{{bmad_folder}}/{{module}}/agents/{{name}}.md
14
+ """
@@ -0,0 +1,12 @@
1
+ description = "Executes the {{taskName}} task from the BMad Method."
2
+ prompt = """
3
+ Execute the following BMad Method task workflow:
4
+
5
+ PRE-FLIGHT CHECKLIST:
6
+ 1. [ ] IMMEDIATE ACTION: Load and parse @{{bmad_folder}}/{{module}}/config.yaml.
7
+ 2. [ ] IMMEDIATE ACTION: Read and load the task definition at @{{bmad_folder}}/{{module}}/tasks/{{filename}}.
8
+
9
+ Follow all instructions and complete the task as defined.
10
+
11
+ TASK DEFINITION: @{{bmad_folder}}/{{module}}/tasks/{{filename}}
12
+ """
@@ -2,14 +2,12 @@
2
2
  description: '{{description}}'
3
3
  ---
4
4
 
5
- # {{name}}
6
-
7
5
  IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded:
8
6
 
9
7
  <steps CRITICAL="TRUE">
10
- 1. Always LOAD the FULL {project-root}/bmad/core/tasks/workflow.xml
11
- 2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config {{workflow_path}}
8
+ 1. Always LOAD the FULL @{bmad_folder}/core/tasks/workflow.xml
9
+ 2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config @{{workflow_path}}
12
10
  3. Pass the yaml path {{workflow_path}} as 'workflow-config' parameter to the workflow.xml instructions
13
- 4. Follow workflow.xml instructions EXACTLY as written
11
+ 4. Follow workflow.xml instructions EXACTLY as written to process and follow the specific workflow config and its instructions
14
12
  5. Save outputs after EACH section when generating any documents from templates
15
13
  </steps>
@@ -1,6 +1,7 @@
1
1
  const path = require('node:path');
2
2
  const { BaseIdeSetup } = require('./_base-ide');
3
3
  const chalk = require('chalk');
4
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
4
5
 
5
6
  /**
6
7
  * Trae IDE setup handler
@@ -30,20 +31,22 @@ class TraeSetup extends BaseIdeSetup {
30
31
  // Clean up any existing BMAD files before reinstalling
31
32
  await this.cleanup(projectDir);
32
33
 
33
- // Get agents, tasks, tools, and workflows (standalone only)
34
- const agents = await this.getAgents(bmadDir);
34
+ // Generate agent launchers
35
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
36
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
37
+
38
+ // Get tasks, tools, and workflows (standalone only)
35
39
  const tasks = await this.getTasks(bmadDir, true);
36
40
  const tools = await this.getTools(bmadDir, true);
37
41
  const workflows = await this.getWorkflows(bmadDir, true);
38
42
 
39
43
  // Process agents as rules with bmad- prefix
40
44
  let agentCount = 0;
41
- for (const agent of agents) {
42
- const content = await this.readFile(agent.path);
43
- const processedContent = this.createAgentRule(agent, content, bmadDir, projectDir);
45
+ for (const artifact of agentArtifacts) {
46
+ const processedContent = await this.createAgentRule(artifact, bmadDir, projectDir);
44
47
 
45
48
  // Use bmad- prefix: bmad-agent-{module}-{name}.md
46
- const targetPath = path.join(rulesDir, `bmad-agent-${agent.module}-${agent.name}.md`);
49
+ const targetPath = path.join(rulesDir, `bmad-agent-${artifact.module}-${artifact.name}.md`);
47
50
  await this.writeFile(targetPath, processedContent);
48
51
  agentCount++;
49
52
  }
@@ -108,44 +111,29 @@ class TraeSetup extends BaseIdeSetup {
108
111
  /**
109
112
  * Create rule content for an agent
110
113
  */
111
- createAgentRule(agent, content, bmadDir, projectDir) {
112
- // Extract metadata from agent content
113
- const titleMatch = content.match(/title="([^"]+)"/);
114
- const title = titleMatch ? titleMatch[1] : this.formatTitle(agent.name);
115
-
116
- const iconMatch = content.match(/icon="([^"]+)"/);
117
- const icon = iconMatch ? iconMatch[1] : '🤖';
114
+ async createAgentRule(artifact, bmadDir, projectDir) {
115
+ // Strip frontmatter from launcher
116
+ const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
117
+ const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
118
118
 
119
- // Extract YAML content if available
120
- const yamlMatch = content.match(/```ya?ml\r?\n([\s\S]*?)```/);
121
- const yamlContent = yamlMatch ? yamlMatch[1] : content;
119
+ // Extract metadata from launcher content
120
+ const titleMatch = artifact.content.match(/description:\s*"([^"]+)"/);
121
+ const title = titleMatch ? titleMatch[1] : this.formatTitle(artifact.name);
122
122
 
123
123
  // Calculate relative path for reference
124
- const relativePath = path.relative(projectDir, agent.path).replaceAll('\\', '/');
124
+ const relativePath = path.relative(projectDir, artifact.sourcePath).replaceAll('\\', '/');
125
125
 
126
126
  let ruleContent = `# ${title} Agent Rule
127
127
 
128
- This rule is triggered when the user types \`@${agent.name}\` and activates the ${title} agent persona.
128
+ This rule is triggered when the user types \`@${artifact.name}\` and activates the ${title} agent persona.
129
129
 
130
130
  ## Agent Activation
131
131
 
132
- CRITICAL: Read the full YAML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:
133
-
134
- \`\`\`yaml
135
- ${yamlContent}
136
- \`\`\`
132
+ ${contentWithoutFrontmatter}
137
133
 
138
134
  ## File Reference
139
135
 
140
- The complete agent definition is available in [${relativePath}](${relativePath}).
141
-
142
- ## Usage
143
-
144
- When the user types \`@${agent.name}\`, activate this ${title} persona and follow all instructions defined in the YAML configuration above.
145
-
146
- ## Module
147
-
148
- Part of the BMAD ${agent.module.toUpperCase()} module.
136
+ The full agent definition is located at: \`${relativePath}\`
149
137
  `;
150
138
 
151
139
  return ruleContent;
@@ -1,6 +1,7 @@
1
1
  const path = require('node:path');
2
2
  const { BaseIdeSetup } = require('./_base-ide');
3
3
  const chalk = require('chalk');
4
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
4
5
 
5
6
  /**
6
7
  * Windsurf IDE setup handler
@@ -31,8 +32,14 @@ class WindsurfSetup extends BaseIdeSetup {
31
32
  // Clean up any existing BMAD workflows before reinstalling
32
33
  await this.cleanup(projectDir);
33
34
 
34
- // Get agents, tasks, tools, and workflows (standalone only)
35
- const agents = await this.getAgents(bmadDir);
35
+ // Generate agent launchers
36
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
37
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
38
+
39
+ // Convert artifacts to agent format for module organization
40
+ const agents = agentArtifacts.map((a) => ({ module: a.module, name: a.name }));
41
+
42
+ // Get tasks, tools, and workflows (standalone only)
36
43
  const tasks = await this.getTasks(bmadDir, true);
37
44
  const tools = await this.getTools(bmadDir, true);
38
45
  const workflows = await this.getWorkflows(bmadDir, true);
@@ -49,14 +56,13 @@ class WindsurfSetup extends BaseIdeSetup {
49
56
  await this.ensureDir(path.join(bmadWorkflowsDir, module, 'workflows'));
50
57
  }
51
58
 
52
- // Process agents as workflows with organized structure
59
+ // Process agent launchers as workflows with organized structure
53
60
  let agentCount = 0;
54
- for (const agent of agents) {
55
- const content = await this.readFile(agent.path);
56
- const processedContent = this.createWorkflowContent(agent, content);
61
+ for (const artifact of agentArtifacts) {
62
+ const processedContent = this.createWorkflowContent({ module: artifact.module, name: artifact.name }, artifact.content);
57
63
 
58
64
  // Organized path: bmad/module/agents/agent-name.md
59
- const targetPath = path.join(bmadWorkflowsDir, agent.module, 'agents', `${agent.name}.md`);
65
+ const targetPath = path.join(bmadWorkflowsDir, artifact.module, 'agents', `${artifact.name}.md`);
60
66
  await this.writeFile(targetPath, processedContent);
61
67
  agentCount++;
62
68
  }
@@ -127,13 +133,17 @@ class WindsurfSetup extends BaseIdeSetup {
127
133
  * Create workflow content for an agent
128
134
  */
129
135
  createWorkflowContent(agent, content) {
136
+ // Strip existing frontmatter from launcher
137
+ const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
138
+ const contentWithoutFrontmatter = content.replace(frontmatterRegex, '');
139
+
130
140
  // Create simple Windsurf frontmatter matching original format
131
141
  let workflowContent = `---
132
142
  description: ${agent.name}
133
143
  auto_execution_mode: 3
134
144
  ---
135
145
 
136
- ${content}`;
146
+ ${contentWithoutFrontmatter}`;
137
147
 
138
148
  return workflowContent;
139
149
  }
@@ -26,6 +26,70 @@ class ModuleManager {
26
26
  // Path to source modules directory
27
27
  this.modulesSourcePath = getSourcePath('modules');
28
28
  this.xmlHandler = new XmlHandler();
29
+ this.bmadFolderName = 'bmad'; // Default, can be overridden
30
+ }
31
+
32
+ /**
33
+ * Set the bmad folder name for placeholder replacement
34
+ * @param {string} bmadFolderName - The bmad folder name
35
+ */
36
+ setBmadFolderName(bmadFolderName) {
37
+ this.bmadFolderName = bmadFolderName;
38
+ }
39
+
40
+ /**
41
+ * Copy a file and replace {bmad_folder} placeholder with actual folder name
42
+ * @param {string} sourcePath - Source file path
43
+ * @param {string} targetPath - Target file path
44
+ */
45
+ async copyFileWithPlaceholderReplacement(sourcePath, targetPath) {
46
+ // List of text file extensions that should have placeholder replacement
47
+ const textExtensions = ['.md', '.yaml', '.yml', '.txt', '.json', '.js', '.ts', '.html', '.css', '.sh', '.bat', '.csv'];
48
+ const ext = path.extname(sourcePath).toLowerCase();
49
+
50
+ // Check if this is a text file that might contain placeholders
51
+ if (textExtensions.includes(ext)) {
52
+ try {
53
+ // Read the file content
54
+ let content = await fs.readFile(sourcePath, 'utf8');
55
+
56
+ // Replace {bmad_folder} placeholder with actual folder name
57
+ if (content.includes('{bmad_folder}')) {
58
+ content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
59
+ }
60
+
61
+ // Write to target with replaced content
62
+ await fs.ensureDir(path.dirname(targetPath));
63
+ await fs.writeFile(targetPath, content, 'utf8');
64
+ } catch {
65
+ // If reading as text fails (might be binary despite extension), fall back to regular copy
66
+ await fs.copy(sourcePath, targetPath, { overwrite: true });
67
+ }
68
+ } else {
69
+ // Binary file or other file type - just copy directly
70
+ await fs.copy(sourcePath, targetPath, { overwrite: true });
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Copy a directory recursively with placeholder replacement
76
+ * @param {string} sourceDir - Source directory path
77
+ * @param {string} targetDir - Target directory path
78
+ */
79
+ async copyDirectoryWithPlaceholderReplacement(sourceDir, targetDir) {
80
+ await fs.ensureDir(targetDir);
81
+ const entries = await fs.readdir(sourceDir, { withFileTypes: true });
82
+
83
+ for (const entry of entries) {
84
+ const sourcePath = path.join(sourceDir, entry.name);
85
+ const targetPath = path.join(targetDir, entry.name);
86
+
87
+ if (entry.isDirectory()) {
88
+ await this.copyDirectoryWithPlaceholderReplacement(sourcePath, targetPath);
89
+ } else {
90
+ await this.copyFileWithPlaceholderReplacement(sourcePath, targetPath);
91
+ }
92
+ }
29
93
  }
30
94
 
31
95
  /**
@@ -311,9 +375,8 @@ class ModuleManager {
311
375
  await fs.ensureDir(path.dirname(targetFile));
312
376
  await this.copyWorkflowYamlStripped(sourceFile, targetFile);
313
377
  } else {
314
- // Copy the file normally
315
- await fs.ensureDir(path.dirname(targetFile));
316
- await fs.copy(sourceFile, targetFile, { overwrite: true });
378
+ // Copy the file with placeholder replacement
379
+ await this.copyFileWithPlaceholderReplacement(sourceFile, targetFile);
317
380
  }
318
381
 
319
382
  // Track the file if callback provided
@@ -333,12 +396,16 @@ class ModuleManager {
333
396
  // Read the source YAML file
334
397
  let yamlContent = await fs.readFile(sourceFile, 'utf8');
335
398
 
399
+ // IMPORTANT: Replace {bmad_folder} BEFORE parsing YAML
400
+ // Otherwise parsing will fail on the placeholder
401
+ yamlContent = yamlContent.replaceAll('{bmad_folder}', this.bmadFolderName);
402
+
336
403
  try {
337
404
  // First check if web_bundle exists by parsing
338
405
  const workflowConfig = yaml.load(yamlContent);
339
406
 
340
407
  if (workflowConfig.web_bundle === undefined) {
341
- // No web_bundle section, just copy as-is
408
+ // No web_bundle section, just write (placeholders already replaced above)
342
409
  await fs.writeFile(targetFile, yamlContent, 'utf8');
343
410
  return;
344
411
  }
@@ -400,6 +467,7 @@ class ModuleManager {
400
467
  // Clean up any double blank lines that might result
401
468
  const strippedYaml = newLines.join('\n').replaceAll(/\n\n\n+/g, '\n\n');
402
469
 
470
+ // Placeholders already replaced at the beginning of this function
403
471
  await fs.writeFile(targetFile, strippedYaml, 'utf8');
404
472
  } catch {
405
473
  // If anything fails, just copy the file as-is
@@ -488,8 +556,10 @@ class ModuleManager {
488
556
  const installWorkflowPath = item['workflow-install']; // Where to copy TO
489
557
 
490
558
  // Parse SOURCE workflow path
491
- // Example: {project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml
492
- const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/bmad\/([^/]+)\/workflows\/(.+)/);
559
+ // Handle both {bmad_folder} placeholder and hardcoded 'bmad'
560
+ // Example: {project-root}/{bmad_folder}/bmm/workflows/4-implementation/create-story/workflow.yaml
561
+ // Or: {project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml
562
+ const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
493
563
  if (!sourceMatch) {
494
564
  console.warn(chalk.yellow(` Could not parse workflow path: ${sourceWorkflowPath}`));
495
565
  continue;
@@ -498,8 +568,9 @@ class ModuleManager {
498
568
  const [, sourceModule, sourceWorkflowSubPath] = sourceMatch;
499
569
 
500
570
  // Parse INSTALL workflow path
501
- // Example: {project-root}/bmad/bmgd/workflows/4-production/create-story/workflow.yaml
502
- const installMatch = installWorkflowPath.match(/\{project-root\}\/bmad\/([^/]+)\/workflows\/(.+)/);
571
+ // Handle both {bmad_folder} placeholder and hardcoded 'bmad'
572
+ // Example: {project-root}/{bmad_folder}/bmgd/workflows/4-production/create-story/workflow.yaml
573
+ const installMatch = installWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
503
574
  if (!installMatch) {
504
575
  console.warn(chalk.yellow(` Could not parse workflow-install path: ${installWorkflowPath}`));
505
576
  continue;
@@ -527,7 +598,8 @@ class ModuleManager {
527
598
  );
528
599
 
529
600
  await fs.ensureDir(path.dirname(actualDestWorkflowPath));
530
- await fs.copy(actualSourceWorkflowPath, actualDestWorkflowPath, { overwrite: true });
601
+ // Copy the workflow directory recursively with placeholder replacement
602
+ await this.copyDirectoryWithPlaceholderReplacement(actualSourceWorkflowPath, actualDestWorkflowPath);
531
603
 
532
604
  // Update the workflow.yaml config_source reference
533
605
  const workflowYamlPath = path.join(actualDestWorkflowPath, 'workflow.yaml');
@@ -550,16 +622,17 @@ class ModuleManager {
550
622
  async updateWorkflowConfigSource(workflowYamlPath, newModuleName) {
551
623
  let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
552
624
 
553
- // Replace config_source: "{project-root}/bmad/OLD_MODULE/config.yaml"
554
- // with config_source: "{project-root}/bmad/NEW_MODULE/config.yaml"
555
- const configSourcePattern = /config_source:\s*["']?\{project-root\}\/bmad\/[^/]+\/config\.yaml["']?/g;
556
- const newConfigSource = `config_source: "{project-root}/bmad/${newModuleName}/config.yaml"`;
625
+ // Replace config_source: "{project-root}/{bmad_folder}/OLD_MODULE/config.yaml"
626
+ // with config_source: "{project-root}/{bmad_folder}/NEW_MODULE/config.yaml"
627
+ // Note: At this point {bmad_folder} has already been replaced with actual folder name
628
+ const configSourcePattern = /config_source:\s*["']?\{project-root\}\/[^/]+\/[^/]+\/config\.yaml["']?/g;
629
+ const newConfigSource = `config_source: "{project-root}/${this.bmadFolderName}/${newModuleName}/config.yaml"`;
557
630
 
558
631
  const updatedYaml = yamlContent.replaceAll(configSourcePattern, newConfigSource);
559
632
 
560
633
  if (updatedYaml !== yamlContent) {
561
634
  await fs.writeFile(workflowYamlPath, updatedYaml, 'utf8');
562
- console.log(chalk.dim(` Updated config_source to: bmad/${newModuleName}/config.yaml`));
635
+ console.log(chalk.dim(` Updated config_source to: ${this.bmadFolderName}/${newModuleName}/config.yaml`));
563
636
  }
564
637
  }
565
638
 
@@ -664,9 +737,8 @@ class ModuleManager {
664
737
  }
665
738
  }
666
739
 
667
- // Copy file
668
- await fs.ensureDir(path.dirname(targetFile));
669
- await fs.copy(sourceFile, targetFile, { overwrite: true });
740
+ // Copy file with placeholder replacement
741
+ await this.copyFileWithPlaceholderReplacement(sourceFile, targetFile);
670
742
  }
671
743
  }
672
744
 
@@ -2,13 +2,31 @@ const chalk = require('chalk');
2
2
  const boxen = require('boxen');
3
3
  const wrapAnsi = require('wrap-ansi');
4
4
  const figlet = require('figlet');
5
+ const path = require('node:path');
5
6
 
6
7
  const CLIUtils = {
8
+ /**
9
+ * Get version from package.json
10
+ */
11
+ getVersion() {
12
+ try {
13
+ const packageJson = require(path.join(__dirname, '..', '..', '..', 'package.json'));
14
+ return packageJson.version || 'Unknown';
15
+ } catch {
16
+ return 'Unknown';
17
+ }
18
+ },
19
+
7
20
  /**
8
21
  * Display BMAD logo
22
+ * @param {boolean} clearScreen - Whether to clear the screen first (default: true for initial display only)
9
23
  */
10
- displayLogo() {
11
- console.clear();
24
+ displayLogo(clearScreen = true) {
25
+ if (clearScreen) {
26
+ console.clear();
27
+ }
28
+
29
+ const version = this.getVersion();
12
30
 
13
31
  // ASCII art logo
14
32
  const logo = `
@@ -20,7 +38,7 @@ const CLIUtils = {
20
38
  ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝`;
21
39
 
22
40
  console.log(chalk.cyan(logo));
23
- console.log(chalk.dim(' Build More, Architect Dreams\n'));
41
+ console.log(chalk.dim(` Build More, Architect Dreams`) + chalk.cyan.bold(` v${version}`) + '\n');
24
42
  },
25
43
 
26
44
  /**
@@ -64,18 +82,35 @@ const CLIUtils = {
64
82
  },
65
83
 
66
84
  /**
67
- * Display prompt section
68
- * @param {string|Array} prompts - Prompts to display
85
+ * Display module configuration header
86
+ * @param {string} moduleName - Module name (fallback if no custom header)
87
+ * @param {string} header - Custom header from install-config.yaml
88
+ * @param {string} subheader - Custom subheader from install-config.yaml
69
89
  */
70
- displayPromptSection(prompts) {
71
- const promptArray = Array.isArray(prompts) ? prompts : [prompts];
72
-
73
- const formattedPrompts = promptArray.map((p) => wrapAnsi(p, 76, { hard: true, wordWrap: true }));
90
+ displayModuleConfigHeader(moduleName, header = null, subheader = null) {
91
+ // Simple blue banner with custom header/subheader if provided
92
+ console.log('\n' + chalk.cyan('─'.repeat(80)));
93
+ console.log(chalk.cyan(header || `Configuring ${moduleName.toUpperCase()} Module`));
94
+ if (subheader) {
95
+ console.log(chalk.dim(`${subheader}`));
96
+ }
97
+ console.log(chalk.cyan('─'.repeat(80)) + '\n');
98
+ },
74
99
 
75
- this.displayBox(formattedPrompts, {
76
- borderColor: 'yellow',
77
- borderStyle: 'double',
78
- });
100
+ /**
101
+ * Display module with no custom configuration
102
+ * @param {string} moduleName - Module name (fallback if no custom header)
103
+ * @param {string} header - Custom header from install-config.yaml
104
+ * @param {string} subheader - Custom subheader from install-config.yaml
105
+ */
106
+ displayModuleNoConfig(moduleName, header = null, subheader = null) {
107
+ // Show full banner with header/subheader, just like modules with config
108
+ console.log('\n' + chalk.cyan('─'.repeat(80)));
109
+ console.log(chalk.cyan(header || `${moduleName.toUpperCase()} Module - No Custom Configuration`));
110
+ if (subheader) {
111
+ console.log(chalk.dim(`${subheader}`));
112
+ }
113
+ console.log(chalk.cyan('─'.repeat(80)) + '\n');
79
114
  },
80
115
 
81
116
  /**
@@ -164,44 +199,11 @@ const CLIUtils = {
164
199
  /**
165
200
  * Display module completion message
166
201
  * @param {string} moduleName - Name of the completed module
167
- * @param {boolean} clearScreen - Whether to clear the screen first
202
+ * @param {boolean} clearScreen - Whether to clear the screen first (deprecated, always false now)
168
203
  */
169
- displayModuleComplete(moduleName, clearScreen = true) {
170
- if (clearScreen) {
171
- console.clear();
172
- this.displayLogo();
173
- }
174
-
175
- let message;
176
-
177
- // Special messages for specific modules
178
- if (moduleName.toLowerCase() === 'bmm') {
179
- message = `Thank you for configuring the BMAD™ Method Module (BMM)!
180
-
181
- Your responses have been saved and will be used to configure your installation.`;
182
- } else if (moduleName.toLowerCase() === 'cis') {
183
- message = `Thank you for choosing the BMAD™ Creative Innovation Suite, an early beta
184
- release with much more planned!
185
-
186
- With this BMAD™ Creative Innovation Suite Configuration, remember that all
187
- paths are relative to project root, with no leading slash.`;
188
- } else if (moduleName.toLowerCase() === 'core') {
189
- message = `Thank you for choosing the BMAD™ Method, your gateway to dreaming, planning
190
- and building with real world proven techniques.
191
-
192
- All paths are relative to project root, with no leading slash.`;
193
- } else {
194
- message = `Thank you for configuring the BMAD™ ${moduleName.toUpperCase()} module!
195
-
196
- Your responses have been saved and will be used to configure your installation.`;
197
- }
198
-
199
- this.displayBox(message, {
200
- borderColor: 'yellow',
201
- borderStyle: 'double',
202
- padding: 1,
203
- margin: 1,
204
- });
204
+ displayModuleComplete(moduleName, clearScreen = false) {
205
+ // No longer clear screen or show boxes - just a simple completion message
206
+ // This is deprecated but kept for backwards compatibility
205
207
  },
206
208
  };
207
209
 
@@ -17,14 +17,26 @@ class UI {
17
17
  */
18
18
  async promptInstall() {
19
19
  CLIUtils.displayLogo();
20
- CLIUtils.displaySection('BMAD™ Setup', 'Build More, Architect Dreams');
20
+ const version = CLIUtils.getVersion();
21
+ CLIUtils.displaySection('BMAD™ Setup', `Build More, Architect Dreams v${version}`);
21
22
 
22
23
  const confirmedDirectory = await this.getConfirmedDirectory();
23
24
 
25
+ // Preflight: Check for legacy BMAD v4 footprints immediately after getting directory
26
+ const { Detector } = require('../installers/lib/core/detector');
27
+ const { Installer } = require('../installers/lib/core/installer');
28
+ const detector = new Detector();
29
+ const installer = new Installer();
30
+ const legacyV4 = await detector.detectLegacyV4(confirmedDirectory);
31
+ if (legacyV4.hasLegacyV4) {
32
+ await installer.handleLegacyV4Migration(confirmedDirectory, legacyV4);
33
+ }
34
+
24
35
  // Check if there's an existing BMAD installation
25
36
  const fs = require('fs-extra');
26
37
  const path = require('node:path');
27
- const bmadDir = path.join(confirmedDirectory, 'bmad');
38
+ // Use findBmadDir to detect any custom folder names (V6+)
39
+ const bmadDir = await installer.findBmadDir(confirmedDirectory);
28
40
  const hasExistingInstall = await fs.pathExists(bmadDir);
29
41
 
30
42
  // Track action type (only set if there's an existing installation)
@@ -91,9 +103,7 @@ class UI {
91
103
  // This allows text-based prompts to complete before the checkbox prompt
92
104
  const toolSelection = await this.promptToolSelection(confirmedDirectory, selectedModules);
93
105
 
94
- console.clear();
95
- CLIUtils.displayLogo();
96
- CLIUtils.displayModuleComplete('core', false); // false = don't clear the screen again
106
+ // No more screen clearing - keep output flowing
97
107
 
98
108
  return {
99
109
  actionType: actionType || 'update', // Preserve reinstall or update action
@@ -114,10 +124,12 @@ class UI {
114
124
  * @returns {Object} Tool configuration
115
125
  */
116
126
  async promptToolSelection(projectDir, selectedModules) {
117
- // Check for existing configured IDEs
127
+ // Check for existing configured IDEs - use findBmadDir to detect custom folder names
118
128
  const { Detector } = require('../installers/lib/core/detector');
129
+ const { Installer } = require('../installers/lib/core/installer');
119
130
  const detector = new Detector();
120
- const bmadDir = path.join(projectDir || process.cwd(), 'bmad');
131
+ const installer = new Installer();
132
+ const bmadDir = await installer.findBmadDir(projectDir || process.cwd());
121
133
  const existingInstall = await detector.detect(bmadDir);
122
134
  const configuredIdes = existingInstall.ides || [];
123
135
 
@@ -322,8 +334,10 @@ class UI {
322
334
  */
323
335
  async getExistingInstallation(directory) {
324
336
  const { Detector } = require('../installers/lib/core/detector');
337
+ const { Installer } = require('../installers/lib/core/installer');
325
338
  const detector = new Detector();
326
- const bmadDir = path.join(directory, 'bmad');
339
+ const installer = new Installer();
340
+ const bmadDir = await installer.findBmadDir(directory);
327
341
  const existingInstall = await detector.detect(bmadDir);
328
342
  const installedModuleIds = new Set(existingInstall.modules.map((mod) => mod.id));
329
343
 
@@ -421,17 +435,20 @@ class UI {
421
435
  if (stats.isDirectory()) {
422
436
  const files = await fs.readdir(directory);
423
437
  if (files.length > 0) {
438
+ // Check for any bmad installation (any folder with _cfg/manifest.yaml)
439
+ const { Installer } = require('../installers/lib/core/installer');
440
+ const installer = new Installer();
441
+ const bmadDir = await installer.findBmadDir(directory);
442
+ const hasBmadInstall = (await fs.pathExists(bmadDir)) && (await fs.pathExists(path.join(bmadDir, '_cfg', 'manifest.yaml')));
443
+
424
444
  console.log(
425
445
  chalk.gray(`Directory exists and contains ${files.length} item(s)`) +
426
- (files.includes('bmad') ? chalk.yellow(' including existing bmad installation') : ''),
446
+ (hasBmadInstall ? chalk.yellow(` including existing BMAD installation (${path.basename(bmadDir)})`) : ''),
427
447
  );
428
448
  } else {
429
449
  console.log(chalk.gray('Directory exists and is empty'));
430
450
  }
431
451
  }
432
- } else {
433
- const existingParent = await this.findExistingParent(directory);
434
- console.log(chalk.gray(`Will create in: ${existingParent}`));
435
452
  }
436
453
  }
437
454
 
@@ -270,13 +270,31 @@ class YamlXmlBuilder {
270
270
 
271
271
  /**
272
272
  * Build prompts XML section
273
+ * Handles both array format and object/dictionary format
273
274
  */
274
275
  buildPromptsXml(prompts) {
275
- if (!prompts || prompts.length === 0) return '';
276
+ if (!prompts) return '';
277
+
278
+ // Handle object/dictionary format: { promptId: 'content', ... }
279
+ // Convert to array format for processing
280
+ let promptsArray = prompts;
281
+ if (!Array.isArray(prompts)) {
282
+ // Check if it's an object with no length property (dictionary format)
283
+ if (typeof prompts === 'object' && prompts.length === undefined) {
284
+ promptsArray = Object.entries(prompts).map(([id, content]) => ({
285
+ id: id,
286
+ content: content,
287
+ }));
288
+ } else {
289
+ return ''; // Not a valid prompts format
290
+ }
291
+ }
292
+
293
+ if (promptsArray.length === 0) return '';
276
294
 
277
295
  let xml = ' <prompts>\n';
278
296
 
279
- for (const prompt of prompts) {
297
+ for (const prompt of promptsArray) {
280
298
  xml += ` <prompt id="${prompt.id || ''}">\n`;
281
299
  xml += ` <![CDATA[\n`;
282
300
  xml += ` ${prompt.content || ''}\n`;