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
package/tools/cli.js CHANGED
@@ -10,7 +10,7 @@ const program = new Command();
10
10
 
11
11
  program
12
12
  .name('bmad-build')
13
- .description('BMad-Method build tool for creating web bundles')
13
+ .description('BMAD-METHOD build tool for creating web bundles')
14
14
  .version('4.0.0');
15
15
 
16
16
  program
@@ -18,8 +18,6 @@ program
18
18
  .description('Build web bundles for agents and teams')
19
19
  .option('-a, --agents-only', 'Build only agent bundles')
20
20
  .option('-t, --teams-only', 'Build only team bundles')
21
- .option('-e, --expansions-only', 'Build only expansion pack bundles')
22
- .option('--no-expansions', 'Skip building expansion packs')
23
21
  .option('--no-clean', 'Skip cleaning output directories')
24
22
  .action(async (options) => {
25
23
  const builder = new WebBuilder({
@@ -32,23 +30,28 @@ program
32
30
  await builder.cleanOutputDirs();
33
31
  }
34
32
 
35
- if (options.expansionsOnly) {
36
- console.log('Building expansion pack bundles...');
37
- await builder.buildAllExpansionPacks({ clean: false });
38
- } else {
39
- if (!options.teamsOnly) {
40
- console.log('Building agent bundles...');
41
- await builder.buildAgents();
42
- }
33
+ if (!options.teamsOnly) {
34
+ console.log('Building agent bundles...');
35
+ await builder.buildAgents();
36
+ }
43
37
 
44
- if (!options.agentsOnly) {
45
- console.log('Building team bundles...');
46
- await builder.buildTeams();
47
- }
38
+ if (!options.agentsOnly) {
39
+ console.log('Building team bundles...');
40
+ await builder.buildTeams();
41
+ }
48
42
 
49
- if (!options.noExpansions) {
50
- console.log('Building expansion pack bundles...');
51
- await builder.buildAllExpansionPacks({ clean: false });
43
+ // Generate IDE configuration folders
44
+ console.log('Generating IDE configuration folders...');
45
+ const installDir = process.cwd();
46
+
47
+ // Generate configurations for all supported IDEs
48
+ const ides = ['cursor', 'claude-code', 'windsurf', 'roo'];
49
+ for (const ide of ides) {
50
+ try {
51
+ console.log(`Setting up ${ide} integration...`);
52
+ await IdeSetup.setup(ide, installDir);
53
+ } catch (error) {
54
+ console.warn(`Warning: Failed to setup ${ide}:`, error.message);
52
55
  }
53
56
  }
54
57
 
@@ -59,32 +62,6 @@ program
59
62
  }
60
63
  });
61
64
 
62
- program
63
- .command('build:expansions')
64
- .description('Build web bundles for all expansion packs')
65
- .option('--expansion <name>', 'Build specific expansion pack only')
66
- .option('--no-clean', 'Skip cleaning output directories')
67
- .action(async (options) => {
68
- const builder = new WebBuilder({
69
- rootDir: process.cwd()
70
- });
71
-
72
- try {
73
- if (options.expansion) {
74
- console.log(`Building expansion pack: ${options.expansion}`);
75
- await builder.buildExpansionPack(options.expansion, { clean: options.clean });
76
- } else {
77
- console.log('Building all expansion packs...');
78
- await builder.buildAllExpansionPacks({ clean: options.clean });
79
- }
80
-
81
- console.log('Expansion pack build completed successfully!');
82
- } catch (error) {
83
- console.error('Expansion pack build failed:', error.message);
84
- process.exit(1);
85
- }
86
- });
87
-
88
65
  program
89
66
  .command('list:agents')
90
67
  .description('List all available agents')
@@ -95,16 +72,6 @@ program
95
72
  agents.forEach(agent => console.log(` - ${agent}`));
96
73
  });
97
74
 
