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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/.github/ISSUE_TEMPLATE/idea_submission.md +1 -1
  2. package/.github/scripts/discord-helpers.sh +15 -0
  3. package/.github/workflows/discord.yaml +278 -8
  4. package/.github/workflows/quality.yaml +19 -0
  5. package/.markdownlint-cli2.yaml +42 -0
  6. package/.prettierignore +3 -0
  7. package/CHANGELOG.md +95 -0
  8. package/CODE_OF_CONDUCT.md +128 -0
  9. package/bmad-method-6.0.0-alpha.14.tgz +0 -0
  10. package/docs/agent-customization-guide.md +2 -2
  11. package/docs/custom-agent-installation.md +56 -102
  12. package/docs/document-sharding-guide.md +1 -1
  13. package/eslint.config.mjs +14 -0
  14. package/example-custom-content/README.md +4 -0
  15. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/instructions.md +4 -4
  16. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/memories.md +1 -1
  17. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith.agent.yaml +17 -16
  18. package/example-custom-content/custom.yaml +3 -0
  19. package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +168 -0
  20. package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +155 -0
  21. package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +89 -0
  22. package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +36 -0
  23. package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +36 -0
  24. package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +36 -0
  25. package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +36 -0
  26. package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +36 -0
  27. package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +36 -0
  28. package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +36 -0
  29. package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +36 -0
  30. package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +150 -0
  31. package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +1 -0
  32. package/example-custom-content/workflows/quiz-master/workflow-plan-quiz-master.md +269 -0
  33. package/example-custom-content/workflows/quiz-master/workflow.md +54 -0
  34. package/example-custom-content/workflows/wassup/workflow.md +26 -0
  35. package/example-custom-module/mwm/README.md +4 -0
  36. package/example-custom-module/mwm/_module-installer/install-config.yaml +27 -0
  37. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +47 -0
  38. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +17 -0
  39. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +150 -0
  40. package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +137 -0
  41. package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +137 -0
  42. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +13 -0
  43. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +30 -0
  44. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +13 -0
  45. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +17 -0
  46. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +124 -0
  47. package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +31 -0
  48. package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +45 -0
  49. package/example-custom-module/mwm/workflows/crisis-support/README.md +31 -0
  50. package/example-custom-module/mwm/workflows/crisis-support/workflow.md +45 -0
  51. package/example-custom-module/mwm/workflows/daily-checkin/README.md +32 -0
  52. package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +45 -0
  53. package/example-custom-module/mwm/workflows/guided-meditation/README.md +31 -0
  54. package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +45 -0
  55. package/example-custom-module/mwm/workflows/wellness-journal/README.md +31 -0
  56. package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +45 -0
  57. package/package.json +9 -4
  58. package/src/core/_module-installer/install-config.yaml +5 -1
  59. package/src/core/resources/excalidraw/library-loader.md +2 -2
  60. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +1 -1
  61. package/src/core/workflows/brainstorming/workflow.md +1 -1
  62. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +0 -1
  63. package/src/core/workflows/party-mode/workflow.md +2 -3
  64. package/src/modules/bmb/README.md +1 -1
  65. package/src/modules/bmb/_module-installer/install-config.yaml +4 -9
  66. package/src/modules/bmb/_module-installer/installer.js +76 -0
  67. package/src/modules/bmb/agents/bmad-builder.agent.yaml +32 -9
  68. package/src/modules/bmb/docs/agents/agent-menu-patterns.md +5 -5
  69. package/src/modules/bmb/docs/agents/expert-agent-architecture.md +20 -20
  70. package/src/modules/bmb/docs/agents/module-agent-architecture.md +45 -45
  71. package/src/modules/bmb/docs/agents/simple-agent-architecture.md +7 -3
  72. package/src/modules/bmb/docs/workflows/architecture.md +1 -1
  73. package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +241 -0
  74. package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +223 -0
  75. package/src/modules/bmb/{workflows/create-workflow → docs/workflows}/templates/step-file.md +4 -4
  76. package/src/modules/bmb/docs/workflows/{step-template.md → templates/step-template.md} +40 -33
  77. package/src/modules/bmb/docs/workflows/templates/workflow-template.md +104 -0
  78. package/src/modules/bmb/{workflows/create-workflow → docs/workflows}/templates/workflow.md +1 -1
  79. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/README.md +4 -4
  80. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +8 -8
  81. package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +6 -6
  82. package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
  83. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +2 -3
  84. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +10 -40
  85. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +1 -1
  86. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +1 -0
  87. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +2 -2
  88. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +2 -2
  89. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +2 -2
  90. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
  91. package/src/modules/bmb/workflows/create-agent/data/info-and-installation-guide.md +16 -4
  92. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +4 -4
  93. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +7 -7
  94. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +1 -1
  95. package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +3 -3
  96. package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +3 -3
  97. package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +3 -3
  98. package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +3 -3
  99. package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +6 -6
  100. package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +2 -2
  101. package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +3 -3
  102. package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +3 -3
  103. package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +2 -2
  104. package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +3 -3
  105. package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +2 -2
  106. package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +2 -2
  107. package/src/modules/bmb/workflows/create-agent/workflow.md +11 -11
  108. package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +155 -0
  109. package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +169 -0
  110. package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +217 -0
  111. package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +267 -0
  112. package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +228 -0
  113. package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +233 -0
  114. package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +296 -0
  115. package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +228 -0
  116. package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +186 -0
  117. package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +308 -0
  118. package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +336 -0
  119. package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +335 -0
  120. package/src/modules/bmb/workflows/create-module/templates/agent.template.md +317 -0
  121. package/src/modules/bmb/workflows/create-module/templates/install-config.template.yaml +53 -0
  122. package/src/modules/bmb/workflows/create-module/templates/installer.template.js +47 -0
  123. package/src/modules/bmb/workflows/create-module/templates/module-plan.template.md +5 -0
  124. package/src/modules/bmb/workflows/create-module/templates/workflow-plan-template.md +23 -0
  125. package/src/modules/bmb/workflows/create-module/validation.md +126 -0
  126. package/src/modules/bmb/workflows/create-module/workflow.md +55 -0
  127. package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +45 -56
  128. package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +9 -31
  129. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +250 -0
  130. package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +216 -0
  131. package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +289 -0
  132. package/src/modules/bmb/workflows/create-workflow/steps/{step-09-design.md → step-06-design.md} +76 -44
  133. package/src/modules/bmb/workflows/create-workflow/steps/{step-11-build.md → step-07-build.md} +70 -24
  134. package/src/modules/bmb/workflows/create-workflow/steps/{step-12-review.md → step-08-review.md} +30 -16
  135. package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +187 -0
  136. package/src/modules/bmb/workflows/create-workflow/workflow.md +2 -2
  137. package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +2 -2
  138. package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +14 -14
  139. package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +4 -4
  140. package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +2 -2
  141. package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +4 -4
  142. package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
  143. package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +2 -6
  144. package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +2 -2
  145. package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +1 -1
  146. package/src/modules/bmb/workflows/edit-workflow/workflow.md +1 -1
  147. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +2 -2
  148. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +5 -5
  149. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +7 -7
  150. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +3 -3
  151. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +3 -3
  152. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +3 -3
  153. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +3 -3
  154. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +2 -2
  155. package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
  156. package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +0 -1
  157. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +8 -8
  158. package/src/modules/bmm/_module-installer/install-config.yaml +1 -1
  159. package/src/modules/bmm/agents/analyst.agent.yaml +11 -8
  160. package/src/modules/bmm/agents/architect.agent.yaml +1 -5
  161. package/src/modules/bmm/agents/pm.agent.yaml +5 -5
  162. package/src/modules/bmm/docs/README.md +23 -1
  163. package/src/modules/bmm/docs/agents-guide.md +16 -35
  164. package/src/modules/bmm/docs/brownfield-guide.md +17 -30
  165. package/src/modules/bmm/docs/enterprise-agentic-development.md +2 -2
  166. package/src/modules/bmm/docs/faq.md +6 -39
  167. package/src/modules/bmm/docs/glossary.md +11 -24
  168. package/src/modules/bmm/docs/images/README.md +37 -0
  169. package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +62 -202
  170. package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +3 -1
  171. package/src/modules/bmm/docs/quick-spec-flow.md +652 -0
  172. package/src/modules/bmm/docs/quick-start.md +9 -25
  173. package/src/modules/bmm/docs/test-architecture.md +6 -6
  174. package/src/modules/bmm/docs/troubleshooting.md +680 -0
  175. package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
  176. package/src/modules/bmm/docs/workflows-implementation.md +143 -3
  177. package/src/modules/bmm/docs/workflows-solutioning.md +2 -2
  178. package/src/modules/bmm/tasks/daily-standup.xml +85 -0
  179. package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +1 -1
  180. package/src/modules/bmm/testarch/knowledge/overview.md +1 -1
  181. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +2 -2
  182. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +2 -2
  183. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +2 -2
  184. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +2 -2
  185. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +1 -1
  186. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +8 -8
  187. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +18 -18
  188. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +18 -18
  189. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +18 -18
  190. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +17 -17
  191. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +35 -36
  192. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +5 -6
  193. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +20 -19
  194. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +21 -20
  195. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +20 -19
  196. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +21 -20
  197. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +16 -15
  198. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +36 -37
  199. package/src/modules/bmm/workflows/1-analysis/research/research.template.md +0 -1
  200. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +8 -8
  201. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +19 -18
  202. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +20 -19
  203. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +21 -20
  204. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +19 -18
  205. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +38 -39
  206. package/src/modules/bmm/workflows/1-analysis/research/workflow.md +14 -8
  207. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +6 -0
  208. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +7 -0
  209. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +138 -56
  210. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +93 -51
  211. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +223 -78
  212. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +20 -2
  213. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +18 -0
  214. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +21 -0
  215. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +21 -0
  216. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +21 -0
  217. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +18 -0
  218. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +18 -0
  219. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +18 -0
  220. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +13 -0
  221. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +2 -2
  222. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +14 -14
  223. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +7 -7
  224. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +2 -1
  225. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +258 -0
  226. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +232 -0
  227. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +271 -0
  228. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +144 -0
  229. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  230. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
  231. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +189 -0
  232. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +177 -0
  233. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +178 -0
  234. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +138 -0
  235. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +251 -0
  236. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +132 -0
  237. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/templates/readiness-report-template.md +4 -0
  238. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +54 -0
  239. package/src/modules/{bmgd/workflows/4-production → bmm/workflows/4-implementation}/code-review/checklist.md +2 -1
  240. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +51 -3
  241. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +1 -1
  242. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +32 -2
  243. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +3 -3
  244. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +19 -21
  245. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +10 -10
  246. package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +174 -0
  247. package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +35 -0
  248. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/instructions.md +104 -7
  249. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +4 -0
  250. package/src/modules/bmm/workflows/document-project/instructions.md +1 -1
  251. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +2 -2
  252. package/src/modules/bmm/workflows/generate-project-context/workflow.md +1 -1
  253. package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +1 -1
  254. package/src/modules/bmm/workflows/testarch/ci/checklist.md +1 -1
  255. package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +36 -3
  256. package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +25 -4
  257. package/src/modules/bmm/workflows/testarch/ci/instructions.md +2 -2
  258. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
  259. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +1 -6
  260. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +1 -6
  261. package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +1 -6
  262. package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +1 -7
  263. package/tools/cli/README.md +3 -3
  264. package/tools/cli/commands/build.js +9 -184
  265. package/tools/cli/commands/install.js +1 -6
  266. package/tools/cli/installers/lib/core/config-collector.js +70 -10
  267. package/tools/cli/installers/lib/core/installer.js +153 -388
  268. package/tools/cli/installers/lib/core/manifest-generator.js +91 -30
  269. package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +79 -0
  270. package/tools/cli/installers/lib/custom/handler.js +266 -0
  271. package/tools/cli/installers/lib/ide/_base-ide.js +10 -0
  272. package/tools/cli/installers/lib/ide/auggie.js +19 -7
  273. package/tools/cli/installers/lib/ide/crush.js +19 -6
  274. package/tools/cli/installers/lib/ide/cursor.js +29 -13
  275. package/tools/cli/installers/lib/ide/gemini.js +49 -1
  276. package/tools/cli/installers/lib/ide/iflow.js +20 -1
  277. package/tools/cli/installers/lib/ide/kiro-cli.js +327 -0
  278. package/tools/cli/installers/lib/ide/opencode.js +3 -3
  279. package/tools/cli/installers/lib/ide/roo.js +120 -184
  280. package/tools/cli/installers/lib/ide/rovo-dev.js +1 -1
  281. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +8 -2
  282. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +34 -19
  283. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +18 -14
  284. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
  285. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
  286. package/tools/cli/installers/lib/modules/manager.js +486 -53
  287. package/tools/cli/lib/agent/compiler.js +54 -5
  288. package/tools/cli/lib/agent/installer.js +127 -27
  289. package/tools/cli/lib/config.js +2 -1
  290. package/tools/cli/lib/ui.js +65 -4
  291. package/tools/cli/lib/yaml-xml-builder.js +0 -15
  292. package/tools/schema/agent.js +149 -89
  293. package/tools/validate-svg-changes.sh +356 -0
  294. package/custom/src/agents/commit-poet/installation-guide.md +0 -36
  295. package/custom/src/agents/toolsmith/installation-guide.md +0 -36
  296. package/src/modules/bmb/docs/workflows/workflow-template.md +0 -152
  297. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-overview.md +0 -127
  298. package/src/modules/bmb/workflows/create-workflow/steps/step-04-core-tools.md +0 -145
  299. package/src/modules/bmb/workflows/create-workflow/steps/step-05-memory-requirements.md +0 -136
  300. package/src/modules/bmb/workflows/create-workflow/steps/step-06-external-tools.md +0 -154
  301. package/src/modules/bmb/workflows/create-workflow/steps/step-07-installation-guidance.md +0 -159
  302. package/src/modules/bmb/workflows/create-workflow/steps/step-08-tools-summary.md +0 -167
  303. package/src/modules/bmb/workflows/create-workflow/steps/step-10-plan-review.md +0 -215
  304. package/src/modules/bmb/workflows/create-workflow/templates/build-summary.md +0 -36
  305. package/src/modules/bmb/workflows/create-workflow/templates/completion-section.md +0 -39
  306. package/src/modules/bmb/workflows/create-workflow/templates/content-template.md +0 -21
  307. package/src/modules/bmb/workflows/create-workflow/templates/design-section.md +0 -53
  308. package/src/modules/bmb/workflows/create-workflow/templates/project-info.md +0 -18
  309. package/src/modules/bmb/workflows/create-workflow/templates/requirements-section.md +0 -47
  310. package/src/modules/bmb/workflows/create-workflow/templates/review-section.md +0 -56
  311. package/src/modules/bmb/workflows/create-workflow/templates/workflow-plan.md +0 -54
  312. package/src/modules/bmb/workflows-legacy/create-module/README.md +0 -229
  313. package/src/modules/bmb/workflows-legacy/create-module/brainstorm-context.md +0 -137
  314. package/src/modules/bmb/workflows-legacy/create-module/checklist.md +0 -235
  315. package/src/modules/bmb/workflows-legacy/create-module/installer-templates/install-config.yaml +0 -92
  316. package/src/modules/bmb/workflows-legacy/create-module/installer-templates/installer.js +0 -231
  317. package/src/modules/bmb/workflows-legacy/create-module/instructions.md +0 -577
  318. package/src/modules/bmb/workflows-legacy/create-module/module-structure.md +0 -400
  319. package/src/modules/bmb/workflows-legacy/create-module/workflow.yaml +0 -52
  320. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md +0 -80
  321. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md +0 -387
  322. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +0 -53
  323. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +0 -169
  324. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +0 -332
  325. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/template.md +0 -146
  326. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -64
  327. package/tools/cli/commands/agent-install.js +0 -409
  328. package/tools/cli/commands/cleanup.js +0 -141
  329. /package/{custom/src → example-custom-content}/agents/commit-poet/commit-poet.agent.yaml +0 -0
  330. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +0 -0
  331. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +0 -0
  332. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +0 -0
  333. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +0 -0
  334. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +0 -0
  335. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +0 -0
