bmad-method 4.4.1 → 4.5.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.
- package/.prettierignore +22 -0
- package/.prettierrc +23 -0
- package/CHANGELOG.md +26 -2
- package/README.md +46 -39
- package/bmad-core/agent-teams/team-all.yml +1 -1
- package/bmad-core/agent-teams/team-fullstack.yml +1 -1
- package/bmad-core/agent-teams/team-ide-minimal.yml +10 -0
- package/bmad-core/agent-teams/team-no-ui.yml +1 -1
- package/bmad-core/agents/bmad-orchestrator.md +11 -11
- package/bmad-core/agents/sm.md +1 -1
- package/bmad-core/tasks/shard-doc.md +3 -5
- package/bmad-core/templates/architecture-tmpl.md +2 -2
- package/bmad-core/templates/brownfield-architecture-tmpl.md +4 -4
- package/bmad-core/templates/front-end-spec-tmpl.md +4 -4
- package/bmad-core/templates/fullstack-architecture-tmpl.md +2 -2
- package/bmad-core/utils/workflow-management.md +4 -4
- package/{bmad-core/web-bundles → dist}/agents/bmad-master.txt +0 -176
- 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
- package/dist/expansion-packs/expansion-creator/agents/bmad-the-creator.txt +1561 -0
- package/dist/teams/team-all.txt +10307 -0
- package/dist/teams/team-fullstack.txt +9659 -0
- package/dist/teams/team-ide-minimal.txt +2739 -0
- package/dist/teams/team-no-ui.txt +8519 -0
- package/docs/roo-code-guide.md +2 -2
- package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yml +12 -0
- package/expansion-packs/expansion-creator/README.md +8 -0
- package/expansion-packs/expansion-creator/agents/bmad-the-creator.md +53 -0
- package/expansion-packs/expansion-creator/common-tasks/create-doc.md +74 -0
- package/expansion-packs/expansion-creator/common-tasks/execute-checklist.md +97 -0
- package/expansion-packs/expansion-creator/manifest.yml +12 -0
- package/{creator-tools → expansion-packs/expansion-creator}/tasks/create-agent.md +4 -4
- package/expansion-packs/expansion-creator/tasks/generate-expansion-pack.md +1026 -0
- package/expansion-packs/expansion-creator/templates/agent-teams-tmpl.md +154 -0
- package/expansion-packs/expansion-creator/templates/agent-tmpl.md +140 -0
- package/expansion-packs/expansion-creator/utils/template-format.md +26 -0
- package/expansion-packs/expansion-creator/utils/workflow-management.md +223 -0
- package/package.json +3 -15
- package/tools/builders/web-builder.js +2 -4
- package/tools/cli.js +0 -15
- package/tools/installer/bin/bmad.js +167 -27
- package/tools/installer/lib/config-loader.js +82 -4
- package/tools/installer/lib/ide-setup.js +4 -4
- package/tools/installer/lib/installer.js +198 -29
- package/tools/installer/package.json +1 -1
- package/.claude/commands/analyst.md +0 -63
- package/.claude/commands/architect.md +0 -65
- package/.claude/commands/bmad-master.md +0 -103
- package/.claude/commands/bmad-orchestrator.md +0 -132
- package/.claude/commands/dev.md +0 -74
- package/.claude/commands/pm.md +0 -63
- package/.claude/commands/po.md +0 -64
- package/.claude/commands/qa.md +0 -56
- package/.claude/commands/sm.md +0 -59
- package/.claude/commands/ux-expert.md +0 -70
- package/.cursor/rules/analyst.mdc +0 -77
- package/.cursor/rules/architect.mdc +0 -79
- package/.cursor/rules/bmad-master.mdc +0 -117
- package/.cursor/rules/bmad-orchestrator.mdc +0 -146
- package/.cursor/rules/dev.mdc +0 -88
- package/.cursor/rules/pm.mdc +0 -77
- package/.cursor/rules/po.mdc +0 -78
- package/.cursor/rules/qa.mdc +0 -70
- package/.cursor/rules/sm.mdc +0 -73
- package/.cursor/rules/ux-expert.mdc +0 -84
- package/.roo/.roomodes +0 -95
- package/.roo/README.md +0 -27
- package/.windsurf/rules/analyst.md +0 -71
- package/.windsurf/rules/architect.md +0 -73
- package/.windsurf/rules/bmad-master.md +0 -111
- package/.windsurf/rules/bmad-orchestrator.md +0 -140
- package/.windsurf/rules/dev.md +0 -82
- package/.windsurf/rules/pm.md +0 -71
- package/.windsurf/rules/po.md +0 -72
- package/.windsurf/rules/qa.md +0 -64
- package/.windsurf/rules/sm.md +0 -67
- package/.windsurf/rules/ux-expert.md +0 -78
- package/bmad-core/bmad-core-config.yml +0 -60
- package/bmad-core/templates/agent-tmpl.md +0 -58
- package/bmad-core/utils/agent-switcher.ide.md +0 -112
- package/creator-tools/tasks/generate-expansion-pack.md +0 -427
- package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/team-game-dev.yml +0 -12
- package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/team-game-dev.txt +0 -4395
- /package/{bmad-core/web-bundles → dist}/agents/analyst.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/architect.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/bmad-orchestrator.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/dev.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/pm.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/po.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/qa.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/sm.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/ux-expert.txt +0 -0
- /package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles → dist/expansion-packs/bmad-2d-phaser-game-dev}/agents/game-designer.txt +0 -0
- /package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles → dist/expansion-packs/bmad-2d-phaser-game-dev}/agents/game-developer.txt +0 -0
- /package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles → dist/expansion-packs/bmad-2d-phaser-game-dev}/agents/game-sm.txt +0 -0
- /package/{expansion-packs/bmad-infrastructure-devops/web-bundles → dist/expansion-packs/bmad-infrastructure-devops}/agents/infra-devops-platform.txt +0 -0
- /package/{bmad-core → expansion-packs/expansion-creator}/templates/expansion-pack-plan-tmpl.md +0 -0
|
@@ -23,12 +23,23 @@ class Installer {
|
|
|
23
23
|
const spinner = ora("Analyzing installation directory...").start();
|
|
24
24
|
|
|
25
25
|
try {
|
|
26
|
-
//
|
|
27
|
-
|
|
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') {
|
|
@@ -220,11 +232,12 @@ class Installer {
|
|
|
220
232
|
const agentPath = configLoader.getAgentPath(config.agent);
|
|
221
233
|
const destAgentPath = path.join(
|
|
222
234
|
installDir,
|
|
235
|
+
".bmad-core",
|
|
223
236
|
"agents",
|
|
224
237
|
`${config.agent}.md`
|
|
225
238
|
);
|
|
226
239
|
await fileManager.copyFile(agentPath, destAgentPath);
|
|
227
|
-
files.push(
|
|
240
|
+
files.push(`.bmad-core/agents/${config.agent}.md`);
|
|
228
241
|
|
|
229
242
|
// Copy dependencies
|
|
230
243
|
const dependencies = await configLoader.getAgentDependencies(
|
|
@@ -240,9 +253,9 @@ class Installer {
|
|
|
240
253
|
const copiedFiles = await fileManager.copyGlobPattern(
|
|
241
254
|
dep.replace(".bmad-core/", ""),
|
|
242
255
|
sourceBase,
|
|
243
|
-
installDir
|
|
256
|
+
path.join(installDir, ".bmad-core")
|
|
244
257
|
);
|
|
245
|
-
files.push(...copiedFiles);
|
|
258
|
+
files.push(...copiedFiles.map(f => `.bmad-core/${f}`));
|
|
246
259
|
} else {
|
|
247
260
|
// Handle single files
|
|
248
261
|
const sourcePath = path.join(
|
|
@@ -251,20 +264,84 @@ class Installer {
|
|
|
251
264
|
);
|
|
252
265
|
const destPath = path.join(
|
|
253
266
|
installDir,
|
|
254
|
-
dep
|
|
267
|
+
dep
|
|
255
268
|
);
|
|
256
269
|
|
|
257
270
|
if (await fileManager.copyFile(sourcePath, destPath)) {
|
|
258
|
-
files.push(dep
|
|
271
|
+
files.push(dep);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
} else if (config.installType === "team") {
|
|
276
|
+
// Team installation
|
|
277
|
+
spinner.text = `Installing ${config.team} team...`;
|
|
278
|
+
|
|
279
|
+
// Get team dependencies
|
|
280
|
+
const teamDependencies = await configLoader.getTeamDependencies(config.team);
|
|
281
|
+
const sourceBase = configLoader.getBmadCorePath();
|
|
282
|
+
|
|
283
|
+
// Install all team dependencies
|
|
284
|
+
for (const dep of teamDependencies) {
|
|
285
|
+
spinner.text = `Copying team dependency: ${dep}`;
|
|
286
|
+
|
|
287
|
+
if (dep.includes("*")) {
|
|
288
|
+
// Handle glob patterns
|
|
289
|
+
const copiedFiles = await fileManager.copyGlobPattern(
|
|
290
|
+
dep.replace(".bmad-core/", ""),
|
|
291
|
+
sourceBase,
|
|
292
|
+
path.join(installDir, ".bmad-core")
|
|
293
|
+
);
|
|
294
|
+
files.push(...copiedFiles.map(f => `.bmad-core/${f}`));
|
|
295
|
+
} else {
|
|
296
|
+
// Handle single files
|
|
297
|
+
const sourcePath = path.join(sourceBase, dep.replace(".bmad-core/", ""));
|
|
298
|
+
const destPath = path.join(installDir, dep);
|
|
299
|
+
|
|
300
|
+
if (await fileManager.copyFile(sourcePath, destPath)) {
|
|
301
|
+
files.push(dep);
|
|
259
302
|
}
|
|
260
303
|
}
|
|
261
304
|
}
|
|
305
|
+
} else if (config.installType === "expansion-only") {
|
|
306
|
+
// Expansion-only installation - create minimal .bmad-core structure
|
|
307
|
+
spinner.text = "Creating minimal .bmad-core structure for expansion packs...";
|
|
308
|
+
|
|
309
|
+
const bmadCoreDestDir = path.join(installDir, ".bmad-core");
|
|
310
|
+
await fileManager.ensureDirectory(bmadCoreDestDir);
|
|
311
|
+
|
|
312
|
+
// Create basic directory structure
|
|
313
|
+
const dirs = ['agents', 'agent-teams', 'templates', 'tasks', 'checklists', 'workflows', 'data', 'utils', 'schemas'];
|
|
314
|
+
for (const dir of dirs) {
|
|
315
|
+
await fileManager.ensureDirectory(path.join(bmadCoreDestDir, dir));
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// Copy minimal required files (schemas, utils, etc.)
|
|
319
|
+
const sourceBase = configLoader.getBmadCorePath();
|
|
320
|
+
const essentialFiles = [
|
|
321
|
+
'schemas/**/*',
|
|
322
|
+
'utils/**/*'
|
|
323
|
+
];
|
|
324
|
+
|
|
325
|
+
for (const pattern of essentialFiles) {
|
|
326
|
+
const copiedFiles = await fileManager.copyGlobPattern(
|
|
327
|
+
pattern,
|
|
328
|
+
sourceBase,
|
|
329
|
+
bmadCoreDestDir
|
|
330
|
+
);
|
|
331
|
+
files.push(...copiedFiles.map(f => `.bmad-core/${f}`));
|
|
332
|
+
}
|
|
262
333
|
}
|
|
263
334
|
|
|
264
335
|
// Install expansion packs if requested
|
|
265
336
|
const expansionFiles = await this.installExpansionPacks(installDir, config.expansionPacks, spinner);
|
|
266
337
|
files.push(...expansionFiles);
|
|
267
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
|
+
|
|
268
345
|
// Set up IDE integration if requested
|
|
269
346
|
const ides = config.ides || (config.ide ? [config.ide] : []);
|
|
270
347
|
if (ides.length > 0) {
|
|
@@ -514,6 +591,11 @@ class Installer {
|
|
|
514
591
|
console.log(chalk.green(`✓ Expansion packs installed: ${packNames}`));
|
|
515
592
|
}
|
|
516
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
|
+
|
|
517
599
|
if (ides.length > 0) {
|
|
518
600
|
const ideNames = ides.map(ide => {
|
|
519
601
|
const ideConfig = configLoader.getIdeConfiguration(ide);
|
|
@@ -523,11 +605,13 @@ class Installer {
|
|
|
523
605
|
}
|
|
524
606
|
|
|
525
607
|
// Information about web bundles
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
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
|
+
}
|
|
531
615
|
|
|
532
616
|
if (config.installType === "single-agent") {
|
|
533
617
|
console.log(
|
|
@@ -664,6 +748,10 @@ class Installer {
|
|
|
664
748
|
return configLoader.getAvailableExpansionPacks();
|
|
665
749
|
}
|
|
666
750
|
|
|
751
|
+
async getAvailableTeams() {
|
|
752
|
+
return configLoader.getAvailableTeams();
|
|
753
|
+
}
|
|
754
|
+
|
|
667
755
|
async installExpansionPacks(installDir, selectedPacks, spinner) {
|
|
668
756
|
if (!selectedPacks || selectedPacks.length === 0) {
|
|
669
757
|
return [];
|
|
@@ -723,23 +811,7 @@ class Installer {
|
|
|
723
811
|
}
|
|
724
812
|
}
|
|
725
813
|
|
|
726
|
-
//
|
|
727
|
-
const webBundlesSource = path.join(expansionPackDir, 'web-bundles');
|
|
728
|
-
if (await fileManager.pathExists(webBundlesSource)) {
|
|
729
|
-
const files = glob.sync('**/*', {
|
|
730
|
-
cwd: webBundlesSource,
|
|
731
|
-
nodir: true
|
|
732
|
-
});
|
|
733
|
-
|
|
734
|
-
for (const file of files) {
|
|
735
|
-
const sourcePath = path.join(webBundlesSource, file);
|
|
736
|
-
const destPath = path.join(installDir, '.bmad-core', 'web-bundles', 'expansion-packs', packId, file);
|
|
737
|
-
|
|
738
|
-
if (await fileManager.copyFile(sourcePath, destPath)) {
|
|
739
|
-
installedFiles.push(path.join('.bmad-core', 'web-bundles', 'expansion-packs', packId, file));
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
}
|
|
814
|
+
// Web bundles are now available in the dist/ directory and don't need to be copied
|
|
743
815
|
|
|
744
816
|
console.log(chalk.green(`✓ Installed expansion pack: ${pack.name}`));
|
|
745
817
|
} catch (error) {
|
|
@@ -750,6 +822,103 @@ class Installer {
|
|
|
750
822
|
return installedFiles;
|
|
751
823
|
}
|
|
752
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
|
+
|
|
753
922
|
async findInstallation() {
|
|
754
923
|
// Look for .bmad-core in current directory or parent directories
|
|
755
924
|
let currentDir = process.cwd();
|
|
@@ -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
|
-
```
|