98
- program
99
- .command('list:expansions')
100
- .description('List all available expansion packs')
101
- .action(async () => {
102
- const builder = new WebBuilder({ rootDir: process.cwd() });
103
- const expansions = await builder.listExpansionPacks();
104
- console.log('Available expansion packs:');
105
- expansions.forEach(expansion => console.log(` - ${expansion}`));
106
- });
107
-
108
75
  program
109
76
  .command('validate')
110
77
  .description('Validate agent and team configurations')
@@ -136,7 +103,7 @@ program
136
103
 
137
104
  program
138
105
  .command('upgrade')
139
- .description('Upgrade a BMad-Method V3 project to V4')
106
+ .description('Upgrade a BMAD-METHOD V3 project to V4')
140
107
  .option('-p, --project <path>', 'Path to V3 project (defaults to current directory)')
141
108
  .option('--dry-run', 'Show what would be changed without making changes')
142
109
  .option('--no-backup', 'Skip creating backup (not recommended)')
@@ -1,8 +1,58 @@
1
- # BMad Method Installer
1
+ # BMAD Method Installer
2
+
3
+ This directory contains the BMAD Method installer implementation.
4
+
5
+ ## Structure
6
+
7
+ ```text
8
+ installer/
9
+ ├── bin/ # CLI entry points
10
+ │ └── bmad.js # Main CLI executable
11
+ ├── lib/ # Core implementation
12
+ │ ├── installer.js # Main installation logic
13
+ │ ├── updater.js # Update management
14
+ │ ├── config-loader.js # YAML config parsing
15
+ │ ├── file-manager.js # File operations
16
+ │ ├── ide-setup.js # IDE-specific setup
17
+ │ └── prompts.js # Interactive CLI prompts
18
+ ├── config/ # Configuration files
19
+ │ └── install.config.yml # Installation profiles
20
+ ├── templates/ # IDE template files
21
+ │ ├── cursor-rules.md # Cursor template
22
+ │ ├── claude-commands.md # Claude Code template
23
+ │ └── windsurf-rules.md # Windsurf template
24
+ └── package.json # NPM package configuration
25
+ ```
26
+
27
+ ## Installation Profiles
28
+
29
+ - **minimal**: IDE agents only (best for beginners)
30
+ - **core**: IDE + Web agents
31
+ - **teams**: Full team workflows
32
+ - **developer**: Everything including creation tools
2
33
 
3
34
  ## Usage
4
35
 
5
- ```bash
36
+ ````bash
6
37
  # Interactive installation
7
38
  npx bmad-method install
8
- ```
39
+
40
+ # Direct profile installation
41
+ npx bmad-method install --profile=minimal
42
+
43
+ # Update existing installation
44
+ npx bmad-method update
45
+ ```text
46
+
47
+ ## Development
48
+
49
+ ```bash
50
+ # Install dependencies
51
+ npm install
52
+
53
+ # Run tests
54
+ npm test
55
+
56
+ # Lint code
57
+ npm run lint
58
+ ````
@@ -1,9 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const { program } = require('commander');
4
- const path = require('path');
5
- const fs = require('fs').promises;
6
- const yaml = require('js-yaml');
7
4
 
8
5
  // Dynamic imports for ES modules
9
6
  let chalk, inquirer;