@@ -5,34 +5,13 @@ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
5
5
 
6
6
  /**
7
7
  * Roo IDE setup handler
8
- * Creates custom modes in .roomodes file
8
+ * Creates custom commands in .roo/commands directory
9
9
  */
10
10
  class RooSetup extends BaseIdeSetup {
11
11
  constructor() {
12
12
  super('roo', 'Roo Code');
13
- this.configFile = '.roomodes';
14
- this.defaultPermissions = {
15
- dev: {
16
- description: 'Development files',
17
- fileRegex: String.raw`.*\.(js|jsx|ts|tsx|py|java|cpp|c|h|cs|go|rs|php|rb|swift)$`,
18
- },
19
- config: {
20
- description: 'Configuration files',
21
- fileRegex: String.raw`.*\.(json|yaml|yml|toml|xml|ini|env|config)$`,
22
- },
23
- docs: {
24
- description: 'Documentation files',
25
- fileRegex: String.raw`.*\.(md|mdx|rst|txt|doc|docx)$`,
26
- },
27
- styles: {
28
- description: 'Style and design files',
29
- fileRegex: String.raw`.*\.(css|scss|sass|less|stylus)$`,
30
- },
31
- all: {
32
- description: 'All files',
33
- fileRegex: '.*',
34
- },
35
- };
13
+ this.configDir = '.roo';
14
+ this.commandsDir = 'commands';
36
15
  }
37
16
 
38
17
  /**
@@ -44,94 +23,96 @@ class RooSetup extends BaseIdeSetup {
44
23
  async setup(projectDir, bmadDir, options = {}) {
45
24
  console.log(chalk.cyan(`Setting up ${this.name}...`));
46
25
 
47
- // Check for existing .roomodes file
48
- const roomodesPath = path.join(projectDir, this.configFile);
49
- let existingModes = [];
50
- let existingContent = '';
51
-
52
- if (await this.pathExists(roomodesPath)) {
53
- existingContent = await this.readFile(roomodesPath);
54
- // Parse existing modes to avoid duplicates
55
- const modeMatches = existingContent.matchAll(/- slug: ([\w-]+)/g);
56
- for (const match of modeMatches) {
57
- existingModes.push(match[1]);
58
- }
59
- console.log(chalk.yellow(`Found existing .roomodes file with ${existingModes.length} modes`));
60
- }
26
+ // Create .roo/commands directory
27
+ const rooCommandsDir = path.join(projectDir, this.configDir, this.commandsDir);
28
+ await this.ensureDir(rooCommandsDir);
61
29
 
62
- // Generate agent launchers (though Roo will reference the actual .bmad agents)
30
+ // Generate agent launchers
63
31
  const agentGen = new AgentCommandGenerator(this.bmadFolderName);
64
32
  const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
65
33
 
66
- // Always use 'all' permissions - users can customize in .roomodes file
67
- const permissionChoice = 'all';
68
-
69
- // Create modes content
70
- let newModesContent = '';
71
34
  let addedCount = 0;
72
35
  let skippedCount = 0;
73
36
 
74
37
  for (const artifact of agentArtifacts) {
75
- const slug = `bmad-${artifact.module}-${artifact.name}`;
38
+ const commandName = `bmad-${artifact.module}-agent-${artifact.name}`;
39
+ const commandPath = path.join(rooCommandsDir, `${commandName}.md`);
76
40
 
77
41
  // Skip if already exists
78
- if (existingModes.includes(slug)) {
79
- console.log(chalk.dim(` Skipping ${slug} - already exists`));
42
+ if (await this.pathExists(commandPath)) {
43
+ console.log(chalk.dim(` Skipping ${commandName} - already exists`));
80
44
  skippedCount++;
81
45
  continue;
82
46
  }
83
47
 
84
- // Read the actual agent file from .bmad for metadata extraction
48
+ // Read the actual agent file from .bmad for metadata extraction (installed agents are .md files)
85
49
  const agentPath = path.join(bmadDir, artifact.module, 'agents', `${artifact.name}.md`);
86
50
  const content = await this.readFile(agentPath);
87
51
 
88
- // Create mode entry that references the actual .bmad agent
89
- const modeEntry = await this.createModeEntry(
90
- { module: artifact.module, name: artifact.name, path: agentPath },
91
- content,
92
- permissionChoice,
93
- projectDir,
94
- );
52
+ // Create command file that references the actual .bmad agent
53
+ await this.createCommandFile({ module: artifact.module, name: artifact.name, path: agentPath }, content, commandPath, projectDir);
95
54
 
96
- newModesContent += modeEntry;
97
55
  addedCount++;
98
- console.log(chalk.green(` ✓ Added mode: ${slug}`));
56
+ console.log(chalk.green(` ✓ Added command: ${commandName}`));
99
57
  }
100
58
 
101
- // Build final content
102
- let finalContent = '';
103
- if (existingContent) {
104
- // Append to existing content
105
- finalContent = existingContent.trim() + '\n' + newModesContent;
106
- } else {
107
- // Create new .roomodes file
108
- finalContent = 'customModes:\n' + newModesContent;
109
- }
110
-
111
- // Write .roomodes file
112
- await this.writeFile(roomodesPath, finalContent);
113
-
114
59
  console.log(chalk.green(`✓ ${this.name} configured:`));
115
- console.log(chalk.dim(` - ${addedCount} modes added`));
60
+ console.log(chalk.dim(` - ${addedCount} commands added`));
116
61
  if (skippedCount > 0) {
117
- console.log(chalk.dim(` - ${skippedCount} modes skipped (already exist)`));
62
+ console.log(chalk.dim(` - ${skippedCount} commands skipped (already exist)`));
118
63
  }
119
- console.log(chalk.dim(` - Configuration file: ${this.configFile}`));
120
- console.log(chalk.dim(` - Permission level: all (unrestricted)`));
121
- console.log(chalk.yellow(`\n 💡 Tip: Edit ${this.configFile} to customize file permissions per agent`));
122
- console.log(chalk.dim(` Modes will be available when you open this project in Roo Code`));
64
+ console.log(chalk.dim(` - Commands directory: ${this.configDir}/${this.commandsDir}/bmad/`));
65
+ console.log(chalk.dim(` Commands will be available when you open this project in Roo Code`));
123
66
 
124
67
  return {
125
68
  success: true,
126
- modes: addedCount,
69
+ commands: addedCount,
127
70
  skipped: skippedCount,
128
71
  };
129
72
  }
130
73
 
131
74
  /**
132
- * Create a mode entry for an agent
75
+ * Create a unified command file for agents
76
+ * @param {string} commandPath - Path where to write the command file
77
+ * @param {Object} options - Command options
78
+ * @param {string} options.name - Display name for the command
79
+ * @param {string} options.description - Description for the command
80
+ * @param {string} options.agentPath - Path to the agent file (relative to project root)
81
+ * @param {string} [options.icon] - Icon emoji (defaults to 🤖)
82
+ * @param {string} [options.extraContent] - Additional content to include before activation
133
83
  */
134
- async createModeEntry(agent, content, permissionChoice, projectDir) {
84
+ async createAgentCommandFile(commandPath, options) {
85
+ const { name, description, agentPath, icon = '🤖', extraContent = '' } = options;
86
+
87
+ // Build command content with YAML frontmatter
88
+ let commandContent = `---\n`;
89
+ commandContent += `name: '${icon} ${name}'\n`;
90
+ commandContent += `description: '${description}'\n`;
91
+ commandContent += `---\n\n`;
92
+
93
+ commandContent += `You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.\n\n`;
94
+
95
+ // Add any extra content (e.g., warnings for custom agents)
96
+ if (extraContent) {
97
+ commandContent += `${extraContent}\n\n`;
98
+ }
99
+
100
+ commandContent += `<agent-activation CRITICAL="TRUE">\n`;
101
+ commandContent += `1. LOAD the FULL agent file from @${agentPath}\n`;
102
+ commandContent += `2. READ its entire contents - this contains the complete agent persona, menu, and instructions\n`;
103
+ commandContent += `3. Execute ALL activation steps exactly as written in the agent file\n`;
104
+ commandContent += `4. Follow the agent's persona and menu system precisely\n`;
105
+ commandContent += `5. Stay in character throughout the session\n`;
106
+ commandContent += `</agent-activation>\n`;
107
+
108
+ // Write command file
109
+ await this.writeFile(commandPath, commandContent);
110
+ }
111
+
112
+ /**
113
+ * Create a command file for an agent
114
+ */
115
+ async createCommandFile(agent, content, commandPath, projectDir) {
135
116
  // Extract metadata from agent content
136
117
  const titleMatch = content.match(/title="([^"]+)"/);
137
118
  const title = titleMatch ? titleMatch[1] : this.formatTitle(agent.name);
@@ -142,66 +123,16 @@ class RooSetup extends BaseIdeSetup {
142
123
  const whenToUseMatch = content.match(/whenToUse="([^"]+)"/);
143
124
  const whenToUse = whenToUseMatch ? whenToUseMatch[1] : `Use for ${title} tasks`;
144
125
 
145
- // Get the activation header from central template
146
- const activationHeader = await this.getAgentCommandHeader();
147
-
148
- const roleDefinitionMatch = content.match(/roleDefinition="([^"]+)"/);
149
- const roleDefinition = roleDefinitionMatch
150
- ? roleDefinitionMatch[1]
151
- : `You are a ${title} specializing in ${title.toLowerCase()} tasks and responsibilities.`;
152
-
153
126
  // Get relative path
154
127
  const relativePath = path.relative(projectDir, agent.path).replaceAll('\\', '/');
155
128
 
156
- // Determine permissions
157
- const permissions = this.getPermissionsForAgent(agent, permissionChoice);
158
-
159
- // Build mode entry
160
- const slug = `bmad-${agent.module}-${agent.name}`;
161
- let modeEntry = ` - slug: ${slug}\n`;
162
- modeEntry += ` name: '${icon} ${title}'\n`;
163
-
164
- if (permissions && permissions.description) {
165
- modeEntry += ` description: '${permissions.description}'\n`;
166
- }
167
-
168
- modeEntry += ` roleDefinition: ${roleDefinition}\n`;
169
- modeEntry += ` whenToUse: ${whenToUse}\n`;
170
- modeEntry += ` customInstructions: ${activationHeader} Read the full YAML from ${relativePath} start activation to alter your state of being follow startup section instructions stay in this being until told to exit this mode\n`;
171
- modeEntry += ` groups:\n`;
172
- modeEntry += ` - read\n`;
173
-
174
- if (permissions && permissions.fileRegex) {
175
- modeEntry += ` - - edit\n`;
176
- modeEntry += ` - fileRegex: ${permissions.fileRegex}\n`;
177
- modeEntry += ` description: ${permissions.description}\n`;
178
- } else {
179
- modeEntry += ` - edit\n`;
180
- }
181
-
182
- return modeEntry;
183
- }
184
-
185
- /**
186
- * Get permissions configuration for an agent
187
- */
188
- getPermissionsForAgent(agent, permissionChoice) {
189
- if (permissionChoice === 'custom') {
190
- // Custom logic based on agent name/module
191
- if (agent.name.includes('dev') || agent.name.includes('code')) {
192
- return this.defaultPermissions.dev;
193
- } else if (agent.name.includes('doc') || agent.name.includes('write')) {
194
- return this.defaultPermissions.docs;
195
- } else if (agent.name.includes('config') || agent.name.includes('setup')) {
196
- return this.defaultPermissions.config;
197
- } else if (agent.name.includes('style') || agent.name.includes('css')) {
198
- return this.defaultPermissions.styles;
199
- }
200
- // Default to all for custom agents
201
- return this.defaultPermissions.all;
202
- }
203
-
204
- return this.defaultPermissions[permissionChoice] || null;
129
+ // Use unified method
130
+ await this.createAgentCommandFile(commandPath, {
131
+ name: title,
132
+ description: whenToUse,
133
+ agentPath: relativePath,
134
+ icon: icon,
135
+ });
205
136
  }
