bmad-method 4.33.1 → 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 CHANGED
@@ -1,9 +1,15 @@
1
- ## [4.33.1](https://github.com/bmadcode/BMAD-METHOD/compare/v4.33.0...v4.33.1) (2025-07-29)
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)
3
9
 
4
10
  ### Bug Fixes
5
11
 
6
- * 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))
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))
7
13
 
8
14
  # [4.33.0](https://github.com/bmadcode/BMAD-METHOD/compare/v4.32.0...v4.33.0) (2025-07-28)
9
15
 
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](#available-agents)** → Specialized roles for your team
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
@@ -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{"QA: Review Story Draft (Optional)"}
89
- B3 -->|Review Requested| B4["QA: Review Story Against Artifacts"]
90
- B3 -->|Skip Review| C{"User Approval"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bmad-method",
3
- "version": "4.33.1",
3
+ "version": "4.34.0",
4
4
  "description": "Breakthrough Method of Agile AI-driven Development",
5
5
  "main": "tools/cli.js",
6
6
  "bin": {
@@ -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);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bmad-method",
3
- "version": "4.33.1",
3
+ "version": "4.34.0",
4
4
  "description": "BMad Method installer - AI-powered Agile development framework",
5
5
  "main": "lib/installer.js",
6
6
  "bin": {