bmad-method 6.0.0-alpha.15 → 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 (392) hide show
  1. package/.coderabbit.yaml +1 -1
  2. package/CHANGELOG.md +32 -1
  3. package/docs/agent-customization-guide.md +7 -7
  4. package/docs/ide-info/crush.md +1 -1
  5. package/docs/ide-info/cursor.md +7 -7
  6. package/docs/ide-info/iflow.md +3 -3
  7. package/docs/ide-info/opencode.md +1 -1
  8. package/docs/installers-bundlers/ide-injections.md +2 -2
  9. package/docs/installers-bundlers/installers-modules-platforms-reference.md +23 -23
  10. package/docs/v4-to-v6-upgrade.md +10 -10
  11. package/docs/web-bundles-gemini-gpt-guide.md +1 -1
  12. package/package.json +1 -1
  13. package/src/core/agents/bmad-master.agent.yaml +5 -5
  14. package/src/core/agents/bmad-web-orchestrator.agent.xml +6 -6
  15. package/src/core/module.yaml +0 -7
  16. package/src/core/resources/excalidraw/README.md +4 -4
  17. package/src/core/tasks/advanced-elicitation.xml +3 -3
  18. package/src/core/tasks/index-docs.xml +1 -1
  19. package/src/core/tasks/validate-workflow.xml +1 -1
  20. package/src/core/tasks/workflow.xml +4 -4
  21. package/src/core/tools/shard-doc.xml +1 -1
  22. package/src/core/workflows/brainstorming/workflow.md +2 -2
  23. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +2 -2
  24. package/src/core/workflows/party-mode/workflow.md +4 -4
  25. package/src/modules/bmb/README.md +2 -2
  26. package/src/modules/bmb/agents/bmad-builder.agent.yaml +15 -15
  27. package/src/modules/bmb/docs/agents/agent-compilation.md +2 -2
  28. package/src/modules/bmb/docs/agents/agent-menu-patterns.md +22 -22
  29. package/src/modules/bmb/docs/agents/expert-agent-architecture.md +1 -1
  30. package/src/modules/bmb/docs/agents/index.md +1 -1
  31. package/src/modules/bmb/docs/agents/module-agent-architecture.md +50 -51
  32. package/src/modules/bmb/docs/agents/understanding-agent-types.md +3 -3
  33. package/src/modules/bmb/docs/workflows/architecture.md +1 -1
  34. package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +3 -3
  35. package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +1 -1
  36. package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +1 -1
  37. package/src/modules/bmb/docs/workflows/templates/step-file.md +3 -3
  38. package/src/modules/bmb/docs/workflows/templates/step-template.md +3 -3
  39. package/src/modules/bmb/docs/workflows/templates/workflow-template.md +2 -2
  40. package/src/modules/bmb/docs/workflows/templates/workflow.md +1 -1
  41. package/src/modules/bmb/module.yaml +0 -1
  42. package/src/modules/bmb/reference/agents/module-examples/README.md +1 -1
  43. package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +5 -5
  44. package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
  45. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
  46. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
  47. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
  48. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
  49. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
  50. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
  51. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
  52. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
  53. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +1 -1
  54. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +6 -6
  55. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
  56. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
  57. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
  58. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
  59. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
  60. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
  61. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
  62. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
  63. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
  64. package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +5 -5
  65. package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +4 -4
  66. package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +4 -4
  67. package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +4 -4
  68. package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +7 -7
  69. package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +3 -3
  70. package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +4 -4
  71. package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +4 -4
  72. package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +3 -3
  73. package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +4 -4
  74. package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +3 -3
  75. package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +3 -3
  76. package/src/modules/bmb/workflows/create-agent/workflow.md +13 -13
  77. package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +2 -2
  78. package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +4 -4
  79. package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +4 -4
  80. package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +3 -3
  81. package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +4 -4
  82. package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +6 -6
  83. package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +3 -3
  84. package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +4 -4
  85. package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +4 -4
  86. package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +3 -3
  87. package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +4 -4
  88. package/src/modules/bmb/workflows/create-module/templates/agent.template.md +7 -7
  89. package/src/modules/bmb/workflows/create-module/templates/module.template.yaml +1 -1
  90. package/src/modules/bmb/workflows/create-module/workflow.md +2 -2
  91. package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +2 -2
  92. package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +5 -5
  93. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +4 -4
  94. package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +3 -3
  95. package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +3 -3
  96. package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +10 -10
  97. package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +12 -12
  98. package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +3 -3
  99. package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +1 -1
  100. package/src/modules/bmb/workflows/create-workflow/workflow.md +1 -1
  101. package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +3 -3
  102. package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +13 -13
  103. package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +5 -5
  104. package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +3 -3
  105. package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +5 -5
  106. package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
  107. package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +4 -4
  108. package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +3 -3
  109. package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +6 -6
  110. package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +3 -3
  111. package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +3 -3
  112. package/src/modules/bmb/workflows/edit-workflow/workflow.md +1 -1
  113. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +3 -3
  114. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +5 -5
  115. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +6 -6
  116. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +4 -4
  117. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +4 -4
  118. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +4 -4
  119. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +4 -4
  120. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +3 -3
  121. package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
  122. package/src/modules/bmb/workflows-legacy/edit-module/README.md +2 -2
  123. package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +2 -2
  124. package/src/modules/bmb/workflows-legacy/edit-module/instructions.md +4 -4
  125. package/src/modules/bmb/workflows-legacy/edit-module/workflow.yaml +10 -10
  126. package/src/modules/bmb/workflows-legacy/module-brief/README.md +2 -2
  127. package/src/modules/bmb/workflows-legacy/module-brief/instructions.md +2 -2
  128. package/src/modules/bmb/workflows-legacy/module-brief/workflow.yaml +4 -4
  129. package/src/modules/bmgd/README.md +1 -1
  130. package/src/modules/bmgd/agents/game-architect.agent.yaml +6 -6
  131. package/src/modules/bmgd/agents/game-designer.agent.yaml +7 -7
  132. package/src/modules/bmgd/agents/game-dev.agent.yaml +9 -9
  133. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +21 -21
  134. package/src/modules/bmgd/module.yaml +0 -1
  135. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +1 -1
  136. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +9 -9
  137. package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +1 -1
  138. package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +8 -8
  139. package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +4 -4
  140. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +30 -30
  141. package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +1 -1
  142. package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +5 -5
  143. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +1 -1
  144. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +2 -2
  145. package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +2 -2
  146. package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +2 -2
  147. package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
  148. package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +2 -2
  149. package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +2 -2
  150. package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +2 -2
  151. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +2 -2
  152. package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +2 -2
  153. package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +2 -2
  154. package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +1 -1
  155. package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +2 -2
  156. package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +2 -2
  157. package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +2 -2
  158. package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +3 -3
  159. package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +2 -2
  160. package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +2 -2
  161. package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +1 -1
  162. package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +1 -1
  163. package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +2 -2
  164. package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +2 -2
  165. package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +1 -1
  166. package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +2 -2
  167. package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +1 -1
  168. package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +2 -2
  169. package/src/modules/bmm/agents/analyst.agent.yaml +8 -8
  170. package/src/modules/bmm/agents/architect.agent.yaml +8 -8
  171. package/src/modules/bmm/agents/dev.agent.yaml +3 -3
  172. package/src/modules/bmm/agents/pm.agent.yaml +8 -8
  173. package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +5 -5
  174. package/src/modules/bmm/agents/sm.agent.yaml +9 -9
  175. package/src/modules/bmm/agents/tea.agent.yaml +13 -13
  176. package/src/modules/bmm/agents/tech-writer.agent.yaml +9 -9
  177. package/src/modules/bmm/agents/ux-designer.agent.yaml +6 -6
  178. package/src/modules/bmm/docs/README.md +0 -25
  179. package/src/modules/bmm/docs/agents-guide.md +4 -4
  180. package/src/modules/bmm/docs/brownfield-guide.md +4 -4
  181. package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
  182. package/src/modules/bmm/docs/faq.md +1 -1
  183. package/src/modules/bmm/docs/party-mode.md +3 -3
  184. package/src/modules/bmm/docs/quick-start.md +1 -1
  185. package/src/modules/bmm/docs/test-architecture.md +3 -3
  186. package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
  187. package/src/modules/bmm/docs/workflows-implementation.md +0 -100
  188. package/src/modules/bmm/module.yaml +1 -2
  189. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01-init.md +1 -1
  190. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01b-continue.md +1 -1
  191. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +3 -3
  192. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +3 -3
  193. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +3 -3
  194. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +3 -3
  195. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-06-complete.md +5 -3
  196. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +2 -2
  197. package/src/modules/bmm/workflows/1-analysis/research/workflow.md +2 -2
  198. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +4 -4
  199. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +4 -4
  200. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +4 -4
  201. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +4 -4
  202. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +4 -4
  203. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +4 -4
  204. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +4 -4
  205. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +4 -4
  206. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +4 -4
  207. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +4 -4
  208. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +4 -4
  209. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +4 -4
  210. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +2 -2
  211. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +1 -1
  212. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +1 -1
  213. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +3 -3
  214. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +7 -7
  215. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +8 -8
  216. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +12 -12
  217. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +12 -12
  218. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +10 -10
  219. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +7 -7
  220. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +9 -9
  221. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +9 -9
  222. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +1 -1
  223. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +1 -1
  224. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-02-context.md +4 -4
  225. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +4 -4
  226. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +4 -4
  227. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md +4 -4
  228. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md +4 -4
  229. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md +4 -4
  230. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md +1 -1
  231. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +2 -2
  232. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +1 -1
  233. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +1 -1
  234. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +1 -1
  235. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +1 -1
  236. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +2 -2
  237. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +1 -1
  238. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +1 -1
  239. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +6 -6
  240. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +1 -1
  241. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +2 -2
  242. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +1 -1
  243. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +1 -1
  244. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +1 -1
  245. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +2 -2
  246. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
  247. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +2 -2
  248. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +2 -2
  249. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +2 -2
  250. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +2 -2
  251. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +2 -2
  252. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +1 -1
  253. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +2 -2
  254. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +2 -2
  255. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +3 -3
  256. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +2 -2
  257. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -2
  258. package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +2 -2
  259. package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +2 -2
  260. package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +5 -5
  261. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +7 -7
  262. package/src/modules/bmm/workflows/diagrams/create-dataflow/instructions.md +1 -1
  263. package/src/modules/bmm/workflows/diagrams/create-dataflow/workflow.yaml +5 -5
  264. package/src/modules/bmm/workflows/diagrams/create-diagram/instructions.md +2 -2
  265. package/src/modules/bmm/workflows/diagrams/create-diagram/workflow.yaml +5 -5
  266. package/src/modules/bmm/workflows/diagrams/create-flowchart/instructions.md +2 -2
  267. package/src/modules/bmm/workflows/diagrams/create-flowchart/workflow.yaml +5 -5
  268. package/src/modules/bmm/workflows/diagrams/create-wireframe/instructions.md +1 -1
  269. package/src/modules/bmm/workflows/diagrams/create-wireframe/workflow.yaml +5 -5
  270. package/src/modules/bmm/workflows/document-project/instructions.md +5 -5
  271. package/src/modules/bmm/workflows/document-project/workflow.yaml +2 -2
  272. package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +5 -5
  273. package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
  274. package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +2 -2
  275. package/src/modules/bmm/workflows/generate-project-context/workflow.md +2 -2
  276. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +2 -2
  277. package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -2
  278. package/src/modules/bmm/workflows/testarch/automate/instructions.md +2 -2
  279. package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -2
  280. package/src/modules/bmm/workflows/testarch/ci/instructions.md +1 -1
  281. package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -2
  282. package/src/modules/bmm/workflows/testarch/framework/instructions.md +3 -3
  283. package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -2
  284. package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
  285. package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -2
  286. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +3 -3
  287. package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +1 -1
  288. package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +2 -2
  289. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
  290. package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -2
  291. package/src/modules/bmm/workflows/testarch/trace/instructions.md +6 -6
  292. package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -2
  293. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +1 -1
  294. package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +4 -4
  295. package/src/modules/bmm/workflows/workflow-status/instructions.md +3 -3
  296. package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
  297. package/src/modules/bmm/workflows/workflow-status/workflow.yaml +2 -2
  298. package/src/modules/cis/README.md +1 -1
  299. package/src/modules/cis/agents/README.md +1 -1
  300. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +4 -4
  301. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +4 -4
  302. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +4 -4
  303. package/src/modules/cis/agents/innovation-strategist.agent.yaml +4 -4
  304. package/src/modules/cis/agents/presentation-master.agent.yaml +3 -3
  305. package/src/modules/cis/agents/storyteller.agent.yaml +4 -4
  306. package/src/modules/cis/module.yaml +0 -1
  307. package/src/modules/cis/workflows/README.md +1 -1
  308. package/src/modules/cis/workflows/design-thinking/instructions.md +2 -2
  309. package/src/modules/cis/workflows/design-thinking/workflow.yaml +7 -7
  310. package/src/modules/cis/workflows/innovation-strategy/instructions.md +2 -2
  311. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +7 -7
  312. package/src/modules/cis/workflows/problem-solving/instructions.md +2 -2
  313. package/src/modules/cis/workflows/problem-solving/workflow.yaml +7 -7
  314. package/src/modules/cis/workflows/storytelling/instructions.md +2 -2
  315. package/src/modules/cis/workflows/storytelling/workflow.yaml +7 -7
  316. package/src/utility/models/agent-activation-ide.xml +3 -3
  317. package/src/utility/models/agent-activation-web.xml +3 -3
  318. package/src/utility/models/fragments/activation-steps.xml +1 -1
  319. package/src/utility/models/fragments/handler-validate-workflow.xml +1 -1
  320. package/src/utility/models/fragments/handler-workflow.xml +1 -1
  321. package/src/utility/models/fragments/web-bundle-activation-steps.xml +3 -3
  322. package/tools/cli/README.md +19 -19
  323. package/tools/cli/bundlers/web-bundler.js +23 -33
  324. package/tools/cli/commands/build.js +5 -5
  325. package/tools/cli/installers/lib/core/config-collector.js +19 -14
  326. package/tools/cli/installers/lib/core/custom-module-cache.js +18 -6
  327. package/tools/cli/installers/lib/core/installer.js +104 -109
  328. package/tools/cli/installers/lib/core/manifest-generator.js +1 -1
  329. package/tools/cli/installers/lib/custom/handler.js +1 -4
  330. package/tools/cli/installers/lib/ide/_base-ide.js +14 -14
  331. package/tools/cli/installers/lib/ide/gemini.js +4 -4
  332. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +2 -2
  333. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +3 -3
  334. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
  335. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +3 -3
  336. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +3 -3
  337. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +1 -1
  338. package/tools/cli/installers/lib/modules/manager.js +24 -24
  339. package/tools/cli/lib/agent/compiler.js +3 -3
  340. package/tools/cli/lib/agent/installer.js +2 -2
  341. package/tools/cli/lib/ui.js +234 -238
  342. package/tools/cli/regenerate-manifests.js +3 -4
  343. package/tools/migrate-custom-module-paths.js +1 -1
  344. package/example-custom-content/README.md +0 -8
  345. package/example-custom-content/agents/commit-poet/commit-poet.agent.yaml +0 -129
  346. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/instructions.md +0 -70
  347. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +0 -111
  348. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +0 -70
  349. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +0 -114
  350. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +0 -134
  351. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +0 -161
  352. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +0 -103
  353. package/example-custom-content/agents/toolsmith/toolsmith-sidecar/memories.md +0 -17
  354. package/example-custom-content/agents/toolsmith/toolsmith.agent.yaml +0 -109
  355. package/example-custom-content/module.yaml +0 -4
  356. package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +0 -168
  357. package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +0 -155
  358. package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +0 -89
  359. package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +0 -36
  360. package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +0 -36
  361. package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +0 -36
  362. package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +0 -36
  363. package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +0 -36
  364. package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +0 -36
  365. package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +0 -36
  366. package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +0 -36
  367. package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +0 -150
  368. package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +0 -1
  369. package/example-custom-content/workflows/quiz-master/workflow.md +0 -54
  370. package/example-custom-content/workflows/wassup/workflow.md +0 -26
  371. package/example-custom-module/mwm/README.md +0 -9
  372. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +0 -47
  373. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +0 -17
  374. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +0 -151
  375. package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +0 -138
  376. package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +0 -138
  377. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +0 -13
  378. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +0 -30
  379. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +0 -13
  380. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +0 -17
  381. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +0 -125
  382. package/example-custom-module/mwm/module.yaml +0 -28
  383. package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +0 -31
  384. package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +0 -45
  385. package/example-custom-module/mwm/workflows/crisis-support/README.md +0 -31
  386. package/example-custom-module/mwm/workflows/crisis-support/workflow.md +0 -45
  387. package/example-custom-module/mwm/workflows/daily-checkin/README.md +0 -32
  388. package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +0 -45
  389. package/example-custom-module/mwm/workflows/guided-meditation/README.md +0 -31
  390. package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +0 -45
  391. package/example-custom-module/mwm/workflows/wellness-journal/README.md +0 -31
  392. package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +0 -45