206
137
 
207
138
  /**
@@ -219,8 +150,26 @@ class RooSetup extends BaseIdeSetup {
219
150
  */
220
151
  async cleanup(projectDir) {
221
152
  const fs = require('fs-extra');
222
- const roomodesPath = path.join(projectDir, this.configFile);
153
+ const rooCommandsDir = path.join(projectDir, this.configDir, this.commandsDir);
154
+
155
+ if (await fs.pathExists(rooCommandsDir)) {
156
+ const files = await fs.readdir(rooCommandsDir);
157
+ let removedCount = 0;
158
+
159
+ for (const file of files) {
160
+ if (file.startsWith('bmad-') && file.endsWith('.md')) {
161
+ await fs.remove(path.join(rooCommandsDir, file));
162
+ removedCount++;
163
+ }
164
+ }
223
165
 
166
+ if (removedCount > 0) {
167
+ console.log(chalk.dim(`Removed ${removedCount} BMAD commands from .roo/commands/`));
168
+ }
169
+ }
170
+
171
+ // Also clean up old .roomodes file if it exists
172
+ const roomodesPath = path.join(projectDir, '.roomodes');
224
173
  if (await fs.pathExists(roomodesPath)) {
225
174
  const content = await fs.readFile(roomodesPath, 'utf8');
226
175
 
@@ -245,7 +194,9 @@ class RooSetup extends BaseIdeSetup {
245
194
 
246
195
  // Write back filtered content
247
196
  await fs.writeFile(roomodesPath, filteredLines.join('\n'));
248
- console.log(chalk.dim(`Removed ${removedCount} BMAD modes from .roomodes`));
197
+ if (removedCount > 0) {
198
+ console.log(chalk.dim(`Removed ${removedCount} BMAD modes from legacy .roomodes file`));
199
+ }
249
200
  }
250
201
  }
251
202
 
@@ -254,68 +205,53 @@ class RooSetup extends BaseIdeSetup {
254
205
  * @param {string} projectDir - Project directory
255
206
  * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
256
207
  * @param {string} agentPath - Path to compiled agent (relative to project root)
257
- * @param {Object} metadata - Agent metadata
208
+ * @param {Object} metadata - Agent metadata (unused, kept for compatibility)
258
209
  * @returns {Object} Installation result
259
210
  */
260
211
  async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
261
- const roomodesPath = path.join(projectDir, this.configFile);
262
- let existingContent = '';
263
-
264
- // Read existing .roomodes file
265
- if (await this.pathExists(roomodesPath)) {
266
- existingContent = await this.readFile(roomodesPath);
267
- }
268
-
269
- // Create custom agent mode entry
270
- const slug = `bmad-custom-${agentName.toLowerCase()}`;
271
- const modeEntry = ` - slug: ${slug}
272
- name: 'BMAD Custom: ${agentName}'
273
- description: |
274
- Custom BMAD agent: ${agentName}
212
+ const rooCommandsDir = path.join(projectDir, this.configDir, this.commandsDir);
213
+ await this.ensureDir(rooCommandsDir);
275
214
 
276
- **⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
215
+ const commandName = `bmad-custom-agent-${agentName.toLowerCase()}`;
216
+ const commandPath = path.join(rooCommandsDir, `${commandName}.md`);
277
217
 
278
- This is a launcher for the custom BMAD agent "${agentName}". The agent will follow the persona and instructions from the main agent file.
279
- prompt: |
280
- @${agentPath}
281
- always: false
282
- permissions: all
283
- `;
284
-
285
- // Check if mode already exists
286
- if (existingContent.includes(slug)) {
218
+ // Check if command already exists
219
+ if (await this.pathExists(commandPath)) {
287
220
  return {
288
221
  ide: 'roo',
289
- path: this.configFile,
290
- command: agentName,
222
+ path: path.join(this.configDir, this.commandsDir, `${commandName}.md`),
223
+ command: commandName,
291
224
  type: 'custom-agent-launcher',
292
225
  alreadyExists: true,
293
226
  };
294
227
  }
295
228
 
296
- // Build final content
297
- let finalContent = '';
298
- if (existingContent) {
299
- // Find customModes section or add it
300
- if (existingContent.includes('customModes:')) {
301
- // Append to existing customModes
302
- finalContent = existingContent + modeEntry;
303
- } else {
304
- // Add customModes section
305
- finalContent = existingContent.trim() + '\n\ncustomModes:\n' + modeEntry;
306
- }
307
- } else {
308
- // Create new .roomodes file with customModes
309
- finalContent = 'customModes:\n' + modeEntry;
310
- }
229
+ // Read the custom agent file to extract metadata (same as regular agents)
230
+ const fullAgentPath = path.join(projectDir, agentPath);
231
+ const content = await this.readFile(fullAgentPath);
232
+
233
+ // Extract metadata from agent content
234
+ const titleMatch = content.match(/title="([^"]+)"/);
235
+ const title = titleMatch ? titleMatch[1] : this.formatTitle(agentName);
236
+
237
+ const iconMatch = content.match(/icon="([^"]+)"/);
238
+ const icon = iconMatch ? iconMatch[1] : '🤖';
239
+
240
+ const whenToUseMatch = content.match(/whenToUse="([^"]+)"/);
241
+ const whenToUse = whenToUseMatch ? whenToUseMatch[1] : `Use for ${title} tasks`;
311
242
 