@@ -42,35 +39,29 @@ try {
42
39
 
43
40
  program
44
41
  .version(version)
45
- .description('BMad Method installer - Universal AI agent framework for any domain');
42
+ .description('BMAD Method installer - AI-powered Agile development framework');
46
43
 
47
44
  program
48
45
  .command('install')
49
- .description('Install BMad Method agents and tools')
50
- .option('-f, --full', 'Install complete BMad Method')
51
- .option('-x, --expansion-only', 'Install only expansion packs (no bmad-core)')
52
- .option('-d, --directory <path>', 'Installation directory')
53
- .option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, trae, roo, cline, gemini, github-copilot, other)')
54
- .option('-e, --expansion-packs <packs...>', 'Install specific expansion packs (can specify multiple)')
46
+ .description('Install BMAD Method agents and tools')
47
+ .option('-f, --full', 'Install complete .bmad-core folder')
48
+ .option('-a, --agent <agent>', 'Install specific agent with dependencies')
49
+ .option('-d, --directory <path>', 'Installation directory (default: .bmad-core)')
50
+ .option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, roo)')
55
51
  .action(async (options) => {
56
52
  try {
57
53
  await initializeModules();
58
- if (!options.full && !options.expansionOnly) {
54
+ if (!options.full && !options.agent) {
59
55
  // Interactive mode
60
56
  const answers = await promptInstallation();
61
- if (!answers._alreadyInstalled) {
62
- await installer.install(answers);
63
- }
57
+ await installer.install(answers);
64
58
  } else {
65
59
  // Direct mode
66
- let installType = 'full';
67
- if (options.expansionOnly) installType = 'expansion-only';
68
-
69
60
  const config = {
70
- installType,
71
- directory: options.directory || '.',
72
- ides: (options.ide || []).filter(ide => ide !== 'other'),
73
- expansionPacks: options.expansionPacks || []
61
+ installType: options.full ? 'full' : 'single-agent',
62
+ agent: options.agent,
63
+ directory: options.directory || '.bmad-core',
64
+ ides: options.ide || []
74
65
  };
75
66
  await installer.install(config);
76
67
  }
@@ -83,7 +74,7 @@ program
83
74
 
84
75
  program
85
76
  .command('update')
86
- .description('Update existing BMad installation')
77
+ .description('Update existing BMAD installation')
87
78
  .option('--force', 'Force update, overwriting modified files')
88
79
  .option('--dry-run', 'Show what would be updated without making changes')
89
80
  .action(async () => {
@@ -97,11 +88,11 @@ program
97
88
  });
98
89
 
99
90
  program
100
- .command('list:expansions')
101
- .description('List available expansion packs')
91
+ .command('list')
92
+ .description('List available agents')
102
93
  .action(async () => {
103
94
  try {
104
- await installer.listExpansionPacks();
95
+ await installer.listAgents();
105
96
  } catch (error) {
106
97
  if (!chalk) await initializeModules();
107
98
  console.error(chalk.red('Error:'), error.message);
@@ -124,156 +115,56 @@ program
124
115
 
125
116
  async function promptInstallation() {
126
117
  await initializeModules();
127
- console.log(chalk.bold.blue(`\nWelcome to BMad Method Installer v${version}\n`));
118
+ console.log(chalk.bold.blue(`\nWelcome to BMAD Method Installer v${version}\n`));
128
119
 
129
120
  const answers = {};
130
121
 
131
- // Ask for installation directory first
122
+ // Ask for installation directory
132
123
  const { directory } = await inquirer.prompt([
133
124
  {
134
125
  type: 'input',
135
126
  name: 'directory',
136
- message: 'Enter the full path to your project directory where BMad should be installed:',
137
- validate: (input) => {
138
- if (!input.trim()) {
139
- return 'Please enter a valid project path';
140
- }
141
- return true;
142
- }
127
+ message: 'Where would you like to install BMAD?',
128
+ default: '.bmad-core'
143
129
  }
144
130
  ]);
145
131
  answers.directory = directory;
146
132
 
147
- // Detect existing installations
148
- const installDir = path.resolve(directory);
149
- const state = await installer.detectInstallationState(installDir);
150
-
151
- // Check for existing expansion packs
152
- const existingExpansionPacks = state.expansionPacks || {};
153
-
154
- // Get available expansion packs
155
- const availableExpansionPacks = await installer.getAvailableExpansionPacks();
156
-
157
- // Build choices list
158
- const choices = [];
159
-
160
- // Load core config to get short-title
161
- const coreConfigPath = path.join(__dirname, '..', '..', '..', 'bmad-core', 'core-config.yaml');
162
- const coreConfig = yaml.load(await fs.readFile(coreConfigPath, 'utf8'));
163
- const coreShortTitle = coreConfig['short-title'] || 'BMad Agile Core System';
164
-
165
- // Add BMad core option
166
- let bmadOptionText;
167
- if (state.type === 'v4_existing') {
168
- const currentVersion = state.manifest?.version || 'unknown';
169
- const newVersion = coreConfig.version || 'unknown'; // Use version from core-config.yaml
170
- const versionInfo = currentVersion === newVersion
171
- ? `(v${currentVersion} - reinstall)`
172
- : `(v${currentVersion} → v${newVersion})`;
173
- bmadOptionText = `Update ${coreShortTitle} ${versionInfo} .bmad-core`;
174
- } else {
175
- bmadOptionText = `Install ${coreShortTitle} (v${coreConfig.version || version}) .bmad-core`;
176
- }
177
-
178
- choices.push({
179
- name: bmadOptionText,
180
- value: 'bmad-core',
181
- checked: true
182
- });
183
-
184
- // Add expansion pack options
185
- for (const pack of availableExpansionPacks) {
186
- const existing = existingExpansionPacks[pack.id];
187
- let packOptionText;
188
-
189
- if (existing) {
190
- const currentVersion = existing.manifest?.version || 'unknown';
191
- const newVersion = pack.version;
192
- const versionInfo = currentVersion === newVersion
193
- ? `(v${currentVersion} - reinstall)`
194
- : `(v${currentVersion} → v${newVersion})`;
195
- packOptionText = `Update ${pack.description} ${versionInfo} .${pack.id}`;
196
- } else {
197
- packOptionText = `Install ${pack.description} (v${pack.version}) .${pack.id}`;
198
- }
199
-
200
- choices.push({
201
- name: packOptionText,
202
- value: pack.id,
203
- checked: false
204
- });
205
- }
206
-
207
- // Ask what to install
208
- const { selectedItems } = await inquirer.prompt([
133
+ // Ask for installation type
134
+ const { installType } = await inquirer.prompt([
209
135
  {
210
- type: 'checkbox',
211
- name: 'selectedItems',
212
- message: 'Select what to install/update (use space to select, enter to continue):',
213
- choices: choices,
214
- validate: (selected) => {
215
- if (selected.length === 0) {
216
- return 'Please select at least one item to install';
136
+ type: 'list',
137
+ name: 'installType',
138
+ message: 'How would you like to install BMAD?',
139
+ choices: [
140
+ {
141
+ name: 'Complete installation (recommended) - All agents and tools',
142
+ value: 'full'
143
+ },
144
+ {
145
+ name: 'Single agent - Choose one agent to install',
146
+ value: 'single-agent'
217
147
  }
218
- return true;
219
- }
148
+ ]
220
149
  }
221
150
  ]);
222
-
223
- // Process selections
224
- answers.installType = selectedItems.includes('bmad-core') ? 'full' : 'expansion-only';
225
- answers.expansionPacks = selectedItems.filter(item => item !== 'bmad-core');
151
+ answers.installType = installType;
226
152
 
227
- // Ask sharding questions if installing BMad core
228
- if (selectedItems.includes('bmad-core')) {
229
- console.log(chalk.cyan('\n📋 Document Organization Settings'));
230
- console.log(chalk.dim('Configure how your project documentation should be organized.\n'));
231
-
232
- // Ask about PRD sharding
233
- const { prdSharded } = await inquirer.prompt([
234
- {
235
- type: 'confirm',
236
- name: 'prdSharded',
237
- message: 'Will the PRD (Product Requirements Document) be sharded into multiple files?',
238
- default: true
239
- }
240
- ]);
241
- answers.prdSharded = prdSharded;
242
-
243
- // Ask about architecture sharding
244
- const { architectureSharded } = await inquirer.prompt([
153
+ // If single agent, ask which one
154
+ if (installType === 'single-agent') {
155
+ const agents = await installer.getAvailableAgents();
156
+ const { agent } = await inquirer.prompt([
245
157
  {
246
- type: 'confirm',
247
- name: 'architectureSharded',
248
- message: 'Will the architecture documentation be sharded into multiple files?',
249
- default: true
158
+ type: 'list',
159
+ name: 'agent',
160
+ message: 'Select an agent to install:',
161
+ choices: agents.map(a => ({
162
+ name: `${a.id} - ${a.name} (${a.description})`,
163
+ value: a.id
164
+ }))
250
165
  }
251
166
  ]);
252
- answers.architectureSharded = architectureSharded;
253
-
254
- // Show warning if architecture sharding is disabled
255
- if (!architectureSharded) {
256
- console.log(chalk.yellow.bold('\n⚠️ IMPORTANT: Architecture Sharding Disabled'));
257
- console.log(chalk.yellow('With architecture sharding disabled, you should still create the files listed'));
258
- console.log(chalk.yellow('in devLoadAlwaysFiles (like coding-standards.md, tech-stack.md, source-tree.md)'));
259
- console.log(chalk.yellow('as these are used by the dev agent at runtime.'));
260
- console.log(chalk.yellow('\nAlternatively, you can remove these files from the devLoadAlwaysFiles list'));
261
- console.log(chalk.yellow('in your core-config.yaml after installation.'));
262
-
263
- const { acknowledge } = await inquirer.prompt([
264
- {
265
- type: 'confirm',
266
- name: 'acknowledge',
267
- message: 'Do you acknowledge this requirement and want to proceed?',
268
- default: false
269
- }
270
- ]);
271
-
272
- if (!acknowledge) {
273
- console.log(chalk.red('Installation cancelled.'));
274
- process.exit(0);
275
- }
276
- }
167
+ answers.agent = agent;
277
168
  }
278
169
 
279
170
  // Ask for IDE configuration
@@ -281,151 +172,22 @@ async function promptInstallation() {
281
172
  {
282
173
  type: 'checkbox',
283
174
  name: 'ides',
284
- message: 'Which IDE(s) are you using? (press Enter to skip IDE setup, or select any to configure):',
175
+ message: 'Which IDE(s) are you using? (Select all that apply)',
285
176
  choices: [
286
177
  { name: 'Cursor', value: 'cursor' },
287
178
  { name: 'Claude Code', value: 'claude-code' },
288
179
  { name: 'Windsurf', value: 'windsurf' },
289
- { name: 'Trae', value: 'trae' }, // { name: 'Trae', value: 'trae'}
290
- { name: 'Roo Code', value: 'roo' },
291
- { name: 'Cline', value: 'cline' },
292
- { name: 'Gemini CLI', value: 'gemini' },
293
- { name: 'Github Copilot', value: 'github-copilot' }
294
- ]
295
- }
296
- ]);
297
-
298
- // Use selected IDEs directly
299
- answers.ides = ides;
300
-
301
- // Configure GitHub Copilot immediately if selected
302
- if (ides.includes('github-copilot')) {
303
- console.log(chalk.cyan('\n🔧 GitHub Copilot Configuration'));
304
- console.log(chalk.dim('BMad works best with specific VS Code settings for optimal agent experience.\n'));
305
-
306
- const { configChoice } = await inquirer.prompt([
307
- {
308
- type: 'list',
309
- name: 'configChoice',
310
- message: chalk.yellow('How would you like to configure GitHub Copilot settings?'),
311
- choices: [
312
- {
313
- name: 'Use recommended defaults (fastest setup)',
314
- value: 'defaults'
315
- },
316
- {
317
- name: 'Configure each setting manually (customize to your preferences)',
318
- value: 'manual'
319
- },
320
- {
321
- name: 'Skip settings configuration (I\'ll configure manually later)',
322
- value: 'skip'
323
- }
324
- ],
325
- default: 'defaults'
180
+ { name: 'Roo Code', value: 'roo' }
181
+ ],
182
+ validate: (answer) => {
183
+ if (answer.length < 1) {
184
+ return 'You must choose at least one IDE, or press Ctrl+C to skip IDE setup.';
185
+ }
186
+ return true;
326
187
  }
327
- ]);
328
-
329
- answers.githubCopilotConfig = { configChoice };
330
- }
331
-
332
- // Ask for web bundles installation
333
- const { includeWebBundles } = await inquirer.prompt([
334
- {
335
- type: 'confirm',
336
- name: 'includeWebBundles',
337
- message: 'Would you like to include pre-built web bundles? (standalone files for ChatGPT, Claude, Gemini)',
338
- default: false
339
188
  }
340
189
  ]);
341
-
342
- if (includeWebBundles) {
343
- console.log(chalk.cyan('\n📦 Web bundles are standalone files perfect for web AI platforms.'));
344
- console.log(chalk.dim(' You can choose different teams/agents than your IDE installation.\n'));
345
-
346
- const { webBundleType } = await inquirer.prompt([
347
- {
348
- type: 'list',
349
- name: 'webBundleType',
350
- message: 'What web bundles would you like to include?',
351
- choices: [
352
- {
353
- name: 'All available bundles (agents, teams, expansion packs)',
354
- value: 'all'
355
- },
356
- {
357
- name: 'Specific teams only',
358
- value: 'teams'
359
- },
360
- {
361
- name: 'Individual agents only',
362
- value: 'agents'
363
- },
364
- {
365
- name: 'Custom selection',
366
- value: 'custom'
367
- }
368
- ]
369
- }
370
- ]);
371
-
372
- answers.webBundleType = webBundleType;
373
-
374
- // If specific teams, let them choose which teams
375
- if (webBundleType === 'teams' || webBundleType === 'custom') {
376
- const teams = await installer.getAvailableTeams();
377
- const { selectedTeams } = await inquirer.prompt([
378
- {
379
- type: 'checkbox',
380
- name: 'selectedTeams',
381
- message: 'Select team bundles to include:',
382
- choices: teams.map(t => ({
383
- name: `${t.icon || '📋'} ${t.name}: ${t.description}`,
384
- value: t.id,
385
- checked: webBundleType === 'teams' // Check all if teams-only mode
386
- })),
387
- validate: (answer) => {
388
- if (answer.length < 1) {
389
- return 'You must select at least one team.';
390
- }
391
- return true;
392
- }
393
- }
394
- ]);
395
- answers.selectedWebBundleTeams = selectedTeams;
396
- }
397
-
398
- // If custom selection, also ask about individual agents
399
- if (webBundleType === 'custom') {
400
- const { includeIndividualAgents } = await inquirer.prompt([
401
- {
402
- type: 'confirm',
403
- name: 'includeIndividualAgents',
404
- message: 'Also include individual agent bundles?',
405
- default: true
406
- }
407
- ]);
408
- answers.includeIndividualAgents = includeIndividualAgents;
409
- }
410
-
411
- const { webBundlesDirectory } = await inquirer.prompt([
412
- {
413
- type: 'input',
414
- name: 'webBundlesDirectory',
415
- message: 'Enter directory for web bundles:',
416
- default: `${answers.directory}/web-bundles`,
417
- validate: (input) => {
418
- if (!input.trim()) {
419
- return 'Please enter a valid directory path';
420
- }
421
- return true;
422
- }
423
- }
424
- ]);
425
- answers.webBundlesDirectory = webBundlesDirectory;
426
- }
427
-
428
- answers.includeWebBundles = includeWebBundles;
190
+ answers.ides = ides;
429
191
 
430
192
  return answers;
431
193
  }