bmad-method 6.0.0-alpha.13 → 6.0.0-alpha.14

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 (335) hide show
  1. package/.github/ISSUE_TEMPLATE/idea_submission.md +1 -1
  2. package/.github/scripts/discord-helpers.sh +15 -0
  3. package/.github/workflows/discord.yaml +278 -8
  4. package/.github/workflows/quality.yaml +19 -0
  5. package/.markdownlint-cli2.yaml +42 -0
  6. package/.prettierignore +3 -0
  7. package/CHANGELOG.md +95 -0
  8. package/CODE_OF_CONDUCT.md +128 -0
  9. package/bmad-method-6.0.0-alpha.14.tgz +0 -0
  10. package/docs/agent-customization-guide.md +2 -2
  11. package/docs/custom-agent-installation.md +56 -102
  12. package/docs/document-sharding-guide.md +1 -1
  13. package/eslint.config.mjs +14 -0
  14. package/example-custom-content/README.md +4 -0
  15. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/instructions.md +4 -4
  16. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/memories.md +1 -1
  17. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith.agent.yaml +17 -16
  18. package/example-custom-content/custom.yaml +3 -0
  19. package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +168 -0
  20. package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +155 -0
  21. package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +89 -0
  22. package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +36 -0
  23. package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +36 -0
  24. package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +36 -0
  25. package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +36 -0
  26. package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +36 -0
  27. package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +36 -0
  28. package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +36 -0
  29. package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +36 -0
  30. package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +150 -0
  31. package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +1 -0
  32. package/example-custom-content/workflows/quiz-master/workflow-plan-quiz-master.md +269 -0
  33. package/example-custom-content/workflows/quiz-master/workflow.md +54 -0
  34. package/example-custom-content/workflows/wassup/workflow.md +26 -0
  35. package/example-custom-module/mwm/README.md +4 -0
  36. package/example-custom-module/mwm/_module-installer/install-config.yaml +27 -0
  37. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +47 -0
  38. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +17 -0
  39. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +150 -0
  40. package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +137 -0
  41. package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +137 -0
  42. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +13 -0
  43. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +30 -0
  44. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +13 -0
  45. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +17 -0
  46. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +124 -0
  47. package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +31 -0
  48. package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +45 -0
  49. package/example-custom-module/mwm/workflows/crisis-support/README.md +31 -0
  50. package/example-custom-module/mwm/workflows/crisis-support/workflow.md +45 -0
  51. package/example-custom-module/mwm/workflows/daily-checkin/README.md +32 -0
  52. package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +45 -0
  53. package/example-custom-module/mwm/workflows/guided-meditation/README.md +31 -0
  54. package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +45 -0
  55. package/example-custom-module/mwm/workflows/wellness-journal/README.md +31 -0
  56. package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +45 -0
  57. package/package.json +9 -4
  58. package/src/core/_module-installer/install-config.yaml +5 -1
  59. package/src/core/resources/excalidraw/library-loader.md +2 -2
  60. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +1 -1
  61. package/src/core/workflows/brainstorming/workflow.md +1 -1
  62. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +0 -1
  63. package/src/core/workflows/party-mode/workflow.md +2 -3
  64. package/src/modules/bmb/README.md +1 -1
  65. package/src/modules/bmb/_module-installer/install-config.yaml +4 -9
  66. package/src/modules/bmb/_module-installer/installer.js +76 -0
  67. package/src/modules/bmb/agents/bmad-builder.agent.yaml +32 -9
  68. package/src/modules/bmb/docs/agents/agent-menu-patterns.md +5 -5
  69. package/src/modules/bmb/docs/agents/expert-agent-architecture.md +20 -20
  70. package/src/modules/bmb/docs/agents/module-agent-architecture.md +45 -45
  71. package/src/modules/bmb/docs/agents/simple-agent-architecture.md +7 -3
  72. package/src/modules/bmb/docs/workflows/architecture.md +1 -1
  73. package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +241 -0
  74. package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +223 -0
  75. package/src/modules/bmb/{workflows/create-workflow → docs/workflows}/templates/step-file.md +4 -4
  76. package/src/modules/bmb/docs/workflows/{step-template.md → templates/step-template.md} +40 -33
  77. package/src/modules/bmb/docs/workflows/templates/workflow-template.md +104 -0
  78. package/src/modules/bmb/{workflows/create-workflow → docs/workflows}/templates/workflow.md +1 -1
  79. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/README.md +4 -4
  80. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +8 -8
  81. package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +6 -6
  82. package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
  83. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +2 -3
  84. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +10 -40
  85. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +1 -1
  86. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +1 -0
  87. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +2 -2
  88. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +2 -2
  89. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +2 -2
  90. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
  91. package/src/modules/bmb/workflows/create-agent/data/info-and-installation-guide.md +16 -4
  92. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +4 -4
  93. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +7 -7
  94. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +1 -1
  95. package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +3 -3
  96. package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +3 -3
  97. package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +3 -3
  98. package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +3 -3
  99. package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +6 -6
  100. package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +2 -2
  101. package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +3 -3
  102. package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +3 -3
  103. package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +2 -2
  104. package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +3 -3
  105. package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +2 -2
  106. package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +2 -2
  107. package/src/modules/bmb/workflows/create-agent/workflow.md +11 -11
  108. package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +155 -0
  109. package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +169 -0
  110. package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +217 -0
  111. package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +267 -0
  112. package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +228 -0
  113. package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +233 -0
  114. package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +296 -0
  115. package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +228 -0
  116. package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +186 -0
  117. package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +308 -0
  118. package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +336 -0
  119. package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +335 -0
  120. package/src/modules/bmb/workflows/create-module/templates/agent.template.md +317 -0
  121. package/src/modules/bmb/workflows/create-module/templates/install-config.template.yaml +53 -0
  122. package/src/modules/bmb/workflows/create-module/templates/installer.template.js +47 -0
  123. package/src/modules/bmb/workflows/create-module/templates/module-plan.template.md +5 -0
  124. package/src/modules/bmb/workflows/create-module/templates/workflow-plan-template.md +23 -0
  125. package/src/modules/bmb/workflows/create-module/validation.md +126 -0
  126. package/src/modules/bmb/workflows/create-module/workflow.md +55 -0
  127. package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +45 -56
  128. package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +9 -31
  129. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +250 -0
  130. package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +216 -0
  131. package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +289 -0
  132. package/src/modules/bmb/workflows/create-workflow/steps/{step-09-design.md → step-06-design.md} +76 -44
  133. package/src/modules/bmb/workflows/create-workflow/steps/{step-11-build.md → step-07-build.md} +70 -24
  134. package/src/modules/bmb/workflows/create-workflow/steps/{step-12-review.md → step-08-review.md} +30 -16
  135. package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +187 -0
  136. package/src/modules/bmb/workflows/create-workflow/workflow.md +2 -2
  137. package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +2 -2
  138. package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +14 -14
  139. package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +4 -4
  140. package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +2 -2
  141. package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +4 -4
  142. package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
  143. package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +2 -6
  144. package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +2 -2
  145. package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +1 -1
  146. package/src/modules/bmb/workflows/edit-workflow/workflow.md +1 -1
  147. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +2 -2
  148. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +5 -5
  149. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +7 -7
  150. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +3 -3
  151. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +3 -3
  152. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +3 -3
  153. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +3 -3
  154. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +2 -2
  155. package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
  156. package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +0 -1
  157. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +8 -8
  158. package/src/modules/bmm/_module-installer/install-config.yaml +1 -1
  159. package/src/modules/bmm/agents/analyst.agent.yaml +11 -8
  160. package/src/modules/bmm/agents/architect.agent.yaml +1 -5
  161. package/src/modules/bmm/agents/pm.agent.yaml +5 -5
  162. package/src/modules/bmm/docs/README.md +23 -1
  163. package/src/modules/bmm/docs/agents-guide.md +16 -35
  164. package/src/modules/bmm/docs/brownfield-guide.md +17 -30
  165. package/src/modules/bmm/docs/enterprise-agentic-development.md +2 -2
  166. package/src/modules/bmm/docs/faq.md +6 -39
  167. package/src/modules/bmm/docs/glossary.md +11 -24
  168. package/src/modules/bmm/docs/images/README.md +37 -0
  169. package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +62 -202
  170. package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +3 -1
  171. package/src/modules/bmm/docs/quick-spec-flow.md +652 -0
  172. package/src/modules/bmm/docs/quick-start.md +9 -25
  173. package/src/modules/bmm/docs/test-architecture.md +6 -6
  174. package/src/modules/bmm/docs/troubleshooting.md +680 -0
  175. package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
  176. package/src/modules/bmm/docs/workflows-implementation.md +143 -3
  177. package/src/modules/bmm/docs/workflows-solutioning.md +2 -2
  178. package/src/modules/bmm/tasks/daily-standup.xml +85 -0
  179. package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +1 -1
  180. package/src/modules/bmm/testarch/knowledge/overview.md +1 -1
  181. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +2 -2
  182. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +2 -2
  183. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +2 -2
  184. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +2 -2
  185. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +1 -1
  186. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +8 -8
  187. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +18 -18
  188. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +18 -18
  189. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +18 -18
  190. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +17 -17
  191. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +35 -36
  192. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +5 -6
  193. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +20 -19
  194. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +21 -20
  195. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +20 -19
  196. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +21 -20
  197. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +16 -15
  198. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +36 -37
  199. package/src/modules/bmm/workflows/1-analysis/research/research.template.md +0 -1
  200. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +8 -8
  201. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +19 -18
  202. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +20 -19
  203. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +21 -20
  204. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +19 -18
  205. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +38 -39
  206. package/src/modules/bmm/workflows/1-analysis/research/workflow.md +14 -8
  207. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +6 -0
  208. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +7 -0
  209. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +138 -56
  210. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +93 -51
  211. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +223 -78
  212. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +20 -2
  213. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +18 -0
  214. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +21 -0
  215. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +21 -0
  216. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +21 -0
  217. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +18 -0
  218. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +18 -0
  219. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +18 -0
  220. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +13 -0
  221. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +2 -2
  222. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +14 -14
  223. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +7 -7
  224. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +2 -1
  225. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +258 -0
  226. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +232 -0
  227. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +271 -0
  228. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +144 -0
  229. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  230. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
  231. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +189 -0
  232. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +177 -0
  233. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +178 -0
  234. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +138 -0
  235. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +251 -0
  236. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +132 -0
  237. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/templates/readiness-report-template.md +4 -0
  238. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +54 -0
  239. package/src/modules/{bmgd/workflows/4-production → bmm/workflows/4-implementation}/code-review/checklist.md +2 -1
  240. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +51 -3
  241. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +1 -1
  242. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +32 -2
  243. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +3 -3
  244. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +19 -21
  245. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +10 -10
  246. package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +174 -0
  247. package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +35 -0
  248. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/instructions.md +104 -7
  249. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +4 -0
  250. package/src/modules/bmm/workflows/document-project/instructions.md +1 -1
  251. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +2 -2
  252. package/src/modules/bmm/workflows/generate-project-context/workflow.md +1 -1
  253. package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +1 -1
  254. package/src/modules/bmm/workflows/testarch/ci/checklist.md +1 -1
  255. package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +36 -3
  256. package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +25 -4
  257. package/src/modules/bmm/workflows/testarch/ci/instructions.md +2 -2
  258. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
  259. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +1 -6
  260. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +1 -6
  261. package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +1 -6
  262. package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +1 -7
  263. package/tools/cli/README.md +3 -3
  264. package/tools/cli/commands/build.js +9 -184
  265. package/tools/cli/commands/install.js +1 -6
  266. package/tools/cli/installers/lib/core/config-collector.js +70 -10
  267. package/tools/cli/installers/lib/core/installer.js +153 -388
  268. package/tools/cli/installers/lib/core/manifest-generator.js +91 -30
  269. package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +79 -0
  270. package/tools/cli/installers/lib/custom/handler.js +266 -0
  271. package/tools/cli/installers/lib/ide/_base-ide.js +10 -0
  272. package/tools/cli/installers/lib/ide/auggie.js +19 -7
  273. package/tools/cli/installers/lib/ide/crush.js +19 -6
  274. package/tools/cli/installers/lib/ide/cursor.js +29 -13
  275. package/tools/cli/installers/lib/ide/gemini.js +49 -1
  276. package/tools/cli/installers/lib/ide/iflow.js +20 -1
  277. package/tools/cli/installers/lib/ide/kiro-cli.js +327 -0
  278. package/tools/cli/installers/lib/ide/opencode.js +3 -3
  279. package/tools/cli/installers/lib/ide/roo.js +120 -184
  280. package/tools/cli/installers/lib/ide/rovo-dev.js +1 -1
  281. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +8 -2
  282. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +34 -19
  283. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +18 -14
  284. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
  285. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
  286. package/tools/cli/installers/lib/modules/manager.js +486 -53
  287. package/tools/cli/lib/agent/compiler.js +54 -5
  288. package/tools/cli/lib/agent/installer.js +127 -27
  289. package/tools/cli/lib/config.js +2 -1
  290. package/tools/cli/lib/ui.js +65 -4
  291. package/tools/cli/lib/yaml-xml-builder.js +0 -15
  292. package/tools/schema/agent.js +149 -89
  293. package/tools/validate-svg-changes.sh +356 -0
  294. package/custom/src/agents/commit-poet/installation-guide.md +0 -36
  295. package/custom/src/agents/toolsmith/installation-guide.md +0 -36
  296. package/src/modules/bmb/docs/workflows/workflow-template.md +0 -152
  297. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-overview.md +0 -127
  298. package/src/modules/bmb/workflows/create-workflow/steps/step-04-core-tools.md +0 -145
  299. package/src/modules/bmb/workflows/create-workflow/steps/step-05-memory-requirements.md +0 -136
  300. package/src/modules/bmb/workflows/create-workflow/steps/step-06-external-tools.md +0 -154
  301. package/src/modules/bmb/workflows/create-workflow/steps/step-07-installation-guidance.md +0 -159
  302. package/src/modules/bmb/workflows/create-workflow/steps/step-08-tools-summary.md +0 -167
  303. package/src/modules/bmb/workflows/create-workflow/steps/step-10-plan-review.md +0 -215
  304. package/src/modules/bmb/workflows/create-workflow/templates/build-summary.md +0 -36
  305. package/src/modules/bmb/workflows/create-workflow/templates/completion-section.md +0 -39
  306. package/src/modules/bmb/workflows/create-workflow/templates/content-template.md +0 -21
  307. package/src/modules/bmb/workflows/create-workflow/templates/design-section.md +0 -53
  308. package/src/modules/bmb/workflows/create-workflow/templates/project-info.md +0 -18
  309. package/src/modules/bmb/workflows/create-workflow/templates/requirements-section.md +0 -47
  310. package/src/modules/bmb/workflows/create-workflow/templates/review-section.md +0 -56
  311. package/src/modules/bmb/workflows/create-workflow/templates/workflow-plan.md +0 -54
  312. package/src/modules/bmb/workflows-legacy/create-module/README.md +0 -229
  313. package/src/modules/bmb/workflows-legacy/create-module/brainstorm-context.md +0 -137
  314. package/src/modules/bmb/workflows-legacy/create-module/checklist.md +0 -235
  315. package/src/modules/bmb/workflows-legacy/create-module/installer-templates/install-config.yaml +0 -92
  316. package/src/modules/bmb/workflows-legacy/create-module/installer-templates/installer.js +0 -231
  317. package/src/modules/bmb/workflows-legacy/create-module/instructions.md +0 -577
  318. package/src/modules/bmb/workflows-legacy/create-module/module-structure.md +0 -400
  319. package/src/modules/bmb/workflows-legacy/create-module/workflow.yaml +0 -52
  320. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md +0 -80
  321. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md +0 -387
  322. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +0 -53
  323. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +0 -169
  324. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +0 -332
  325. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/template.md +0 -146
  326. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -64
  327. package/tools/cli/commands/agent-install.js +0 -409
  328. package/tools/cli/commands/cleanup.js +0 -141
  329. /package/{custom/src → example-custom-content}/agents/commit-poet/commit-poet.agent.yaml +0 -0
  330. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +0 -0
  331. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +0 -0
  332. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +0 -0
  333. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +0 -0
  334. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +0 -0
  335. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +0 -0