312
- // Write .roomodes file
313
- await this.writeFile(roomodesPath, finalContent);
243
+ // Use unified method without extra content (clean)
244
+ await this.createAgentCommandFile(commandPath, {
245
+ name: title,
246
+ description: whenToUse,
247
+ agentPath: agentPath,
248
+ icon: icon,
249
+ });
314
250
 
315
251
  return {
316
252
  ide: 'roo',
317
- path: this.configFile,
318
- command: slug,
253
+ path: path.join(this.configDir, this.commandsDir, `${commandName}.md`),
254
+ command: commandName,
319
255
  type: 'custom-agent-launcher',
320
256
  };
321
257
  }
@@ -15,7 +15,7 @@ const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generat
15
15
  */
16
16
  class RovoDevSetup extends BaseIdeSetup {
17
17
  constructor() {
18
- super('rovo-dev', 'Atlassian Rovo Dev', true); // preferred IDE
18
+ super('rovo-dev', 'Atlassian Rovo Dev', false);
19
19
  this.configDir = '.rovodev';
20
20
  this.subagentsDir = 'subagents';
21
21
  this.workflowsDir = 'workflows';
@@ -28,11 +28,13 @@ class AgentCommandGenerator {
28
28
 
29
29
  for (const agent of agents) {
30
30
  const launcherContent = await this.generateLauncherContent(agent);
31
+ // Use relativePath if available (for nested agents), otherwise just name with .md
32
+ const agentPathInModule = agent.relativePath || `${agent.name}.md`;
31
33
  artifacts.push({
32
34
  type: 'agent-launcher',
33
35
  module: agent.module,
34
36
  name: agent.name,
35
- relativePath: path.join(agent.module, 'agents', `${agent.name}.md`),
37
+ relativePath: path.join(agent.module, 'agents', agentPathInModule),
36
38
  content: launcherContent,
37
39
  sourcePath: agent.path,
38
40
  });
@@ -56,11 +58,15 @@ class AgentCommandGenerator {
56
58
  const template = await fs.readFile(this.templatePath, 'utf8');
57
59
 
58
60
  // Replace template variables
61
+ // Use relativePath if available (for nested agents), otherwise just name with .md
62
+ const agentPathInModule = agent.relativePath || `${agent.name}.md`;
59
63
  return template
60
64
  .replaceAll('{{name}}', agent.name)
61
65
  .replaceAll('{{module}}', agent.module)
66
+ .replaceAll('{{path}}', agentPathInModule)
62
67
  .replaceAll('{{description}}', agent.description || `${agent.name} agent`)
63
- .replaceAll('{bmad_folder}', this.bmadFolderName);
68
+ .replaceAll('{bmad_folder}', this.bmadFolderName)
69
+ .replaceAll('{*bmad_folder*}', '{bmad_folder}');
64
70
  }
65
71
 
66
72
  /**
@@ -76,36 +76,51 @@ async function getTasksFromBmad(bmadDir, selectedModules = []) {
76
76
  return tasks;
77
77
  }
78
78
 
79
- async function getAgentsFromDir(dirPath, moduleName) {
79
+ async function getAgentsFromDir(dirPath, moduleName, relativePath = '') {
80
80
  const agents = [];
81
81
 
82
82
  if (!(await fs.pathExists(dirPath))) {
83
83
  return agents;
84
84
  }
85
85
 
86
- const files = await fs.readdir(dirPath);
86
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
87
87
 
88
- for (const file of files) {
89
- if (!file.endsWith('.md')) {
90
- continue;
91
- }
88
+ for (const entry of entries) {
89
+ const fullPath = path.join(dirPath, entry.name);
90
+ const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
92
91
 
93
- if (file.includes('.customize.')) {
94
- continue;
95
- }
92
+ if (entry.isDirectory()) {
93
+ // Recurse into subdirectories
94
+ const subDirAgents = await getAgentsFromDir(fullPath, moduleName, newRelativePath);
95
+ agents.push(...subDirAgents);
96
+ } else if (entry.name.endsWith('.md')) {
97
+ // Skip README files and other non-agent files
98
+ if (entry.name.toLowerCase() === 'readme.md' || entry.name.toLowerCase().startsWith('readme-')) {
99
+ continue;
100
+ }
96
101
 
97
- const filePath = path.join(dirPath, file);
98
- const content = await fs.readFile(filePath, 'utf8');
102
+ if (entry.name.includes('.customize.')) {
103
+ continue;
104
+ }
99
105
 
100
- if (content.includes('localskip="true"')) {
101
- continue;
102
- }
106
+ const content = await fs.readFile(fullPath, 'utf8');
103
107
 
104
- agents.push({
105
- path: filePath,
106
- name: file.replace('.md', ''),
107
- module: moduleName,
108
- });
108
+ if (content.includes('localskip="true"')) {
109
+ continue;
110
+ }
111
+
112
+ // Only include files that have agent-specific content (compiled agents have <agent> tag)
113
+ if (!content.includes('<agent')) {
114
+ continue;
115
+ }
116
+
117
+ agents.push({
118
+ path: fullPath,
119
+ name: entry.name.replace('.md', ''),
120
+ module: moduleName,
121
+ relativePath: newRelativePath, // Keep the .md extension for the full path
122
+ });
123
+ }
109
124
  }
110
125
 
111
126
  return agents;
@@ -25,16 +25,16 @@ class WorkflowCommandGenerator {
25
25
  return { generated: 0 };
26
26
  }
27
27
 
28
- // Filter to only standalone workflows
29
- const standaloneWorkflows = workflows.filter((w) => w.standalone === 'true' || w.standalone === true);
28
+ // ALL workflows now generate commands - no standalone filtering
29
+ const allWorkflows = workflows;
30
30
 
31
31
  // Base commands directory
32
32
  const baseCommandsDir = path.join(projectDir, '.claude', 'commands', 'bmad');
33
33
 
34
34
  let generatedCount = 0;
35
35
 
36
- // Generate a command file for each standalone workflow, organized by module
37
- for (const workflow of standaloneWorkflows) {
36
+ // Generate a command file for each workflow, organized by module
37
+ for (const workflow of allWorkflows) {
38
38
  const moduleWorkflowsDir = path.join(baseCommandsDir, workflow.module, 'workflows');
39
39
  await fs.ensureDir(moduleWorkflowsDir);
40
40
 
@@ -46,7 +46,7 @@ class WorkflowCommandGenerator {
46
46
  }
47
47
 
48
48
  // Also create a workflow launcher README in each module
49
- const groupedWorkflows = this.groupWorkflowsByModule(standaloneWorkflows);
49
+ const groupedWorkflows = this.groupWorkflowsByModule(allWorkflows);
50
50
  await this.createModuleWorkflowLaunchers(baseCommandsDir, groupedWorkflows);
51
51
 
52
52
  return { generated: generatedCount };
@@ -59,12 +59,12 @@ class WorkflowCommandGenerator {
59
59
  return { artifacts: [], counts: { commands: 0, launchers: 0 } };
60
60
  }
61
61
 
62
- // Filter to only standalone workflows
63
- const standaloneWorkflows = workflows.filter((w) => w.standalone === 'true' || w.standalone === true);
62
+ // ALL workflows now generate commands - no standalone filtering
63
+ const allWorkflows = workflows;
64
64
 
65
65
  const artifacts = [];
66
66
 
67
- for (const workflow of standaloneWorkflows) {
67
+ for (const workflow of allWorkflows) {
68
68
  const commandContent = await this.generateCommandContent(workflow, bmadDir);
69
69
  artifacts.push({
70
70
  type: 'workflow-command',
@@ -75,7 +75,7 @@ class WorkflowCommandGenerator {
75
75
  });
76
76
  }
77
77
 
78
- const groupedWorkflows = this.groupWorkflowsByModule(standaloneWorkflows);
78
+ const groupedWorkflows = this.groupWorkflowsByModule(allWorkflows);
79
79
  for (const [module, launcherContent] of Object.entries(this.buildModuleWorkflowLaunchers(groupedWorkflows))) {
80
80
  artifacts.push({
81
81
  type: 'workflow-launcher',
@@ -89,7 +89,7 @@ class WorkflowCommandGenerator {
89
89
  return {
90
90
  artifacts,
91
91
  counts: {
92
- commands: standaloneWorkflows.length,
92
+ commands: allWorkflows.length,
93
93
  launchers: Object.keys(groupedWorkflows).length,
94
94
  },
95
95
  };
@@ -99,8 +99,13 @@ class WorkflowCommandGenerator {
99
99
  * Generate command content for a workflow
100
100
  */
101
101
  async generateCommandContent(workflow, bmadDir) {
102
- // Load the template
103
- const template = await fs.readFile(this.templatePath, 'utf8');
102
+ // Determine template based on workflow file type
103
+ const isMarkdownWorkflow = workflow.path.endsWith('workflow.md');
104
+ const templateName = isMarkdownWorkflow ? 'workflow-commander.md' : 'workflow-command-template.md';
105
+ const templatePath = path.join(path.dirname(this.templatePath), templateName);
106
+
107
+ // Load the appropriate template
108
+ const template = await fs.readFile(templatePath, 'utf8');
104
109
 
105
110
  // Convert source path to installed path
106
111
  // From: /Users/.../src/modules/bmm/workflows/.../workflow.yaml
@@ -127,8 +132,7 @@ class WorkflowCommandGenerator {
127
132
  .replaceAll('{{description}}', workflow.description)
128
133
  .replaceAll('{{workflow_path}}', workflowPath)
129
134
  .replaceAll('{bmad_folder}', this.bmadFolderName)
130
- .replaceAll('{{interactive}}', workflow.interactive)
131
- .replaceAll('{{author}}', workflow.author || 'BMAD');
135
+ .replaceAll('{*bmad_folder*}', '{bmad_folder}');
132
136
  }
133
137
 
134
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/{{name}}.md
9
+ 1. LOAD the FULL agent file from @{bmad_folder}/{{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
@@ -0,0 +1,5 @@
1
+ ---
2
+ description: '{{description}}'
3
+ ---
4
+
5
+ IT IS CRITICAL THAT YOU FOLLOW THIS COMMAND: LOAD the FULL @{{workflow_path}}, READ its entire contents and follow its directions exactly!