Compare commits
9 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
be122d6cec | |
|
|
93ddbcb43a | |
|
|
e917156e70 | |
|
|
13cb8b368b | |
|
|
3b6a507ab8 | |
|
|
415026b0eb | |
|
|
91c8e12777 | |
|
|
458704f82b | |
|
|
37e5fd50dd |
|
|
@ -0,0 +1,5 @@
|
||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Discord Community Support
|
||||||
|
url: https://discord.gg/gk8jAdXWmj
|
||||||
|
about: Please join our Discord server for general questions and community discussion before opening an issue.
|
||||||
|
|
@ -26,7 +26,7 @@ jobs:
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GH_PAT }}
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
|
|
|
||||||
80
README.md
80
README.md
|
|
@ -1,10 +1,33 @@
|
||||||
# BMAD-METHOD™: Universal AI Agent Framework
|
# BMAD-METHOD™: Universal AI Agent Framework (v4 - Stable)
|
||||||
|
|
||||||
[](https://www.npmjs.com/package/bmad-method)
|
[](https://www.npmjs.com/package/bmad-method)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
[](https://nodejs.org)
|
[](https://nodejs.org)
|
||||||
[](https://discord.gg/gk8jAdXWmj)
|
[](https://discord.gg/gk8jAdXWmj)
|
||||||
|
|
||||||
|
> ## 🚨 **v4 STABLE - NO NEW FEATURES** 🚨
|
||||||
|
>
|
||||||
|
> This is the **stable, production-ready v4 version** of BMad Method. It will receive **critical patches only** - no new features will be added.
|
||||||
|
>
|
||||||
|
> **Install v4 Stable:** `npx bmad-method install`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🆕 Want to Try v6 Alpha?
|
||||||
|
|
||||||
|
**BMad v6** is under active development with major improvements:
|
||||||
|
|
||||||
|
- Scale-adaptive workflows (Levels 0-4)
|
||||||
|
- Project-adaptive architecture
|
||||||
|
- Enhanced module system (BMM, BMB, CIS)
|
||||||
|
- Update-safe customization
|
||||||
|
|
||||||
|
**[View v6 Documentation](https://github.com/bmad-code-org/BMAD-METHOD/tree/main)** | **Install:** `npx bmad-method@alpha install`
|
||||||
|
|
||||||
|
> **Note:** v6 is in alpha - stable enough for testing but not production-ready yet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
Foundations in Agentic Agile Driven Development, known as the Breakthrough Method of Agile AI-Driven Development, yet so much more. Transform any domain with specialized AI expertise: software development, entertainment, creative writing, business strategy to personal wellness just to name a few.
|
Foundations in Agentic Agile Driven Development, known as the Breakthrough Method of Agile AI-Driven Development, yet so much more. Transform any domain with specialized AI expertise: software development, entertainment, creative writing, business strategy to personal wellness just to name a few.
|
||||||
|
|
||||||
**[Subscribe to BMadCode on YouTube](https://www.youtube.com/@BMadCode?sub_confirmation=1)**
|
**[Subscribe to BMadCode on YouTube](https://www.youtube.com/@BMadCode?sub_confirmation=1)**
|
||||||
|
|
@ -47,43 +70,37 @@ This two-phase approach eliminates both **planning inconsistency** and **context
|
||||||
- **[Understand the architecture](docs/core-architecture.md)** → Technical deep dive
|
- **[Understand the architecture](docs/core-architecture.md)** → Technical deep dive
|
||||||
- **[Join the community](https://discord.gg/gk8jAdXWmj)** → Get help and share ideas
|
- **[Join the community](https://discord.gg/gk8jAdXWmj)** → Get help and share ideas
|
||||||
|
|
||||||
## Important: Keep Your BMad Installation Updated
|
## Important: Keep Your v4 Installation Updated
|
||||||
|
|
||||||
**Stay up-to-date effortlessly!** If you already have BMAD-METHOD™ installed in your project, simply run:
|
**Stay up-to-date with v4 patches!** If you already have BMAD-METHOD™ v4 installed in your project, run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx bmad-method install
|
npx bmad-method install
|
||||||
# OR
|
|
||||||
git pull
|
|
||||||
npm run install:bmad
|
|
||||||
```
|
```
|
||||||
|
|
||||||
This will:
|
This will:
|
||||||
|
|
||||||
- ✅ Automatically detect your existing v4 installation
|
- ✅ Automatically detect your existing v4 installation
|
||||||
- ✅ Update only the files that have changed and add new files
|
- ✅ Update only the files that have changed (critical patches only)
|
||||||
- ✅ Create `.bak` backup files for any custom modifications you've made
|
- ✅ Create `.bak` backup files for any custom modifications you've made
|
||||||
- ✅ Preserve your project-specific configurations
|
- ✅ Preserve your project-specific configurations
|
||||||
|
|
||||||
This makes it easy to benefit from the latest improvements, bug fixes, and new agents without losing your customizations!
|
> **Remember:** v4 receives critical patches only. For new features, try [v6 alpha](#-want-to-try-v6-alpha).
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start (v4 Stable)
|
||||||
|
|
||||||
### One Command for Everything (IDE Installation)
|
### One Command Installation
|
||||||
|
|
||||||
**Just run one of these commands:**
|
**Install v4 stable version:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx bmad-method install
|
npx bmad-method install
|
||||||
# OR if you already have BMad installed:
|
|
||||||
git pull
|
|
||||||
npm run install:bmad
|
|
||||||
```
|
```
|
||||||
|
|
||||||
This single command handles:
|
This command handles:
|
||||||
|
|
||||||
- **New installations** - Sets up BMad in your project
|
- **New installations** - Sets up BMad v4 in your project
|
||||||
- **Upgrades** - Updates existing installations automatically
|
- **Upgrades** - Updates existing v4 installations with patches
|
||||||
- **Expansion packs** - Installs any expansion packs you've added to package.json
|
- **Expansion packs** - Installs any expansion packs you've added to package.json
|
||||||
|
|
||||||
> **That's it!** Whether you're installing for the first time, upgrading, or adding expansion packs - these commands do everything.
|
> **That's it!** Whether you're installing for the first time, upgrading, or adding expansion packs - these commands do everything.
|
||||||
|
|
@ -99,10 +116,11 @@ This single command handles:
|
||||||
5. **CRITICAL**: Talk to BMad Orchestrator in the web at ANY TIME (#bmad-orchestrator command) and ask it questions about how this all works!
|
5. **CRITICAL**: Talk to BMad Orchestrator in the web at ANY TIME (#bmad-orchestrator command) and ask it questions about how this all works!
|
||||||
6. **When to move to the IDE**: Once you have your PRD, Architecture, optional UX and Briefs - its time to switch over to the IDE to shard your docs, and start implementing the actual code! See the [User guide](docs/user-guide.md) for more details
|
6. **When to move to the IDE**: Once you have your PRD, Architecture, optional UX and Briefs - its time to switch over to the IDE to shard your docs, and start implementing the actual code! See the [User guide](docs/user-guide.md) for more details
|
||||||
|
|
||||||
### Alternative: Clone and Build
|
### Alternative: Clone v4 Branch
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/bmadcode/bmad-method.git
|
git clone -b V4 https://github.com/bmad-code-org/BMAD-METHOD.git
|
||||||
|
cd BMAD-METHOD
|
||||||
npm run install:bmad # build and install all to a destination folder
|
npm run install:bmad # build and install all to a destination folder
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -126,29 +144,7 @@ BMAD™'s natural language framework works in ANY domain. Expansion packs provid
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
**We're excited about contributions and welcome your ideas, improvements, and expansion packs!** 🎉
|
**v4 is frozen** - only critical patches accepted. For new features and contributions, please work on **[v6 (main branch)](https://github.com/bmad-code-org/BMAD-METHOD/tree/main)**.
|
||||||
|
|
||||||
📋 **[Read CONTRIBUTING.md](CONTRIBUTING.md)** - Complete guide to contributing, including guidelines, process, and requirements
|
|
||||||
|
|
||||||
### Working with Forks
|
|
||||||
|
|
||||||
When you fork this repository, CI/CD workflows are **disabled by default** to save resources. This is intentional and helps keep your fork clean.
|
|
||||||
|
|
||||||
#### Need CI/CD in Your Fork?
|
|
||||||
|
|
||||||
See our [Fork CI/CD Guide](.github/FORK_GUIDE.md) for instructions on enabling workflows in your fork.
|
|
||||||
|
|
||||||
#### Contributing Workflow
|
|
||||||
|
|
||||||
1. **Fork the repository** - Click the Fork button on GitHub
|
|
||||||
2. **Clone your fork** - `git clone https://github.com/YOUR-USERNAME/BMAD-METHOD.git`
|
|
||||||
3. **Create a feature branch** - `git checkout -b feature/amazing-feature`
|
|
||||||
4. **Make your changes** - Test locally with `npm test`
|
|
||||||
5. **Commit your changes** - `git commit -m 'feat: add amazing feature'`
|
|
||||||
6. **Push to your fork** - `git push origin feature/amazing-feature`
|
|
||||||
7. **Open a Pull Request** - CI/CD will run automatically on the PR
|
|
||||||
|
|
||||||
Your contributions are tested when you submit a PR - no need to enable CI in your fork!
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "bmad-method",
|
"name": "bmad-method",
|
||||||
"version": "4.43.0",
|
"version": "4.44.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "bmad-method",
|
"name": "bmad-method",
|
||||||
"version": "4.43.0",
|
"version": "4.44.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@kayvan/markdown-tree-parser": "^1.6.1",
|
"@kayvan/markdown-tree-parser": "^1.6.1",
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"$schema": "https://json.schemastore.org/package.json",
|
"$schema": "https://json.schemastore.org/package.json",
|
||||||
"name": "bmad-method",
|
"name": "bmad-method",
|
||||||
"version": "4.43.0",
|
"version": "4.44.2",
|
||||||
"description": "Breakthrough Method of Agile AI-driven Development",
|
"description": "Breakthrough Method of Agile AI-driven Development",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"agile",
|
"agile",
|
||||||
|
|
|
||||||
|
|
@ -208,6 +208,13 @@ async function promptInstallation() {
|
||||||
console.log(chalk.bold.magenta('🚀 Universal AI Agent Framework for Any Domain'));
|
console.log(chalk.bold.magenta('🚀 Universal AI Agent Framework for Any Domain'));
|
||||||
console.log(chalk.bold.blue(`✨ Installer v${version}\n`));
|
console.log(chalk.bold.blue(`✨ Installer v${version}\n`));
|
||||||
|
|
||||||
|
// Deprecation notice for v4
|
||||||
|
console.log(chalk.yellow.bold('⚠️ You are installing BMad v4 (stable but frozen)'));
|
||||||
|
console.log(chalk.yellow(' v4 receives critical patches only - no new features\n'));
|
||||||
|
console.log(chalk.cyan('💡 Want the latest features? Try BMad v6 Alpha:'));
|
||||||
|
console.log(chalk.white(' npx bmad-method@alpha install'));
|
||||||
|
console.log(chalk.dim(' (Alpha is stable enough for testing)\n'));
|
||||||
|
|
||||||
const answers = {};
|
const answers = {};
|
||||||
|
|
||||||
// Ask for installation directory first
|
// Ask for installation directory first
|
||||||
|
|
|
||||||
|
|
@ -121,15 +121,15 @@ ide-configurations:
|
||||||
|
|
||||||
qwen-code:
|
qwen-code:
|
||||||
name: Qwen Code
|
name: Qwen Code
|
||||||
rule-dir: .qwen/bmad-method/
|
rule-dir: .qwen/commands/BMad/
|
||||||
format: single-file
|
format: multi-file
|
||||||
command-suffix: .md
|
command-suffix: .toml
|
||||||
instructions: |
|
instructions: |
|
||||||
# To use BMad agents with Qwen Code:
|
# To use BMad agents with Qwen Code:
|
||||||
# 1. The installer creates a .qwen/bmad-method/ directory in your project.
|
# 1. The installer creates a `BMad` folder in `.qwen/commands`.
|
||||||
# 2. It concatenates all agent files into a single QWEN.md file.
|
# 2. This adds custom commands for each agent and task.
|
||||||
# 3. Simply mention the agent in your prompt (e.g., "As *dev, ...").
|
# 3. Type /BMad:agents:<agent-name> (e.g., "/BMad:agents:dev", "/BMad:agents:pm") or /BMad:tasks:<task-name> (e.g., "/BMad:tasks:create-doc").
|
||||||
# 4. The Qwen Code CLI will automatically have the context for that agent.
|
# 4. The agent will adopt that persona for the conversation or perform the task.
|
||||||
|
|
||||||
auggie-cli:
|
auggie-cli:
|
||||||
name: Auggie CLI (Augment Code)
|
name: Auggie CLI (Augment Code)
|
||||||
|
|
|
||||||
|
|
@ -2056,94 +2056,86 @@ CRITICAL: You are to execute the BMad Task defined below.
|
||||||
}
|
}
|
||||||
|
|
||||||
async setupQwenCode(installDir, selectedAgent) {
|
async setupQwenCode(installDir, selectedAgent) {
|
||||||
const qwenDir = path.join(installDir, '.qwen');
|
const ideConfig = await configLoader.getIdeConfiguration('qwen-code');
|
||||||
const bmadMethodDir = path.join(qwenDir, 'bmad-method');
|
const bmadCommandsDir = path.join(installDir, ideConfig['rule-dir']);
|
||||||
await fileManager.ensureDirectory(bmadMethodDir);
|
|
||||||
|
|
||||||
// Update logic for existing settings.json
|
const agentCommandsDir = path.join(bmadCommandsDir, 'agents');
|
||||||
const settingsPath = path.join(qwenDir, 'settings.json');
|
const taskCommandsDir = path.join(bmadCommandsDir, 'tasks');
|
||||||
if (await fileManager.pathExists(settingsPath)) {
|
await fileManager.ensureDirectory(agentCommandsDir);
|
||||||
try {
|
await fileManager.ensureDirectory(taskCommandsDir);
|
||||||
const settingsContent = await fileManager.readFile(settingsPath);
|
|
||||||
const settings = JSON.parse(settingsContent);
|
|
||||||
let updated = false;
|
|
||||||
|
|
||||||
// Handle contextFileName property
|
// Process Agents
|
||||||
if (settings.contextFileName && Array.isArray(settings.contextFileName)) {
|
|
||||||
const originalLength = settings.contextFileName.length;
|
|
||||||
settings.contextFileName = settings.contextFileName.filter(
|
|
||||||
(fileName) => !fileName.startsWith('agents/'),
|
|
||||||
);
|
|
||||||
if (settings.contextFileName.length !== originalLength) {
|
|
||||||
updated = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updated) {
|
|
||||||
await fileManager.writeFile(settingsPath, JSON.stringify(settings, null, 2));
|
|
||||||
console.log(chalk.green('✓ Updated .qwen/settings.json - removed agent file references'));
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.warn(chalk.yellow('Could not update .qwen/settings.json'), error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove old agents directory
|
|
||||||
const agentsDir = path.join(qwenDir, 'agents');
|
|
||||||
if (await fileManager.pathExists(agentsDir)) {
|
|
||||||
await fileManager.removeDirectory(agentsDir);
|
|
||||||
console.log(chalk.green('✓ Removed old .qwen/agents directory'));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get all available agents
|
|
||||||
const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
|
const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
|
||||||
let concatenatedContent = '';
|
|
||||||
|
|
||||||
for (const agentId of agents) {
|
for (const agentId of agents) {
|
||||||
// Find the source agent file
|
|
||||||
const agentPath = await this.findAgentPath(agentId, installDir);
|
const agentPath = await this.findAgentPath(agentId, installDir);
|
||||||
|
if (!agentPath) {
|
||||||
|
console.log(chalk.yellow(`✗ Agent file not found for ${agentId}, skipping.`));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (agentPath) {
|
const agentTitle = await this.getAgentTitle(agentId, installDir);
|
||||||
|
const commandPath = path.join(agentCommandsDir, `${agentId}.toml`);
|
||||||
|
|
||||||
|
// Get relative path from installDir to agent file for @{file} reference
|
||||||
|
const relativeAgentPath = path.relative(installDir, agentPath).replaceAll('\\', '/');
|
||||||
|
|
||||||
|
// Read the agent content
|
||||||
const agentContent = await fileManager.readFile(agentPath);
|
const agentContent = await fileManager.readFile(agentPath);
|
||||||
|
|
||||||
// Create properly formatted agent rule content (similar to gemini)
|
const tomlContent = `description = " Activates the ${agentTitle} agent from the BMad Method."
|
||||||
let agentRuleContent = `# ${agentId.toUpperCase()} Agent Rule\n\n`;
|
prompt = """
|
||||||
agentRuleContent += `This rule is triggered when the user types \`*${agentId}\` and activates the ${await this.getAgentTitle(
|
CRITICAL: You are now the BMad '${agentTitle}' agent. Adopt its persona, follow its instructions, and use its capabilities.
|
||||||
agentId,
|
|
||||||
installDir,
|
|
||||||
)} agent persona.\n\n`;
|
|
||||||
agentRuleContent += '## Agent Activation\n\n';
|
|
||||||
agentRuleContent +=
|
|
||||||
'CRITICAL: Read the full YAML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:\n\n';
|
|
||||||
agentRuleContent += '```yaml\n';
|
|
||||||
// Extract just the YAML content from the agent file
|
|
||||||
const yamlContent = extractYamlFromAgent(agentContent);
|
|
||||||
if (yamlContent) {
|
|
||||||
agentRuleContent += yamlContent;
|
|
||||||
} else {
|
|
||||||
// If no YAML found, include the whole content minus the header
|
|
||||||
agentRuleContent += agentContent.replace(/^#.*$/m, '').trim();
|
|
||||||
}
|
|
||||||
agentRuleContent += '\n```\n\n';
|
|
||||||
agentRuleContent += '## File Reference\n\n';
|
|
||||||
const relativePath = path.relative(installDir, agentPath).replaceAll('\\', '/');
|
|
||||||
agentRuleContent += `The complete agent definition is available in [${relativePath}](${relativePath}).\n\n`;
|
|
||||||
agentRuleContent += '## Usage\n\n';
|
|
||||||
agentRuleContent += `When the user types \`*${agentId}\`, activate this ${await this.getAgentTitle(
|
|
||||||
agentId,
|
|
||||||
installDir,
|
|
||||||
)} persona and follow all instructions defined in the YAML configuration above.\n`;
|
|
||||||
|
|
||||||
// Add to concatenated content with separator
|
READ THIS BEFORE ANSWERING AS THE PERSONA!
|
||||||
concatenatedContent += agentRuleContent + '\n\n---\n\n';
|
|
||||||
console.log(chalk.green(`✓ Added context for *${agentId}`));
|
${agentContent}
|
||||||
}
|
"""`;
|
||||||
|
|
||||||
|
await fileManager.writeFile(commandPath, tomlContent);
|
||||||
|
console.log(chalk.green(`✓ Created agent command: /bmad:agents:${agentId}`));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write the concatenated content to QWEN.md
|
// Process Tasks
|
||||||
const qwenMdPath = path.join(bmadMethodDir, 'QWEN.md');
|
const tasks = await this.getAllTaskIds(installDir);
|
||||||
await fileManager.writeFile(qwenMdPath, concatenatedContent);
|
for (const taskId of tasks) {
|
||||||
console.log(chalk.green(`\n✓ Created QWEN.md in ${bmadMethodDir}`));
|
const taskPath = await this.findTaskPath(taskId, installDir);
|
||||||
|
if (!taskPath) {
|
||||||
|
console.log(chalk.yellow(`✗ Task file not found for ${taskId}, skipping.`));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const taskTitle = taskId
|
||||||
|
.split('-')
|
||||||
|
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
||||||
|
.join(' ');
|
||||||
|
const commandPath = path.join(taskCommandsDir, `${taskId}.toml`);
|
||||||
|
|
||||||
|
// Get relative path from installDir to task file for @{file} reference
|
||||||
|
const relativeTaskPath = path.relative(installDir, taskPath).replaceAll('\\', '/');
|
||||||
|
|
||||||
|
// Read the task content
|
||||||
|
const taskContent = await fileManager.readFile(taskPath);
|
||||||
|
|
||||||
|
const tomlContent = `description = " Executes the BMad Task: ${taskTitle}"
|
||||||
|
prompt = """
|
||||||
|
CRITICAL: You are to execute the BMad Task defined below.
|
||||||
|
|
||||||
|
READ THIS BEFORE EXECUTING THE TASK AS THE INSTRUCTIONS SPECIFIED!
|
||||||
|
|
||||||
|
${taskContent}
|
||||||
|
"""`;
|
||||||
|
|
||||||
|
await fileManager.writeFile(commandPath, tomlContent);
|
||||||
|
console.log(chalk.green(`✓ Created task command: /bmad:tasks:${taskId}`));
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
chalk.green(`
|
||||||
|
✓ Created Qwen Code extension in ${bmadCommandsDir}`),
|
||||||
|
);
|
||||||
|
console.log(
|
||||||
|
chalk.dim('You can now use commands like /bmad:agents:dev or /bmad:tasks:create-doc.'),
|
||||||
|
);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue