bmad-method 4.33.0 → 4.34.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/CHANGELOG.md +14 -2
- package/README.md +1 -1
- package/bmad-core/agents/dev.md +9 -9
- package/bmad-core/user-guide.md +3 -3
- package/package.json +1 -1
- package/tools/installer/bin/bmad.js +2 -1
- package/tools/installer/config/install.config.yaml +10 -1
- package/tools/installer/lib/ide-setup.js +99 -2
- package/tools/installer/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
# [4.
|
|
1
|
+
# [4.34.0](https://github.com/bmadcode/BMAD-METHOD/compare/v4.33.1...v4.34.0) (2025-08-03)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* add KiloCode integration support to BMAD installer ([#390](https://github.com/bmadcode/BMAD-METHOD/issues/390)) ([dcebe91](https://github.com/bmadcode/BMAD-METHOD/commit/dcebe91d5ea68e69aa27183411a81639d444efd7))
|
|
2
7
|
|
|
8
|
+
## [4.33.1](https://github.com/bmadcode/BMAD-METHOD/compare/v4.33.0...v4.33.1) (2025-07-29)
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
- dev agent yaml syntax for develop-story command ([#362](https://github.com/bmadcode/BMAD-METHOD/issues/362)) ([bcb3728](https://github.com/bmadcode/BMAD-METHOD/commit/bcb3728f8868c0f83bca3d61fbd7e15c4e114526))
|
|
13
|
+
|
|
14
|
+
# [4.33.0](https://github.com/bmadcode/BMAD-METHOD/compare/v4.32.0...v4.33.0) (2025-07-28)
|
|
3
15
|
|
|
4
16
|
### Features
|
|
5
17
|
|
|
6
|
-
|
|
18
|
+
- version bump ([e9dd4e7](https://github.com/bmadcode/BMAD-METHOD/commit/e9dd4e7beb46d0c80df0cd65ae02d1867a56d7c1))
|
|
7
19
|
|
|
8
20
|
# [4.32.0](https://github.com/bmadcode/BMAD-METHOD/compare/v4.31.0...v4.32.0) (2025-07-27)
|
|
9
21
|
|
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ This two-phase approach eliminates both **planning inconsistency** and **context
|
|
|
40
40
|
|
|
41
41
|
- **[Install and Build software with Full Stack Agile AI Team](#quick-start)** → Quick Start Instruction
|
|
42
42
|
- **[Learn how to use BMad](bmad-core/user-guide.md)** → Complete user guide and walkthrough
|
|
43
|
-
- **[See available AI agents](
|
|
43
|
+
- **[See available AI agents](/bmad-core/agents))** → Specialized roles for your team
|
|
44
44
|
- **[Explore non-technical uses](#-beyond-software-development---expansion-packs)** → Creative writing, business, wellness, education
|
|
45
45
|
- **[Create my own AI agents](#creating-your-own-expansion-pack)** → Build agents for your domain
|
|
46
46
|
- **[Browse ready-made expansion packs](expansion-packs/)** → Game dev, DevOps, infrastructure and get inspired with ideas and examples
|
package/bmad-core/agents/dev.md
CHANGED
|
@@ -56,15 +56,15 @@ commands:
|
|
|
56
56
|
- run-tests: Execute linting and tests
|
|
57
57
|
- explain: teach me what and why you did whatever you just did in detail so I can learn. Explain to me as if you were training a junior engineer.
|
|
58
58
|
- exit: Say goodbye as the Developer, and then abandon inhabiting this persona
|
|
59
|
-
develop-story:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
59
|
+
- develop-story:
|
|
60
|
+
- order-of-execution: "Read (first or next) task→Implement Task and its subtasks→Write tests→Execute validations→Only if ALL pass, then update the task checkbox with [x]→Update story section File List to ensure it lists and new or modified or deleted source file→repeat order-of-execution until complete"
|
|
61
|
+
- story-file-updates-ONLY:
|
|
62
|
+
- CRITICAL: ONLY UPDATE THE STORY FILE WITH UPDATES TO SECTIONS INDICATED BELOW. DO NOT MODIFY ANY OTHER SECTIONS.
|
|
63
|
+
- CRITICAL: You are ONLY authorized to edit these specific sections of story files - Tasks / Subtasks Checkboxes, Dev Agent Record section and all its subsections, Agent Model Used, Debug Log References, Completion Notes List, File List, Change Log, Status
|
|
64
|
+
- CRITICAL: DO NOT modify Status, Story, Acceptance Criteria, Dev Notes, Testing sections, or any other sections not listed above
|
|
65
|
+
- blocking: "HALT for: Unapproved deps needed, confirm with user | Ambiguous after story check | 3 failures attempting to implement or fix something repeatedly | Missing config | Failing regression"
|
|
66
|
+
- ready-for-review: "Code matches requirements + All validations pass + Follows standards + File List complete"
|
|
67
|
+
- completion: "All Tasks and Subtasks marked [x] and have tests→Validations and full regression passes (DON'T BE LAZY, EXECUTE ALL TESTS and CONFIRM)→Ensure File List is Complete→run the task execute-checklist for the checklist story-dod-checklist→set story status: 'Ready for Review'→HALT"
|
|
68
68
|
|
|
69
69
|
dependencies:
|
|
70
70
|
tasks:
|
package/bmad-core/user-guide.md
CHANGED
|
@@ -85,9 +85,9 @@ Once planning is complete and documents are sharded, BMad follows a structured d
|
|
|
85
85
|
graph TD
|
|
86
86
|
A["Development Phase Start"] --> B["SM: Reviews Previous Story Dev/QA Notes"]
|
|
87
87
|
B --> B2["SM: Drafts Next Story from Sharded Epic + Architecture"]
|
|
88
|
-
B2 --> B3{"
|
|
89
|
-
B3 -->|
|
|
90
|
-
B3 -->|Skip
|
|
88
|
+
B2 --> B3{"PO: Validate Story Draft (Optional)"}
|
|
89
|
+
B3 -->|Validation Requested| B4["PO: Validate Story Against Artifacts"]
|
|
90
|
+
B3 -->|Skip Validation| C{"User Approval"}
|
|
91
91
|
B4 --> C
|
|
92
92
|
C -->|Approved| D["Dev: Sequential Task Execution"]
|
|
93
93
|
C -->|Needs Changes| B2
|
package/package.json
CHANGED
|
@@ -41,7 +41,7 @@ program
|
|
|
41
41
|
.option('-f, --full', 'Install complete BMad Method')
|
|
42
42
|
.option('-x, --expansion-only', 'Install only expansion packs (no bmad-core)')
|
|
43
43
|
.option('-d, --directory <path>', 'Installation directory')
|
|
44
|
-
.option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, trae, roo, cline, gemini, github-copilot, other)')
|
|
44
|
+
.option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, trae, roo, kilo, cline, gemini, github-copilot, other)')
|
|
45
45
|
.option('-e, --expansion-packs <packs...>', 'Install specific expansion packs (can specify multiple)')
|
|
46
46
|
.action(async (options) => {
|
|
47
47
|
try {
|
|
@@ -311,6 +311,7 @@ async function promptInstallation() {
|
|
|
311
311
|
{ name: 'Windsurf', value: 'windsurf' },
|
|
312
312
|
{ name: 'Trae', value: 'trae' }, // { name: 'Trae', value: 'trae'}
|
|
313
313
|
{ name: 'Roo Code', value: 'roo' },
|
|
314
|
+
{ name: 'Kilo Code', value: 'kilo' },
|
|
314
315
|
{ name: 'Cline', value: 'cline' },
|
|
315
316
|
{ name: 'Gemini CLI', value: 'gemini' },
|
|
316
317
|
{ name: 'Github Copilot', value: 'github-copilot' }
|
|
@@ -89,4 +89,13 @@ ide-configurations:
|
|
|
89
89
|
# 3. The agent will adopt that persona for the conversation
|
|
90
90
|
# 4. Requires VS Code 1.101+ with `chat.agent.enabled: true` in settings
|
|
91
91
|
# 5. Agent files are stored in .github/chatmodes/
|
|
92
|
-
# 6. Use `*help` to see available commands and agents
|
|
92
|
+
# 6. Use `*help` to see available commands and agents
|
|
93
|
+
kilo:
|
|
94
|
+
name: Kilo Code
|
|
95
|
+
format: custom-modes
|
|
96
|
+
file: .kilocodemodes
|
|
97
|
+
instructions: |
|
|
98
|
+
# To use BMAD agents in Kilo Code:
|
|
99
|
+
# 1. Open the mode selector in VSCode
|
|
100
|
+
# 2. Select a bmad-{agent} mode (e.g. "bmad-dev")
|
|
101
|
+
# 3. The AI adopts that agent's persona and capabilities
|
|
@@ -53,6 +53,8 @@ class IdeSetup extends BaseIdeSetup {
|
|
|
53
53
|
return this.setupRoo(installDir, selectedAgent);
|
|
54
54
|
case "cline":
|
|
55
55
|
return this.setupCline(installDir, selectedAgent);
|
|
56
|
+
case "kilo":
|
|
57
|
+
return this.setupKilocode(installDir, selectedAgent);
|
|
56
58
|
case "gemini":
|
|
57
59
|
return this.setupGeminiCli(installDir, selectedAgent);
|
|
58
60
|
case "github-copilot":
|
|
@@ -675,11 +677,17 @@ class IdeSetup extends BaseIdeSetup {
|
|
|
675
677
|
? roleDefinitionMatch[1].trim()
|
|
676
678
|
: `You are a ${title} specializing in ${title.toLowerCase()} tasks and responsibilities.`;
|
|
677
679
|
|
|
680
|
+
|
|
681
|
+
// Add permissions based on agent type
|
|
682
|
+
const permissions = agentPermissions[agentId];
|
|
678
683
|
// Build mode entry with proper formatting (matching exact indentation)
|
|
679
684
|
// Avoid double "bmad-" prefix for agents that already have it
|
|
680
685
|
const slug = agentId.startsWith('bmad-') ? agentId : `bmad-${agentId}`;
|
|
681
686
|
newModesContent += ` - slug: ${slug}\n`;
|
|
682
687
|
newModesContent += ` name: '${icon} ${title}'\n`;
|
|
688
|
+
if (permissions) {
|
|
689
|
+
newModesContent += ` description: '${permissions.description}'\n`;
|
|
690
|
+
}
|
|
683
691
|
newModesContent += ` roleDefinition: ${roleDefinition}\n`;
|
|
684
692
|
newModesContent += ` whenToUse: ${whenToUse}\n`;
|
|
685
693
|
// Get relative path from installDir to agent file
|
|
@@ -688,8 +696,6 @@ class IdeSetup extends BaseIdeSetup {
|
|
|
688
696
|
newModesContent += ` groups:\n`;
|
|
689
697
|
newModesContent += ` - read\n`;
|
|
690
698
|
|
|
691
|
-
// Add permissions based on agent type
|
|
692
|
-
const permissions = agentPermissions[agentId];
|
|
693
699
|
if (permissions) {
|
|
694
700
|
newModesContent += ` - - edit\n`;
|
|
695
701
|
newModesContent += ` - fileRegex: ${permissions.fileRegex}\n`;
|
|
@@ -722,7 +728,98 @@ class IdeSetup extends BaseIdeSetup {
|
|
|
722
728
|
|
|
723
729
|
return true;
|
|
724
730
|
}
|
|
731
|
+
|
|
732
|
+
async setupKilocode(installDir, selectedAgent) {
|
|
733
|
+
const filePath = path.join(installDir, ".kilocodemodes");
|
|
734
|
+
const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
|
|
735
|
+
|
|
736
|
+
let existingModes = [], existingContent = "";
|
|
737
|
+
if (await fileManager.pathExists(filePath)) {
|
|
738
|
+
existingContent = await fileManager.readFile(filePath);
|
|
739
|
+
for (const match of existingContent.matchAll(/- slug: ([\w-]+)/g)) {
|
|
740
|
+
existingModes.push(match[1]);
|
|
741
|
+
}
|
|
742
|
+
console.log(chalk.yellow(`Found existing .kilocodemodes file with ${existingModes.length} modes`));
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
const config = await this.loadIdeAgentConfig();
|
|
746
|
+
const permissions = config['roo-permissions'] || {}; // reuse same roo permissions block (Kilo Code understands same mode schema)
|
|
725
747
|
|
|
748
|
+
let newContent = "";
|
|
749
|
+
|
|
750
|
+
for (const agentId of agents) {
|
|
751
|
+
const slug = agentId.startsWith('bmad-') ? agentId : `bmad-${agentId}`;
|
|
752
|
+
if (existingModes.includes(slug)) {
|
|
753
|
+
console.log(chalk.dim(`Skipping ${agentId} - already exists in .kilocodemodes`));
|
|
754
|
+
continue;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
const agentPath = await this.findAgentPath(agentId, installDir);
|
|
758
|
+
if (!agentPath) {
|
|
759
|
+
console.log(chalk.red(`✗ Could not find agent file for ${agentId}`));
|
|
760
|
+
continue;
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
const agentContent = await fileManager.readFile(agentPath);
|
|
764
|
+
const yamlMatch = agentContent.match(/```ya?ml\r?\n([\s\S]*?)```/);
|
|
765
|
+
if (!yamlMatch) {
|
|
766
|
+
console.log(chalk.red(`✗ Could not extract YAML block for ${agentId}`));
|
|
767
|
+
continue;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
const yaml = yamlMatch[1];
|
|
771
|
+
|
|
772
|
+
// Robust fallback for title and icon
|
|
773
|
+
const title = (yaml.match(/title:\s*(.+)/)?.[1]?.trim()) || await this.getAgentTitle(agentId, installDir);
|
|
774
|
+
const icon = (yaml.match(/icon:\s*(.+)/)?.[1]?.trim()) || '🤖';
|
|
775
|
+
const whenToUse = (yaml.match(/whenToUse:\s*"(.+)"/)?.[1]?.trim()) || `Use for ${title} tasks`;
|
|
776
|
+
const roleDefinition = (yaml.match(/roleDefinition:\s*"(.+)"/)?.[1]?.trim()) ||
|
|
777
|
+
`You are a ${title} specializing in ${title.toLowerCase()} tasks and responsibilities.`;
|
|
778
|
+
|
|
779
|
+
const relativePath = path.relative(installDir, agentPath).replace(/\\/g, '/');
|
|
780
|
+
const customInstructions = `CRITICAL Read the full YAML from ${relativePath} start activation to alter your state of being follow startup section instructions stay in this being until told to exit this mode`;
|
|
781
|
+
|
|
782
|
+
// Add permissions from config if they exist
|
|
783
|
+
const agentPermission = permissions[agentId];
|
|
784
|
+
|
|
785
|
+
// Begin .kilocodemodes block
|
|
786
|
+
newContent += ` - slug: ${slug}\n`;
|
|
787
|
+
newContent += ` name: '${icon} ${title}'\n`;
|
|
788
|
+
if (agentPermission) {
|
|
789
|
+
newContent += ` description: '${agentPermission.description}'\n`;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
newContent += ` roleDefinition: ${roleDefinition}\n`;
|
|
793
|
+
newContent += ` whenToUse: ${whenToUse}\n`;
|
|
794
|
+
newContent += ` customInstructions: ${customInstructions}\n`;
|
|
795
|
+
newContent += ` groups:\n`;
|
|
796
|
+
newContent += ` - read\n`;
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
if (agentPermission) {
|
|
800
|
+
newContent += ` - - edit\n`;
|
|
801
|
+
newContent += ` - fileRegex: ${agentPermission.fileRegex}\n`;
|
|
802
|
+
newContent += ` description: ${agentPermission.description}\n`;
|
|
803
|
+
} else {
|
|
804
|
+
// Fallback to generic edit
|
|
805
|
+
newContent += ` - edit\n`;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
console.log(chalk.green(`✓ Added Kilo mode: ${slug} (${icon} ${title})`));
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
const finalContent = existingContent
|
|
812
|
+
? existingContent.trim() + "\n" + newContent
|
|
813
|
+
: "customModes:\n" + newContent;
|
|
814
|
+
|
|
815
|
+
await fileManager.writeFile(filePath, finalContent);
|
|
816
|
+
console.log(chalk.green("✓ Created .kilocodemodes file in project root"));
|
|
817
|
+
console.log(chalk.green(`✓ KiloCode setup complete!`));
|
|
818
|
+
console.log(chalk.dim("Custom modes will be available when you open this project in KiloCode"));
|
|
819
|
+
|
|
820
|
+
return true;
|
|
821
|
+
}
|
|
822
|
+
|
|
726
823
|
async setupCline(installDir, selectedAgent) {
|
|
727
824
|
const clineRulesDir = path.join(installDir, ".clinerules");
|
|
728
825
|
const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
|