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

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 (412) hide show
  1. package/.coderabbit.yaml +36 -0
  2. package/{CODE_OF_CONDUCT.md → .github/CODE_OF_CONDUCT.md} +4 -4
  3. package/CHANGELOG.md +168 -409
  4. package/README.md +4 -1
  5. package/docs/agent-customization-guide.md +7 -7
  6. package/docs/custom-content-installation.md +245 -0
  7. package/docs/ide-info/crush.md +1 -1
  8. package/docs/ide-info/cursor.md +7 -7
  9. package/docs/ide-info/iflow.md +3 -3
  10. package/docs/ide-info/opencode.md +1 -1
  11. package/docs/index.md +2 -2
  12. package/docs/installers-bundlers/ide-injections.md +2 -2
  13. package/docs/installers-bundlers/installers-modules-platforms-reference.md +29 -28
  14. package/docs/v4-to-v6-upgrade.md +10 -10
  15. package/docs/web-bundles-gemini-gpt-guide.md +2 -2
  16. package/package.json +1 -1
  17. package/src/core/_module-installer/installer.js +1 -1
  18. package/src/core/agents/bmad-master.agent.yaml +5 -5
  19. package/src/core/agents/bmad-web-orchestrator.agent.xml +6 -6
  20. package/src/core/{_module-installer/install-config.yaml → module.yaml} +0 -7
  21. package/src/core/resources/excalidraw/README.md +4 -4
  22. package/src/core/tasks/advanced-elicitation.xml +3 -3
  23. package/src/core/tasks/index-docs.xml +1 -1
  24. package/src/core/tasks/validate-workflow.xml +1 -1
  25. package/src/core/tasks/workflow.xml +4 -4
  26. package/src/core/tools/shard-doc.xml +1 -1
  27. package/src/core/workflows/brainstorming/workflow.md +2 -2
  28. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +2 -2
  29. package/src/core/workflows/party-mode/workflow.md +4 -4
  30. package/src/modules/bmb/README.md +2 -2
  31. package/src/modules/bmb/_module-installer/installer.js +1 -1
  32. package/src/modules/bmb/agents/bmad-builder.agent.yaml +15 -15
  33. package/src/modules/bmb/docs/agents/agent-compilation.md +2 -2
  34. package/src/modules/bmb/docs/agents/agent-menu-patterns.md +22 -22
  35. package/src/modules/bmb/docs/agents/expert-agent-architecture.md +1 -1
  36. package/src/modules/bmb/docs/agents/index.md +2 -2
  37. package/src/modules/bmb/docs/agents/module-agent-architecture.md +50 -51
  38. package/src/modules/bmb/docs/agents/understanding-agent-types.md +3 -3
  39. package/src/modules/bmb/docs/workflows/architecture.md +1 -1
  40. package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +3 -3
  41. package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +1 -1
  42. package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +1 -1
  43. package/src/modules/bmb/docs/workflows/templates/step-file.md +3 -3
  44. package/src/modules/bmb/docs/workflows/templates/step-template.md +3 -3
  45. package/src/modules/bmb/docs/workflows/templates/workflow-template.md +2 -2
  46. package/src/modules/bmb/docs/workflows/templates/workflow.md +1 -1
  47. package/src/modules/bmb/{_module-installer/install-config.yaml → module.yaml} +0 -1
  48. package/src/modules/bmb/reference/agents/module-examples/README.md +1 -1
  49. package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +5 -5
  50. package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
  51. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
  52. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
  53. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
  54. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
  55. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
  56. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
  57. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
  58. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
  59. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +1 -1
  60. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +6 -6
  61. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
  62. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
  63. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
  64. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
  65. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
  66. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
  67. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
  68. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
  69. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
  70. package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +5 -5
  71. package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +4 -4
  72. package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +4 -4
  73. package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +4 -4
  74. package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +7 -7
  75. package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +3 -3
  76. package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +4 -4
  77. package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +4 -4
  78. package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +3 -3
  79. package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +4 -4
  80. package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +3 -3
  81. package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +3 -3
  82. package/src/modules/bmb/workflows/create-agent/workflow.md +13 -13
  83. package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +2 -2
  84. package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +4 -4
  85. package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +4 -4
  86. package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +6 -6
  87. package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +5 -5
  88. package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +6 -6
  89. package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +3 -3
  90. package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +12 -12
  91. package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +6 -5
  92. package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +6 -5
  93. package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +7 -7
  94. package/src/modules/bmb/workflows/create-module/templates/agent.template.md +7 -7
  95. package/src/modules/bmb/workflows/create-module/templates/installer.template.js +1 -1
  96. package/src/modules/bmb/workflows/create-module/templates/{install-config.template.yaml → module.template.yaml} +1 -1
  97. package/src/modules/bmb/workflows/create-module/validation.md +3 -3
  98. package/src/modules/bmb/workflows/create-module/workflow.md +2 -2
  99. package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +3 -3
  100. package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +5 -5
  101. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +4 -4
  102. package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +3 -3
  103. package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +3 -3
  104. package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +10 -10
  105. package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +13 -13
  106. package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +3 -3
  107. package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +1 -1
  108. package/src/modules/bmb/workflows/create-workflow/workflow.md +1 -1
  109. package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +3 -3
  110. package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +13 -13
  111. package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +5 -5
  112. package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +3 -3
  113. package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +5 -5
  114. package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
  115. package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +4 -4
  116. package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +3 -3
  117. package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +6 -6
  118. package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +3 -3
  119. package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +3 -3
  120. package/src/modules/bmb/workflows/edit-workflow/workflow.md +1 -1
  121. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +3 -3
  122. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +5 -5
  123. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +6 -6
  124. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +4 -4
  125. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +4 -4
  126. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +4 -4
  127. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +4 -4
  128. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +3 -3
  129. package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
  130. package/src/modules/bmb/workflows-legacy/edit-module/README.md +2 -2
  131. package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +2 -2
  132. package/src/modules/bmb/workflows-legacy/edit-module/instructions.md +4 -4
  133. package/src/modules/bmb/workflows-legacy/edit-module/workflow.yaml +10 -10
  134. package/src/modules/bmb/workflows-legacy/module-brief/README.md +2 -2
  135. package/src/modules/bmb/workflows-legacy/module-brief/instructions.md +2 -2
  136. package/src/modules/bmb/workflows-legacy/module-brief/workflow.yaml +4 -4
  137. package/src/modules/bmgd/README.md +3 -2
  138. package/src/modules/bmgd/agents/game-architect.agent.yaml +6 -6
  139. package/src/modules/bmgd/agents/game-designer.agent.yaml +7 -7
  140. package/src/modules/bmgd/agents/game-dev.agent.yaml +9 -9
  141. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +21 -21
  142. package/src/modules/bmgd/{_module-installer/install-config.yaml → module.yaml} +0 -1
  143. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +1 -1
  144. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +9 -9
  145. package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +1 -1
  146. package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +8 -8
  147. package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +4 -4
  148. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +30 -30
  149. package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +1 -1
  150. package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +5 -5
  151. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +1 -1
  152. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +2 -2
  153. package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +2 -2
  154. package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +2 -2
  155. package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
  156. package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +2 -2
  157. package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +2 -2
  158. package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +2 -2
  159. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +2 -2
  160. package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +2 -2
  161. package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +2 -2
  162. package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +1 -1
  163. package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +2 -2
  164. package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +2 -2
  165. package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +2 -2
  166. package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +3 -3
  167. package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +2 -2
  168. package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +2 -2
  169. package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +1 -1
  170. package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +1 -1
  171. package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +2 -2
  172. package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +2 -2
  173. package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +1 -1
  174. package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +2 -2
  175. package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +1 -1
  176. package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +2 -2
  177. package/src/modules/bmm/_module-installer/installer.js +1 -1
  178. package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +1 -1
  179. package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +1 -1
  180. package/src/modules/bmm/agents/analyst.agent.yaml +8 -8
  181. package/src/modules/bmm/agents/architect.agent.yaml +8 -8
  182. package/src/modules/bmm/agents/dev.agent.yaml +3 -3
  183. package/src/modules/bmm/agents/pm.agent.yaml +8 -8
  184. package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +5 -5
  185. package/src/modules/bmm/agents/sm.agent.yaml +9 -9
  186. package/src/modules/bmm/agents/tea.agent.yaml +13 -13
  187. package/src/modules/bmm/agents/tech-writer.agent.yaml +9 -9
  188. package/src/modules/bmm/agents/ux-designer.agent.yaml +6 -6
  189. package/src/modules/bmm/docs/README.md +0 -25
  190. package/src/modules/bmm/docs/agents-guide.md +4 -4
  191. package/src/modules/bmm/docs/brownfield-guide.md +4 -4
  192. package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
  193. package/src/modules/bmm/docs/faq.md +1 -1
  194. package/src/modules/bmm/docs/party-mode.md +3 -3
  195. package/src/modules/bmm/docs/quick-start.md +1 -1
  196. package/src/modules/bmm/docs/test-architecture.md +3 -3
  197. package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
  198. package/src/modules/bmm/docs/workflows-implementation.md +0 -100
  199. package/src/modules/bmm/{_module-installer/install-config.yaml → module.yaml} +1 -2
  200. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01-init.md +1 -1
  201. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01b-continue.md +1 -1
  202. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +3 -3
  203. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +3 -3
  204. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +3 -3
  205. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +3 -3
  206. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-06-complete.md +5 -3
  207. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +2 -2
  208. package/src/modules/bmm/workflows/1-analysis/research/workflow.md +2 -2
  209. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +4 -4
  210. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +4 -4
  211. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +4 -4
  212. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +4 -4
  213. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +4 -4
  214. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +4 -4
  215. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +4 -4
  216. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +4 -4
  217. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +4 -4
  218. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +4 -4
  219. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +4 -4
  220. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +4 -4
  221. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +2 -2
  222. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +1 -1
  223. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +1 -1
  224. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +3 -3
  225. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +7 -7
  226. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +8 -8
  227. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +12 -12
  228. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +12 -12
  229. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +10 -10
  230. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +7 -7
  231. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +9 -9
  232. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +9 -9
  233. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +1 -1
  234. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +1 -1
  235. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-02-context.md +4 -4
  236. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +4 -4
  237. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +4 -4
  238. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md +4 -4
  239. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md +4 -4
  240. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md +4 -4
  241. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md +1 -1
  242. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +2 -2
  243. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +1 -1
  244. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +1 -1
  245. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +1 -1
  246. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +1 -1
  247. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +2 -2
  248. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +1 -1
  249. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +1 -1
  250. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +6 -6
  251. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +1 -1
  252. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +2 -2
  253. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +1 -1
  254. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +1 -1
  255. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +1 -1
  256. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +2 -2
  257. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
  258. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +2 -2
  259. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +2 -2
  260. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +2 -2
  261. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +2 -2
  262. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +2 -2
  263. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +1 -1
  264. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +2 -2
  265. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +2 -2
  266. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +3 -3
  267. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +2 -2
  268. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -2
  269. package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +2 -2
  270. package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +2 -2
  271. package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +5 -5
  272. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +7 -7
  273. package/src/modules/bmm/workflows/diagrams/create-dataflow/instructions.md +1 -1
  274. package/src/modules/bmm/workflows/diagrams/create-dataflow/workflow.yaml +5 -5
  275. package/src/modules/bmm/workflows/diagrams/create-diagram/instructions.md +2 -2
  276. package/src/modules/bmm/workflows/diagrams/create-diagram/workflow.yaml +5 -5
  277. package/src/modules/bmm/workflows/diagrams/create-flowchart/instructions.md +2 -2
  278. package/src/modules/bmm/workflows/diagrams/create-flowchart/workflow.yaml +5 -5
  279. package/src/modules/bmm/workflows/diagrams/create-wireframe/instructions.md +1 -1
  280. package/src/modules/bmm/workflows/diagrams/create-wireframe/workflow.yaml +5 -5
  281. package/src/modules/bmm/workflows/document-project/instructions.md +5 -5
  282. package/src/modules/bmm/workflows/document-project/workflow.yaml +2 -2
  283. package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +5 -5
  284. package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
  285. package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +2 -2
  286. package/src/modules/bmm/workflows/generate-project-context/workflow.md +2 -2
  287. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +2 -2
  288. package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -2
  289. package/src/modules/bmm/workflows/testarch/automate/instructions.md +2 -2
  290. package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -2
  291. package/src/modules/bmm/workflows/testarch/ci/instructions.md +1 -1
  292. package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -2
  293. package/src/modules/bmm/workflows/testarch/framework/instructions.md +3 -3
  294. package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -2
  295. package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
  296. package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -2
  297. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +3 -3
  298. package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +1 -1
  299. package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +2 -2
  300. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
  301. package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -2
  302. package/src/modules/bmm/workflows/testarch/trace/instructions.md +6 -6
  303. package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -2
  304. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +1 -1
  305. package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +4 -4
  306. package/src/modules/bmm/workflows/workflow-status/instructions.md +3 -3
  307. package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
  308. package/src/modules/bmm/workflows/workflow-status/workflow.yaml +2 -2
  309. package/src/modules/cis/README.md +1 -1
  310. package/src/modules/cis/_module-installer/installer.js +1 -1
  311. package/src/modules/cis/agents/README.md +1 -1
  312. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +4 -4
  313. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +4 -4
  314. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +4 -4
  315. package/src/modules/cis/agents/innovation-strategist.agent.yaml +4 -4
  316. package/src/modules/cis/agents/presentation-master.agent.yaml +3 -3
  317. package/src/modules/cis/agents/storyteller.agent.yaml +4 -4
  318. package/src/modules/cis/{_module-installer/install-config.yaml → module.yaml} +0 -1
  319. package/src/modules/cis/workflows/README.md +1 -1
  320. package/src/modules/cis/workflows/design-thinking/instructions.md +2 -2
  321. package/src/modules/cis/workflows/design-thinking/workflow.yaml +7 -7
  322. package/src/modules/cis/workflows/innovation-strategy/instructions.md +2 -2
  323. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +7 -7
  324. package/src/modules/cis/workflows/problem-solving/instructions.md +2 -2
  325. package/src/modules/cis/workflows/problem-solving/workflow.yaml +7 -7
  326. package/src/modules/cis/workflows/storytelling/instructions.md +2 -2
  327. package/src/modules/cis/workflows/storytelling/workflow.yaml +7 -7
  328. package/src/utility/models/agent-activation-ide.xml +3 -3
  329. package/src/utility/models/agent-activation-web.xml +3 -3
  330. package/src/utility/models/fragments/activation-steps.xml +1 -1
  331. package/src/utility/models/fragments/handler-validate-workflow.xml +1 -1
  332. package/src/utility/models/fragments/handler-workflow.xml +1 -1
  333. package/src/utility/models/fragments/web-bundle-activation-steps.xml +3 -3
  334. package/tools/cli/README.md +23 -23
  335. package/tools/cli/bundlers/web-bundler.js +23 -33
  336. package/tools/cli/commands/build.js +5 -5
  337. package/tools/cli/installers/lib/core/config-collector.js +33 -20
  338. package/tools/cli/installers/lib/core/custom-module-cache.js +251 -0
  339. package/tools/cli/installers/lib/core/detector.js +8 -4
  340. package/tools/cli/installers/lib/core/installer.js +885 -98
  341. package/tools/cli/installers/lib/core/manifest-generator.js +177 -14
  342. package/tools/cli/installers/lib/core/manifest.js +47 -0
  343. package/tools/cli/installers/lib/custom/handler.js +147 -20
  344. package/tools/cli/installers/lib/ide/_base-ide.js +14 -14
  345. package/tools/cli/installers/lib/ide/gemini.js +4 -4
  346. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +2 -2
  347. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +3 -3
  348. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
  349. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +3 -3
  350. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +3 -3
  351. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +1 -1
  352. package/tools/cli/installers/lib/modules/manager.js +99 -53
  353. package/tools/cli/lib/agent/compiler.js +6 -14
  354. package/tools/cli/lib/agent/installer.js +4 -3
  355. package/tools/cli/lib/cli-utils.js +21 -4
  356. package/tools/cli/lib/ui.js +496 -12
  357. package/tools/cli/regenerate-manifests.js +3 -4
  358. package/tools/maintainer/review-pr-README.md +55 -0
  359. package/tools/maintainer/review-pr.md +242 -0
  360. package/tools/migrate-custom-module-paths.js +124 -0
  361. package/bmad-method-6.0.0-alpha.14.tgz +0 -0
  362. package/docs/custom-agent-installation.md +0 -137
  363. package/example-custom-content/README.md +0 -4
  364. package/example-custom-content/agents/commit-poet/commit-poet.agent.yaml +0 -129
  365. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/instructions.md +0 -70
  366. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +0 -111
  367. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +0 -70
  368. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +0 -114
  369. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +0 -134
  370. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +0 -161
  371. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +0 -103
  372. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/memories.md +0 -17
  373. package/example-custom-content/agents/toolsmith/toolsmith.agent.yaml +0 -109
  374. package/example-custom-content/custom.yaml +0 -3
  375. package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +0 -168
  376. package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +0 -155
  377. package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +0 -89
  378. package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +0 -36
  379. package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +0 -36
  380. package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +0 -36
  381. package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +0 -36
  382. package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +0 -36
  383. package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +0 -36
  384. package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +0 -36
  385. package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +0 -36
  386. package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +0 -150
  387. package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +0 -1
  388. package/example-custom-content/workflows/quiz-master/workflow-plan-quiz-master.md +0 -269
  389. package/example-custom-content/workflows/quiz-master/workflow.md +0 -54
  390. package/example-custom-content/workflows/wassup/workflow.md +0 -26
  391. package/example-custom-module/mwm/README.md +0 -4
  392. package/example-custom-module/mwm/_module-installer/install-config.yaml +0 -27
  393. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +0 -47
  394. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +0 -17
  395. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +0 -150
  396. package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +0 -137
  397. package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +0 -137
  398. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +0 -13
  399. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +0 -30
  400. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +0 -13
  401. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +0 -17
  402. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +0 -124
  403. package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +0 -31
  404. package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +0 -45
  405. package/example-custom-module/mwm/workflows/crisis-support/README.md +0 -31
  406. package/example-custom-module/mwm/workflows/crisis-support/workflow.md +0 -45
  407. package/example-custom-module/mwm/workflows/daily-checkin/README.md +0 -32
  408. package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +0 -45
  409. package/example-custom-module/mwm/workflows/guided-meditation/README.md +0 -31
  410. package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +0 -45
  411. package/example-custom-module/mwm/workflows/wellness-journal/README.md +0 -31
  412. package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +0 -45