@@ -15,6 +15,8 @@ variables:
15
15
  npm_config_cache: "$CI_PROJECT_DIR/.npm"
16
16
  # Playwright browser cache
17
17
  PLAYWRIGHT_BROWSERS_PATH: "$CI_PROJECT_DIR/.cache/ms-playwright"
18
+ # Default Node version when .nvmrc is missing
19
+ DEFAULT_NODE_VERSION: "24"
18
20
 
19
21
  # Caching configuration
20
22
  cache:
@@ -29,19 +31,32 @@ cache:
29
31
  # Lint stage - Code quality checks
30
32
  lint:
31
33
  stage: lint
32
- image: node:20
33
- script:
34
+ image: node:$DEFAULT_NODE_VERSION
35
+ before_script:
36
+ - |
37
+ NODE_VERSION=$(cat .nvmrc 2>/dev/null || echo "$DEFAULT_NODE_VERSION")
38
+ echo "Using Node $NODE_VERSION"
39
+ npm install -g n
40
+ n "$NODE_VERSION"
41
+ node -v
34
42
  - npm ci
43
+ script:
35
44
  - npm run lint
36
45
  timeout: 5 minutes
37
46
 
38
47
  # Test stage - Parallel execution with sharding
39
48
  .test-template: &test-template
40
49
  stage: test
