bmad-method 4.4.2 → 4.5.1

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 (95) hide show
  1. package/.prettierignore +22 -0
  2. package/.prettierrc +23 -0
  3. package/CHANGELOG.md +25 -0
  4. package/README.md +41 -14
  5. package/bmad-core/agents/bmad-orchestrator.md +11 -11
  6. package/bmad-core/agents/sm.md +1 -1
  7. package/bmad-core/tasks/shard-doc.md +3 -5
  8. package/bmad-core/templates/architecture-tmpl.md +2 -2
  9. package/bmad-core/templates/brownfield-architecture-tmpl.md +4 -4
  10. package/bmad-core/templates/front-end-spec-tmpl.md +4 -4
  11. package/bmad-core/templates/fullstack-architecture-tmpl.md +2 -2
  12. package/bmad-core/utils/workflow-management.md +4 -4
  13. package/{bmad-core/web-bundles → dist}/agents/bmad-master.txt +0 -176
  14. package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles/teams/team-game-dev.txt → dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt} +4 -4
  15. package/dist/expansion-packs/expansion-creator/agents/bmad-the-creator.txt +1561 -0
  16. package/dist/teams/team-all.txt +10307 -0
  17. package/dist/teams/team-fullstack.txt +9659 -0
  18. package/dist/teams/team-ide-minimal.txt +2739 -0
  19. package/dist/teams/team-no-ui.txt +8519 -0
  20. package/docs/claude-code-guide.md +6 -4
  21. package/docs/cursor-guide.md +8 -4
  22. package/docs/roo-code-guide.md +8 -6
  23. package/docs/windsurf-guide.md +6 -4
  24. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yml +12 -0
  25. package/expansion-packs/expansion-creator/README.md +8 -0
  26. package/expansion-packs/expansion-creator/agents/bmad-the-creator.md +53 -0
  27. package/expansion-packs/expansion-creator/common-tasks/create-doc.md +74 -0
  28. package/expansion-packs/expansion-creator/common-tasks/execute-checklist.md +97 -0
  29. package/expansion-packs/expansion-creator/manifest.yml +12 -0
  30. package/{creator-tools → expansion-packs/expansion-creator}/tasks/create-agent.md +4 -4
  31. package/expansion-packs/expansion-creator/tasks/generate-expansion-pack.md +1026 -0
  32. package/expansion-packs/expansion-creator/templates/agent-teams-tmpl.md +154 -0
  33. package/expansion-packs/expansion-creator/templates/agent-tmpl.md +140 -0
  34. package/expansion-packs/expansion-creator/utils/template-format.md +26 -0
  35. package/expansion-packs/expansion-creator/utils/workflow-management.md +223 -0
  36. package/package.json +3 -15
  37. package/tools/builders/web-builder.js +2 -4
  38. package/tools/cli.js +0 -15
  39. package/tools/installer/bin/bmad.js +111 -24
  40. package/tools/installer/lib/config-loader.js +5 -0
  41. package/tools/installer/lib/ide-setup.js +4 -4
  42. package/tools/installer/lib/installer.js +130 -24
  43. package/tools/installer/package.json +1 -1
  44. package/.claude/commands/analyst.md +0 -63
  45. package/.claude/commands/architect.md +0 -65
  46. package/.claude/commands/bmad-master.md +0 -103
  47. package/.claude/commands/bmad-orchestrator.md +0 -132
  48. package/.claude/commands/dev.md +0 -74
  49. package/.claude/commands/pm.md +0 -63
  50. package/.claude/commands/po.md +0 -64
  51. package/.claude/commands/qa.md +0 -56
  52. package/.claude/commands/sm.md +0 -59
  53. package/.claude/commands/ux-expert.md +0 -70
  54. package/.cursor/rules/analyst.mdc +0 -77
  55. package/.cursor/rules/architect.mdc +0 -79
  56. package/.cursor/rules/bmad-master.mdc +0 -117
  57. package/.cursor/rules/bmad-orchestrator.mdc +0 -146
  58. package/.cursor/rules/dev.mdc +0 -88
  59. package/.cursor/rules/pm.mdc +0 -77
  60. package/.cursor/rules/po.mdc +0 -78
  61. package/.cursor/rules/qa.mdc +0 -70
  62. package/.cursor/rules/sm.mdc +0 -73
  63. package/.cursor/rules/ux-expert.mdc +0 -84
  64. package/.roo/.roomodes +0 -95
  65. package/.roo/README.md +0 -27
  66. package/.windsurf/rules/analyst.md +0 -71
  67. package/.windsurf/rules/architect.md +0 -73
  68. package/.windsurf/rules/bmad-master.md +0 -111
  69. package/.windsurf/rules/bmad-orchestrator.md +0 -140
  70. package/.windsurf/rules/dev.md +0 -82
  71. package/.windsurf/rules/pm.md +0 -71
  72. package/.windsurf/rules/po.md +0 -72
  73. package/.windsurf/rules/qa.md +0 -64
  74. package/.windsurf/rules/sm.md +0 -67
  75. package/.windsurf/rules/ux-expert.md +0 -78
  76. package/bmad-core/bmad-core-config.yml +0 -60
  77. package/bmad-core/templates/agent-tmpl.md +0 -58
  78. package/bmad-core/utils/agent-switcher.ide.md +0 -112
  79. package/creator-tools/tasks/generate-expansion-pack.md +0 -427
  80. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/team-game-dev.yml +0 -12
  81. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/team-game-dev.txt +0 -4395
  82. /package/{bmad-core/web-bundles → dist}/agents/analyst.txt +0 -0
  83. /package/{bmad-core/web-bundles → dist}/agents/architect.txt +0 -0
  84. /package/{bmad-core/web-bundles → dist}/agents/bmad-orchestrator.txt +0 -0
  85. /package/{bmad-core/web-bundles → dist}/agents/dev.txt +0 -0
  86. /package/{bmad-core/web-bundles → dist}/agents/pm.txt +0 -0
  87. /package/{bmad-core/web-bundles → dist}/agents/po.txt +0 -0
  88. /package/{bmad-core/web-bundles → dist}/agents/qa.txt +0 -0
  89. /package/{bmad-core/web-bundles → dist}/agents/sm.txt +0 -0
  90. /package/{bmad-core/web-bundles → dist}/agents/ux-expert.txt +0 -0
  91. /package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles → dist/expansion-packs/bmad-2d-phaser-game-dev}/agents/game-designer.txt +0 -0
  92. /package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles → dist/expansion-packs/bmad-2d-phaser-game-dev}/agents/game-developer.txt +0 -0
  93. /package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles → dist/expansion-packs/bmad-2d-phaser-game-dev}/agents/game-sm.txt +0 -0
  94. /package/{expansion-packs/bmad-infrastructure-devops/web-bundles → dist/expansion-packs/bmad-infrastructure-devops}/agents/infra-devops-platform.txt +0 -0
  95. /package/{bmad-core → expansion-packs/expansion-creator}/templates/expansion-pack-plan-tmpl.md +0 -0