@@ -109,7 +109,7 @@ class WorkflowCommandGenerator {
109
109
 
110
110
  // Convert source path to installed path
111
111
  // From: /Users/.../src/modules/bmm/workflows/.../workflow.yaml
112
- // To: {project-root}/{bmad_folder}/bmm/workflows/.../workflow.yaml
112
+ // To: {project-root}/.bmad/bmm/workflows/.../workflow.yaml
113
113
  let workflowPath = workflow.path;
114
114
 
115
115
  // Extract the relative path from source
@@ -131,8 +131,8 @@ class WorkflowCommandGenerator {
131
131
  .replaceAll('{{module}}', workflow.module)
132
132
  .replaceAll('{{description}}', workflow.description)
133
133
  .replaceAll('{{workflow_path}}', workflowPath)
134
- .replaceAll('{bmad_folder}', this.bmadFolderName)
135
- .replaceAll('{*bmad_folder*}', '{bmad_folder}');
134
+ .replaceAll('.bmad', this.bmadFolderName)
135
+ .replaceAll('.bmad', '.bmad');
136
136
  }
137
137
 
138
138
  /**
@@ -6,7 +6,7 @@ description: '{{description}}'
6
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
7
 
8
8
  <agent-activation CRITICAL="TRUE">
9
- 1. LOAD the FULL agent file from @{bmad_folder}/{{module}}/agents/{{path}}
9
+ 1. LOAD the FULL agent file from @.bmad/{{module}}/agents/{{path}}
10
10
  2. READ its entire contents - this contains the complete agent persona, menu, and instructions
11
11
  3. Execute ALL activation steps exactly as written in the agent file
12
12
  4. Follow the agent's persona and menu system precisely
@@ -3,12 +3,12 @@ prompt = """
3
3
  CRITICAL: You are now the BMad '{{title}}' agent.
4
4
 
5
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.
6
+ 1. [ ] IMMEDIATE ACTION: Load and parse @{.bmad}/{{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}/{{module}}/agents/{{name}}.md.
8
8
  3. [ ] CONFIRM: The user's name from config is {user_name}.
9
9
 
10
10
  Only after all checks are complete, greet the user by name and display the menu.
11
11
  Acknowledge this checklist is complete in your first response.
12
12
 
13
- AGENT DEFINITION: @{{bmad_folder}}/{{module}}/agents/{{name}}.md
13
+ AGENT DEFINITION: @{.bmad}/{{module}}/agents/{{name}}.md
14
14
  """
@@ -3,10 +3,10 @@ prompt = """
3
3
  Execute the following BMad Method task workflow:
4
4
 
5
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}}.
6
+ 1. [ ] IMMEDIATE ACTION: Load and parse @{.bmad}/{{module}}/config.yaml.
7
+ 2. [ ] IMMEDIATE ACTION: Read and load the task definition at @{.bmad}/{{module}}/tasks/{{filename}}.
8
8
 
9
9
  Follow all instructions and complete the task as defined.
10
10
 
11
- TASK DEFINITION: @{{bmad_folder}}/{{module}}/tasks/{{filename}}
11
+ TASK DEFINITION: @{.bmad}/{{module}}/tasks/{{filename}}
12
12
  """
@@ -5,7 +5,7 @@ description: '{{description}}'
5
5
  IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded:
6
6
 
7
7
  <steps CRITICAL="TRUE">
8
- 1. Always LOAD the FULL @{bmad_folder}/core/tasks/workflow.xml
8
+ 1. Always LOAD the FULL @.bmad/core/tasks/workflow.xml
9
9
  2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config @{{workflow_path}}
10
10
  3. Pass the yaml path {{workflow_path}} as 'workflow-config' parameter to the workflow.xml instructions
11
11
  4. Follow workflow.xml instructions EXACTLY as written to process and follow the specific workflow config and its instructions
@@ -22,11 +22,12 @@ const { getProjectRoot, getSourcePath, getModulePath } = require('../../../lib/p
22
22
  * await manager.install('core-module', '/path/to/bmad');
23
23
  */
24
24
  class ModuleManager {
25
- constructor() {
25
+ constructor(options = {}) {
26
26
  // Path to source modules directory
27
27
  this.modulesSourcePath = getSourcePath('modules');
28
28
  this.xmlHandler = new XmlHandler();
29
29
  this.bmadFolderName = 'bmad'; // Default, can be overridden
30
+ this.scanProjectForModules = options.scanProjectForModules !== false; // Default to true for backward compatibility
30
31
  }
31
32
 
32
33
  /**
@@ -46,7 +47,7 @@ class ModuleManager {
46
47
  }
47
48
 
48
49
  /**
49
- * Copy a file and replace {bmad_folder} placeholder with actual folder name
50
+ * Copy a file and replace .bmad placeholder with actual folder name
50
51
  * @param {string} sourcePath - Source file path
51
52
  * @param {string} targetPath - Target file path
52
53
  */
@@ -61,14 +62,14 @@ class ModuleManager {
61
62
  // Read the file content
62
63
  let content = await fs.readFile(sourcePath, 'utf8');
63
64
 
64
- // Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
65
- if (content.includes('{*bmad_folder*}')) {
66
- content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
65
+ // Replace escape sequence .bmad with literal .bmad
66
+ if (content.includes('.bmad')) {
67
+ content = content.replaceAll('.bmad', '.bmad');
67
68
  }
68
69
 
69
- // Replace {bmad_folder} placeholder with actual folder name
70
- if (content.includes('{bmad_folder}')) {
71
- content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
70
+ // Replace .bmad placeholder with actual folder name
71
+ if (content.includes('.bmad')) {
72
+ content = content.replaceAll('.bmad', this.bmadFolderName);
72
73
  }
73
74
 
74
75
  // Write to target with replaced content
@@ -106,7 +107,7 @@ class ModuleManager {
106
107
  }
107
108
 
108
109
  /**
109
- * Find all modules in the project by searching for install-config.yaml files
110
+ * Find all modules in the project by searching for module.yaml files
110
111
  * @returns {Array} List of module paths
111
112
  */
112
113
  async findModulesInProject() {
@@ -143,12 +144,14 @@ class ModuleManager {
143
144
  continue;
144
145
  }
145
146
 
146
- // Check if this directory contains a module (install-config.yaml OR custom.yaml)
147
- const installerConfigPath = path.join(fullPath, '_module-installer', 'install-config.yaml');
147
+ // Check if this directory contains a module (module.yaml OR custom.yaml)
148
+ const moduleConfigPath = path.join(fullPath, 'module.yaml');
149
+ const installerConfigPath = path.join(fullPath, '_module-installer', 'module.yaml');
148
150
  const customConfigPath = path.join(fullPath, '_module-installer', 'custom.yaml');
149
151
  const rootCustomConfigPath = path.join(fullPath, 'custom.yaml');
150
152
 
151
153
  if (
154
+ (await fs.pathExists(moduleConfigPath)) ||
152
155
  (await fs.pathExists(installerConfigPath)) ||
153
156
  (await fs.pathExists(customConfigPath)) ||
154
157
  (await fs.pathExists(rootCustomConfigPath))
@@ -175,10 +178,11 @@ class ModuleManager {
175
178
 
176
179
  /**
177
180
  * List all available modules (excluding core which is always installed)
178
- * @returns {Array} List of available modules with metadata
181
+ * @returns {Object} Object with modules array and customModules array
179
182
  */
180
183
  async listAvailable() {
181
184
  const modules = [];
185
+ const customModules = [];
182
186
 
183
187
  // First, scan src/modules (the standard location)
184
188
  if (await fs.pathExists(this.modulesSourcePath)) {
@@ -187,12 +191,17 @@ class ModuleManager {
187
191
  for (const entry of entries) {
188
192
  if (entry.isDirectory()) {
189
193
  const modulePath = path.join(this.modulesSourcePath, entry.name);
190
- // Check for module structure (install-config.yaml OR custom.yaml)
191
- const installerConfigPath = path.join(modulePath, '_module-installer', 'install-config.yaml');
194
+ // Check for module structure (module.yaml OR custom.yaml)
195
+ const moduleConfigPath = path.join(modulePath, 'module.yaml');
196
+ const installerConfigPath = path.join(modulePath, '_module-installer', 'module.yaml');
192
197
  const customConfigPath = path.join(modulePath, '_module-installer', 'custom.yaml');
193
198
 
194
199
  // Skip if this doesn't look like a module
195
- if (!(await fs.pathExists(installerConfigPath)) && !(await fs.pathExists(customConfigPath))) {
200
+ if (
201
+ !(await fs.pathExists(moduleConfigPath)) &&
202
+ !(await fs.pathExists(installerConfigPath)) &&
203
+ !(await fs.pathExists(customConfigPath))
204
+ ) {
196
205
  continue;
197
206
  }
198
207
 
@@ -209,25 +218,50 @@ class ModuleManager {
209
218
  }
210
219
  }
211
220
 
212
- // Then, find all other modules in the project
213
- const otherModulePaths = await this.findModulesInProject();
214
- for (const modulePath of otherModulePaths) {
215
- const moduleName = path.basename(modulePath);
216
- const relativePath = path.relative(getProjectRoot(), modulePath);
221
+ // Then, find all other modules in the project (only if scanning is enabled)
222
+ if (this.scanProjectForModules) {
223
+ const otherModulePaths = await this.findModulesInProject();
224
+ for (const modulePath of otherModulePaths) {
225
+ const moduleName = path.basename(modulePath);
226
+ const relativePath = path.relative(getProjectRoot(), modulePath);
217
227
 
218
- // Skip core module - it's always installed first and not selectable
219
- if (moduleName === 'core') {
220
- continue;
228
+ // Skip core module - it's always installed first and not selectable
229
+ if (moduleName === 'core') {
230
+ continue;
231
+ }
232
+
233
+ const moduleInfo = await this.getModuleInfo(modulePath, moduleName, relativePath);
234
+ if (moduleInfo && !modules.some((m) => m.id === moduleInfo.id) && !customModules.some((m) => m.id === moduleInfo.id)) {
235
+ // Avoid duplicates - skip if we already have this module ID
236
+ if (moduleInfo.isCustom) {
237
+ customModules.push(moduleInfo);
238
+ } else {
239
+ modules.push(moduleInfo);
240
+ }
241
+ }
221
242
  }
222
243
 
223
- const moduleInfo = await this.getModuleInfo(modulePath, moduleName, relativePath);
224
- if (moduleInfo && !modules.some((m) => m.id === moduleInfo.id)) {
225
- // Avoid duplicates - skip if we already have this module ID
226
- modules.push(moduleInfo);
244
+ // Also check for cached custom modules in _cfg/custom/
245
+ if (this.bmadDir) {
246
+ const customCacheDir = path.join(this.bmadDir, '_cfg', 'custom');
247
+ if (await fs.pathExists(customCacheDir)) {
248
+ const cacheEntries = await fs.readdir(customCacheDir, { withFileTypes: true });
249
+ for (const entry of cacheEntries) {
250
+ if (entry.isDirectory()) {
251
+ const cachePath = path.join(customCacheDir, entry.name);
252
+ const moduleInfo = await this.getModuleInfo(cachePath, entry.name, '_cfg/custom');
253
+ if (moduleInfo && !modules.some((m) => m.id === moduleInfo.id) && !customModules.some((m) => m.id === moduleInfo.id)) {
254
+ moduleInfo.isCustom = true;
255
+ moduleInfo.fromCache = true;
256
+ customModules.push(moduleInfo);
257
+ }
258
+ }
259
+ }
260
+ }
227
261
  }
228
262
  }
229
263
 
230
- return modules;
264
+ return { modules, customModules };
231
265
  }
232
266
 
233
267
  /**
@@ -238,13 +272,16 @@ class ModuleManager {
238
272
  * @returns {Object|null} Module info or null if not a valid module
239
273
  */
240
274
  async getModuleInfo(modulePath, defaultName, sourceDescription) {
241
- // Check for module structure (install-config.yaml OR custom.yaml)
242
- const installerConfigPath = path.join(modulePath, '_module-installer', 'install-config.yaml');
275
+ // Check for module structure (module.yaml OR custom.yaml)
276
+ const moduleConfigPath = path.join(modulePath, 'module.yaml');
277
+ const installerConfigPath = path.join(modulePath, '_module-installer', 'module.yaml');
243
278
  const customConfigPath = path.join(modulePath, '_module-installer', 'custom.yaml');
244
279
  const rootCustomConfigPath = path.join(modulePath, 'custom.yaml');
245
280
  let configPath = null;
246
281
 
247
- if (await fs.pathExists(installerConfigPath)) {
282
+ if (await fs.pathExists(moduleConfigPath)) {
283
+ configPath = moduleConfigPath;
284
+ } else if (await fs.pathExists(installerConfigPath)) {
248
285
  configPath = installerConfigPath;
249
286
  } else if (await fs.pathExists(customConfigPath)) {
250
287
  configPath = customConfigPath;
@@ -305,10 +342,11 @@ class ModuleManager {
305
342
  // First, check src/modules
306
343
  const srcModulePath = path.join(this.modulesSourcePath, moduleName);
307
344
  if (await fs.pathExists(srcModulePath)) {
308
- // Check if this looks like a module (has install-config.yaml)
309
- const installerConfigPath = path.join(srcModulePath, '_module-installer', 'install-config.yaml');
345
+ // Check if this looks like a module (has module.yaml)
346
+ const moduleConfigPath = path.join(srcModulePath, 'module.yaml');
347
+ const installerConfigPath = path.join(srcModulePath, '_module-installer', 'module.yaml');
310
348
 
311
- if (await fs.pathExists(installerConfigPath)) {
349
+ if ((await fs.pathExists(moduleConfigPath)) || (await fs.pathExists(installerConfigPath))) {
312
350
  return srcModulePath;
313
351
  }
314
352
 
@@ -330,12 +368,15 @@ class ModuleManager {
330
368
  // Also check by module ID (not just folder name)
331
369
  // Need to read configs to match by ID
332
370
  for (const modulePath of allModulePaths) {
333
- const installerConfigPath = path.join(modulePath, '_module-installer', 'install-config.yaml');
371
+ const moduleConfigPath = path.join(modulePath, 'module.yaml');
372
+ const installerConfigPath = path.join(modulePath, '_module-installer', 'module.yaml');
334
373
  const customConfigPath = path.join(modulePath, '_module-installer', 'custom.yaml');
335
374
  const rootCustomConfigPath = path.join(modulePath, 'custom.yaml');
336
375
 
337
376
  let configPath = null;
338
- if (await fs.pathExists(installerConfigPath)) {
377
+ if (await fs.pathExists(moduleConfigPath)) {
378
+ configPath = moduleConfigPath;
379
+ } else if (await fs.pathExists(installerConfigPath)) {
339
380
  configPath = installerConfigPath;
340
381
  } else if (await fs.pathExists(customConfigPath)) {
341
382
  configPath = customConfigPath;
@@ -350,8 +391,8 @@ class ModuleManager {
350
391
  if (config.code === moduleName) {
351
392
  return modulePath;
352
393
  }
353
- } catch {
354
- // Skip if can't read config
394
+ } catch (error) {
395
+ throw new Error(`Failed to parse module.yaml at ${configPath}: ${error.message}`);
355
396
  }
356
397
  }
357
398
  }
@@ -576,7 +617,7 @@ class ModuleManager {
576
617
  }
577
618
 
578
619
  // Skip _module-installer directory - it's only needed at install time
579
- if (file.startsWith('_module-installer/')) {
620
+ if (file.startsWith('_module-installer/') || file === 'module.yaml') {
580
621
  continue;
581
622
  }
582
623
 
@@ -654,8 +695,8 @@ class ModuleManager {
654
695
 
655
696
  // IMPORTANT: Replace escape sequence and placeholder BEFORE parsing YAML
656
697
  // Otherwise parsing will fail on the placeholder
657
- yamlContent = yamlContent.replaceAll('{*bmad_folder*}', '{bmad_folder}');
658
- yamlContent = yamlContent.replaceAll('{bmad_folder}', this.bmadFolderName);
698
+ yamlContent = yamlContent.replaceAll('.bmad', '.bmad');
699
+ yamlContent = yamlContent.replaceAll('.bmad', this.bmadFolderName);
659
700
 
660
701
  try {
661
702
  // First check if web_bundle exists by parsing
@@ -812,8 +853,13 @@ class ModuleManager {
812
853
  // Compile with customizations if any
813
854
  const { xml } = compileAgent(yamlContent, {}, agentName, relativePath, { config: this.coreConfig });
814
855
 
815
- // Write the compiled MD file
816
- await fs.writeFile(targetMdPath, xml, 'utf8');
856
+ // Replace .bmad placeholder if needed
857
+ if (xml.includes('.bmad') && this.bmadFolderName) {
858
+ const processedXml = xml.replaceAll('.bmad', this.bmadFolderName);
859
+ await fs.writeFile(targetMdPath, processedXml, 'utf8');
860
+ } else {
861
+ await fs.writeFile(targetMdPath, xml, 'utf8');
862
+ }
817
863
 
818
864
  // Copy sidecar files if agent has hasSidecar flag
819
865
  if (hasSidecar) {
@@ -826,7 +872,7 @@ class ModuleManager {
826
872
  const projectDir = path.dirname(bmadDir);
827
873
  const resolvedSidecarFolder = agentSidecarFolder
828
874
  .replaceAll('{project-root}', projectDir)
829
- .replaceAll('{bmad_folder}', path.basename(bmadDir));
875
+ .replaceAll('.bmad', path.basename(bmadDir));
830
876
 
831
877
  // Create sidecar directory for this agent
832
878
  const agentSidecarDir = path.join(resolvedSidecarFolder, agentName);
@@ -984,10 +1030,10 @@ class ModuleManager {
984
1030
  const installWorkflowPath = item['workflow-install']; // Where to copy TO
985
1031
 
986
1032
  // Parse SOURCE workflow path
987
- // Handle both {bmad_folder} placeholder and hardcoded 'bmad'
988
- // Example: {project-root}/{bmad_folder}/bmm/workflows/4-implementation/create-story/workflow.yaml
1033
+ // Handle both .bmad placeholder and hardcoded 'bmad'
1034
+ // Example: {project-root}/.bmad/bmm/workflows/4-implementation/create-story/workflow.yaml
989
1035
  // Or: {project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml
990
- const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
1036
+ const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:\.bmad)\/([^/]+)\/workflows\/(.+)/);
991
1037
  if (!sourceMatch) {
992
1038
  console.warn(chalk.yellow(` Could not parse workflow path: ${sourceWorkflowPath}`));
993
1039
  continue;
@@ -996,9 +1042,9 @@ class ModuleManager {
996
1042
  const [, sourceModule, sourceWorkflowSubPath] = sourceMatch;
997
1043
 
998
1044
  // Parse INSTALL workflow path
999
- // Handle both {bmad_folder} placeholder and hardcoded 'bmad'
1000
- // Example: {project-root}/{bmad_folder}/bmgd/workflows/4-production/create-story/workflow.yaml
1001
- const installMatch = installWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
1045
+ // Handle.bmad
1046
+ // Example: {project-root}/.bmad/bmgd/workflows/4-production/create-story/workflow.yaml
1047
+ const installMatch = installWorkflowPath.match(/\{project-root\}\/(\.bmad)\/([^/]+)\/workflows\/(.+)/);
1002
1048
  if (!installMatch) {
1003
1049
  console.warn(chalk.yellow(` Could not parse workflow-install path: ${installWorkflowPath}`));
1004
1050
  continue;
@@ -1050,9 +1096,9 @@ class ModuleManager {
1050
1096
  async updateWorkflowConfigSource(workflowYamlPath, newModuleName) {
1051
1097
  let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
1052
1098
 
1053
- // Replace config_source: "{project-root}/{bmad_folder}/OLD_MODULE/config.yaml"
1054
- // with config_source: "{project-root}/{bmad_folder}/NEW_MODULE/config.yaml"
1055
- // Note: At this point {bmad_folder} has already been replaced with actual folder name
1099
+ // Replace config_source: "{project-root}/.bmad/OLD_MODULE/config.yaml"
1100
+ // with config_source: "{project-root}/.bmad/NEW_MODULE/config.yaml"
1101
+ // Note: At this point .bmad has already been replaced with actual folder name
1056
1102
  const configSourcePattern = /config_source:\s*["']?\{project-root\}\/[^/]+\/[^/]+\/config\.yaml["']?/g;
1057
1103
  const newConfigSource = `config_source: "{project-root}/${this.bmadFolderName}/${newModuleName}/config.yaml"`;
1058
1104
 
@@ -59,7 +59,7 @@ function buildSimpleActivation(criticalActions = [], menuItems = [], deploymentT
59
59
 
60
60
  // Standard steps
61
61
  activation += ` <step n="${stepNum++}">Load persona from this current agent file (already in context)</step>\n`;
62
- activation += ` <step n="${stepNum++}">Load and read {project-root}/{bmad_folder}/core/config.yaml to get {user_name}, {communication_language}, {output_folder}</step>\n`;
62
+ activation += ` <step n="${stepNum++}">Load and read {project-root}/.bmad/core/config.yaml to get {user_name}, {communication_language}, {output_folder}</step>\n`;
63
63
  activation += ` <step n="${stepNum++}">Remember: user's name is {user_name}</step>\n`;
64
64
 
65
65
  // Agent-specific steps from critical_actions
@@ -119,7 +119,7 @@ function buildSimpleActivation(criticalActions = [], menuItems = [], deploymentT
119
119
  if (usedHandlers.has('workflow')) {
120
120
  activation += ` <handler type="workflow">
121
121
  When menu item has: workflow="path/to/workflow.yaml"
122
- 1. CRITICAL: Always LOAD {project-root}/{bmad_folder}/core/tasks/workflow.xml
122
+ 1. CRITICAL: Always LOAD {project-root}/.bmad/core/tasks/workflow.xml
123
123
  2. Read the complete file - this is the CORE OS for executing BMAD workflows
124
124
  3. Pass the yaml path as 'workflow-config' parameter to those instructions
125
125
  4. Execute workflow.xml instructions precisely following all steps
@@ -150,7 +150,7 @@ function buildSimpleActivation(criticalActions = [], menuItems = [], deploymentT
150
150
  if (usedHandlers.has('validate-workflow')) {
151
151
  activation += ` <handler type="validate-workflow">
152
152
  When menu item has: validate-workflow="path/to/workflow.yaml"
153
- 1. CRITICAL: Always LOAD {project-root}/{bmad_folder}/core/tasks/validate-workflow.xml
153
+ 1. CRITICAL: Always LOAD {project-root}/.bmad/core/tasks/validate-workflow.xml
154
154
  2. Read the complete file - this is the CORE OS for validating BMAD workflows
155
155
  3. Pass the workflow.yaml path as 'workflow' parameter to those instructions
156
156
  4. Pass any checklist.md from the workflow location as 'checklist' parameter if available
@@ -445,17 +445,9 @@ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = ''
445
445
  // Parse YAML
446
446
  const agentYaml = yaml.parse(yamlContent);
447
447
 
448
- // Inject custom agent name into metadata.name if provided
449
- // This is the user's chosen persona name (e.g., "Fred" instead of "Inkwell Von Comitizen")
450
- if (agentName && agentYaml.agent && agentYaml.agent.metadata) {
451
- // Convert kebab-case to title case for the name field
452
- // e.g., "fred-commit-poet" → "Fred Commit Poet"
453
- const titleCaseName = agentName
454
- .split('-')
455
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
456
- .join(' ');
457
- agentYaml.agent.metadata.name = titleCaseName;
458
- }
448
+ // Note: agentName parameter is for UI display only, not for modifying the YAML
449
+ // The persona name (metadata.name) should always come from the YAML file
450
+ // We should NEVER modify metadata.name as it's part of the agent's identity
459
451
 
460
452
  // Extract install_config
461
453
  const installConfig = extractInstallConfig(agentYaml);
@@ -242,7 +242,8 @@ function installAgent(agentInfo, answers, targetPath, options = {}) {
242
242
  const { xml, metadata, processedYaml } = compileAgent(fs.readFileSync(agentInfo.yamlFile, 'utf8'), answers);
243
243
 
244
244
  // Determine target agent folder name
245
- const agentFolderName = metadata.name ? metadata.name.toLowerCase().replaceAll(/\s+/g, '-') : agentInfo.name;
245
+ // Use the folder name from agentInfo, NOT the persona name from metadata
246
+ const agentFolderName = agentInfo.name;
246
247
 
247
248
  const agentTargetDir = path.join(targetPath, agentFolderName);
248
249
 
@@ -272,7 +273,7 @@ function installAgent(agentInfo, answers, targetPath, options = {}) {
272
273
  // Resolve path variables
273
274
  const resolvedSidecarFolder = agentSidecarFolder
274
275
  .replaceAll('{project-root}', options.projectRoot || process.cwd())
275
- .replaceAll('{bmad_folder}', options.bmadFolder || '.bmad');
276
+ .replaceAll('.bmad', options.bmadFolder || '.bmad');
276
277
 
277
278
  // Create sidecar directory for this agent
278
279
  const agentSidecarDir = path.join(resolvedSidecarFolder, agentFolderName);
@@ -406,7 +407,7 @@ function detectBmadProject(targetPath) {
406
407
 
407
408
  // Walk up directory tree looking for BMAD installation
408
409
  while (checkPath !== root) {
409
- const possibleNames = ['.bmad', 'bmad'];
410
+ const possibleNames = ['.bmad'];
410
411
  for (const name of possibleNames) {
411
412
  const bmadFolder = path.join(checkPath, name);
412
413
  const cfgFolder = path.join(bmadFolder, '_cfg');
@@ -3,6 +3,7 @@ const boxen = require('boxen');
3
3
  const wrapAnsi = require('wrap-ansi');
4
4
  const figlet = require('figlet');
5
5
  const path = require('node:path');
6
+ const os = require('node:os');
6
7
 
7
8
  const CLIUtils = {
8
9
  /**
@@ -84,8 +85,8 @@ const CLIUtils = {
84
85
  /**
85
86
  * Display module configuration header
86
87
  * @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
88
+ * @param {string} header - Custom header from module.yaml
89
+ * @param {string} subheader - Custom subheader from module.yaml
89
90
  */
90
91
  displayModuleConfigHeader(moduleName, header = null, subheader = null) {
91
92
  // Simple blue banner with custom header/subheader if provided
@@ -100,8 +101,8 @@ const CLIUtils = {
100
101
  /**
101
102
  * Display module with no custom configuration
102
103
  * @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
104
+ * @param {string} header - Custom header from module.yaml
105
+ * @param {string} subheader - Custom subheader from module.yaml
105
106
  */
106
107
  displayModuleNoConfig(moduleName, header = null, subheader = null) {
107
108
  // Show full banner with header/subheader, just like modules with config
@@ -205,6 +206,22 @@ const CLIUtils = {
205
206
  // No longer clear screen or show boxes - just a simple completion message
206
207
  // This is deprecated but kept for backwards compatibility
207
208
  },
209
+
210
+ /**
211
+ * Expand path with ~ expansion
212
+ * @param {string} inputPath - Path to expand
213
+ * @returns {string} Expanded path
214
+ */
215
+ expandPath(inputPath) {
216
+ if (!inputPath) return inputPath;
217
+
218
+ // Expand ~ to home directory
219
+ if (inputPath.startsWith('~')) {
220
+ return path.join(os.homedir(), inputPath.slice(1));
221
+ }
222
+
223
+ return inputPath;
224
+ },
208
225
  };
209
226
 
210
227
  module.exports = { CLIUtils };