41
- image: node:20
50
+ image: node:$DEFAULT_NODE_VERSION
42
51
  needs:
43
52
  - lint
44
53
  before_script:
54
+ - |
55
+ NODE_VERSION=$(cat .nvmrc 2>/dev/null || echo "$DEFAULT_NODE_VERSION")
56
+ echo "Using Node $NODE_VERSION"
57
+ npm install -g n
58
+ n "$NODE_VERSION"
59
+ node -v
45
60
  - npm ci
46
61
  - npx playwright install --with-deps chromium
47
62
  artifacts:
@@ -75,7 +90,7 @@ test:shard-4:
75
90
  # Burn-in stage - Flaky test detection
76
91
  burn-in:
77
92
  stage: burn-in
78
- image: node:20
93
+ image: node:$DEFAULT_NODE_VERSION
79
94
  needs:
80
95
  - test:shard-1
81
96
  - test:shard-2
@@ -86,6 +101,12 @@ burn-in:
86
101
  - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
87
102
  - if: '$CI_PIPELINE_SOURCE == "schedule"'
88
103
  before_script:
104
+ - |
105
+ NODE_VERSION=$(cat .nvmrc 2>/dev/null || echo "$DEFAULT_NODE_VERSION")
106
+ echo "Using Node $NODE_VERSION"
107
+ npm install -g n
108
+ n "$NODE_VERSION"
109
+ node -v
89
110
  - npm ci
