bmad-method 4.27.5 → 5.0.0

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 (274) hide show
  1. package/.bmad-core/agent-teams/team-all.yml +16 -0
  2. package/.bmad-core/agent-teams/team-fullstack.yml +26 -0
  3. package/.bmad-core/agent-teams/team-no-ui.yml +15 -0
  4. package/{bmad-core → .bmad-core}/agents/analyst.md +23 -30
  5. package/.bmad-core/agents/architect.md +66 -0
  6. package/.bmad-core/agents/bmad-master.md +104 -0
  7. package/.bmad-core/agents/bmad-orchestrator.md +81 -0
  8. package/.bmad-core/agents/dev.md +70 -0
  9. package/{bmad-core → .bmad-core}/agents/pm.md +24 -25
  10. package/{bmad-core → .bmad-core}/agents/po.md +24 -28
  11. package/.bmad-core/agents/qa.md +52 -0
  12. package/.bmad-core/agents/sm.md +55 -0
  13. package/.bmad-core/agents/ux-expert.md +66 -0
  14. package/{bmad-core → .bmad-core}/checklists/change-checklist.md +2 -2
  15. package/{bmad-core → .bmad-core}/checklists/story-draft-checklist.md +1 -1
  16. package/.bmad-core/data/bmad-kb.md +47 -0
  17. package/.bmad-core/schemas/agent-team-schema.yml +153 -0
  18. package/.bmad-core/tasks/advanced-elicitation.md +92 -0
  19. package/.bmad-core/tasks/brainstorming-techniques.md +238 -0
  20. package/.bmad-core/tasks/core-dump.md +74 -0
  21. package/{expansion-packs/bmad-creator-tools → .bmad-core}/tasks/create-agent.md +11 -9
  22. package/.bmad-core/tasks/create-doc.md +74 -0
  23. package/.bmad-core/tasks/create-expansion-pack.md +425 -0
  24. package/.bmad-core/tasks/create-next-story.md +206 -0
  25. package/.bmad-core/tasks/create-team.md +229 -0
  26. package/{bmad-core → .bmad-core}/tasks/doc-migration-task.md +9 -9
  27. package/{common → .bmad-core}/tasks/execute-checklist.md +6 -2
  28. package/.bmad-core/tasks/generate-ai-frontend-prompt.md +58 -0
  29. package/{bmad-core → .bmad-core}/tasks/index-docs.md +7 -3
  30. package/{bmad-core → .bmad-core}/tasks/shard-doc.md +7 -25
  31. package/.bmad-core/templates/agent-tmpl.md +58 -0
  32. package/.bmad-core/templates/architecture-tmpl.md +771 -0
  33. package/.bmad-core/templates/brownfield-architecture-tmpl.md +542 -0
  34. package/.bmad-core/templates/brownfield-prd-tmpl.md +240 -0
  35. package/.bmad-core/templates/competitor-analysis-tmpl.md +289 -0
  36. package/.bmad-core/templates/expansion-pack-plan-tmpl.md +91 -0
  37. package/.bmad-core/templates/front-end-architecture-tmpl.md +173 -0
  38. package/.bmad-core/templates/front-end-spec-tmpl.md +411 -0
  39. package/.bmad-core/templates/fullstack-architecture-tmpl.md +1016 -0
  40. package/.bmad-core/templates/market-research-tmpl.md +261 -0
  41. package/.bmad-core/templates/prd-tmpl.md +200 -0
  42. package/.bmad-core/templates/project-brief-tmpl.md +228 -0
  43. package/.bmad-core/templates/simple-project-prd-tmpl.md +461 -0
  44. package/.bmad-core/templates/story-tmpl.md +61 -0
  45. package/.bmad-core/templates/web-agent-startup-instructions-template.md +39 -0
  46. package/.bmad-core/utils/agent-switcher.ide.md +112 -0
  47. package/.bmad-core/utils/template-format.md +26 -0
  48. package/.bmad-core/utils/workflow-management.md +224 -0
  49. package/.bmad-core/web-bundles/agents/analyst.txt +1684 -0
  50. package/.bmad-core/web-bundles/agents/architect.txt +3584 -0
  51. package/.bmad-core/web-bundles/agents/bmad-master.txt +9491 -0
  52. package/.bmad-core/web-bundles/agents/bmad-orchestrator.txt +1466 -0
  53. package/{dist → .bmad-core/web-bundles}/agents/dev.txt +71 -179
  54. package/{dist → .bmad-core/web-bundles}/agents/pm.txt +1058 -624
  55. package/{dist → .bmad-core/web-bundles}/agents/po.txt +138 -337
  56. package/.bmad-core/web-bundles/agents/qa.txt +129 -0
  57. package/.bmad-core/web-bundles/agents/sm.txt +658 -0
  58. package/.bmad-core/web-bundles/agents/ux-expert.txt +1099 -0
  59. package/.bmad-core/web-bundles/teams/team-all.txt +10757 -0
  60. package/.bmad-core/web-bundles/teams/team-fullstack.txt +10109 -0
  61. package/.bmad-core/web-bundles/teams/team-no-ui.txt +8950 -0
  62. package/.bmad-core/workflows/brownfield-fullstack.yml +116 -0
  63. package/.bmad-core/workflows/brownfield-service.yml +117 -0
  64. package/.bmad-core/workflows/brownfield-ui.yml +127 -0
  65. package/{bmad-core/workflows/greenfield-fullstack.yaml → .bmad-core/workflows/greenfield-fullstack.yml} +77 -140
  66. package/.bmad-core/workflows/greenfield-service.yml +143 -0
  67. package/.bmad-core/workflows/greenfield-ui.yml +172 -0
  68. package/.claude/commands/analyst.md +63 -0
  69. package/.claude/commands/architect.md +70 -0
  70. package/.claude/commands/bmad-master.md +108 -0
  71. package/.claude/commands/bmad-orchestrator.md +85 -0
  72. package/.claude/commands/dev.md +74 -0
  73. package/.claude/commands/pm.md +63 -0
  74. package/.claude/commands/po.md +64 -0
  75. package/.claude/commands/qa.md +56 -0
  76. package/.claude/commands/sm.md +59 -0
  77. package/.claude/commands/ux-expert.md +70 -0
  78. package/.cursor/rules/analyst.mdc +77 -0
  79. package/.cursor/rules/architect.mdc +84 -0
  80. package/.cursor/rules/bmad-master.mdc +122 -0
  81. package/.cursor/rules/bmad-orchestrator.mdc +99 -0
  82. package/.cursor/rules/dev.mdc +88 -0
  83. package/.cursor/rules/pm.mdc +77 -0
  84. package/.cursor/rules/po.mdc +78 -0
  85. package/.cursor/rules/qa.mdc +70 -0
  86. package/.cursor/rules/sm.mdc +73 -0
  87. package/.cursor/rules/ux-expert.mdc +84 -0
  88. package/.roo/.roomodes +95 -0
  89. package/.roo/README.md +38 -0
  90. package/.vscode/extensions.json +6 -0
  91. package/.vscode/settings.json +75 -49
  92. package/.windsurf/rules/analyst.md +71 -0
  93. package/.windsurf/rules/architect.md +78 -0
  94. package/.windsurf/rules/bmad-master.md +116 -0
  95. package/.windsurf/rules/bmad-orchestrator.md +93 -0
  96. package/.windsurf/rules/dev.md +82 -0
  97. package/.windsurf/rules/pm.md +71 -0
  98. package/.windsurf/rules/po.md +72 -0
  99. package/.windsurf/rules/qa.md +64 -0
  100. package/.windsurf/rules/sm.md +67 -0
  101. package/.windsurf/rules/ux-expert.md +78 -0
  102. package/CHANGELOG.md +16 -452
  103. package/CONTRIBUTING.md +5 -168
  104. package/LICENSE +1 -1
  105. package/README.md +230 -77
  106. package/docs/bmad-workflow-guide.md +15 -19
  107. package/docs/claude-code-guide.md +119 -0
  108. package/docs/cursor-guide.md +127 -0
  109. package/docs/roo-code-guide.md +140 -0
  110. package/docs/sample-output/simple-fullstack-greenfield/prd.md +42 -0
  111. package/docs/versioning-and-releases.md +16 -8
  112. package/docs/versions.md +5 -4
  113. package/docs/windsurf-guide.md +127 -0
  114. package/expansion-packs/README.md +112 -2
  115. package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/README.md +9 -9
  116. package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/agents/infra-devops-platform.md +15 -15
  117. package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/checklists/infrastructure-checklist.md +1 -1
  118. package/expansion-packs/infrastructure-devops/manifest.yml +38 -0
  119. package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/tasks/review-infrastructure.md +4 -4
  120. package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/tasks/validate-infrastructure.md +4 -4
  121. package/expansion-packs/infrastructure-devops/templates/infrastructure-architecture-tmpl.md +415 -0
  122. package/expansion-packs/infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
  123. package/package.json +11 -19
  124. package/tools/bmad-npx-wrapper.js +1 -1
  125. package/tools/builders/web-builder.js +28 -563
  126. package/tools/cli.js +22 -55
  127. package/tools/installer/README.md +53 -3
  128. package/tools/installer/bin/bmad.js +56 -294
  129. package/tools/installer/config/install.config.yml +139 -0
  130. package/tools/installer/lib/config-loader.js +34 -198
  131. package/tools/installer/lib/file-manager.js +5 -123
  132. package/tools/installer/lib/ide-setup.js +189 -545
  133. package/tools/installer/lib/installer.js +55 -1136
  134. package/tools/installer/package-lock.json +3 -3
  135. package/tools/installer/package.json +4 -4
  136. package/tools/installer/templates/claude-commands.md +7 -0
  137. package/tools/installer/templates/cursor-rules.md +22 -0
  138. package/tools/installer/templates/windsurf-rules.md +22 -0
  139. package/tools/lib/dependency-resolver.js +22 -22
  140. package/tools/upgraders/v3-to-v4-upgrader.js +43 -35
  141. package/tools/version-bump.js +1 -1
  142. package/tools/yaml-format.js +2 -2
  143. package/.github/FUNDING.yaml +0 -15
  144. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
  145. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -22
  146. package/.prettierignore +0 -21
  147. package/.prettierrc +0 -23
  148. package/bmad-core/agent-teams/team-all.yaml +0 -14
  149. package/bmad-core/agent-teams/team-fullstack.yaml +0 -18
  150. package/bmad-core/agent-teams/team-ide-minimal.yaml +0 -10
  151. package/bmad-core/agent-teams/team-no-ui.yaml +0 -13
  152. package/bmad-core/agents/architect.md +0 -63
  153. package/bmad-core/agents/bmad-master.md +0 -110
  154. package/bmad-core/agents/bmad-orchestrator.md +0 -140
  155. package/bmad-core/agents/dev.md +0 -57
  156. package/bmad-core/agents/qa.md +0 -55
  157. package/bmad-core/agents/sm.md +0 -46
  158. package/bmad-core/agents/ux-expert.md +0 -54
  159. package/bmad-core/core-config.yaml +0 -25
  160. package/bmad-core/data/bmad-kb.md +0 -803
  161. package/bmad-core/data/brainstorming-techniques.md +0 -36
  162. package/bmad-core/data/elicitation-methods.md +0 -134
  163. package/bmad-core/tasks/advanced-elicitation.md +0 -117
  164. package/bmad-core/tasks/create-brownfield-story.md +0 -355
  165. package/bmad-core/tasks/create-next-story.md +0 -114
  166. package/bmad-core/tasks/create-workflow-plan.md +0 -289
  167. package/bmad-core/tasks/document-project.md +0 -317
  168. package/bmad-core/tasks/facilitate-brainstorming-session.md +0 -136
  169. package/bmad-core/tasks/generate-ai-frontend-prompt.md +0 -51
  170. package/bmad-core/tasks/kb-mode-interaction.md +0 -70
  171. package/bmad-core/tasks/review-story.md +0 -145
  172. package/bmad-core/tasks/update-workflow-plan.md +0 -248
  173. package/bmad-core/tasks/validate-next-story.md +0 -134
  174. package/bmad-core/templates/architecture-tmpl.yaml +0 -650
  175. package/bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
  176. package/bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -476
  177. package/bmad-core/templates/brownfield-prd-tmpl.yaml +0 -280
  178. package/bmad-core/templates/competitor-analysis-tmpl.yaml +0 -293
  179. package/bmad-core/templates/front-end-architecture-tmpl.yaml +0 -206
  180. package/bmad-core/templates/front-end-spec-tmpl.yaml +0 -349
  181. package/bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -805
  182. package/bmad-core/templates/market-research-tmpl.yaml +0 -252
  183. package/bmad-core/templates/prd-tmpl.yaml +0 -202
  184. package/bmad-core/templates/project-brief-tmpl.yaml +0 -221
  185. package/bmad-core/templates/story-tmpl.yaml +0 -137
  186. package/bmad-core/utils/plan-management.md +0 -219
  187. package/bmad-core/workflows/brownfield-fullstack.yaml +0 -297
  188. package/bmad-core/workflows/brownfield-service.yaml +0 -187
  189. package/bmad-core/workflows/brownfield-ui.yaml +0 -197
  190. package/bmad-core/workflows/greenfield-service.yaml +0 -206
  191. package/bmad-core/workflows/greenfield-ui.yaml +0 -235
  192. package/common/tasks/create-doc.md +0 -79
  193. package/common/utils/bmad-doc-template.md +0 -325
  194. package/common/utils/workflow-management.md +0 -69
  195. package/dist/agents/analyst.txt +0 -2849
  196. package/dist/agents/architect.txt +0 -3505
  197. package/dist/agents/bmad-master.txt +0 -9588
  198. package/dist/agents/bmad-orchestrator.txt +0 -2232
  199. package/dist/agents/qa.txt +0 -388
  200. package/dist/agents/sm.txt +0 -673
  201. package/dist/agents/ux-expert.txt +0 -987
  202. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2401
  203. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1635
  204. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -825
  205. package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -11730
  206. package/dist/expansion-packs/bmad-creator-tools/agents/bmad-the-creator.txt +0 -2023
  207. package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2052
  208. package/dist/teams/team-all.txt +0 -11799
  209. package/dist/teams/team-fullstack.txt +0 -11129
  210. package/dist/teams/team-ide-minimal.txt +0 -4573
  211. package/dist/teams/team-no-ui.txt +0 -9684
  212. package/docs/GUIDING-PRINCIPLES.md +0 -91
  213. package/docs/agentic-tools/claude-code-guide.md +0 -19
  214. package/docs/agentic-tools/cline-guide.md +0 -16
  215. package/docs/agentic-tools/cursor-guide.md +0 -14
  216. package/docs/agentic-tools/gemini-cli-guide.md +0 -32
  217. package/docs/agentic-tools/github-copilot-guide.md +0 -42
  218. package/docs/agentic-tools/roo-code-guide.md +0 -15
  219. package/docs/agentic-tools/trae-guide.md +0 -14
  220. package/docs/agentic-tools/windsurf-guide.md +0 -14
  221. package/docs/core-architecture.md +0 -219
  222. package/docs/expansion-packs.md +0 -280
  223. package/docs/how-to-contribute-with-pull-requests.md +0 -158
  224. package/docs/template-markup-references.md +0 -86
  225. package/docs/user-guide.md +0 -1142
  226. package/docs/working-in-the-brownfield.md +0 -361
  227. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +0 -13
  228. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +0 -60
  229. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -68
  230. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -53
  231. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +0 -201
  232. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +0 -160
  233. package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +0 -7
  234. package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +0 -254
  235. package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +0 -651
  236. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +0 -111
  237. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +0 -216
  238. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +0 -308
  239. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +0 -613
  240. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +0 -356
  241. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +0 -343
  242. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +0 -253
  243. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
  244. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +0 -183
  245. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +0 -175
  246. package/expansion-packs/bmad-creator-tools/README.md +0 -8
  247. package/expansion-packs/bmad-creator-tools/agents/bmad-the-creator.md +0 -55
  248. package/expansion-packs/bmad-creator-tools/config.yaml +0 -5
  249. package/expansion-packs/bmad-creator-tools/tasks/generate-expansion-pack.md +0 -1020
  250. package/expansion-packs/bmad-creator-tools/templates/agent-teams-tmpl.yaml +0 -178
  251. package/expansion-packs/bmad-creator-tools/templates/agent-tmpl.yaml +0 -154
  252. package/expansion-packs/bmad-creator-tools/templates/expansion-pack-plan-tmpl.yaml +0 -120
  253. package/expansion-packs/bmad-infrastructure-devops/config.yaml +0 -8
  254. package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +0 -308
  255. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +0 -424
  256. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +0 -629
  257. package/tools/bump-all-versions.js +0 -107
  258. package/tools/bump-core-version.js +0 -57
  259. package/tools/bump-expansion-version.js +0 -78
  260. package/tools/installer/config/ide-agent-config.yaml +0 -58
  261. package/tools/installer/config/install.config.yaml +0 -91
  262. package/tools/lib/yaml-utils.js +0 -29
  263. package/tools/md-assets/web-agent-startup-instructions.md +0 -39
  264. package/tools/update-expansion-version.js +0 -54
  265. /package/{bmad-core → .bmad-core}/checklists/architect-checklist.md +0 -0
  266. /package/{bmad-core → .bmad-core}/checklists/pm-checklist.md +0 -0
  267. /package/{bmad-core → .bmad-core}/checklists/po-master-checklist.md +0 -0
  268. /package/{bmad-core → .bmad-core}/checklists/story-dod-checklist.md +0 -0
  269. /package/{bmad-core → .bmad-core}/data/technical-preferences.md +0 -0
  270. /package/{bmad-core → .bmad-core}/tasks/brownfield-create-epic.md +0 -0
  271. /package/{bmad-core → .bmad-core}/tasks/brownfield-create-story.md +0 -0
  272. /package/{bmad-core → .bmad-core}/tasks/correct-course.md +0 -0
  273. /package/{bmad-core → .bmad-core}/tasks/create-deep-research-prompt.md +0 -0
  274. /package/.github/workflows/{release.yaml → release.yml} +0 -0