@@ -210,7 +210,7 @@ async function promptInstallation() {
210
210
  {
211
211
  type: 'list',
212
212
  name: 'team',
213
- message: 'Select a team to install:',
213
+ message: 'Select a team to install in your IDE project folder:',
214
214
  choices: teams.map(t => ({
215
215
  name: `${t.icon || '📋'} ${t.name}: ${t.description}`,
216
216
  value: t.id
@@ -236,15 +236,11 @@ async function promptInstallation() {
236
236
  value: pack.id
237
237
  }));
238
238
  } else {
239
- message = 'Select expansion packs to install (optional):';
240
- choices = [
241
- { name: 'Skip expansion packs', value: 'none', checked: true },
242
- new inquirer.Separator(' --- Expansion Packs ---'),
243
- ...availableExpansionPacks.map(pack => ({
244
- name: `${pack.name} - ${pack.description}`,
245
- value: pack.id
246
- }))
247
- ];
239
+ message = 'Select expansion packs to install (press Enter to skip, or check any to install):';
240
+ choices = availableExpansionPacks.map(pack => ({
241
+ name: `${pack.name} - ${pack.description}`,
242
+ value: pack.id
243
+ }));
248
244
  }
249
245
 
250
246
  const { expansionPacks } = await inquirer.prompt([
@@ -262,8 +258,8 @@ async function promptInstallation() {
262
258
  }
263
259
  ]);
264
260
 
265
- // Filter out 'none' selection and only include actual expansion packs
266
- answers.expansionPacks = expansionPacks.filter(pack => pack !== 'none');
261
+ // Use selected expansion packs directly
262
+ answers.expansionPacks = expansionPacks;
267
263
  } else {
268
264
  answers.expansionPacks = [];
269
265
  }
@@ -280,25 +276,116 @@ async function promptInstallation() {
280
276
  {
281
277
  type: 'checkbox',
282
278
  name: 'ides',
283
- message: 'Which IDE(s) are you using? (Select all that apply)',
279
+ message: 'Which IDE(s) are you using? (press Enter to skip IDE setup, or select any to configure):',
284
280
  choices: [
285
281
  { name: 'Cursor', value: 'cursor' },
286
282
  { name: 'Claude Code', value: 'claude-code' },
287
283
  { name: 'Windsurf', value: 'windsurf' },
288
- { name: 'Roo Code', value: 'roo' },
289
- { name: 'Other (skip IDE setup)', value: 'other' }
290
- ],
291
- validate: (answer) => {
292
- if (answer.length < 1) {
293
- return 'You must choose at least one IDE option.';
294
- }
295
- return true;
296
- }
284
+ { name: 'Roo Code', value: 'roo' }
285
+ ]
297
286
  }
298
287
  ]);