90
111
  - npx playwright install --with-deps chromium
91
112
  script:
@@ -61,8 +61,8 @@ Scaffolds a production-ready CI/CD quality pipeline with test execution, burn-in
61
61
  - Ask user if unable to auto-detect
62
62
 
63
63
  5. **Read Environment Configuration**
64
- - Check for `.nvmrc` to determine Node version
65
- - Default to Node 20 LTS if not found
64
+ - Use `.nvmrc` for Node version if present
65
+ - If missing, default to a current LTS (Node 24) or newer instead of a fixed old version
66
66
  - Read `package.json` to identify dependencies (affects caching strategy)
67
67
 
68
68
  **Halt Condition:** If preflight checks fail, stop immediately and report which requirement failed.
@@ -524,7 +524,7 @@ await expect(page.locator('[data-testid="user-menu"]')).toBeVisible({ timeout: 1
524
524
  ### 1. Use Data Factory for Test User (Lines 23, 32, 41)
525
525
 
526
526
  **Severity**: P1 (High)
527
- **Issue**: Hardcoded email 'test@example.com' - maintainability risk
527
+ **Issue**: Hardcoded email `test@example.com` - maintainability risk
528
528
  **Fix**: Create factory function for test users
529
529
  **Knowledge**: See data-factories.md
530
530
 
@@ -56,11 +56,6 @@ phases:
56
56
  output: "Enterprise PRD with compliance requirements"
57
57
  note: "Must address existing system constraints and migration strategy"
58
58
 
59
- - id: "validate-prd"
60
- recommended: true
61
- agent: "pm"
62
- command: "validate-prd"
63
-
64
59
  - id: "create-ux-design"
65
60
  recommended: true
66
61
  agent: "ux-designer"
@@ -114,7 +109,7 @@ phases:
114
109
  required: true
115
110
  agent: "architect"
116
111
  command: "implementation-readiness"
117
- note: "Critical gate - validates all planning + Epics before touching production system"
112
+ note: "Validates PRD + Architecture + Epics + UX (optional)"
118
113
 
119
114
  - phase: 3
120
115
  name: "Implementation"
@@ -44,11 +44,6 @@ phases:
44
44
  output: "Comprehensive Product Requirements Document"
45
45
  note: "Enterprise-level requirements with compliance considerations"
46
46
 
47
- - id: "validate-prd"
48
- recommended: true
49
- agent: "pm"
50
- command: "validate-prd"
51
-
52
47
  - id: "create-ux-design"
53
48
  recommended: true
54
49
  agent: "ux-designer"
@@ -102,7 +97,7 @@ phases:
102
97
  required: true
103
98
  agent: "architect"
104
99
  command: "implementation-readiness"
105
- note: "Validates all planning artifacts + Epics + testability align before implementation"
100
+ note: "Validates PRD + Architecture + Epics + UX (optional)"
106
101
 
107
102
  - phase: 3
108
103
  name: "Implementation"
@@ -55,11 +55,6 @@ phases:
55
55
  output: "PRD focused on new features/changes"
56
56
  note: "Must consider existing system constraints"
57
57
 
58
- - id: "validate-prd"
59
- optional: true
60
- agent: "pm"
61
- command: "validate-prd"
62
-
63
58
  - id: "create-ux-design"
64
59
  conditional: "if_has_ui"
65
60
  agent: "ux-designer"
@@ -98,7 +93,7 @@ phases:
98
93
  required: true
99
94
  agent: "architect"
100
95
  command: "implementation-readiness"
101
- note: "Validates PRD + UX + Architecture + Epics cohesion before implementation"
96
+ note: "Validates PRD + Architecture + Epics + UX (optional)"
102
97
 
103
98
  - phase: 3
104
99
  name: "Implementation"
@@ -43,12 +43,6 @@ phases:
43
43
  command: "prd"
44
44
  output: "Product Requirements Document with FRs and NFRs"
45
45
 
46
- - id: "validate-prd"
47
- optional: true
48
- agent: "pm"
49
- command: "validate-prd"
50
- note: "Quality check for PRD completeness"
51
-
52
46
  - id: "create-ux-design"
53
47
  conditional: "if_has_ui"
54
48
  agent: "ux-designer"
@@ -89,7 +83,7 @@ phases:
89
83
  required: true
90
84
  agent: "architect"
91
85
  command: "implementation-readiness"
92
- note: "Validates PRD + UX + Architecture + Epics + Testability cohesion before implementation"
86
+ note: "Validates PRD + Architecture + Epics + UX (optional)"
93
87
 
94
88
  - phase: 3
95
89
  name: "Implementation"
@@ -604,6 +604,6 @@ node tools/cli/regenerate-manifests.js
604
604
 
605
605
  ## Support
606
606
 
607
- - **Issues**: https://github.com/bmad-code-org/BMAD-METHOD/issues
608
- - **Discord**: https://discord.gg/gk8jAdXWmj (#general-dev, #bugs-issues)
609
- - **YouTube**: https://www.youtube.com/@BMadCode
607
+ - **Issues**: <https://github.com/bmad-code-org/BMAD-METHOD/issues>
608
+ - **Discord**: <https://discord.gg/gk8jAdXWmj> (#general-dev, #bugs-issues)
609
+ - **YouTube**: <https://www.youtube.com/@BMadCode>
@@ -28,9 +28,8 @@ module.exports = {
28
28
  command: 'build [agent]',
29
29
  description: 'Build agent XML files from YAML sources',
30
30
  options: [
31
- ['-a, --all', 'Rebuild all agents'],
31
+ ['-a, --all', 'Build all agents'],
32
32
  ['-d, --directory <path>', 'Project directory', '.'],
33
- ['--force', 'Force rebuild even if up to date'],
34
33
  ],
35
34
  action: async (agentName, options) => {
36
35
  try {
@@ -54,13 +53,15 @@ module.exports = {
54
53
 
55
54
  if (options.all) {
56
55
  // Build all agents
57
- await buildAllAgents(projectDir, options.force);
56
+ await buildAllAgents(projectDir);
58
57
  } else if (agentName) {
59
58
  // Build specific agent
60
- await buildAgent(projectDir, agentName, options.force);
59
+ await buildAgent(projectDir, agentName);
61
60
  } else {
62
- // No agent specified, check what needs rebuilding
63
- await checkBuildStatus(projectDir);
61
+ // No agent specified, list available agents
62
+ console.log(chalk.yellow('No agent specified. Use --all to build all agents or specify an agent name.'));
63
+ console.log(chalk.dim('\nAvailable agents:'));
64
+ await listAvailableAgents(projectDir);
64
65
  }
65
66
 
66
67
  process.exit(0);
@@ -77,7 +78,7 @@ module.exports = {
77
78
  /**
78
79
  * Build a specific agent
79
80
  */
80
- async function buildAgent(projectDir, agentName, force = false) {
81
+ async function buildAgent(projectDir, agentName) {
81
82
  // First check standalone agents in bmad/agents/{agentname}/
82
83
  const standaloneAgentDir = path.join(projectDir, 'bmad', 'agents', agentName);
83
84
  let standaloneYamlPath = path.join(standaloneAgentDir, `${agentName}.agent.yaml`);
@@ -95,15 +96,6 @@ async function buildAgent(projectDir, agentName, force = false) {
95
96
  const yamlFileName = path.basename(standaloneYamlPath, '.agent.yaml');
96
97
  const outputPath = path.join(standaloneAgentDir, `${yamlFileName}.md`);
97
98
 
98
- // Check if rebuild needed
99
- if (!force && (await fs.pathExists(outputPath))) {
100
- const needsRebuild = await checkIfNeedsRebuild(standaloneYamlPath, outputPath, projectDir, agentName);
101
- if (!needsRebuild) {
102
- console.log(chalk.dim(` ${agentName}: already up to date`));
103
- return;
104
- }
105
- }
106
-
107
99
  // Build the standalone agent
108
100
  console.log(chalk.cyan(` Building standalone agent ${agentName}...`));
109
101
 
@@ -130,15 +122,6 @@ async function buildAgent(projectDir, agentName, force = false) {
130
122
  if (await fs.pathExists(agentYamlPath)) {
131
123
  found = true;
132
124
 
133
- // Check if rebuild needed
134
- if (!force && (await fs.pathExists(outputPath))) {
135
- const needsRebuild = await checkIfNeedsRebuild(agentYamlPath, outputPath, projectDir, agentName);
136
- if (!needsRebuild) {
137
- console.log(chalk.dim(` ${agentName}: already up to date`));
138
- return;
139
- }
140
- }
141
-
142
125
  // Build the agent
143
126
  console.log(chalk.cyan(` Building ${agentName}...`));
144
127
 
@@ -162,9 +145,8 @@ async function buildAgent(projectDir, agentName, force = false) {
162
145
  /**
163
146
  * Build all agents
164
147
  */
165
- async function buildAllAgents(projectDir, force = false) {
148
+ async function buildAllAgents(projectDir) {
166
149
  let builtCount = 0;
167
- let skippedCount = 0;
168
150
 
169
151
  // First, build standalone agents in bmad/agents/
170
152
  const standaloneAgentsDir = path.join(projectDir, 'bmad', 'agents');
@@ -193,16 +175,6 @@ async function buildAllAgents(projectDir, force = false) {
193
175
  const agentName = path.basename(agentFile, '.agent.yaml');
194
176
  const outputPath = path.join(agentDir, `${agentName}.md`);
195
177
 
196
- // Check if rebuild needed
197
- if (!force && (await fs.pathExists(outputPath))) {
198
- const needsRebuild = await checkIfNeedsRebuild(agentYamlPath, outputPath, projectDir, agentName);
199
- if (!needsRebuild) {
200
- console.log(chalk.dim(` ${agentName}: up to date`));
201
- skippedCount++;
202
- continue;
203
- }
204
- }
205
-
206
178
  console.log(chalk.cyan(` Building standalone agent ${agentName}...`));
207
179
 
208
180
  const customizePath = path.join(projectDir, 'bmad', '_cfg', 'agents', `${agentName}.customize.yaml`);
@@ -239,16 +211,6 @@ async function buildAllAgents(projectDir, force = false) {
239
211
  const agentYamlPath = path.join(agentsDir, file);
240
212
  const outputPath = path.join(agentsDir, `${agentName}.md`);
241
213
 
242
- // Check if rebuild needed
243
- if (!force && (await fs.pathExists(outputPath))) {
244
- const needsRebuild = await checkIfNeedsRebuild(agentYamlPath, outputPath, projectDir, agentName);
245
- if (!needsRebuild) {
246
- console.log(chalk.dim(` ${agentName}: up to date`));
247
- skippedCount++;
248
- continue;
249
- }
250
- }
251
-
252
214
  console.log(chalk.cyan(` Building ${agentName}...`));
253
215
 
254
216
  const customizePath = path.join(projectDir, '.claude', '_cfg', 'agents', `${agentName}.customize.yaml`);
@@ -263,143 +225,6 @@ async function buildAllAgents(projectDir, force = false) {
263
225
  }
264
226
 
265
227
  console.log(chalk.green(`\n✓ Built ${builtCount} agent(s)`));
266
- if (skippedCount > 0) {
267
- console.log(chalk.dim(` Skipped ${skippedCount} (already up to date)`));
268
- }
269
- }
270
-
271
- /**
272
- * Check what needs rebuilding
273
- */
274
- async function checkBuildStatus(projectDir) {
275
- const needsRebuild = [];
276
- const upToDate = [];
277
-
278
- // Check standalone agents in bmad/agents/
279
- const standaloneAgentsDir = path.join(projectDir, 'bmad', 'agents');
280
- if (await fs.pathExists(standaloneAgentsDir)) {
281
- const agentDirs = await fs.readdir(standaloneAgentsDir);
282
-
283
- for (const agentDirName of agentDirs) {
284
- const agentDir = path.join(standaloneAgentsDir, agentDirName);
285
-
286
- // Skip if not a directory
287
- const stat = await fs.stat(agentDir);
288
- if (!stat.isDirectory()) {
289
- continue;
290
- }
291
-
292
- // Find any .agent.yaml file in the directory
293
- const files = await fs.readdir(agentDir);
294
- const agentFile = files.find((f) => f.endsWith('.agent.yaml'));
295
-
296
- if (!agentFile) {
297
- continue;
298
- }
299
-
300
- const agentYamlPath = path.join(agentDir, agentFile);
301
- const agentName = path.basename(agentFile, '.agent.yaml');
302
- const outputPath = path.join(agentDir, `${agentName}.md`);
303
-
304
- if (!(await fs.pathExists(outputPath))) {
305
- needsRebuild.push(`${agentName} (standalone)`);
306
- } else if (await checkIfNeedsRebuild(agentYamlPath, outputPath, projectDir, agentName)) {
307
- needsRebuild.push(`${agentName} (standalone)`);
308
- } else {
309
- upToDate.push(`${agentName} (standalone)`);
310
- }
311
- }
312
- }
313
-
314
- // Check module agents in .claude/commands/bmad/
315
- const bmadCommandsDir = path.join(projectDir, '.claude', 'commands', 'bmad');
316
- if (await fs.pathExists(bmadCommandsDir)) {
317
- const modules = await fs.readdir(bmadCommandsDir);
318
-
319
- for (const module of modules) {
320
- const agentsDir = path.join(bmadCommandsDir, module, 'agents');
321
-
322
- if (!(await fs.pathExists(agentsDir))) {
323
- continue;
324
- }
325
-
326
- const files = await fs.readdir(agentsDir);
327
-
328
- for (const file of files) {
329
- if (!file.endsWith('.agent.yaml')) {
330
- continue;
331
- }
332
-
333
- const agentName = file.replace('.agent.yaml', '');
334
- const agentYamlPath = path.join(agentsDir, file);
335
- const outputPath = path.join(agentsDir, `${agentName}.md`);
336
-
337
- if (!(await fs.pathExists(outputPath))) {
338
- needsRebuild.push(`${agentName} (${module})`);
339
- } else if (await checkIfNeedsRebuild(agentYamlPath, outputPath, projectDir, agentName)) {
340
- needsRebuild.push(`${agentName} (${module})`);
341
- } else {
342
- upToDate.push(`${agentName} (${module})`);
343
- }
344
- }
345
- }
346
- }
347
-
348
- if (needsRebuild.length === 0) {
349
- console.log(chalk.green('✓ All agents are up to date'));
350
- } else {
351
- console.log(chalk.yellow(`${needsRebuild.length} agent(s) need rebuilding:`));
352
- for (const agent of needsRebuild) {
353
- console.log(chalk.dim(` - ${agent}`));
354
- }
355
- console.log(chalk.dim('\nRun "bmad build --all" to rebuild all agents'));
356
- }
357
-
358
- if (upToDate.length > 0) {
359
- console.log(chalk.dim(`\n${upToDate.length} agent(s) up to date`));
360
- }
361
- }
362
-
363
- /**
364
- * Check if an agent needs rebuilding by comparing hashes
365
- */
366
- async function checkIfNeedsRebuild(yamlPath, outputPath, projectDir, agentName) {
367
- // Read the output file to check its metadata
368
- const outputContent = await fs.readFile(outputPath, 'utf8');
369
-
370
- // Extract hash from BUILD-META comment
371
- const metaMatch = outputContent.match(/source:.*\(hash: ([a-f0-9]+)\)/);
372
- if (!metaMatch) {
373
- // No metadata, needs rebuild
374
- return true;
375
- }
376
-
377
- const storedHash = metaMatch[1];
378
-
379
- // Calculate current hash
380
- const currentHash = await builder.calculateFileHash(yamlPath);
381
-
382
- if (storedHash !== currentHash) {
383
- return true;
384
- }
385
-
386
- // Check customize file if it exists
387
- const customizePath = path.join(projectDir, '.claude', '_cfg', 'agents', `${agentName}.customize.yaml`);
388
- if (await fs.pathExists(customizePath)) {
389
- const customizeMetaMatch = outputContent.match(/customize:.*\(hash: ([a-f0-9]+)\)/);
390
- if (!customizeMetaMatch) {
391
- return true;
392
- }
393
-
394
- const storedCustomizeHash = customizeMetaMatch[1];
395
- const currentCustomizeHash = await builder.calculateFileHash(customizePath);
396
-
397
- if (storedCustomizeHash !== currentCustomizeHash) {
398
- return true;
399
- }
400
- }
401
-
402
- return false;
403
228
  }
404
229
 
405
230
  /**
@@ -9,7 +9,7 @@ const ui = new UI();
9
9
  module.exports = {
10
10
  command: 'install',
11
11
  description: 'Install BMAD Core agents and tools',
12
- options: [['--skip-cleanup', 'Skip automatic cleanup of legacy files']],
12
+ options: [],
13
13
  action: async (options) => {
14
14
  try {
15
15
  const config = await ui.promptInstall();
@@ -44,11 +44,6 @@ module.exports = {
44
44
  config._requestedReinstall = true;
45
45
  }
46
46
 
47
- // Add skip cleanup flag if option provided
48
- if (options && options.skipCleanup) {
49
- config.skipCleanup = true;
50
- }
51
-
52
47
  // Regular install/update flow
53
48
  const result = await installer.install(config);
54
49
 
@@ -182,15 +182,43 @@ class ConfigCollector {
182
182
  }
183
183
 
184
184
  // Load module's install config schema
185
- const installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'install-config.yaml');
186
- const legacyConfigPath = path.join(getModulePath(moduleName), 'config.yaml');
185
+ // First, try the standard src/modules location
186
+ let installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'install-config.yaml');
187
+
188
+ // If not found in src/modules, we need to find it by searching the project
189
+ if (!(await fs.pathExists(installerConfigPath))) {
190
+ // Use the module manager to find the module source
191
+ const { ModuleManager } = require('../modules/manager');
192
+ const moduleManager = new ModuleManager();
193
+ const moduleSourcePath = await moduleManager.findModuleSource(moduleName);
194
+
195
+ if (moduleSourcePath) {
196
+ installerConfigPath = path.join(moduleSourcePath, '_module-installer', 'install-config.yaml');
197
+ }
198
+ }
187
199
 
188
200
  let configPath = null;
201
+ let isCustomModule = false;
202
+
189
203
  if (await fs.pathExists(installerConfigPath)) {
190
204
  configPath = installerConfigPath;
191
- } else if (await fs.pathExists(legacyConfigPath)) {
192
- configPath = legacyConfigPath;
193
205
  } else {
206
+ // Check if this is a custom module with custom.yaml
207
+ const { ModuleManager } = require('../modules/manager');
208
+ const moduleManager = new ModuleManager();
209
+ const moduleSourcePath = await moduleManager.findModuleSource(moduleName);
210
+
211
+ if (moduleSourcePath) {
212
+ const rootCustomConfigPath = path.join(moduleSourcePath, 'custom.yaml');
213
+ const moduleInstallerCustomPath = path.join(moduleSourcePath, '_module-installer', 'custom.yaml');
214
+
215
+ if ((await fs.pathExists(rootCustomConfigPath)) || (await fs.pathExists(moduleInstallerCustomPath))) {
216
+ isCustomModule = true;
217
+ // For custom modules, we don't have an install-config schema, so just use existing values
218
+ // The custom.yaml values will be loaded and merged during installation
219
+ }
220
+ }
221
+
194
222
  // No config schema for this module - use existing values
195
223
  if (this.existingConfig && this.existingConfig[moduleName]) {
196
224
  if (!this.collectedConfig[moduleName]) {
@@ -226,9 +254,31 @@ class ConfigCollector {
226
254
  }
227
255
  this.collectedConfig[moduleName] = { ...this.existingConfig[moduleName] };
228
256
 
257
+ // Special handling for user_name: ensure it has a value
258
+ if (
259
+ moduleName === 'core' &&
260
+ (!this.collectedConfig[moduleName].user_name || this.collectedConfig[moduleName].user_name === '[USER_NAME]')
261
+ ) {
262
+ this.collectedConfig[moduleName].user_name = this.getDefaultUsername();
263
+ }
264
+
229
265
  // Also populate allAnswers for cross-referencing
230
266
  for (const [key, value] of Object.entries(this.existingConfig[moduleName])) {
231
- this.allAnswers[`${moduleName}_${key}`] = value;
267
+ // Ensure user_name is properly set in allAnswers too
268
+ let finalValue = value;
269
+ if (moduleName === 'core' && key === 'user_name' && (!value || value === '[USER_NAME]')) {
270
+ finalValue = this.getDefaultUsername();
271
+ }
272
+ this.allAnswers[`${moduleName}_${key}`] = finalValue;
273
+ }
274
+ } else if (moduleName === 'core') {
275
+ // No existing core config - ensure we at least have user_name
276
+ if (!this.collectedConfig[moduleName]) {
277
+ this.collectedConfig[moduleName] = {};
278
+ }
279
+ if (!this.collectedConfig[moduleName].user_name) {
280
+ this.collectedConfig[moduleName].user_name = this.getDefaultUsername();
281
+ this.allAnswers[`${moduleName}_user_name`] = this.getDefaultUsername();
232
282
  }
233
283
  }
234
284
  // Show "no config" message for modules with no new questions
@@ -396,15 +446,25 @@ class ConfigCollector {
396
446
  if (!this.allAnswers) {
397
447
  this.allAnswers = {};
398
448
  }
399
- // Load module's config.yaml (check new location first, then fallback)
400
- const installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'install-config.yaml');
401
- const legacyConfigPath = path.join(getModulePath(moduleName), 'config.yaml');
449
+ // Load module's config
450
+ // First, try the standard src/modules location
451
+ let installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'install-config.yaml');
452
+
453
+ // If not found in src/modules, we need to find it by searching the project
454
+ if (!(await fs.pathExists(installerConfigPath))) {
455
+ // Use the module manager to find the module source
456
+ const { ModuleManager } = require('../modules/manager');
457
+ const moduleManager = new ModuleManager();
458
+ const moduleSourcePath = await moduleManager.findModuleSource(moduleName);
459
+
460
+ if (moduleSourcePath) {
461
+ installerConfigPath = path.join(moduleSourcePath, '_module-installer', 'install-config.yaml');
462
+ }
463
+ }
402
464
 
403
465
  let configPath = null;
404
466
  if (await fs.pathExists(installerConfigPath)) {
405
467
  configPath = installerConfigPath;
406
- } else if (await fs.pathExists(legacyConfigPath)) {
407
- configPath = legacyConfigPath;
408
468
  } else {
409
469
  // No config for this module
410
470
  return;