@@ -0,0 +1,139 @@
1
+ installation-options:
2
+ full:
3
+ name: Complete BMAD Core
4
+ description: Copy the entire .bmad-core folder with all agents, templates, and tools
5
+ action: copy-folder
6
+ source: .bmad-core
7
+ single-agent:
8
+ name: Single Agent
9
+ description: Select and install a single agent with its dependencies
10
+ action: copy-agent
11
+ agent-dependencies:
12
+ core-files:
13
+ - .bmad-core/utils/template-format.md
14
+ dev:
15
+ - .bmad-core/templates/story-tmpl.md
16
+ - .bmad-core/checklists/story-dod-checklist.md
17
+ pm:
18
+ - .bmad-core/templates/prd-tmpl.md
19
+ - .bmad-core/templates/brownfield-prd-tmpl.md
20
+ - .bmad-core/checklists/pm-checklist.md
21
+ - .bmad-core/checklists/change-checklist.md
22
+ - .bmad-core/tasks/advanced-elicitation.md
23
+ - .bmad-core/tasks/create-doc.md
24
+ - .bmad-core/tasks/correct-course.md
25
+ - .bmad-core/tasks/create-deep-research-prompt.md
26
+ - .bmad-core/tasks/brownfield-create-epic.md
27
+ - .bmad-core/tasks/brownfield-create-story.md
28
+ - .bmad-core/tasks/execute-checklist.md
29
+ - .bmad-core/tasks/shard-doc.md
30
+ architect:
31
+ - .bmad-core/templates/architecture-tmpl.md
32
+ - .bmad-core/checklists/architect-checklist.md
33
+ sm:
34
+ - .bmad-core/templates/story-tmpl.md
35
+ - .bmad-core/checklists/story-draft-checklist.md
36
+ - .bmad-core/workflows/*.yml
37
+ po:
38
+ - .bmad-core/checklists/po-master-checklist.md
39
+ - .bmad-core/templates/acceptance-criteria-tmpl.md
40
+ analyst:
41
+ - .bmad-core/templates/prd-tmpl.md
42
+ - .bmad-core/tasks/advanced-elicitation.md
43
+ qa:
44
+ - .bmad-core/checklists/story-dod-checklist.md
45
+ - .bmad-core/templates/test-plan-tmpl.md
46
+ ux-expert:
47
+ - .bmad-core/templates/ux-tmpl.md
48
+ bmad-master:
49
+ - .bmad-core/templates/*.md
50
+ - .bmad-core/tasks/*.md
51
+ - .bmad-core/schemas/*.yml
52
+ bmad-orchestrator:
53
+ - .bmad-core/agent-teams/*.yml
54
+ - .bmad-core/workflows/*.yml
55
+ ide-configurations:
56
+ cursor:
57
+ name: Cursor
58
+ rule-dir: .cursor/rules/
59
+ format: multi-file
60
+ command-suffix: .mdc
61
+ instructions: |
62
+ # To use BMAD agents in Cursor:
63
+ # 1. Press Ctrl+L (Cmd+L on Mac) to open the chat
64
+ # 2. Type @agent-name (e.g., "@dev", "@pm", "@architect")
65
+ # 3. The agent will adopt that persona for the conversation
66
+ claude-code:
67
+ name: Claude Code
68
+ rule-dir: .claude/commands/
69
+ format: multi-file
70
+ command-suffix: .md
71
+ instructions: |
72
+ # To use BMAD agents in Claude Code:
73
+ # 1. Type /agent-name (e.g., "/dev", "/pm", "/architect")
74
+ # 2. Claude will switch to that agent's persona
75
+ windsurf:
76
+ name: Windsurf
77
+ rule-dir: .windsurf/rules/
78
+ format: multi-file
79
+ command-suffix: .md
80
+ instructions: |
81
+ # To use BMAD agents in Windsurf:
82
+ # 1. Type @agent-name (e.g., "@dev", "@pm")
83
+ # 2. Windsurf will adopt that agent's persona
84
+ roo:
85
+ name: Roo Code
86
+ format: custom-modes
87
+ file: .roomodes
88
+ instructions: |
89
+ # To use BMAD agents in Roo Code:
90
+ # 1. Open the mode selector (usually in the status bar)
91
+ # 2. Select any bmad-{agent} mode (e.g., "bmad-dev", "bmad-pm")
92
+ # 3. The AI will adopt that agent's full personality and capabilities
93
+ cline:
94
+ name: Cline
95
+ format: unknown
96
+ instructions: |
97
+ # Cline configuration coming soon
98
+ # Manual setup: Copy IDE agent files to your Cline configuration
99
+ available-agents:
100
+ - id: analyst
101
+ name: Business Analyst
102
+ file: .bmad-core/agents/analyst.md
103
+ description: Requirements gathering and analysis
104
+ - id: pm
105
+ name: Product Manager
106
+ file: .bmad-core/agents/pm.md
107
+ description: Product strategy and roadmap planning
108
+ - id: architect
109
+ name: Solution Architect
110
+ file: .bmad-core/agents/architect.md
111
+ description: Technical design and architecture
112
+ - id: po
113
+ name: Product Owner
114
+ file: .bmad-core/agents/po.md
115
+ description: Backlog management and prioritization
116
+ - id: sm
117
+ name: Scrum Master
118
+ file: .bmad-core/agents/sm.md
119
+ description: Agile process and story creation
120
+ - id: dev
121
+ name: Developer
122
+ file: .bmad-core/agents/dev.md
123
+ description: Code implementation and testing
124
+ - id: qa
125
+ name: QA Engineer
126
+ file: .bmad-core/agents/qa.md
127
+ description: Quality assurance and testing
128
+ - id: ux-expert
129
+ name: UX Expert
130
+ file: .bmad-core/agents/ux-expert.md
131
+ description: User experience design
132
+ - id: bmad-master
133
+ name: BMAD Master
134
+ file: .bmad-core/agents/bmad-master.md
135
+ description: BMAD framework expert and guide
136
+ - id: bmad-orchestrator
137
+ name: BMAD Orchestrator
138
+ file: .bmad-core/agents/bmad-orchestrator.md
139
+ description: Multi-agent workflow coordinator
@@ -1,11 +1,10 @@
1
1
  const fs = require('fs-extra');
2
2
  const path = require('path');
3
3
  const yaml = require('js-yaml');
4
- const { extractYamlFromAgent } = require('../../lib/yaml-utils');
5
4
 
6
5
  class ConfigLoader {
7
6
  constructor() {
8
- this.configPath = path.join(__dirname, '..', 'config', 'install.config.yaml');
7
+ this.configPath = path.join(__dirname, '..', 'config', 'install.config.yml');
9
8
  this.config = null;
10
9
  }
11
10
 
@@ -27,130 +26,48 @@ class ConfigLoader {
27
26
  }
28
27
 
29
28
  async getAvailableAgents() {
30
- const agentsDir = path.join(this.getBmadCorePath(), 'agents');
29
+ const config = await this.load();
30
+ return config['available-agents'] || [];
31
+ }
32
+
33
+ async getAgentDependencies(agentId) {
34
+ // Use DependencyResolver to dynamically parse agent dependencies
35
+ const DependencyResolver = require('../../lib/dependency-resolver');
36
+ const resolver = new DependencyResolver(path.join(__dirname, '..', '..', '..'));
31
37
 
32
38
  try {
33
- const entries = await fs.readdir(agentsDir, { withFileTypes: true });
34
- const agents = [];
39
+ const agentDeps = await resolver.resolveAgentDependencies(agentId);
35
40
 
36
- for (const entry of entries) {
37
- if (entry.isFile() && entry.name.endsWith('.md')) {
38
- const agentPath = path.join(agentsDir, entry.name);
39
- const agentId = path.basename(entry.name, '.md');
40
-
41
- try {
42
- const agentContent = await fs.readFile(agentPath, 'utf8');
43
-
44
- // Extract YAML block from agent file
45
- const yamlContentText = extractYamlFromAgent(agentContent);
46
- if (yamlContentText) {
47
- const yamlContent = yaml.load(yamlContentText);
48
- const agentConfig = yamlContent.agent || {};
49
-
50
- agents.push({
51
- id: agentId,
52
- name: agentConfig.title || agentConfig.name || agentId,
53
- file: `bmad-core/agents/${entry.name}`,
54
- description: agentConfig.whenToUse || 'No description available'
55
- });
56
- }
57
- } catch (error) {
58
- console.warn(`Failed to read agent ${entry.name}: ${error.message}`);
59
- }
60
- }
61
- }
41
+ // Convert to flat list of file paths
42
+ const depPaths = [];
62
43
 
63
- // Sort agents by name for consistent display
64
- agents.sort((a, b) => a.name.localeCompare(b.name));
44
+ // Add core files
45
+ const config = await this.load();
46
+ const coreFiles = config['agent-dependencies']?.['core-files'] || [];
47
+ depPaths.push(...coreFiles);
65
48
 
66
- return agents;
67
- } catch (error) {
68
- console.warn(`Failed to read agents directory: ${error.message}`);
69
- return [];
70
- }
71
- }
72
-
73
- async getAvailableExpansionPacks() {
74
- const expansionPacksDir = path.join(this.getBmadCorePath(), '..', 'expansion-packs');
75
-
76
- try {
77
- const entries = await fs.readdir(expansionPacksDir, { withFileTypes: true });
78
- const expansionPacks = [];
49
+ // Add agent file itself is already handled by installer
79
50
 
80
- for (const entry of entries) {
81
- if (entry.isDirectory() && !entry.name.startsWith('.')) {
82
- const packPath = path.join(expansionPacksDir, entry.name);
83
- const configPath = path.join(packPath, 'config.yaml');
84
-
85
- try {
86
- // Read config.yaml
87
- const configContent = await fs.readFile(configPath, 'utf8');
88
- const config = yaml.load(configContent);
89
-
90
- expansionPacks.push({
91
- id: entry.name,
92
- name: config.name || entry.name,
93
- description: config['short-title'] || config.description || 'No description available',
94
- fullDescription: config.description || config['short-title'] || 'No description available',
95
- version: config.version || '1.0.0',
96
- author: config.author || 'BMad Team',
97
- packPath: packPath,
98
- dependencies: config.dependencies?.agents || []
99
- });
100
- } catch (error) {
101
- // Fallback if config.yaml doesn't exist or can't be read
102
- console.warn(`Failed to read config for expansion pack ${entry.name}: ${error.message}`);
103
-
104
- // Try to derive info from directory name as fallback
105
- const name = entry.name
106
- .split('-')
107
- .map(word => word.charAt(0).toUpperCase() + word.slice(1))
108
- .join(' ');
109
-
110
- expansionPacks.push({
111
- id: entry.name,
112
- name: name,
113
- description: 'No description available',
114
- fullDescription: 'No description available',
115
- version: '1.0.0',
116
- author: 'BMad Team',
117
- packPath: packPath,
118
- dependencies: []
119
- });
120
- }
51
+ // Add all resolved resources
52
+ for (const resource of agentDeps.resources) {
53
+ const filePath = `.bmad-core/${resource.type}/${resource.id}.md`;
54
+ if (!depPaths.includes(filePath)) {
55
+ depPaths.push(filePath);
121
56
  }
122
57
  }
123
58
 
124
- return expansionPacks;
59
+ return depPaths;
125
60
  } catch (error) {
126
- console.warn(`Failed to read expansion packs directory: ${error.message}`);
127
- return [];
128
- }
129
- }
130
-
131
- async getAgentDependencies(agentId) {
132
- // Use DependencyResolver to dynamically parse agent dependencies
133
- const DependencyResolver = require('../../lib/dependency-resolver');
134
- const resolver = new DependencyResolver(path.join(__dirname, '..', '..', '..'));
135
-
136
- const agentDeps = await resolver.resolveAgentDependencies(agentId);
137
-
138
- // Convert to flat list of file paths
139
- const depPaths = [];
140
-
141
- // Core files and utilities are included automatically by DependencyResolver
142
-
143
- // Add agent file itself is already handled by installer
144
-
145
- // Add all resolved resources
146
- for (const resource of agentDeps.resources) {
147
- const filePath = `.bmad-core/${resource.type}/${resource.id}.md`;
148
- if (!depPaths.includes(filePath)) {
149
- depPaths.push(filePath);
150
- }
61
+ console.warn(`Failed to dynamically resolve dependencies for ${agentId}: ${error.message}`);
62
+
63
+ // Fall back to static config
64
+ const config = await this.load();
65
+ const dependencies = config['agent-dependencies'] || {};
66
+ const coreFiles = dependencies['core-files'] || [];
67
+ const agentDeps = dependencies[agentId] || [];
68
+
69
+ return [...coreFiles, ...agentDeps];
151
70
  }
152
-
153
- return depPaths;
154
71
  }
155
72
 
156
73
  async getIdeConfiguration(ide) {
@@ -160,94 +77,13 @@ class ConfigLoader {
160
77
  }
161
78
 
162
79
  getBmadCorePath() {
163
- // Get the path to bmad-core relative to the installer (now under tools)
164
- return path.join(__dirname, '..', '..', '..', 'bmad-core');
165
- }
166
-
167
- getDistPath() {
168
- // Get the path to dist directory relative to the installer
169
- return path.join(__dirname, '..', '..', '..', 'dist');
80
+ // Get the path to .bmad-core relative to the installer (now under tools)
81
+ return path.join(__dirname, '..', '..', '..', '.bmad-core');
170
82
  }
171
83
 
172
84
  getAgentPath(agentId) {
173
85
  return path.join(this.getBmadCorePath(), 'agents', `${agentId}.md`);
174
86
  }
175
-
176
- async getAvailableTeams() {
177
- const teamsDir = path.join(this.getBmadCorePath(), 'agent-teams');
178
-
179
- try {
180
- const entries = await fs.readdir(teamsDir, { withFileTypes: true });
181
- const teams = [];
182
-
183
- for (const entry of entries) {
184
- if (entry.isFile() && entry.name.endsWith('.yaml')) {
185
- const teamPath = path.join(teamsDir, entry.name);
186
-
187
- try {
188
- const teamContent = await fs.readFile(teamPath, 'utf8');
189
- const teamConfig = yaml.load(teamContent);
190
-
191
- if (teamConfig.bundle) {
192
- teams.push({
193
- id: path.basename(entry.name, '.yaml'),
194
- name: teamConfig.bundle.name || entry.name,
195
- description: teamConfig.bundle.description || 'Team configuration',
196
- icon: teamConfig.bundle.icon || '📋'
197
- });
198
- }
199
- } catch (error) {
200
- console.warn(`Warning: Could not load team config ${entry.name}: ${error.message}`);
201
- }
202
- }
203
- }
204
-
205
- return teams;
206
- } catch (error) {
207
- console.warn(`Warning: Could not scan teams directory: ${error.message}`);
208
- return [];
209
- }
210
- }
211
-
212
- getTeamPath(teamId) {
213
- return path.join(this.getBmadCorePath(), 'agent-teams', `${teamId}.yaml`);
214
- }
215
-
216
- async getTeamDependencies(teamId) {
217
- // Use DependencyResolver to dynamically parse team dependencies
218
- const DependencyResolver = require('../../lib/dependency-resolver');
219
- const resolver = new DependencyResolver(path.join(__dirname, '..', '..', '..'));
220
-
221
- try {
222
- const teamDeps = await resolver.resolveTeamDependencies(teamId);
223
-
224
- // Convert to flat list of file paths
225
- const depPaths = [];
226
-
227
- // Add team config file
228
- depPaths.push(`.bmad-core/agent-teams/${teamId}.yaml`);
229
-
230
- // Add all agents
231
- for (const agent of teamDeps.agents) {
232
- const filePath = `.bmad-core/agents/${agent.id}.md`;
233
- if (!depPaths.includes(filePath)) {
234
- depPaths.push(filePath);
235
- }
236
- }
237
-
238
- // Add all resolved resources
239
- for (const resource of teamDeps.resources) {
240
- const filePath = `.bmad-core/${resource.type}/${resource.id}.${resource.type === 'workflows' ? 'yaml' : 'md'}`;
241
- if (!depPaths.includes(filePath)) {
242
- depPaths.push(filePath);
243
- }
244
- }
245
-
246
- return depPaths;
247
- } catch (error) {
248
- throw new Error(`Failed to resolve team dependencies for ${teamId}: ${error.message}`);
249
- }
250
- }
251
87
  }
252
88
 
253
89
  module.exports = new ConfigLoader();
@@ -2,7 +2,6 @@ const fs = require("fs-extra");
2
2
  const path = require("path");
3
3
  const crypto = require("crypto");
4
4
  const glob = require("glob");
5
- const yaml = require("js-yaml");
6
5
 
7
6
  // Dynamic import for ES module
8
7
  let chalk;
@@ -17,7 +16,7 @@ async function initializeModules() {
17
16
  class FileManager {
18
17
  constructor() {
19
18
  this.manifestDir = ".bmad-core";
20
- this.manifestFile = "install-manifest.yaml";
19
+ this.manifestFile = "install-manifest.yml";
21
20
  }
22
21
 
23
22
  async copyFile(source, destination) {
@@ -83,24 +82,13 @@ class FileManager {
83
82
  this.manifestFile
84
83
  );
85
84
 
86
- // Read version from core-config.yaml
87
- const coreConfigPath = path.join(__dirname, "../../../bmad-core/core-config.yaml");
88
- let coreVersion = "unknown";
89
- try {
90
- const coreConfigContent = await fs.readFile(coreConfigPath, "utf8");
91
- const coreConfig = yaml.load(coreConfigContent);
92
- coreVersion = coreConfig.version || "unknown";
93
- } catch (error) {
94
- console.warn("Could not read version from core-config.yaml, using 'unknown'");
95
- }
96
-
97
85
  const manifest = {
98
- version: coreVersion,
86
+ version: require("../../../package.json").version,
99
87
  installed_at: new Date().toISOString(),
100
88
  install_type: config.installType,
101
89
  agent: config.agent || null,
90
+ ide_setup: config.ide || null,
102
91
  ides_setup: config.ides || [],
103
- expansion_packs: config.expansionPacks || [],
104
92
  files: [],
105
93
  };
106
94
 
@@ -118,7 +106,7 @@ class FileManager {
118
106
 
119
107
  // Write manifest
120
108
  await fs.ensureDir(path.dirname(manifestPath));
121
- await fs.writeFile(manifestPath, yaml.dump(manifest, { indent: 2 }));
109
+ await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));
122
110
 
123
111
  return manifest;
124
112
  }
@@ -132,22 +120,7 @@ class FileManager {
132
120
 
133
121
  try {
134
122
  const content = await fs.readFile(manifestPath, "utf8");
135
- return yaml.load(content);
136
- } catch (error) {
137
- return null;
138
- }
139
- }
140
-
141
- async readExpansionPackManifest(installDir, packId) {
142
- const manifestPath = path.join(
143
- installDir,
144
- `.${packId}`,
145
- this.manifestFile
146
- );
147
-
148
- try {
149
- const content = await fs.readFile(manifestPath, "utf8");
150
- return yaml.load(content);
123
+ return JSON.parse(content);
151
124
  } catch (error) {
152
125
  return null;
153
126
  }
@@ -168,33 +141,6 @@ class FileManager {
168
141
  return modified;
169
142
  }
170
143
 
171
- async checkFileIntegrity(installDir, manifest) {
172
- const result = {
173
- missing: [],
174
- modified: []
175
- };
176
-
177
- for (const file of manifest.files) {
178
- const filePath = path.join(installDir, file.path);
179
-
180
- // Skip checking the manifest file itself - it will always be different due to timestamps
181
- if (file.path.endsWith('install-manifest.yaml')) {
182
- continue;
183
- }
184
-
185
- if (!(await this.pathExists(filePath))) {
186
- result.missing.push(file.path);
187
- } else {
188
- const currentHash = await this.calculateFileHash(filePath);
189
- if (currentHash && currentHash !== file.hash) {
190
- result.modified.push(file.path);
191
- }
192
- }
193
- }
194
-
195
- return result;
196
- }
197
-
198
144
  async backupFile(filePath) {
199
145
  const backupPath = filePath + ".bak";
200
146
  let counter = 1;
@@ -235,70 +181,6 @@ class FileManager {
235
181
  async removeDirectory(dirPath) {
236
182
  await fs.remove(dirPath);
237
183
  }
238
-
239
- async createExpansionPackManifest(installDir, packId, config, files) {
240
- const manifestPath = path.join(
241
- installDir,
242
- `.${packId}`,
243
- this.manifestFile
244
- );
245
-
246
- const manifest = {
247
- version: config.expansionPackVersion || require("../../../package.json").version,
248
- installed_at: new Date().toISOString(),
249
- install_type: config.installType,
250
- expansion_pack_id: config.expansionPackId,
251
- expansion_pack_name: config.expansionPackName,
252
- ides_setup: config.ides || [],
253
- files: [],
254
- };
255
-
256
- // Add file information
257
- for (const file of files) {
258
- const filePath = path.join(installDir, file);
259
- const hash = await this.calculateFileHash(filePath);
260
-
261
- manifest.files.push({
262
- path: file,
263
- hash: hash,
264
- modified: false,
265
- });
266
- }
267
-
268
- // Write manifest
269
- await fs.ensureDir(path.dirname(manifestPath));
270
- await fs.writeFile(manifestPath, yaml.dump(manifest, { indent: 2 }));
271
-
272
- return manifest;
273
- }
274
-
275
- async modifyCoreConfig(installDir, config) {
276
- const coreConfigPath = path.join(installDir, '.bmad-core', 'core-config.yaml');
277
-
278
- try {
279
- // Read the existing core-config.yaml
280
- const coreConfigContent = await fs.readFile(coreConfigPath, 'utf8');
281
- const coreConfig = yaml.load(coreConfigContent);
282
-
283
- // Modify sharding settings if provided
284
- if (config.prdSharded !== undefined) {
285
- coreConfig.prd.prdSharded = config.prdSharded;
286
- }
287
-
288
- if (config.architectureSharded !== undefined) {
289
- coreConfig.architecture.architectureSharded = config.architectureSharded;
290
- }
291
-
292
- // Write back the modified config
293
- await fs.writeFile(coreConfigPath, yaml.dump(coreConfig, { indent: 2 }));
294
-
295
- return true;
296
- } catch (error) {
297
- await initializeModules();
298
- console.error(chalk.red(`Failed to modify core-config.yaml:`), error.message);
299
- return false;
300
- }
301
- }
302
184
  }
303
185
 
304
186
  module.exports = new FileManager();