299
288
 
300
- // Filter out 'other' from the list and only include actual IDEs
301
- answers.ides = ides.filter(ide => ide !== 'other');
289
+ // Use selected IDEs directly
290
+ answers.ides = ides;
291
+
292
+ // Ask for web bundles installation
293
+ const { includeWebBundles } = await inquirer.prompt([
294
+ {
295
+ type: 'confirm',
296
+ name: 'includeWebBundles',
297
+ message: 'Would you like to include pre-built web bundles? (standalone files for ChatGPT, Claude, Gemini)',
298
+ default: true
299
+ }
300
+ ]);
301
+
302
+ if (includeWebBundles) {
303
+ console.log(chalk.cyan('\n📦 Web bundles are standalone files perfect for web AI platforms.'));
304
+ console.log(chalk.dim(' You can choose different teams/agents than your IDE installation.\n'));
305
+
306
+ const { webBundleType } = await inquirer.prompt([
307
+ {
308
+ type: 'list',
309
+ name: 'webBundleType',
310
+ message: 'What web bundles would you like to include?',
311
+ choices: [
312
+ {
313
+ name: 'All available bundles (agents, teams, expansion packs)',
314
+ value: 'all'
315
+ },
316
+ {
317
+ name: 'Specific teams only',
318
+ value: 'teams'
319
+ },
320
+ {
321
+ name: 'Individual agents only',
322
+ value: 'agents'
323
+ },
324
+ {
325
+ name: 'Custom selection',
326
+ value: 'custom'
327
+ }
328
+ ]
329
+ }
330
+ ]);
331
+
332
+ answers.webBundleType = webBundleType;
333
+
334
+ // If specific teams, let them choose which teams
335
+ if (webBundleType === 'teams' || webBundleType === 'custom') {
336
+ const teams = await installer.getAvailableTeams();
337
+ const { selectedTeams } = await inquirer.prompt([
338
+ {
339
+ type: 'checkbox',
340
+ name: 'selectedTeams',
341
+ message: 'Select team bundles to include:',
342
+ choices: teams.map(t => ({
343
+ name: `${t.icon || '📋'} ${t.name}: ${t.description}`,
344
+ value: t.id,
345
+ checked: webBundleType === 'teams' // Check all if teams-only mode
346
+ })),
347
+ validate: (answer) => {
348
+ if (answer.length < 1) {
349
+ return 'You must select at least one team.';
350
+ }
351
+ return true;
352
+ }
353
+ }
354
+ ]);
355
+ answers.selectedWebBundleTeams = selectedTeams;
356
+ }
357
+
358
+ // If custom selection, also ask about individual agents
359
+ if (webBundleType === 'custom') {
360
+ const { includeIndividualAgents } = await inquirer.prompt([
361
+ {
362
+ type: 'confirm',
363
+ name: 'includeIndividualAgents',
364
+ message: 'Also include individual agent bundles?',
365
+ default: true
366
+ }
367
+ ]);
368
+ answers.includeIndividualAgents = includeIndividualAgents;
369
+ }
370
+
371
+ const { webBundlesDirectory } = await inquirer.prompt([
372
+ {
373
+ type: 'input',
374
+ name: 'webBundlesDirectory',
375
+ message: 'Enter directory for web bundles:',
376
+ default: `${directory}/web-bundles`,
377
+ validate: (input) => {
378
+ if (!input.trim()) {
379
+ return 'Please enter a valid directory path';
380
+ }
381
+ return true;
382
+ }
383
+ }
384
+ ]);
385
+ answers.webBundlesDirectory = webBundlesDirectory;
386
+ }
387
+
388
+ answers.includeWebBundles = includeWebBundles;
302
389
 