@@ -14,7 +14,7 @@
14
14
  * @architecture Orchestrator pattern - coordinates Detector, ModuleManager, IdeManager, and file operations to build complete BMAD installation
15
15
  * @dependencies fs-extra, ora, chalk, detector.js, module-manager.js, ide-manager.js, config.js
16
16
  * @entrypoints Called by install.js command via installer.install(config)
17
- * @patterns Injection point processing (AgentVibes), placeholder replacement ({bmad_folder}), module dependency resolution
17
+ * @patterns Injection point processing (AgentVibes), placeholder replacement (.bmad), module dependency resolution
18
18
  * @related GitHub AgentVibes#34 (injection points), ui.js (user prompts), copyFileWithPlaceholderReplacement()
19
19
  */
20
20
 
@@ -39,6 +39,7 @@ const { CLIUtils } = require('../../../lib/cli-utils');
39
39
  const { ManifestGenerator } = require('./manifest-generator');
40
40
  const { IdeConfigManager } = require('./ide-config-manager');
41
41
  const { replaceAgentSidecarFolders } = require('./post-install-sidecar-replacement');
42
+ const { CustomHandler } = require('../custom/handler');
42
43
 
43
44
  class Installer {
44
45
  constructor() {
@@ -66,7 +67,7 @@ class Installer {
66
67
  // Check if project directory exists
67
68
  if (!(await fs.pathExists(projectDir))) {
68
69
  // Project doesn't exist yet, return default
69
- return path.join(projectDir, 'bmad');
70
+ return path.join(projectDir, '.bmad');
70
71
  }
71
72
 
72
73
  // V6+ strategy: Look for ANY directory with _cfg/manifest.yaml
@@ -88,13 +89,13 @@ class Installer {
88
89
 
89
90
  // No V6+ installation found, return default
90
91
  // This will be used for new installations
91
- return path.join(projectDir, 'bmad');
92
+ return path.join(projectDir, '.bmad');
92
93
  }
93
94
 
94
95
  /**
95
96
  * @function copyFileWithPlaceholderReplacement
96
97
  * @intent Copy files from BMAD source to installation directory with dynamic content transformation
97
- * @why Enables installation-time customization: {bmad_folder} replacement + optional AgentVibes TTS injection
98
+ * @why Enables installation-time customization: .bmad replacement + optional AgentVibes TTS injection
98
99
  * @param {string} sourcePath - Absolute path to source file in BMAD repository
99
100
  * @param {string} targetPath - Absolute path to destination file in user's project
100
101
  * @param {string} bmadFolderName - User's chosen bmad folder name (default: 'bmad')
@@ -104,11 +105,6 @@ class Installer {
104
105
  * @calledby installCore(), installModule(), IDE installers during file vendoring
105
106
  * @calls processTTSInjectionPoints(), fs.readFile(), fs.writeFile(), fs.copy()
106
107
  *
107
- * AI NOTE: This is the core transformation pipeline for ALL BMAD installation file copies.
108
- * It performs two transformations in sequence:
109
- * 1. {bmad_folder} → user's custom folder name (e.g., ".bmad" or "bmad")
110
- * 2. <!-- TTS_INJECTION:* --> → TTS bash calls (if enabled) OR stripped (if disabled)
111
- *
112
108
  * The injection point processing enables loose coupling between BMAD and TTS providers:
113
109
  * - BMAD source contains injection markers (not actual TTS code)
114
110
  * - At install-time, markers are replaced OR removed based on user preference
@@ -139,16 +135,6 @@ class Installer {
139
135
  // Read the file content
140
136
  let content = await fs.readFile(sourcePath, 'utf8');
141
137
 
142
- // Replace {bmad_folder} placeholder with actual folder name
143
- if (content.includes('{bmad_folder}')) {
144
- content = content.replaceAll('{bmad_folder}', bmadFolderName);
145
- }
146
-
147
- // Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
148
- if (content.includes('{*bmad_folder*}')) {
149
- content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
150
- }
151
-
152
138
  // Process AgentVibes injection points (pass targetPath for tracking)
153
139
  content = this.processTTSInjectionPoints(content, targetPath);
154
140
 
@@ -407,7 +393,10 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
407
393
  * @param {string[]} config.ides - IDEs to configure
408
394
  * @param {boolean} config.skipIde - Skip IDE configuration
409
395
  */
410
- async install(config) {
396
+ async install(originalConfig) {
397
+ // Clone config to avoid mutating the caller's object
398
+ const config = { ...originalConfig };
399
+
411
400
  // Display BMAD logo
412
401
  CLIUtils.displayLogo();
413
402
 
@@ -435,12 +424,56 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
435
424
  // Quick update already collected all configs, use them directly
436
425
  moduleConfigs = this.configCollector.collectedConfig;
437
426
  } else {
427
+ // Build custom module paths map from customContent
428
+ const customModulePaths = new Map();
429
+
430
+ // Handle selectedFiles (from existing install path or manual directory input)
431
+ if (config.customContent && config.customContent.selected && config.customContent.selectedFiles) {
432
+ const customHandler = new CustomHandler();
433
+ for (const customFile of config.customContent.selectedFiles) {
434
+ const customInfo = await customHandler.getCustomInfo(customFile, path.resolve(config.directory));
435
+ if (customInfo && customInfo.id) {
436
+ customModulePaths.set(customInfo.id, customInfo.path);
437
+ }
438
+ }
439
+ }
440
+
441
+ // Handle cachedModules (from new install path where modules are cached)
442
+ // Only include modules that were actually selected for installation
443
+ if (config.customContent && config.customContent.cachedModules) {
444
+ // Get selected cached module IDs (if available)
445
+ const selectedCachedIds = config.customContent.selectedCachedModules || [];
446
+ // If no selection info, include all cached modules (for backward compatibility)
447
+ const shouldIncludeAll = selectedCachedIds.length === 0 && config.customContent.selected;
448
+
449
+ for (const cachedModule of config.customContent.cachedModules) {
450
+ // For cached modules, the path is the cachePath which contains the module.yaml
451
+ if (
452
+ cachedModule.id &&
453
+ cachedModule.cachePath && // Include if selected or if we should include all
454
+ (shouldIncludeAll || selectedCachedIds.includes(cachedModule.id))
455
+ ) {
456
+ customModulePaths.set(cachedModule.id, cachedModule.cachePath);
457
+ }
458
+ }
459
+ }
460
+
461
+ // Get list of all modules including custom modules
462
+ const allModulesForConfig = [...(config.modules || [])];
463
+ for (const [moduleId] of customModulePaths) {
464
+ if (!allModulesForConfig.includes(moduleId)) {
465
+ allModulesForConfig.push(moduleId);
466
+ }
467
+ }
468
+
438
469
  // Regular install - collect configurations (core was already collected in UI.promptInstall if interactive)
439
- moduleConfigs = await this.configCollector.collectAllConfigurations(config.modules || [], path.resolve(config.directory));
470
+ moduleConfigs = await this.configCollector.collectAllConfigurations(allModulesForConfig, path.resolve(config.directory), {
471
+ customModulePaths,
472
+ });
440
473
  }
441
474
 
442
- // Get bmad_folder from config (default to 'bmad' for backwards compatibility)
443
- const bmadFolderName = moduleConfigs.core && moduleConfigs.core.bmad_folder ? moduleConfigs.core.bmad_folder : 'bmad';
475
+ // Always use .bmad as the folder name
476
+ const bmadFolderName = '.bmad';
444
477
  this.bmadFolderName = bmadFolderName; // Store for use in other methods
445
478
 
446
479
  // Store AgentVibes configuration for injection point processing
@@ -459,7 +492,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
459
492
  // Resolve target directory (path.resolve handles platform differences)
460
493
  const projectDir = path.resolve(config.directory);
461
494
 
462
- // Check if bmad_folder has changed from existing installation (only if project dir exists)
463
495
  let existingBmadDir = null;
464
496
  let existingBmadFolderName = null;
465
497
 
@@ -468,54 +500,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
468
500
  existingBmadFolderName = path.basename(existingBmadDir);
469
501
  }
470
502
 
471
- const targetBmadDir = path.join(projectDir, bmadFolderName);
472
-
473
- // If bmad_folder changed during update/upgrade, back up old folder and do fresh install
474
- if (existingBmadDir && (await fs.pathExists(existingBmadDir)) && existingBmadFolderName !== bmadFolderName) {
475
- spinner.stop();
476
- console.log(chalk.yellow(`\n⚠️ bmad_folder has changed: ${existingBmadFolderName} → ${bmadFolderName}`));
477
- console.log(chalk.yellow('This will result in a fresh installation to the new folder.'));
478
-
479
- const inquirer = require('inquirer');
480
- const { confirmFreshInstall } = await inquirer.prompt([
481
- {
482
- type: 'confirm',
483
- name: 'confirmFreshInstall',
484
- message: chalk.cyan('Proceed with fresh install? (Your old folder will be backed up)'),
485
- default: true,
486
- },
487
- ]);
488
-
489
- if (!confirmFreshInstall) {
490
- console.log(chalk.yellow('Installation cancelled.'));
491
- return { success: false, cancelled: true };
492
- }
493
-
494
- spinner.start('Backing up existing installation...');
495
-
496
- // Find a unique backup name
497
- let backupDir = `${existingBmadDir}-bak`;
498
- let counter = 1;
499
- while (await fs.pathExists(backupDir)) {
500
- backupDir = `${existingBmadDir}-bak-${counter}`;
501
- counter++;
502
- }
503
-
504
- // Rename the old folder to backup
505
- await fs.move(existingBmadDir, backupDir);
506
-
507
- spinner.succeed(`Backed up ${existingBmadFolderName} → ${path.basename(backupDir)}`);
508
- console.log(chalk.cyan('\n📋 Important:'));
509
- console.log(chalk.dim(` - Your old installation has been backed up to: ${path.basename(backupDir)}`));
510
- console.log(chalk.dim(` - If you had custom agents or configurations, copy them from:`));
511
- console.log(chalk.dim(` ${path.basename(backupDir)}/_cfg/`));
512
- console.log(chalk.dim(` - To the new location:`));
513
- console.log(chalk.dim(` ${bmadFolderName}/_cfg/`));
514
- console.log('');
515
-
516
- spinner.start('Starting fresh installation...');
517
- }
518
-
519
503
  // Create a project directory if it doesn't exist (user already confirmed)
520
504
  if (!(await fs.pathExists(projectDir))) {
521
505
  spinner.text = 'Creating installation directory...';
@@ -792,9 +776,8 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
792
776
  // Regular custom content from user input (non-cached)
793
777
  if (finalCustomContent && finalCustomContent.selected && finalCustomContent.selectedFiles) {
794
778
  // Add custom modules to the installation list
779
+ const customHandler = new CustomHandler();
795
780
  for (const customFile of finalCustomContent.selectedFiles) {
796
- const { CustomHandler } = require('../custom/handler');
797
- const customHandler = new CustomHandler();
798
781
  const customInfo = await customHandler.getCustomInfo(customFile, projectDir);
799
782
  if (customInfo && customInfo.id) {
800
783
  allModules.push(customInfo.id);
@@ -884,7 +867,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
884
867
 
885
868
  // Finally check regular custom content
886
869
  if (!isCustomModule && finalCustomContent && finalCustomContent.selected && finalCustomContent.selectedFiles) {
887
- const { CustomHandler } = require('../custom/handler');
888
870
  const customHandler = new CustomHandler();
889
871
  for (const customFile of finalCustomContent.selectedFiles) {
890
872
  const info = await customHandler.getCustomInfo(customFile, projectDir);
@@ -898,17 +880,19 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
898
880
 
899
881
  if (isCustomModule && customInfo) {
900
882
  // Install custom module using CustomHandler but as a proper module
901
- const { CustomHandler } = require('../custom/handler');
902
883
  const customHandler = new CustomHandler();
903
884
 
904
885
  // Install to module directory instead of custom directory
905
886
  const moduleTargetPath = path.join(bmadDir, moduleName);
906
887
  await fs.ensureDir(moduleTargetPath);
907
888
 
889
+ // Get collected config for this custom module (from module.yaml prompts)
890
+ const collectedModuleConfig = moduleConfigs[moduleName] || {};
891
+
908
892
  const result = await customHandler.install(
909
893
  customInfo.path,
910
894
  path.join(bmadDir, 'temp-custom'),
911
- { ...config.coreConfig, ...customInfo.config, _bmadDir: bmadDir },
895
+ { ...config.coreConfig, ...customInfo.config, ...collectedModuleConfig, _bmadDir: bmadDir },
912
896
  (filePath) => {
913
897
  // Track installed files with correct path
914
898
  const relativePath = path.relative(path.join(bmadDir, 'temp-custom'), filePath);
@@ -924,23 +908,45 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
924
908
  if (await fs.pathExists(customDir)) {
925
909
  // Move contents to module directory
926
910
  const items = await fs.readdir(customDir);
927
- for (const item of items) {
928
- const srcPath = path.join(customDir, item);
929
- const destPath = path.join(moduleTargetPath, item);
911
+ const movedItems = [];
912
+ try {
913
+ for (const item of items) {
914
+ const srcPath = path.join(customDir, item);
915
+ const destPath = path.join(moduleTargetPath, item);
930
916
 
931
- // If destination exists, remove it first (or we could merge)
932
- if (await fs.pathExists(destPath)) {
933
- await fs.remove(destPath);
934
- }
917
+ // If destination exists, remove it first (or we could merge)
918
+ if (await fs.pathExists(destPath)) {
919
+ await fs.remove(destPath);
920
+ }
935
921
 
936
- await fs.move(srcPath, destPath);
922
+ await fs.move(srcPath, destPath);
923
+ movedItems.push({ src: srcPath, dest: destPath });
924
+ }
925
+ } catch (moveError) {
926
+ // Rollback: restore any successfully moved items
927
+ for (const moved of movedItems) {
928
+ try {
929
+ await fs.move(moved.dest, moved.src);
930
+ } catch {
931
+ // Best-effort rollback - log if it fails
932
+ console.error(`Failed to rollback ${moved.dest} during cleanup`);
933
+ }
934
+ }
935
+ throw new Error(`Failed to move custom module files: ${moveError.message}`);
937
936
  }
938
937
  }
939
- await fs.remove(tempCustomPath);
938
+ try {
939
+ await fs.remove(tempCustomPath);
940
+ } catch (cleanupError) {
941
+ // Non-fatal: temp directory cleanup failed but files were moved successfully
942
+ console.warn(`Warning: Could not clean up temp directory: ${cleanupError.message}`);
943
+ }
940
944
  }
941
945
 
942
- // Create module config
943
- await this.generateModuleConfigs(bmadDir, { [moduleName]: { ...config.coreConfig, ...customInfo.config } });
946
+ // Create module config (include collected config from module.yaml prompts)
947
+ await this.generateModuleConfigs(bmadDir, {
948
+ [moduleName]: { ...config.coreConfig, ...customInfo.config, ...collectedModuleConfig },
949
+ });
944
950
 
945
951
  // Store custom module info for later manifest update
946
952
  if (!config._customModulesToTrack) {
@@ -1016,9 +1022,8 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
1016
1022
  config.customContent.selectedFiles
1017
1023
  ) {
1018
1024
  // Filter out custom modules that were already installed
1025
+ const customHandler = new CustomHandler();
1019
1026
  for (const customFile of config.customContent.selectedFiles) {
1020
- const { CustomHandler } = require('../custom/handler');
1021
- const customHandler = new CustomHandler();
1022
1027
  const customInfo = await customHandler.getCustomInfo(customFile, projectDir);
1023
1028
 
1024
1029
  // Skip if this was installed as a module
@@ -1030,7 +1035,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
1030
1035
 
1031
1036
  if (remainingCustomContent.length > 0) {
1032
1037
  spinner.start('Installing remaining custom content...');
1033
- const { CustomHandler } = require('../custom/handler');
1034
1038
  const customHandler = new CustomHandler();
1035
1039
 
1036
1040
  // Use the remaining files
@@ -1864,8 +1868,8 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
1864
1868
  // DO NOT replace {project-root} - LLMs understand this placeholder at runtime
1865
1869
  // const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
1866
1870
 
1867
- // Replace {bmad_folder} with actual folder name
1868
- xmlContent = xmlContent.replaceAll('{bmad_folder}', this.bmadFolderName || 'bmad');
1871
+ // Replace .bmad with actual folder name
1872
+ xmlContent = xmlContent.replaceAll('.bmad', this.bmadFolderName || 'bmad');
1869
1873
 
1870
1874
  // Replace {agent_sidecar_folder} if configured
1871
1875
  const coreConfig = this.configCollector.collectedConfig.core || {};
@@ -1912,7 +1916,7 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
1912
1916
  // Resolve path variables
1913
1917
  const resolvedSidecarFolder = agentSidecarFolder
1914
1918
  .replaceAll('{project-root}', projectDir)
1915
- .replaceAll('{bmad_folder}', this.bmadFolderName || 'bmad');
1919
+ .replaceAll('.bmad', this.bmadFolderName || 'bmad');
1916
1920
 
1917
1921
  // Create sidecar directory for this agent
1918
1922
  const agentSidecarDir = path.join(resolvedSidecarFolder, agentName);
@@ -2531,18 +2535,7 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
2531
2535
  installedModules,
2532
2536
  );
2533
2537
 
2534
- // Handle both old return format (array) and new format (object)
2535
- let validCustomModules = [];
2536
- let keptModulesWithoutSources = [];
2537
-
2538
- if (Array.isArray(customModuleResult)) {
2539
- // Old format - just an array
2540
- validCustomModules = customModuleResult;
2541
- } else if (customModuleResult && typeof customModuleResult === 'object') {
2542
- // New format - object with two arrays
2543
- validCustomModules = customModuleResult.validCustomModules || [];
2544
- keptModulesWithoutSources = customModuleResult.keptModulesWithoutSources || [];
2545
- }
2538
+ const { validCustomModules, keptModulesWithoutSources } = customModuleResult;
2546
2539
 
2547
2540
  const customModulesFromManifest = validCustomModules.map((m) => ({
2548
2541
  ...m,
@@ -2617,7 +2610,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
2617
2610
  lastModified: new Date().toISOString(),
2618
2611
  };
2619
2612
 
2620
- // Check if bmad_folder has changed
2621
2613
  const existingBmadFolderName = path.basename(bmadDir);
2622
2614
  const newBmadFolderName = this.configCollector.collectedConfig.core?.bmad_folder || existingBmadFolderName;
2623
2615
 
@@ -3215,7 +3207,7 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
3215
3207
  const agentSidecarFolder = config.coreConfig?.agent_sidecar_folder;
3216
3208
 
3217
3209
  // Resolve path variables
3218
- const resolvedSidecarFolder = agentSidecarFolder.replaceAll('{project-root}', projectDir).replaceAll('{bmad_folder}', bmadDir);
3210
+ const resolvedSidecarFolder = agentSidecarFolder.replaceAll('{project-root}', projectDir).replaceAll('.bmad', bmadDir);
3219
3211
 
3220
3212
  // Create sidecar directory for this agent
3221
3213
  const agentSidecarDir = path.join(resolvedSidecarFolder, finalAgentName);
@@ -3321,7 +3313,10 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
3321
3313
 
3322
3314
  // If no missing sources, return immediately
3323
3315
  if (customModulesWithMissingSources.length === 0) {
3324
- return validCustomModules;
3316
+ return {
3317
+ validCustomModules,
3318
+ keptModulesWithoutSources: [],
3319
+ };
3325
3320
  }
3326
3321
 
3327
3322
  // Stop any spinner for interactive prompts
@@ -23,7 +23,7 @@ class ManifestGenerator {
23
23
 
24
24
  /**
25
25
  * Generate all manifests for the installation
26
- * @param {string} bmadDir - BMAD installation directory
26
+ * @param {string} bmadDir - .bmad
27
27
  * @param {Array} selectedModules - Selected modules for installation
28
28
  * @param {Array} installedFiles - All installed files (optional, for hash tracking)
29
29
  */
@@ -255,7 +255,6 @@ class CustomHandler {
255
255
  let content = await fs.readFile(sourcePath, 'utf8');
256
256
 
257
257
  // Replace placeholders
258
- content = content.replaceAll('{bmad_folder}', config.bmad_folder || 'bmad');
259
258
  content = content.replaceAll('{user_name}', config.user_name || 'User');
260
259
  content = content.replaceAll('{communication_language}', config.communication_language || 'English');
261
260
  content = content.replaceAll('{output_folder}', config.output_folder || 'docs');
@@ -321,7 +320,6 @@ class CustomHandler {
321
320
  if (await fs.pathExists(genericTemplatePath)) {
322
321
  // Copy with placeholder replacement
323
322
  let templateContent = await fs.readFile(genericTemplatePath, 'utf8');
324
- templateContent = templateContent.replaceAll('{bmad_folder}', config.bmad_folder || 'bmad');
325
323
  await fs.writeFile(customizePath, templateContent, 'utf8');
326
324
  console.log(chalk.dim(` Created customize: custom-${agentName}.customize.yaml`));
327
325
  }
@@ -332,7 +330,6 @@ class CustomHandler {
332
330
 
333
331
  // Replace placeholders in the compiled content
334
332
  let processedXml = xml;
335
- processedXml = processedXml.replaceAll('{bmad_folder}', config.bmad_folder || 'bmad');
336
333
  processedXml = processedXml.replaceAll('{user_name}', config.user_name || 'User');
337
334
  processedXml = processedXml.replaceAll('{communication_language}', config.communication_language || 'English');
338
335
  processedXml = processedXml.replaceAll('{output_folder}', config.output_folder || 'docs');
@@ -358,7 +355,7 @@ class CustomHandler {
358
355
  const projectDir = path.dirname(bmadDir);
359
356
  const resolvedSidecarFolder = config.agent_sidecar_folder
360
357
  .replaceAll('{project-root}', projectDir)
361
- .replaceAll('{bmad_folder}', path.basename(bmadDir));
358
+ .replaceAll('.bmad', path.basename(bmadDir));
362
359
 
363
360
  // Create sidecar directory for this agent
364
361
  const agentSidecarDir = path.join(resolvedSidecarFolder, agentName);
@@ -527,26 +527,26 @@ class BaseIdeSetup {
527
527
  }
528
528
 
529
529
  /**
530
- * Write file with content (replaces {bmad_folder} placeholder)
530
+ * Write file with content (replaces .bmad placeholder)
531
531
  * @param {string} filePath - File path
532
532
  * @param {string} content - File content
533
533
  */
534
534
  async writeFile(filePath, content) {
535
- // Replace {bmad_folder} placeholder if present
536
- if (typeof content === 'string' && content.includes('{bmad_folder}')) {
537
- content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
535
+ // Replace .bmad placeholder if present
536
+ if (typeof content === 'string' && content.includes('.bmad')) {
537
+ content = content.replaceAll('.bmad', this.bmadFolderName);
538
538
  }
539
539
 
540
- // Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
541
- if (typeof content === 'string' && content.includes('{*bmad_folder*}')) {
542
- content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
540
+ // Replace escape sequence .bmad with literal .bmad
541
+ if (typeof content === 'string' && content.includes('.bmad')) {
542
+ content = content.replaceAll('.bmad', '.bmad');
543
543
  }
544
544
  await this.ensureDir(path.dirname(filePath));
545
545
  await fs.writeFile(filePath, content, 'utf8');
546
546
  }
547
547
 
548
548
  /**
549
- * Copy file from source to destination (replaces {bmad_folder} placeholder in text files)
549
+ * Copy file from source to destination (replaces .bmad placeholder in text files)
550
550
  * @param {string} source - Source file path
551
551
  * @param {string} dest - Destination file path
552
552
  */
@@ -563,14 +563,14 @@ class BaseIdeSetup {
563
563
  // Read the file content
564
564
  let content = await fs.readFile(source, 'utf8');
565
565
 
566
- // Replace {bmad_folder} placeholder with actual folder name
567
- if (content.includes('{bmad_folder}')) {
568
- content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
566
+ // Replace .bmad placeholder with actual folder name
567
+ if (content.includes('.bmad')) {
568
+ content = content.replaceAll('.bmad', this.bmadFolderName);
569
569
  }
570
570
 
571
- // Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
572
- if (content.includes('{*bmad_folder*}')) {
573
- content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
571
+ // Replace escape sequence .bmad with literal .bmad
572
+ if (content.includes('.bmad')) {
573
+ content = content.replaceAll('.bmad', '.bmad');
574
574
  }
575
575
 
576
576
  // Write to dest with replaced content
@@ -174,8 +174,8 @@ ${contentWithoutFrontmatter}
174
174
  // Note: {user_name} and other {config_values} are left as-is for runtime substitution by Gemini
175
175
  const tomlContent = template
176
176
  .replaceAll('{{title}}', title)
177
- .replaceAll('{{*bmad_folder*}}', '{bmad_folder}')
178
- .replaceAll('{{bmad_folder}}', this.bmadFolderName)
177
+ .replaceAll('{.bmad}', '.bmad')
178
+ .replaceAll('{.bmad}', this.bmadFolderName)
179
179
  .replaceAll('{{module}}', agent.module)
180
180
  .replaceAll('{{name}}', agent.name);
181
181
 
@@ -196,8 +196,8 @@ ${contentWithoutFrontmatter}
196
196
  // Replace template variables
197
197
  const tomlContent = template
198
198
  .replaceAll('{{taskName}}', taskName)
199
- .replaceAll('{{*bmad_folder*}}', '{bmad_folder}')
200
- .replaceAll('{{bmad_folder}}', this.bmadFolderName)
199
+ .replaceAll('{.bmad}', '.bmad')
200
+ .replaceAll('{.bmad}', this.bmadFolderName)
201
201
  .replaceAll('{{module}}', task.module)
202
202
  .replaceAll('{{filename}}', task.filename);
203
203
 
@@ -65,8 +65,8 @@ class AgentCommandGenerator {
65
65
  .replaceAll('{{module}}', agent.module)
66
66
  .replaceAll('{{path}}', agentPathInModule)
67
67
  .replaceAll('{{description}}', agent.description || `${agent.name} agent`)
68
- .replaceAll('{bmad_folder}', this.bmadFolderName)
69
- .replaceAll('{*bmad_folder*}', '{bmad_folder}');
68
+ .replaceAll('.bmad', this.bmadFolderName)
69
+ .replaceAll('.bmad', '.bmad');
70
70
  }
71
71
 
72
72
  /**
@@ -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