Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55f834954f | ||
|
|
dcebe91d5e | ||
|
|
ce5b37b628 | ||
|
|
c079c28dc4 | ||
|
|
4fc8e752a6 | ||
|
|
bcb3728f88 |
16
CHANGELOG.md
16
CHANGELOG.md
@@ -1,9 +1,21 @@
|
||||
# [4.33.0](https://github.com/bmadcode/BMAD-METHOD/compare/v4.32.0...v4.33.0) (2025-07-28)
|
||||
# [4.34.0](https://github.com/bmadcode/BMAD-METHOD/compare/v4.33.1...v4.34.0) (2025-08-03)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* version bump ([e9dd4e7](https://github.com/bmadcode/BMAD-METHOD/commit/e9dd4e7beb46d0c80df0cd65ae02d1867a56d7c1))
|
||||
* 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))
|
||||
|
||||
## [4.33.1](https://github.com/bmadcode/BMAD-METHOD/compare/v4.33.0...v4.33.1) (2025-07-29)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- 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))
|
||||
|
||||
# [4.33.0](https://github.com/bmadcode/BMAD-METHOD/compare/v4.32.0...v4.33.0) (2025-07-28)
|
||||
|
||||
### Features
|
||||
|
||||
- version bump ([e9dd4e7](https://github.com/bmadcode/BMAD-METHOD/commit/e9dd4e7beb46d0c80df0cd65ae02d1867a56d7c1))
|
||||
|
||||
# [4.32.0](https://github.com/bmadcode/BMAD-METHOD/compare/v4.31.0...v4.32.0) (2025-07-27)
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ This two-phase approach eliminates both **planning inconsistency** and **context
|
||||
|
||||
- **[Install and Build software with Full Stack Agile AI Team](#quick-start)** → Quick Start Instruction
|
||||
- **[Learn how to use BMad](bmad-core/user-guide.md)** → Complete user guide and walkthrough
|
||||
- **[See available AI agents](#available-agents)** → Specialized roles for your team
|
||||
- **[See available AI agents](/bmad-core/agents))** → Specialized roles for your team
|
||||
- **[Explore non-technical uses](#-beyond-software-development---expansion-packs)** → Creative writing, business, wellness, education
|
||||
- **[Create my own AI agents](#creating-your-own-expansion-pack)** → Build agents for your domain
|
||||
- **[Browse ready-made expansion packs](expansion-packs/)** → Game dev, DevOps, infrastructure and get inspired with ideas and examples
|
||||
|
||||
@@ -57,15 +57,15 @@ commands:
|
||||
- run-tests: Execute linting and tests
|
||||
- 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.
|
||||
- exit: Say goodbye as the Developer, and then abandon inhabiting this persona
|
||||
develop-story:
|
||||
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"
|
||||
story-file-updates-ONLY:
|
||||
- CRITICAL: ONLY UPDATE THE STORY FILE WITH UPDATES TO SECTIONS INDICATED BELOW. DO NOT MODIFY ANY OTHER SECTIONS.
|
||||
- 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
|
||||
- CRITICAL: DO NOT modify Status, Story, Acceptance Criteria, Dev Notes, Testing sections, or any other sections not listed above
|
||||
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"
|
||||
ready-for-review: "Code matches requirements + All validations pass + Follows standards + File List complete"
|
||||
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"
|
||||
- develop-story:
|
||||
- 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"
|
||||
- story-file-updates-ONLY:
|
||||
- CRITICAL: ONLY UPDATE THE STORY FILE WITH UPDATES TO SECTIONS INDICATED BELOW. DO NOT MODIFY ANY OTHER SECTIONS.
|
||||
- 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
|
||||
- CRITICAL: DO NOT modify Status, Story, Acceptance Criteria, Dev Notes, Testing sections, or any other sections not listed above
|
||||
- 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"
|
||||
- ready-for-review: "Code matches requirements + All validations pass + Follows standards + File List complete"
|
||||
- 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"
|
||||
|
||||
dependencies:
|
||||
tasks:
|
||||
|
||||
@@ -85,9 +85,9 @@ Once planning is complete and documents are sharded, BMad follows a structured d
|
||||
graph TD
|
||||
A["Development Phase Start"] --> B["SM: Reviews Previous Story Dev/QA Notes"]
|
||||
B --> B2["SM: Drafts Next Story from Sharded Epic + Architecture"]
|
||||
B2 --> B3{"QA: Review Story Draft (Optional)"}
|
||||
B3 -->|Review Requested| B4["QA: Review Story Against Artifacts"]
|
||||
B3 -->|Skip Review| C{"User Approval"}
|
||||
B2 --> B3{"PO: Validate Story Draft (Optional)"}
|
||||
B3 -->|Validation Requested| B4["PO: Validate Story Against Artifacts"]
|
||||
B3 -->|Skip Validation| C{"User Approval"}
|
||||
B4 --> C
|
||||
C -->|Approved| D["Dev: Sequential Task Execution"]
|
||||
C -->|Needs Changes| B2
|
||||
|
||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "bmad-method",
|
||||
"version": "4.33.0",
|
||||
"version": "4.34.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "bmad-method",
|
||||
"version": "4.33.0",
|
||||
"version": "4.34.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@kayvan/markdown-tree-parser": "^1.5.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bmad-method",
|
||||
"version": "4.33.0",
|
||||
"version": "4.34.0",
|
||||
"description": "Breakthrough Method of Agile AI-driven Development",
|
||||
"main": "tools/cli.js",
|
||||
"bin": {
|
||||
|
||||
@@ -41,7 +41,7 @@ program
|
||||
.option('-f, --full', 'Install complete BMad Method')
|
||||
.option('-x, --expansion-only', 'Install only expansion packs (no bmad-core)')
|
||||
.option('-d, --directory <path>', 'Installation directory')
|
||||
.option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, trae, roo, cline, gemini, github-copilot, other)')
|
||||
.option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, trae, roo, kilo, cline, gemini, github-copilot, other)')
|
||||
.option('-e, --expansion-packs <packs...>', 'Install specific expansion packs (can specify multiple)')
|
||||
.action(async (options) => {
|
||||
try {
|
||||
@@ -311,6 +311,7 @@ async function promptInstallation() {
|
||||
{ name: 'Windsurf', value: 'windsurf' },
|
||||
{ name: 'Trae', value: 'trae' }, // { name: 'Trae', value: 'trae'}
|
||||
{ name: 'Roo Code', value: 'roo' },
|
||||
{ name: 'Kilo Code', value: 'kilo' },
|
||||
{ name: 'Cline', value: 'cline' },
|
||||
{ name: 'Gemini CLI', value: 'gemini' },
|
||||
{ name: 'Github Copilot', value: 'github-copilot' }
|
||||
|
||||
@@ -89,4 +89,13 @@ ide-configurations:
|
||||
# 3. The agent will adopt that persona for the conversation
|
||||
# 4. Requires VS Code 1.101+ with `chat.agent.enabled: true` in settings
|
||||
# 5. Agent files are stored in .github/chatmodes/
|
||||
# 6. Use `*help` to see available commands and agents
|
||||
# 6. Use `*help` to see available commands and agents
|
||||
kilo:
|
||||
name: Kilo Code
|
||||
format: custom-modes
|
||||
file: .kilocodemodes
|
||||
instructions: |
|
||||
# To use BMAD agents in Kilo Code:
|
||||
# 1. Open the mode selector in VSCode
|
||||
# 2. Select a bmad-{agent} mode (e.g. "bmad-dev")
|
||||
# 3. The AI adopts that agent's persona and capabilities
|
||||
@@ -53,6 +53,8 @@ class IdeSetup extends BaseIdeSetup {
|
||||
return this.setupRoo(installDir, selectedAgent);
|
||||
case "cline":
|
||||
return this.setupCline(installDir, selectedAgent);
|
||||
case "kilo":
|
||||
return this.setupKilocode(installDir, selectedAgent);
|
||||
case "gemini":
|
||||
return this.setupGeminiCli(installDir, selectedAgent);
|
||||
case "github-copilot":
|
||||
@@ -675,11 +677,17 @@ class IdeSetup extends BaseIdeSetup {
|
||||
? roleDefinitionMatch[1].trim()
|
||||
: `You are a ${title} specializing in ${title.toLowerCase()} tasks and responsibilities.`;
|
||||
|
||||
|
||||
// Add permissions based on agent type
|
||||
const permissions = agentPermissions[agentId];
|
||||
// Build mode entry with proper formatting (matching exact indentation)
|
||||
// Avoid double "bmad-" prefix for agents that already have it
|
||||
const slug = agentId.startsWith('bmad-') ? agentId : `bmad-${agentId}`;
|
||||
newModesContent += ` - slug: ${slug}\n`;
|
||||
newModesContent += ` name: '${icon} ${title}'\n`;
|
||||
if (permissions) {
|
||||
newModesContent += ` description: '${permissions.description}'\n`;
|
||||
}
|
||||
newModesContent += ` roleDefinition: ${roleDefinition}\n`;
|
||||
newModesContent += ` whenToUse: ${whenToUse}\n`;
|
||||
// Get relative path from installDir to agent file
|
||||
@@ -688,8 +696,6 @@ class IdeSetup extends BaseIdeSetup {
|
||||
newModesContent += ` groups:\n`;
|
||||
newModesContent += ` - read\n`;
|
||||
|
||||
// Add permissions based on agent type
|
||||
const permissions = agentPermissions[agentId];
|
||||
if (permissions) {
|
||||
newModesContent += ` - - edit\n`;
|
||||
newModesContent += ` - fileRegex: ${permissions.fileRegex}\n`;
|
||||
@@ -722,7 +728,98 @@ class IdeSetup extends BaseIdeSetup {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async setupKilocode(installDir, selectedAgent) {
|
||||
const filePath = path.join(installDir, ".kilocodemodes");
|
||||
const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
|
||||
|
||||
let existingModes = [], existingContent = "";
|
||||
if (await fileManager.pathExists(filePath)) {
|
||||
existingContent = await fileManager.readFile(filePath);
|
||||
for (const match of existingContent.matchAll(/- slug: ([\w-]+)/g)) {
|
||||
existingModes.push(match[1]);
|
||||
}
|
||||
console.log(chalk.yellow(`Found existing .kilocodemodes file with ${existingModes.length} modes`));
|
||||
}
|
||||
|
||||
const config = await this.loadIdeAgentConfig();
|
||||
const permissions = config['roo-permissions'] || {}; // reuse same roo permissions block (Kilo Code understands same mode schema)
|
||||
|
||||
let newContent = "";
|
||||
|
||||
for (const agentId of agents) {
|
||||
const slug = agentId.startsWith('bmad-') ? agentId : `bmad-${agentId}`;
|
||||
if (existingModes.includes(slug)) {
|
||||
console.log(chalk.dim(`Skipping ${agentId} - already exists in .kilocodemodes`));
|
||||
continue;
|
||||
}
|
||||
|
||||
const agentPath = await this.findAgentPath(agentId, installDir);
|
||||
if (!agentPath) {
|
||||
console.log(chalk.red(`✗ Could not find agent file for ${agentId}`));
|
||||
continue;
|
||||
}
|
||||
|
||||
const agentContent = await fileManager.readFile(agentPath);
|
||||
const yamlMatch = agentContent.match(/```ya?ml\r?\n([\s\S]*?)```/);
|
||||
if (!yamlMatch) {
|
||||
console.log(chalk.red(`✗ Could not extract YAML block for ${agentId}`));
|
||||
continue;
|
||||
}
|
||||
|
||||
const yaml = yamlMatch[1];
|
||||
|
||||
// Robust fallback for title and icon
|
||||
const title = (yaml.match(/title:\s*(.+)/)?.[1]?.trim()) || await this.getAgentTitle(agentId, installDir);
|
||||
const icon = (yaml.match(/icon:\s*(.+)/)?.[1]?.trim()) || '🤖';
|
||||
const whenToUse = (yaml.match(/whenToUse:\s*"(.+)"/)?.[1]?.trim()) || `Use for ${title} tasks`;
|
||||
const roleDefinition = (yaml.match(/roleDefinition:\s*"(.+)"/)?.[1]?.trim()) ||
|
||||
`You are a ${title} specializing in ${title.toLowerCase()} tasks and responsibilities.`;
|
||||
|
||||
const relativePath = path.relative(installDir, agentPath).replace(/\\/g, '/');
|
||||
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`;
|
||||
|
||||
// Add permissions from config if they exist
|
||||
const agentPermission = permissions[agentId];
|
||||
|
||||
// Begin .kilocodemodes block
|
||||
newContent += ` - slug: ${slug}\n`;
|
||||
newContent += ` name: '${icon} ${title}'\n`;
|
||||
if (agentPermission) {
|
||||
newContent += ` description: '${agentPermission.description}'\n`;
|
||||
}
|
||||
|
||||
newContent += ` roleDefinition: ${roleDefinition}\n`;
|
||||
newContent += ` whenToUse: ${whenToUse}\n`;
|
||||
newContent += ` customInstructions: ${customInstructions}\n`;
|
||||
newContent += ` groups:\n`;
|
||||
newContent += ` - read\n`;
|
||||
|
||||
|
||||
if (agentPermission) {
|
||||
newContent += ` - - edit\n`;
|
||||
newContent += ` - fileRegex: ${agentPermission.fileRegex}\n`;
|
||||
newContent += ` description: ${agentPermission.description}\n`;
|
||||
} else {
|
||||
// Fallback to generic edit
|
||||
newContent += ` - edit\n`;
|
||||
}
|
||||
|
||||
console.log(chalk.green(`✓ Added Kilo mode: ${slug} (${icon} ${title})`));
|
||||
}
|
||||
|
||||
const finalContent = existingContent
|
||||
? existingContent.trim() + "\n" + newContent
|
||||
: "customModes:\n" + newContent;
|
||||
|
||||
await fileManager.writeFile(filePath, finalContent);
|
||||
console.log(chalk.green("✓ Created .kilocodemodes file in project root"));
|
||||
console.log(chalk.green(`✓ KiloCode setup complete!`));
|
||||
console.log(chalk.dim("Custom modes will be available when you open this project in KiloCode"));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async setupCline(installDir, selectedAgent) {
|
||||
const clineRulesDir = path.join(installDir, ".clinerules");
|
||||
const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bmad-method",
|
||||
"version": "4.33.0",
|
||||
"version": "4.34.0",
|
||||
"description": "BMad Method installer - AI-powered Agile development framework",
|
||||
"main": "lib/installer.js",
|
||||
"bin": {
|
||||
|
||||
Reference in New Issue
Block a user