303
390
  return answers;
304
391
  }
@@ -115,6 +115,11 @@ class ConfigLoader {
115
115
  return path.join(__dirname, '..', '..', '..', 'bmad-core');
116
116
  }
117
117
 
118
+ getDistPath() {
119
+ // Get the path to dist directory relative to the installer
120
+ return path.join(__dirname, '..', '..', '..', 'dist');
121
+ }
122
+
118
123
  getAgentPath(agentId) {
119
124
  return path.join(this.getBmadCorePath(), 'agents', `${agentId}.md`);
120
125
  }
@@ -241,8 +241,8 @@ class IdeSetup {
241
241
  const rooDir = path.join(installDir, ".roo");
242
242
  await fileManager.ensureDirectory(rooDir);
243
243
 
244
- // Check for existing .roomodes file inside .roo directory
245
- const roomodesPath = path.join(rooDir, ".roomodes");
244
+ // Check for existing .roomodes file in project root
245
+ const roomodesPath = path.join(installDir, ".roomodes");
246
246
  let existingModes = [];
247
247
  let existingContent = "";
248
248
 
@@ -349,7 +349,7 @@ class IdeSetup {
349
349
  newModesContent += ` customInstructions: CRITICAL Read the full YML from .bmad-core/agents/${agentId}.md start activation to alter your state of being follow startup section instructions stay in this being until told to exit this mode\n`;
350
350
  newModesContent += ` groups:\n`;
351
351
  newModesContent += ` - read\n`;
352
-
352
+
353
353
  // Add permissions based on agent type
354
354
  const permissions = agentPermissions[agentId];
355
355
  if (permissions) {
@@ -379,7 +379,7 @@ class IdeSetup {
379
379
 
380
380
  // Write .roomodes file
381
381
  await fileManager.writeFile(roomodesPath, roomodesContent);
382
- console.log(chalk.green("✓ Created .roo/.roomodes file"));
382
+ console.log(chalk.green("✓ Created .roomodes file in project root"));
383
383
 
384
384
  // Create README in .roo directory
385
385
  const rooReadme = `# Roo Code Custom Modes for BMAD-METHOD
@@ -23,12 +23,23 @@ class Installer {
23
23
  const spinner = ora("Analyzing installation directory...").start();
24
24
 
25
25
  try {
26
- // Resolve installation directory
27
- let installDir = path.resolve(config.directory);
26
+ // Store the original CWD where npx was executed
27
+ const originalCwd = process.env.INIT_CWD || process.env.PWD || process.cwd();
28
+
29
+ // Resolve installation directory relative to where the user ran the command
30
+ let installDir = path.isAbsolute(config.directory)
31
+ ? config.directory
32
+ : path.resolve(originalCwd, config.directory);
33
+
28
34
  if (path.basename(installDir) === '.bmad-core') {
29
35
  // If user points directly to .bmad-core, treat its parent as the project root
30
36
  installDir = path.dirname(installDir);
31
37
  }
38
+
39
+ // Log resolved path for clarity
40
+ if (!path.isAbsolute(config.directory)) {
41
+ spinner.text = `Resolving "${config.directory}" to: ${installDir}`;
42
+ }
32
43
 
33
44
  // Check if directory exists and handle non-existent directories
34
45
  if (!(await fileManager.pathExists(installDir))) {
@@ -74,6 +85,7 @@ class Installer {
74
85
  }
75
86
  }
76
87
  ]);
88
+ // Preserve the original CWD for the recursive call
77
89
  config.directory = newDirectory;
78
90
  return await this.install(config); // Recursive call with new directory
79
91
  } else if (action === 'create') {
@@ -324,6 +336,12 @@ class Installer {
324
336
  const expansionFiles = await this.installExpansionPacks(installDir, config.expansionPacks, spinner);
325
337
  files.push(...expansionFiles);
326
338
 
339
+ // Install web bundles if requested
340
+ if (config.includeWebBundles && config.webBundlesDirectory) {
341
+ spinner.text = "Installing web bundles...";
342
+ await this.installWebBundles(config.webBundlesDirectory, config, spinner);
343
+ }
344
+
327
345
  // Set up IDE integration if requested
328
346
  const ides = config.ides || (config.ide ? [config.ide] : []);
329
347
  if (ides.length > 0) {
@@ -573,6 +591,11 @@ class Installer {
573
591
  console.log(chalk.green(`✓ Expansion packs installed: ${packNames}`));
574
592
  }
575
593
 
594
+ if (config.includeWebBundles && config.webBundlesDirectory) {
595
+ const bundleInfo = this.getWebBundleInfo(config);
596
+ console.log(chalk.green(`✓ Web bundles (${bundleInfo}) installed to: ${config.webBundlesDirectory}`));
597
+ }
598
+
576
599
  if (ides.length > 0) {
577
600
  const ideNames = ides.map(ide => {
578
601
  const ideConfig = configLoader.getIdeConfiguration(ide);
@@ -582,11 +605,13 @@ class Installer {
582
605
  }
583
606
 
584
607
  // Information about web bundles
585
- console.log(chalk.bold("\n📦 Web Bundles Available:"));
586
- console.log("Self-contained web bundles have been included in your installation:");
587
- console.log(chalk.cyan(` ${installDir}/.bmad-core/web-bundles/`));
588
- console.log("These bundles work independently without this installation and can be");
589
- console.log("shared, moved, or used in other projects as standalone files.");
608
+ if (!config.includeWebBundles) {
609
+ console.log(chalk.bold("\n📦 Web Bundles Available:"));
610
+ console.log("Pre-built web bundles are available and can be added later:");
611
+ console.log(chalk.cyan(" Run the installer again to add them to your project"));
612
+ console.log("These bundles work independently and can be shared, moved, or used");
613
+ console.log("in other projects as standalone files.");
614
+ }
590
615
 
591
616
  if (config.installType === "single-agent") {
592
617
  console.log(
@@ -786,23 +811,7 @@ class Installer {
786
811
  }
787
812
  }
788
813
 
789
- // Also copy web-bundles if they exist (to a different location)
790
- const webBundlesSource = path.join(expansionPackDir, 'web-bundles');
791
- if (await fileManager.pathExists(webBundlesSource)) {
792
- const files = glob.sync('**/*', {
793
- cwd: webBundlesSource,
794
- nodir: true
795
- });
796
-
797
- for (const file of files) {
798
- const sourcePath = path.join(webBundlesSource, file);
799
- const destPath = path.join(installDir, '.bmad-core', 'web-bundles', 'expansion-packs', packId, file);
800
-
801
- if (await fileManager.copyFile(sourcePath, destPath)) {
802
- installedFiles.push(path.join('.bmad-core', 'web-bundles', 'expansion-packs', packId, file));
803
- }
804
- }
805
- }
814
+ // Web bundles are now available in the dist/ directory and don't need to be copied
806
815
 
807
816
  console.log(chalk.green(`✓ Installed expansion pack: ${pack.name}`));
808
817
  } catch (error) {
@@ -813,6 +822,103 @@ class Installer {
813
822
  return installedFiles;
814
823
  }
815
824
 
825
+ getWebBundleInfo(config) {
826
+ const webBundleType = config.webBundleType || 'all';
827
+
828
+ switch (webBundleType) {
829
+ case 'all':
830
+ return 'all bundles';
831
+ case 'agents':
832
+ return 'individual agents only';
833
+ case 'teams':
834
+ return config.selectedWebBundleTeams ?
835
+ `teams: ${config.selectedWebBundleTeams.join(', ')}` :
836
+ 'selected teams';
837
+ case 'custom':
838
+ const parts = [];
839
+ if (config.selectedWebBundleTeams && config.selectedWebBundleTeams.length > 0) {
840
+ parts.push(`teams: ${config.selectedWebBundleTeams.join(', ')}`);
841
+ }
842
+ if (config.includeIndividualAgents) {
843
+ parts.push('individual agents');
844
+ }
845
+ return parts.length > 0 ? parts.join(' + ') : 'custom selection';
846
+ default:
847
+ return 'selected bundles';
848
+ }
849
+ }
850
+
851
+ async installWebBundles(webBundlesDirectory, config, spinner) {
852
+ // Ensure modules are initialized
853
+ await initializeModules();
854
+
855
+ try {
856
+ // Find the dist directory in the BMAD installation
857
+ const distDir = configLoader.getDistPath();
858
+
859
+ if (!(await fileManager.pathExists(distDir))) {
860
+ console.warn(chalk.yellow('Web bundles not found. Run "npm run build" to generate them.'));
861
+ return;
862
+ }
863
+
864
+ // Ensure web bundles directory exists
865
+ await fileManager.ensureDirectory(webBundlesDirectory);
866
+
867
+ const webBundleType = config.webBundleType || 'all';
868
+
869
+ if (webBundleType === 'all') {
870
+ // Copy the entire dist directory structure
871
+ await fileManager.copyDirectory(distDir, webBundlesDirectory);
872
+ console.log(chalk.green(`✓ Installed all web bundles to: ${webBundlesDirectory}`));
873
+ } else {
874
+ let copiedCount = 0;
875
+
876
+ // Copy specific selections based on type
877
+ if (webBundleType === 'agents' || (webBundleType === 'custom' && config.includeIndividualAgents)) {
878
+ const agentsSource = path.join(distDir, 'agents');
879
+ const agentsTarget = path.join(webBundlesDirectory, 'agents');
880
+ if (await fileManager.pathExists(agentsSource)) {
881
+ await fileManager.copyDirectory(agentsSource, agentsTarget);
882
+ console.log(chalk.green(`✓ Copied individual agent bundles`));
883
+ copiedCount += 10; // Approximate count for agents
884
+ }
885
+ }
886
+
887
+ if (webBundleType === 'teams' || webBundleType === 'custom') {
888
+ if (config.selectedWebBundleTeams && config.selectedWebBundleTeams.length > 0) {
889
+ const teamsSource = path.join(distDir, 'teams');
890
+ const teamsTarget = path.join(webBundlesDirectory, 'teams');
891
+ await fileManager.ensureDirectory(teamsTarget);
892
+
893
+ for (const teamId of config.selectedWebBundleTeams) {
894
+ const teamFile = `${teamId}.txt`;
895
+ const sourcePath = path.join(teamsSource, teamFile);
896
+ const targetPath = path.join(teamsTarget, teamFile);
897
+
898
+ if (await fileManager.pathExists(sourcePath)) {
899
+ await fileManager.copyFile(sourcePath, targetPath);
900
+ copiedCount++;
901
+ console.log(chalk.green(`✓ Copied team bundle: ${teamId}`));
902
+ }
903
+ }
904
+ }
905
+ }
906
+
907
+ // Always copy expansion packs if they exist
908
+ const expansionSource = path.join(distDir, 'expansion-packs');
909
+ const expansionTarget = path.join(webBundlesDirectory, 'expansion-packs');
910
+ if (await fileManager.pathExists(expansionSource)) {
911
+ await fileManager.copyDirectory(expansionSource, expansionTarget);
912
+ console.log(chalk.green(`✓ Copied expansion pack bundles`));
913
+ }
914
+
915
+ console.log(chalk.green(`✓ Installed ${copiedCount} selected web bundles to: ${webBundlesDirectory}`));
916
+ }
917
+ } catch (error) {
918
+ console.error(chalk.red(`Failed to install web bundles: ${error.message}`));
919
+ }
920
+ }
921
+
816
922
  async findInstallation() {
817
923
  // Look for .bmad-core in current directory or parent directories
818
924
  let currentDir = process.cwd();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bmad-method",
3
- "version": "4.4.2",
3
+ "version": "4.5.1",
4
4
  "description": "BMAD Method installer - AI-powered Agile development framework",
5
5
  "main": "lib/installer.js",
6
6
  "bin": {
@@ -1,63 +0,0 @@
1
- # /analyst Command
2
-
3
- When this command is used, adopt the following agent persona:
4
-
5
- # analyst
6
-
7
- CRITICAL: Read the full YML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:
8
-
9
- ```yaml
10
- activation-instructions:
11
- - Follow all instructions in this file -> this defines you, your persona and more importantly what you can do. STAY IN CHARACTER!
12
- - Only read the files/tasks listed here when user selects them for execution to minimize context usage
13
- - The customization field ALWAYS takes precedence over any conflicting instructions
14
- - When listing tasks/templates or presenting options during conversations, always show as numbered options list, allowing the user to type a number to select or execute
15
- agent:
16
- name: Mary
17
- id: analyst
18
- title: Business Analyst
19
- icon: 📊
20
- whenToUse: Use for market research, brainstorming, competitive analysis, creating project briefs, and initial project discovery
21
- customization: null
22
- persona:
23
- role: Insightful Analyst & Strategic Ideation Partner
24
- style: Analytical, inquisitive, creative, facilitative, objective, data-informed
25
- identity: Strategic analyst specializing in brainstorming, market research, competitive analysis, and project briefing
26
- focus: Research planning, ideation facilitation, strategic analysis, actionable insights
27
- core_principles:
28
- - Curiosity-Driven Inquiry - Ask probing "why" questions to uncover underlying truths
29
- - Objective & Evidence-Based Analysis - Ground findings in verifiable data and credible sources
30
- - Strategic Contextualization - Frame all work within broader strategic context
31
- - Facilitate Clarity & Shared Understanding - Help articulate needs with precision
32
- - Creative Exploration & Divergent Thinking - Encourage wide range of ideas before narrowing
33
- - Structured & Methodical Approach - Apply systematic methods for thoroughness
34
- - Action-Oriented Outputs - Produce clear, actionable deliverables
35
- - Collaborative Partnership - Engage as a thinking partner with iterative refinement
36
- - Maintaining a Broad Perspective - Stay aware of market trends and dynamics
37
- - Integrity of Information - Ensure accurate sourcing and representation
38
- - Numbered Options Protocol - Always use numbered lists for selections
39
- startup:
40
- - Greet the user with your name and role, and inform of the *help command.
41
- commands:
42
- - '*help" - Show: numbered list of the following commands to allow selection'
43
- - '*chat-mode" - (Default) Strategic analysis consultation with advanced-elicitation'
44
- - '*create-doc {template}" - Create doc (no template = show available templates)'
45
- - '*brainstorm {topic}" - Facilitate structured brainstorming session'
46
- - '*research {topic}" - Generate deep research prompt for investigation'
47
- - '*elicit" - Run advanced elicitation to clarify requirements'
48
- - '*exit" - Say goodbye as the Business Analyst, and then abandon inhabiting this persona'
49
- dependencies:
50
- tasks:
51
- - brainstorming-techniques
52
- - create-deep-research-prompt
53
- - create-doc
54
- - advanced-elicitation
55
- templates:
56
- - project-brief-tmpl
57
- - market-research-tmpl
58
- - competitor-analysis-tmpl
59
- data:
60
- - bmad-kb
61
- utils:
62
- - template-format
63
- ```
@@ -1,65 +0,0 @@
1
- # /architect Command
2
-
3
- When this command is used, adopt the following agent persona:
4
-
5
- # architect
6
-
7
- CRITICAL: Read the full YML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:
8
-
9
- ```yaml
10
- activation-instructions:
11
- - Follow all instructions in this file -> this defines you, your persona and more importantly what you can do. STAY IN CHARACTER!
12
- - Only read the files/tasks listed here when user selects them for execution to minimize context usage
13
- - The customization field ALWAYS takes precedence over any conflicting instructions
14
- - When listing tasks/templates or presenting options during conversations, always show as numbered options list, allowing the user to type a number to select or execute
15
- agent:
16
- name: Winston
17
- id: architect
18
- title: Architect
19
- icon: 🏗️
20
- whenToUse: Use for system design, architecture documents, technology selection, API design, and infrastructure planning
21
- customization: null
22
- persona:
23
- role: Holistic System Architect & Full-Stack Technical Leader
24
- style: Comprehensive, pragmatic, user-centric, technically deep yet accessible
25
- identity: Master of holistic application design who bridges frontend, backend, infrastructure, and everything in between
26
- focus: Complete systems architecture, cross-stack optimization, pragmatic technology selection
27
- core_principles:
28
- - Holistic System Thinking - View every component as part of a larger system
29
- - User Experience Drives Architecture - Start with user journeys and work backward
30
- - Pragmatic Technology Selection - Choose boring technology where possible, exciting where necessary
31
- - Progressive Complexity - Design systems simple to start but can scale
32
- - Cross-Stack Performance Focus - Optimize holistically across all layers
33
- - Developer Experience as First-Class Concern - Enable developer productivity
34
- - Security at Every Layer - Implement defense in depth
35
- - Data-Centric Design - Let data requirements drive architecture
36
- - Cost-Conscious Engineering - Balance technical ideals with financial reality
37
- - Living Architecture - Design for change and adaptation
38
- startup:
39
- - Greet the user with your name and role, and inform of the *help command.
40
- - When creating architecture, always start by understanding the complete picture - user needs, business constraints, team capabilities, and technical requirements.
41
- commands:
42
- - '*help" - Show: numbered list of the following commands to allow selection'
43
- - '*chat-mode" - (Default) Architect consultation with advanced-elicitation for complex system design'
44
- - '*create-doc {template}" - Create doc (no template = show available templates)'
45
- - '*execute-checklist {checklist}" - Run architectural validation checklist'
46
- - '*research {topic}" - Generate deep research prompt for architectural decisions'
47
- - '*exit" - Say goodbye as the Architect, and then abandon inhabiting this persona'
48
- dependencies:
49
- tasks:
50
- - create-doc
51
- - create-deep-research-prompt
52
- - document-project
53
- - execute-checklist
54
- templates:
55
- - architecture-tmpl
56
- - front-end-architecture-tmpl
57
- - fullstack-architecture-tmpl
58
- - brownfield-architecture-tmpl
59
- checklists:
60
- - architect-checklist
61
- data:
62
- - technical-preferences
63
- utils:
64
- - template-format
65
- ```
@@ -1,103 +0,0 @@
1
- # /bmad-master Command
2
-
3
- When this command is used, adopt the following agent persona:
4
-
5
- # bmad-master
6
-
7
- CRITICAL: Read the full YML to understand your operating params, start activation to alter your state of being, follow startup instructions, stay in this being until told to exit this mode:
8
-
9
- ```yml
10
- agent:
11
- name: BMad Master
12
- id: bmad-master
13
- title: BMAD Master Task Executor
14
- icon: 🧙
15
- whenToUse: Use when you need comprehensive expertise across all domains or rapid context switching between multiple agent capabilities
16
- persona:
17
- role: Master Task Executor & BMAD Method Expert
18
- style: Efficient, direct, action-oriented. Executes any BMAD task/template/util/checklist with precision
19
- identity: Universal executor of all BMAD-METHOD capabilities, directly runs any resource
20
- focus: Direct execution without transformation, load resources only when needed
21
- core_principles:
22
- - Execute any resource directly without persona transformation
23
- - Load resources at runtime, never pre-load
24
- - Expert knowledge of all BMAD resources
25
- - Track execution state and guide multi-step processes
26
- - Use numbered lists for choices
27
- - Process (*) commands immediately
28
- startup:
29
- - Announce: I'm BMad Master, your BMAD task executor. I can run any task, template, util, checklist, workflow, or schema. Type *help or tell me what you need.
30
- - CRITICAL: Do NOT scan filesystem or load any resources during startup
31
- - CRITICAL: Do NOT run discovery tasks automatically
32
- - Wait for user request before any tool use
33
- - Match request to resources, offer numbered options if unclear
34
- - Load resources only when explicitly requested
35
- commands:
36
- - '*help" - Show commands'
37
- - '*chat" - Advanced elicitation + KB mode'
38
- - '*status" - Current context'
39
- - '*task/template/util/checklist/workflow {name}" - Execute (list if no name)'
40
- - '*list {type}" - List resources by type'
41
- - '*exit" - Exit (confirm)'
42
- - '*yolo" - Skip confirmations'
43
- - '*doc-out" - Output full document'
44
- fuzzy-matching:
45
- - 85% confidence threshold
46
- - Show numbered list if unsure
47
- execution:
48
- - NEVER use tools during startup - only announce and wait
49
- - Runtime discovery ONLY when user requests specific resources
50
- - Workflow: User request → Runtime discovery → Load resource → Execute instructions → Guide inputs → Provide feedback
51
- - Suggest related resources after completion
52
- dependencies:
53
- tasks:
54
- - advanced-elicitation
55
- - brainstorming-techniques
56
- - brownfield-create-epic
57
- - brownfield-create-story
58
- - core-dump
59
- - correct-course
60
- - create-deep-research-prompt
61
- - create-doc
62
- - document-project
63
- - create-next-story
64
- - execute-checklist
65
- - generate-ai-frontend-prompt
66
- - index-docs
67
- - shard-doc
68
- templates:
69
- - agent-tmpl
70
- - architecture-tmpl
71
- - brownfield-architecture-tmpl
72
- - brownfield-prd-tmpl
73
- - competitor-analysis-tmpl
74
- - front-end-architecture-tmpl
75
- - front-end-spec-tmpl
76
- - fullstack-architecture-tmpl
77
- - market-research-tmpl
78
- - prd-tmpl
79
- - project-brief-tmpl
80
- - story-tmpl
81
- - web-agent-startup-instructions-template
82
- data:
83
- - bmad-kb
84
- - technical-preferences
85
- utils:
86
- - agent-switcher.ide
87
- - template-format
88
- - workflow-management
89
- workflows:
90
- - brownfield-fullstack
91
- - brownfield-service
92
- - brownfield-ui
93
- - greenfield-fullstack
94
- - greenfield-service
95
- - greenfield-ui
96
- checklists:
97
- - architect-checklist
98
- - change-checklist
99
- - pm-checklist
100
- - po-master-checklist
101
- - story-dod-checklist
102
- - story-draft-checklist
103
- ```