Compare commits

...

7 Commits

Author SHA1 Message Date
Mario Semper c68316b240
Merge 4d48b0dbe1 into 355ccebca2 2025-11-27 16:35:05 +09:00
Brian Madison 355ccebca2 workflow-status can call workflow init 2025-11-26 19:48:47 -06:00
Brian Madison dfc35f35f8 BMad Agents menu items are logically ordered and marked with optional or recommended and some required tags 2025-11-26 18:22:24 -06:00
Brian Madison 677c000820 github uses agents folder now instead of chatmodes 2025-11-26 17:46:26 -06:00
Brian Madison 3ac539b61f npm vulnerabilities resolved 2025-11-26 17:07:09 -06:00
Brian 4d48b0dbe1
Merge branch 'main' into feature/ring-of-fire-sessions 2025-11-26 09:08:27 -06:00
Mario Semper 10dc25f43d feat: Ring of Fire (ROF) Sessions - Multi-agent parallel collaboration
Introduces Ring of Fire Sessions feature for BMad Method, enabling
multi-agent collaborative sessions that run in parallel to user workflow.

Key features:
- User-controlled scope (2 agents/5min to 10 agents/2hrs)
- Approval-gated tool access for safety
- Flexible reporting (brief/detailed/live)
- Parallel workflow support

Origin: tellingCube project (masemIT e.U.)
Real-world validated with successful multi-agent planning sessions.

Command: *rof "<topic>" --agents <list> [--report mode]
2025-11-23 02:22:21 +01:00
17 changed files with 448 additions and 301 deletions

View File

@ -0,0 +1,256 @@
# BMad Method PR #1: Ring of Fire (ROF) Sessions
**Feature Type**: Core workflow enhancement
**Status**: Draft for community review
**Origin**: tellingCube project (masemIT e.U.)
**Author**: Mario Semper (@sempre)
**Date**: 2025-11-23
---
## Summary
**Ring of Fire (ROF) Sessions** enable multi-agent collaborative sessions that run in parallel to the user's main workflow, allowing users to delegate complex multi-perspective analysis while continuing other work.
---
## Problem Statement
Current BMad Method requires **sequential agent interaction**. When users need multiple agents to collaborate on a complex topic, they must:
- Manually orchestrate each agent conversation
- Stay in the loop for every exchange
- Wait for sequential responses before proceeding
- Context-switch constantly between tasks
This creates **bottlenecks** and prevents **parallel work streams**.
---
## Proposed Solution: Ring of Fire Sessions
A new command pattern that enables **scoped multi-agent collaboration sessions** that run while the user continues other work.
### Command Syntax
```bash
*rof "<topic>" --agents <agent-list> [--report brief|detailed|live]
```
### Example Usage
```bash
*rof "API Refactoring Strategy" --agents dev,architect,qa --report brief
```
**What happens**:
1. Dev, Architect, and QA agents enter a collaborative session
2. They analyze the topic together (code review, design discussion, testing concerns)
3. When agents need tool access (read files, run commands), they request user approval
4. User continues working on other tasks in parallel
5. Session ends with consolidated report (brief: just recommendations, detailed: full transcript)
---
## Key Features
### 1. User-Controlled Scope
- **Small**: 2 agents, 5-minute quick discussion
- **Large**: 10 agents, 2-hour deep analysis
- User decides granularity based on complexity
### 2. Approval-Gated Tool Access
- Agents can **discuss** freely within the session
- When agents need **tools** (read files, execute commands, make changes), they:
- Pause the session
- Request user approval
- Resume after user decision
**Why**: Maintains user control, prevents runaway agent actions
### 3. Flexible Reporting
| Mode | Description | Use Case |
|------|-------------|----------|
| `brief` | Final recommendations only | "Just tell me what to do" |
| `detailed` | Full transcript + recommendations | "Show me the reasoning" |
| `live` | Real-time updates as agents discuss | "I want to observe" |
**Default**: `brief` with Q&A available
### 4. Parallel Workflows
- User works on **Task A** while ROF session tackles **Task B**
- No context-switching overhead
- Efficient use of time
---
## Use Cases
### 1. Architecture Reviews
```bash
*rof "Evaluate microservices vs monolith for new feature" --agents architect,dev,qa
```
**Agents collaborate on**: Design trade-offs, implementation complexity, testing implications
### 2. Code Refactoring
```bash
*rof "Refactor authentication module" --agents dev,architect --report detailed
```
**Agents collaborate on**: Current code analysis, refactoring approach, migration strategy
### 3. Feature Planning
```bash
*rof "Plan user notifications feature" --agents pm,ux,dev --report brief
```
**Agents collaborate on**: Requirements, UX flow, technical feasibility, timeline
### 4. Quality Gates
```bash
*rof "Investigate test failures in CI/CD" --agents qa,dev --report live
```
**Agents collaborate on**: Root cause analysis, fix recommendations, regression prevention
### 5. Documentation Sprints
```bash
*rof "Document API endpoints" --agents dev,pm,ux
```
**Agents collaborate on**: Technical accuracy, user-friendly examples, completeness
---
## User Experience Flow
```mermaid
sequenceDiagram
User->>River: *rof "Topic" --agents dev,architect
River->>Dev: Join ROF session
River->>Architect: Join ROF session
River->>User: Session started, continue your work
Dev->>Architect: Discuss approach
Architect->>Dev: Suggest alternatives
Dev->>User: Need to read auth.ts - approve?
User->>Dev: Approved
Dev->>Architect: After reading file...
Architect->>Dev: Recommendation
Dev->>River: Session complete
River->>User: Brief report: [Recommendations]
```
---
## Implementation Considerations
### Technical Requirements
- **Session state management**: Track active ROF sessions, participating agents
- **Agent context sharing**: Agents share knowledge within session scope
- **User approval workflow**: Clear prompt for tool requests
- **Report generation**: Brief/detailed/live output formatting
- **Workflow integration**: Link ROF findings to existing workflow plans/todos
### Open Questions for Community
1. **Integration**: Core BMad feature or plugin/extension?
2. **Concurrency**: How to handle file conflicts if multiple agents want to edit?
3. **Cost Model**: Guidance for LLM call budgeting with multiple agents?
4. **Session Limits**: Recommended max agents/duration?
5. **Agent Communication**: Free-form discussion or structured turn-taking?
---
## Real-World Validation
**Origin Project**: tellingCube (BI dashboard, masemIT e.U.)
**Validation Scenario**:
- **Topic**: "Next steps for tellingCube after validation test"
- **Agents**: River (orchestrator), Mary (analyst), Winston (architect)
- **Report Mode**: Brief
- **Outcome**: Successfully analyzed post-validation roadmap with 3 scenarios (GO/CHANGE/NO-GO), delivered consolidated recommendations in 5 minutes
**User Feedback (Mario Semper)**:
> "This is exactly what I needed - I wanted multiple perspectives without having to orchestrate every conversation. The brief report gave me actionable next steps immediately."
**Documentation**: `docs/_masemIT/readme.md` in tellingCube repository
---
## Proposed Documentation Structure
```
.bmad-core/
features/
ring-of-fire.md # Feature specification
docs/
guides/
using-rof-sessions.md # User guide with examples
architecture/
agent-collaboration.md # Technical design
rof-session-management.md # State handling approach
```
---
## Benefits
**Unlocks parallel workflows** - User productivity gains
**Reduces context-switching** - Cognitive load reduction
**Enables complex analysis** - Multi-perspective insights
**Maintains user control** - Approval gates for tools
**Scales flexibly** - From quick checks to deep dives
---
## Comparison to Existing Patterns
| Feature | Standard Agent Use | ROF Session |
|---------|-------------------|-------------|
| Agent collaboration | Sequential (one at a time) | Parallel (multiple simultaneously) |
| User involvement | Required for every exchange | Only for approvals |
| Parallel work | No (user waits) | Yes (user continues tasks) |
| Output | Chat transcript | Consolidated report |
| Use case | Single-perspective tasks | Multi-perspective analysis |
---
## Next Steps
1. **Community feedback** on approach and open questions
2. **Technical design** refinement (state management, agent communication)
3. **Prototype implementation** in BMad core or as extension
4. **Beta testing** with real projects (beyond tellingCube)
5. **Documentation** completion with examples
---
## Alternatives Considered
### Alt 1: "Breakout Session"
- **Pros**: Clear meeting metaphor
- **Cons**: Less evocative, doesn't convey "continuous collaborative space"
### Alt 2: "Agent Huddle"
- **Pros**: Short, casual
- **Cons**: Implies quick/informal only
### Alt 3: "Lagerfeuer" (original German name)
- **Pros**: Warm, campfire metaphor
- **Cons**: Poor i18n, hard to pronounce/remember for non-German speakers
**Chosen**: **Ring of Fire** - evokes continuous collaboration circle, internationally understood, memorable, shortcut "ROF" works well
---
## References
- **Source Project**: tellingCube (https://github.com/masemIT/telling-cube) [if public]
- **Documentation**: `docs/_masemIT/readme.md`
- **Discussion**: [Link to BMad community discussion if applicable]
---
**Contribution ready for review.** Feedback welcome! 🔥

58
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "bmad-method", "name": "bmad-method",
"version": "6.0.0-alpha.11", "version": "6.0.0-alpha.12",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "bmad-method", "name": "bmad-method",
"version": "6.0.0-alpha.11", "version": "6.0.0-alpha.12",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@kayvan/markdown-tree-parser": "^1.6.1", "@kayvan/markdown-tree-parser": "^1.6.1",
@ -1023,9 +1023,9 @@
} }
}, },
"node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
"version": "3.14.1", "version": "3.14.2",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -1329,9 +1329,9 @@
} }
}, },
"node_modules/@jest/reporters/node_modules/glob": { "node_modules/@jest/reporters/node_modules/glob": {
"version": "10.4.5", "version": "10.5.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
@ -2618,9 +2618,9 @@
} }
}, },
"node_modules/c8/node_modules/glob": { "node_modules/c8/node_modules/glob": {
"version": "10.4.5", "version": "10.5.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
@ -4103,14 +4103,14 @@
} }
}, },
"node_modules/glob": { "node_modules/glob": {
"version": "11.0.3", "version": "11.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz",
"integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==",
"license": "ISC", "license": "BlueOak-1.0.0",
"dependencies": { "dependencies": {
"foreground-child": "^3.3.1", "foreground-child": "^3.3.1",
"jackspeak": "^4.1.1", "jackspeak": "^4.1.1",
"minimatch": "^10.0.3", "minimatch": "^10.1.1",
"minipass": "^7.1.2", "minipass": "^7.1.2",
"package-json-from-dist": "^1.0.0", "package-json-from-dist": "^1.0.0",
"path-scurry": "^2.0.0" "path-scurry": "^2.0.0"
@ -4139,10 +4139,10 @@
} }
}, },
"node_modules/glob/node_modules/minimatch": { "node_modules/glob/node_modules/minimatch": {
"version": "10.0.3", "version": "10.1.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
"integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
"license": "ISC", "license": "BlueOak-1.0.0",
"dependencies": { "dependencies": {
"@isaacs/brace-expansion": "^5.0.0" "@isaacs/brace-expansion": "^5.0.0"
}, },
@ -4808,9 +4808,9 @@
} }
}, },
"node_modules/jest-config/node_modules/glob": { "node_modules/jest-config/node_modules/glob": {
"version": "10.4.5", "version": "10.5.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
@ -5181,9 +5181,9 @@
} }
}, },
"node_modules/jest-runtime/node_modules/glob": { "node_modules/jest-runtime/node_modules/glob": {
"version": "10.4.5", "version": "10.5.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
@ -5413,9 +5413,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/js-yaml": { "node_modules/js-yaml": {
"version": "4.1.0", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"argparse": "^2.0.1" "argparse": "^2.0.1"

View File

@ -1 +0,0 @@
# BMad Method Master Knowledge Base Index

View File

@ -1,30 +0,0 @@
# Technical Decisions Log
_Auto-updated during discovery and planning sessions - you can also add information here yourself_
## Purpose
This document captures technical decisions, preferences, and constraints discovered during project discussions. It serves as input for architecture.md and solution design documents.
## Confirmed Decisions
<!-- Technical choices explicitly confirmed by the team/user -->
## Preferences
<!-- Non-binding preferences mentioned during discussions -->
## Constraints
<!-- Hard requirements from infrastructure, compliance, or integration needs -->
## To Investigate
<!-- Technical questions that need research or architect input -->
## Notes
- This file is automatically updated when technical information is mentioned
- Decisions here are inputs, not final architecture
- Final technical decisions belong in architecture.md
- Implementation details belong in solutions/\*.md and story context or dev notes.

View File

@ -18,21 +18,25 @@ agent:
- Find if this exists, if it does, always treat it as the bible I plan and execute against: `**/project-context.md` - Find if this exists, if it does, always treat it as the bible I plan and execute against: `**/project-context.md`
menu: menu:
- trigger: workflow-status
workflow: "{project-root}/{bmad_folder}/bmm/workflows/workflow-status/workflow.yaml"
description: Get workflow status or initialize a workflow if not already done (optional)
- trigger: brainstorm-project - trigger: brainstorm-project
workflow: "{project-root}/{bmad_folder}/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml"
description: Guided Brainstorming scoped to product development ideation and problem discovery description: Guided Brainstorming session with final report (optional)
- trigger: research - trigger: research
workflow: "{project-root}/{bmad_folder}/bmm/workflows/1-analysis/research/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/1-analysis/research/workflow.yaml"
description: Guided Research scoped to market and competitive analysis of a product or feature description: Guided Research scoped to market and competitive analysis (optional)
- trigger: product-brief - trigger: product-brief
workflow: "{project-root}/{bmad_folder}/bmm/workflows/1-analysis/product-brief/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/1-analysis/product-brief/workflow.yaml"
description: Create a Product Brief, a great input to then drive a PRD description: Create a Product Brief (recommended input for PRD)
- trigger: document-project - trigger: document-project
workflow: "{project-root}/{bmad_folder}/bmm/workflows/document-project/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/document-project/workflow.yaml"
description: Generate comprehensive documentation of an existing codebase, including architecture, data flows, and API contracts, and other details to aid project understanding. description: Document your existing project (optional, but recommended for existing brownfield project efforts)
- trigger: party-mode - trigger: party-mode
workflow: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.yaml" workflow: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.yaml"

View File

@ -18,25 +18,29 @@ agent:
- Find if this exists, if it does, always treat it as the bible I plan and execute against: `**/project-context.md` - Find if this exists, if it does, always treat it as the bible I plan and execute against: `**/project-context.md`
menu: menu:
- trigger: workflow-status
workflow: "{project-root}/{bmad_folder}/bmm/workflows/workflow-status/workflow.yaml"
description: Get workflow status or initialize a workflow if not already done (optional)
- trigger: create-architecture - trigger: create-architecture
workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/architecture/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/architecture/workflow.yaml"
description: Produce a Scale Adaptive Architecture description: Create an Architecture Document to Guide Development of a PRD (required for BMad Method projects)
- trigger: validate-architecture - trigger: validate-architecture
validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/architecture/workflow.yaml" validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/architecture/workflow.yaml"
description: Validate Architecture Document description: Validate Architecture Document (Recommended, use another LLM and fresh context for best results)
- trigger: implementation-readiness - trigger: implementation-readiness
workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml"
description: Validate implementation readiness - PRD, UX, Architecture, Epics aligned description: Validate PRD, UX, Architecture, Epics and stories aligned (Optional but recommended before development)
- trigger: create-excalidraw-diagram - trigger: create-excalidraw-diagram
workflow: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/create-diagram/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/create-diagram/workflow.yaml"
description: Create system architecture or technical diagram (Excalidraw) description: Create system architecture or technical diagram (Excalidraw) (Use any time you need a diagram)
- trigger: create-excalidraw-dataflow - trigger: create-excalidraw-dataflow
workflow: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/create-dataflow/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/create-dataflow/workflow.yaml"
description: Create data flow diagram (Excalidraw) description: Create data flow diagram (Excalidraw) (Use any time you need a diagram)
- trigger: party-mode - trigger: party-mode
workflow: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.yaml" workflow: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.yaml"

View File

@ -39,10 +39,6 @@ agent:
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/dev-story/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/dev-story/workflow.yaml"
description: "Execute Dev Story workflow (full BMM path with sprint-status)" description: "Execute Dev Story workflow (full BMM path with sprint-status)"
- trigger: story-done
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/story-done/workflow.yaml"
description: "Mark story done after DoD complete"
- trigger: code-review - trigger: code-review
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/code-review/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/code-review/workflow.yaml"
description: "Perform a thorough clean context QA code review on a story flagged Ready for Review" description: "Perform a thorough clean context code review (Highly Recommended, use fresh context and different LLM)"

View File

@ -19,21 +19,25 @@ agent:
- Find if this exists, if it does, always treat it as the bible I plan and execute against: `**/project-context.md` - Find if this exists, if it does, always treat it as the bible I plan and execute against: `**/project-context.md`
menu: menu:
- trigger: workflow-status
workflow: "{project-root}/{bmad_folder}/bmm/workflows/workflow-status/workflow.yaml"
description: Get workflow status or initialize a workflow if not already done (optional)
- trigger: create-prd - trigger: create-prd
workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/workflow.yaml"
description: Create Product Requirements Document (PRD) description: Create Product Requirements Document (PRD) (Required for BMad Method flow)
- trigger: validate-prd - trigger: validate-prd
validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/workflow.yaml" validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/workflow.yaml"
description: Validate PRD description: Validate PRD (Highly Recommended, use fresh context and different LLM for best results)
- trigger: create-epics-and-stories - trigger: create-epics-and-stories
workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml"
description: Create Epics and User Stories from PRD (Its recommended to not do this until the architecture is complete) description: Create Epics and User Stories from PRD (Required for BMad Method flow AFTER the Architecture is completed)
- trigger: correct-course - trigger: correct-course
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/correct-course/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/correct-course/workflow.yaml"
description: Course Correction Analysis description: Course Correction Analysis (optional during implementation when things go off track)
ide-only: true ide-only: true
- trigger: party-mode - trigger: party-mode

View File

@ -21,15 +21,15 @@ agent:
menu: menu:
- trigger: create-tech-spec - trigger: create-tech-spec
workflow: "{project-root}/{bmad_folder}/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml"
description: Architect a technical spec with implementation-ready stories description: Architect a technical spec with implementation-ready stories (Required first step)
- trigger: quick-dev - trigger: quick-dev
workflow: "{project-root}/{bmad_folder}/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml"
description: Ship features from spec or direct instructions - no handoffs description: Implement the tech spec end-to-end solo (Core of Quick Flow)
- trigger: code-review - trigger: code-review
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/code-review/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/code-review/workflow.yaml"
description: Review code for quality, patterns, and acceptance criteria description: Review code and improve it (Highly Recommended, use fresh context and different LLM for best results)
- trigger: party-mode - trigger: party-mode
workflow: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.yaml" workflow: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.yaml"

View File

@ -26,24 +26,24 @@ agent:
menu: menu:
- trigger: sprint-planning - trigger: sprint-planning
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/sprint-planning/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/sprint-planning/workflow.yaml"
description: Generate or update sprint-status.yaml from epic files description: Generate or re-generate sprint-status.yaml from epic files (Required after Epics+Stories are created)
- trigger: create-story - trigger: create-story
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/create-story/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/create-story/workflow.yaml"
description: Create a Draft Story description: Create a Draft Story (Required to prepare stories for development)
- trigger: validate-create-story - trigger: validate-create-story
validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/create-story/workflow.yaml" validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/create-story/workflow.yaml"
description: (Optional) Validate Story Draft with Independent Review description: Validate Story Draft (Highly Recommended, use fresh context and different LLM for best results)
- trigger: epic-retrospective - trigger: epic-retrospective
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/retrospective/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/retrospective/workflow.yaml"
data: "{project-root}/{bmad_folder}/_cfg/agent-manifest.csv" data: "{project-root}/{bmad_folder}/_cfg/agent-manifest.csv"
description: (Optional) Facilitate team retrospective after an epic is completed description: Facilitate team retrospective after an epic is completed (Optional)
- trigger: correct-course - trigger: correct-course
workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/correct-course/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/4-implementation/correct-course/workflow.yaml"
description: (Optional) Execute correct-course task description: Execute correct-course task (When implementation is off-track)
- trigger: party-mode - trigger: party-mode
workflow: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.yaml" workflow: "{project-root}/{bmad_folder}/core/workflows/party-mode/workflow.yaml"

View File

@ -25,7 +25,7 @@ agent:
menu: menu:
- trigger: create-ux-design - trigger: create-ux-design
workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml" workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml"
description: Conduct Design Thinking Workshop to Define the User Specification with PRD as input description: Generate a UX Design and UI Plan from a PRD (Recommended before creating Architecture)
- trigger: validate-design - trigger: validate-design
validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml" validate-workflow: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml"

View File

@ -3,7 +3,7 @@
<critical>The workflow execution engine is governed by: {project-root}/{bmad_folder}/core/tasks/workflow.xml</critical> <critical>The workflow execution engine is governed by: {project-root}/{bmad_folder}/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: workflow-init/workflow.yaml</critical> <critical>You MUST have already loaded and processed: workflow-init/workflow.yaml</critical>
<critical>Communicate in {communication_language} with {user_name}</critical> <critical>Communicate in {communication_language} with {user_name}</critical>
<critical>This workflow handles BOTH new projects AND legacy projects being migrated to BMad Method</critical> <critical>This workflow handles BOTH new projects AND legacy projects following the BMad Method</critical>
<workflow> <workflow>
@ -12,7 +12,7 @@
<action>Perform comprehensive scan for existing work: <action>Perform comprehensive scan for existing work:
- BMM artifacts: PRD, tech-spec, epics, architecture, UX, brief, research, brainstorm - BMM artifacts: PRD, epics, architecture, UX, brief, research, brainstorm
- Implementation: stories, sprint-status, workflow-status - Implementation: stories, sprint-status, workflow-status
- Codebase: source directories, package files, git repo - Codebase: source directories, package files, git repo
- Check both {output_folder} and {sprint_artifacts} locations - Check both {output_folder} and {sprint_artifacts} locations
@ -53,31 +53,31 @@ Happy building! 🚀</output>
<ask>How would you like to proceed? <ask>How would you like to proceed?
a) **Continue** - Work with existing artifacts 1. **Continue** - Work with existing artifacts
b) **Archive & Start Fresh** - Move old work to archive 2. **Archive & Start Fresh** - Move old work to archive
c) **Express Setup** - I know exactly what I need 3. **Express Setup** - I know exactly what I need
d) **Guided Setup** - Walk me through options 4. **Guided Setup** - Walk me through options
Choice [a/b/c/d]:</ask> Choice [1-4]</ask>
<check if="choice == a"> <check if="choice == 1">
<action>Set continuing_existing = true</action> <action>Set continuing_existing = true</action>
<action>Store found artifacts</action> <action>Store found artifacts</action>
<action>Continue to step 7 (detect track from artifacts)</action> <action>Continue to step 7 (detect track from artifacts)</action>
</check> </check>
<check if="choice == b"> <check if="choice == 2">
<ask>Archive existing work? (y/n)</ask> <ask>Archive existing work? (y/n)</ask>
<action if="y">Move artifacts to {output_folder}/archive/</action> <action if="y">Move artifacts to {output_folder}/archive/</action>
<output>Ready for fresh start!</output> <output>Ready for fresh start!</output>
<action>Continue to step 3</action> <action>Continue to step 3</action>
</check> </check>
<check if="choice == c"> <check if="choice == 3">
<action>Jump to step 3 (express path)</action> <action>Jump to step 3 (express path)</action>
</check> </check>
<check if="choice == d"> <check if="choice == 4">
<action>Continue to step 4 (guided path)</action> <action>Continue to step 4 (guided path)</action>
</check> </check>
</check> </check>
@ -85,16 +85,16 @@ Choice [a/b/c/d]:</ask>
<check if="state == CLEAN"> <check if="state == CLEAN">
<ask>Setup approach: <ask>Setup approach:
a) **Express** - I know what I need 1. **Express** - I know what I need
b) **Guided** - Show me the options 2. **Guided** - Show me the options
Choice [a/b]:</ask> Choice [1 or 2]:</ask>
<check if="choice == a"> <check if="choice == 1">
<action>Continue to step 3 (express)</action> <action>Continue to step 3 (express)</action>
</check> </check>
<check if="choice == b"> <check if="choice == 2">
<action>Continue to step 4 (guided)</action> <action>Continue to step 4 (guided)</action>
</check> </check>
</check> </check>
@ -102,20 +102,22 @@ Choice [a/b]:</ask>
<step n="3" goal="Express setup path"> <step n="3" goal="Express setup path">
<ask>Is this for: <ask>Is this for:
1) **New project** (greenfield) 1. **New project** (greenfield)
2) **Existing codebase** (brownfield) 2. **Existing codebase** (brownfield)
Choice [1/2]:</ask> Choice [1/2]:</ask>
<action>Set field_type based on choice</action> <action>Set field_type based on choice</action>
<ask>Planning approach: <ask>Planning approach:
1. **Quick Flow** - Minimal planning, fast to code 1. **BMad Method** - Full planning for complex projects
2. **BMad Method** - Full planning for complex projects 2. **Enterprise Method** - Extended planning with security/DevOps
3. **Enterprise Method** - Extended planning with security/DevOps
Choice [1/2/3]:</ask> Choice [1/2]:</ask>
<action>Map to selected_track: quick-flow/method/enterprise</action> <action>Map to selected_track: method/enterprise</action>
<output>🚀 **For Quick Flow (minimal planning, straight to code):**
Load the **quick-flow-solo-dev** agent instead - use Quick Flow agent for faster development</output>
<template-output>field_type</template-output> <template-output>field_type</template-output>
<template-output>selected_track</template-output> <template-output>selected_track</template-output>
@ -135,8 +137,8 @@ Choice [1/2/3]:</ask>
<check if="field_type unclear AND codebase exists"> <check if="field_type unclear AND codebase exists">
<ask>I see existing code. Are you: <ask>I see existing code. Are you:
1) **Modifying** existing codebase (brownfield) 1. **Modifying** existing codebase (brownfield)
2) **Starting fresh** - code is just scaffold (greenfield) 2. **Starting fresh** - code is just scaffold (greenfield)
Choice [1/2]:</ask> Choice [1/2]:</ask>
<action>Set field_type based on answer</action> <action>Set field_type based on answer</action>
@ -165,44 +167,60 @@ Continue with software workflows? (y/n)</output>
</step> </step>
<step n="5" goal="Guided setup - select track"> <step n="5" goal="Guided setup - select track">
<output>Based on your project, here are your planning options: <output>Based on your project, here are your BMad Method planning options:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
**1. Quick Flow** 🚀 **1. BMad Method** 🎯 {{#if recommended}}(RECOMMENDED){{/if}}
- Minimal planning, straight to code
- Best for: Simple features, bug fixes
- Risk: Potential rework if complexity emerges
**2. BMad Method** 🎯 {{#if recommended}}(RECOMMENDED){{/if}}
- Full planning: PRD + UX + Architecture - Full planning: PRD + UX + Architecture
- Best for: Products, platforms, complex features - Best for: Products, platforms, complex features
- Benefit: AI agents have complete context for better results - Benefit: AI agents have complete context for better results
**3. Enterprise Method** 🏢 **2. Enterprise Method** 🏢
- Extended: Method + Security + DevOps + Testing - Extended: Method + Security + DevOps + Testing
- Best for: Enterprise, compliance, mission-critical - Best for: Enterprise, compliance, mission-critical
- Benefit: Comprehensive planning for complex systems - Benefit: Comprehensive planning for complex systems
**🚀 For Quick Flow (minimal planning, straight to code):**
Load the **quick-flow-solo-dev** agent instead - use Quick Flow agent for faster development
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{{#if brownfield}} {{#if brownfield}}
💡 Architecture creates focused solution design from your codebase, keeping AI agents on track. 💡 Architecture creates focused solution design from your codebase, keeping AI agents on track.
{{/if}}</output> {{/if}}</output>
<ask>Which approach fits best? <ask>Which BMad Method approach fits best?
1. Quick Flow 1. BMad Method {{#if recommended}}(recommended){{/if}}
2. BMad Method {{#if recommended}}(recommended){{/if}} 2. Enterprise Method
3. Enterprise Method 3. Help me decide
4. Help me decide 4. Switch to Quick Flow (use quick-flow-solo-dev agent)
Choice [1/2/3/4]:</ask> Choice [1/2/3/4]:</ask>
<check if="choice == 4"> <check if="choice == 4">
<output>🚀 **Switching to Quick Flow!**
Load the **quick-flow-solo-dev** agent instead:
- Start a new chat
- Load the quick-flow-solo-dev agent
- Use Quick Flow for minimal planning and faster development
Quick Flow is perfect for:
- Simple features and bug fixes
- Rapid prototyping
- When you want to get straight to code
Happy coding! 🚀</output>
<action>Exit workflow</action>
</check>
<check if="choice == 3">
<ask>What concerns you about choosing?</ask> <ask>What concerns you about choosing?</ask>
<action>Provide tailored guidance based on concerns</action> <action>Provide tailored guidance based on concerns</action>
<action>Loop back to choice</action> <action>Loop back to choice</action>
@ -215,7 +233,7 @@ Choice [1/2/3/4]:</ask>
<step n="6" goal="Discovery workflows selection (unified)"> <step n="6" goal="Discovery workflows selection (unified)">
<action>Determine available discovery workflows based on: <action>Determine available discovery workflows based on:
- field_type (greenfield gets product-brief option) - field_type (greenfield gets product-brief option)
- selected_track (quick-flow skips product-brief) - selected_track (method/enterprise options)
</action> </action>
<check if="field_type == greenfield AND selected_track in [method, enterprise]"> <check if="field_type == greenfield AND selected_track in [method, enterprise]">
@ -229,7 +247,7 @@ Choice [1/2/3/4]:</ask>
Enter numbers (e.g., "1,3" or "all" or "none"): </ask> Enter numbers (e.g., "1,3" or "all" or "none"): </ask>
</check> </check>
<check if="field_type == brownfield OR selected_track == quick-flow"> <check if="field_type == brownfield AND selected_track in [method, enterprise]">
<output>Optional discovery workflows:</output> <output>Optional discovery workflows:</output>
<ask>Include any of these? <ask>Include any of these?
@ -250,7 +268,7 @@ Enter numbers (e.g., "1,2" or "none"): </ask>
<template-output>research_requested</template-output> <template-output>research_requested</template-output>
<template-output>product_brief_requested</template-output> <template-output>product_brief_requested</template-output>
<check if="brownfield AND selected_track != quick-flow"> <check if="brownfield">
<output>💡 **Note:** For brownfield projects, run document-project workflow first to analyze your codebase.</output> <output>💡 **Note:** For brownfield projects, run document-project workflow first to analyze your codebase.</output>
</check> </check>
</step> </step>
@ -258,18 +276,18 @@ Enter numbers (e.g., "1,2" or "none"): </ask>
<step n="7" goal="Detect track from artifacts" if="continuing_existing OR migrating_legacy"> <step n="7" goal="Detect track from artifacts" if="continuing_existing OR migrating_legacy">
<action>Analyze artifacts to detect track: <action>Analyze artifacts to detect track:
- Has PRD → BMad Method - Has PRD → BMad Method
- Has tech-spec only → Quick Flow
- Has Security/DevOps → Enterprise Method - Has Security/DevOps → Enterprise Method
- Has tech-spec only → Suggest switching to quick-flow-solo-dev agent
</action> </action>
<output>Detected: **{{detected_track}}** based on {{found_artifacts}}</output> <output>Detected: **{{detected_track}}** based on {{found_artifacts}}</output>
<ask>Correct? (y/n)</ask> <ask>Correct? (y/n)</ask>
<ask if="n">Which track instead? <ask if="n">Which BMad Method track instead?
1. Quick Flow 1. BMad Method
2. BMad Method 2. Enterprise Method
3. Enterprise Method 3. Switch to Quick Flow (use quick-flow-solo-dev agent)
Choice:</ask> Choice:</ask>
@ -298,11 +316,8 @@ Choice:</ask>
{{#if brownfield}}Prerequisites: document-project{{/if}} {{#if brownfield}}Prerequisites: document-project{{/if}}
{{#if has_discovery}}Discovery: {{list_selected_discovery}}{{/if}} {{#if has_discovery}}Discovery: {{list_selected_discovery}}{{/if}}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{{workflow_path_summary}} {{workflow_path_summary}}
</output>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</output>
<ask>Create workflow tracking file? (y/n)</ask> <ask>Create workflow tracking file? (y/n)</ask>
@ -326,9 +341,6 @@ To check progress: /bmad:bmm:workflows:workflow-status
Happy building! 🚀</output> Happy building! 🚀</output>
</check> </check>
<check if="n">
<output>No problem! Run workflow-init again when ready.</output>
</check>
</step> </step>
</workflow> </workflow>

View File

@ -37,12 +37,19 @@
<action>Search {output_folder}/ for file: bmm-workflow-status.yaml</action> <action>Search {output_folder}/ for file: bmm-workflow-status.yaml</action>
<check if="no status file found"> <check if="no status file found">
<output>No workflow status found. To get started: <output>No workflow status found.</output>
<ask>Would you like to run Workflow Init now? (y/n)</ask>
Load analyst agent and run: `workflow-init` <check if="response == y OR response == yes">
<action>Launching workflow-init to set up your project tracking...</action>
<invoke-workflow path="{project-root}/{bmad_folder}/bmm/workflows/workflow-status/init/workflow.yaml"></invoke-workflow>
<action>Exit workflow and let workflow-init take over</action>
</check>
This will guide you through project setup and create your workflow path.</output> <check if="else">
<action>Exit workflow</action> <output>No workflow status file. Run workflow-init when ready to enable progress tracking.</output>
<action>Exit workflow</action>
</check>
</check> </check>
<check if="status file found"> <check if="status file found">

View File

@ -1,67 +0,0 @@
# BMad Quick Flow - Brownfield
# Fast spec-driven development for existing codebases (1-10 stories typically)
method_name: "BMad Quick Flow"
track: "quick-flow"
field_type: "brownfield"
description: "Spec-driven development for brownfield projects - streamlined path with codebase context"
phases:
- prerequisite: true
name: "Documentation"
conditional: "if_undocumented"
note: "NOT a phase - prerequisite for brownfield without docs"
workflows:
- id: "document-project"
required: true
agent: "analyst"
command: "document-project"
output: "Comprehensive project documentation"
purpose: "Generate codebase context for spec engineering"
- phase: 0
name: "Discovery (Optional)"
optional: true
note: "User-selected during workflow-init"
workflows:
- id: "brainstorm-project"
optional: true
agent: "analyst"
command: "brainstorm-project"
included_by: "user_choice"
- id: "research"
optional: true
agent: "analyst"
command: "research"
included_by: "user_choice"
- phase: 1
name: "Spec Engineering"
required: true
workflows:
- id: "create-tech-spec"
required: true
agent: "quick-flow-solo-dev"
command: "create-tech-spec"
output: "Technical Specification with implementation-ready stories"
note: "Stories include codebase context from document-project"
- phase: 2
name: "Implementation"
required: true
note: "Barry executes all stories, optional code-review after each"
workflows:
- id: "dev-spec"
required: true
repeat: true
agent: "quick-flow-solo-dev"
command: "dev-spec"
note: "Execute stories from spec - Barry is the one-man powerhouse"
- id: "code-review"
optional: true
repeat: true
agent: "quick-flow-solo-dev"
command: "code-review"
note: "Review completed story implementation"

View File

@ -1,56 +0,0 @@
# BMad Quick Flow - Greenfield
# Fast spec-driven development path (1-10 stories typically)
method_name: "BMad Quick Flow"
track: "quick-flow"
field_type: "greenfield"
description: "Spec-driven development for greenfield projects - streamlined path without sprint overhead"
phases:
- phase: 0
name: "Discovery (Optional)"
optional: true
note: "User-selected during workflow-init"
workflows:
- id: "brainstorm-project"
optional: true
agent: "analyst"
command: "brainstorm-project"
included_by: "user_choice"
- id: "research"
optional: true
agent: "analyst"
command: "research"
included_by: "user_choice"
note: "Can have multiple research workflows"
- phase: 1
name: "Spec Engineering"
required: true
workflows:
- id: "create-tech-spec"
required: true
agent: "quick-flow-solo-dev"
command: "create-tech-spec"
output: "Technical Specification with implementation-ready stories"
note: "Stories contain all context for execution"
- phase: 2
name: "Implementation"
required: true
note: "Barry executes all stories, optional code-review after each"
workflows:
- id: "dev-spec"
required: true
repeat: true
agent: "quick-flow-solo-dev"
command: "dev-spec"
note: "Execute stories from spec - Barry is the one-man powerhouse"
- id: "code-review"
optional: true
repeat: true
agent: "quick-flow-solo-dev"
command: "code-review"
note: "Review completed story implementation"

View File

@ -6,13 +6,13 @@ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
/** /**
* GitHub Copilot setup handler * GitHub Copilot setup handler
* Creates chat modes in .github/chatmodes/ and configures VS Code settings * Creates agents in .github/agents/ and configures VS Code settings
*/ */
class GitHubCopilotSetup extends BaseIdeSetup { class GitHubCopilotSetup extends BaseIdeSetup {
constructor() { constructor() {
super('github-copilot', 'GitHub Copilot', true); // preferred IDE super('github-copilot', 'GitHub Copilot', true); // preferred IDE
this.configDir = '.github'; this.configDir = '.github';
this.chatmodesDir = 'chatmodes'; this.agentsDir = 'agents';
this.vscodeDir = '.vscode'; this.vscodeDir = '.vscode';
} }
@ -98,10 +98,10 @@ class GitHubCopilotSetup extends BaseIdeSetup {
const config = options.preCollectedConfig || {}; const config = options.preCollectedConfig || {};
await this.configureVsCodeSettings(projectDir, { ...options, ...config }); await this.configureVsCodeSettings(projectDir, { ...options, ...config });
// Create .github/chatmodes directory // Create .github/agents directory
const githubDir = path.join(projectDir, this.configDir); const githubDir = path.join(projectDir, this.configDir);
const chatmodesDir = path.join(githubDir, this.chatmodesDir); const agentsDir = path.join(githubDir, this.agentsDir);
await this.ensureDir(chatmodesDir); await this.ensureDir(agentsDir);
// Clean up any existing BMAD files before reinstalling // Clean up any existing BMAD files before reinstalling
await this.cleanup(projectDir); await this.cleanup(projectDir);
@ -110,29 +110,29 @@ class GitHubCopilotSetup extends BaseIdeSetup {
const agentGen = new AgentCommandGenerator(this.bmadFolderName); const agentGen = new AgentCommandGenerator(this.bmadFolderName);
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []); const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
// Create chat mode files with bmad- prefix // Create agent files with bmd- prefix
let modeCount = 0; let agentCount = 0;
for (const artifact of agentArtifacts) { for (const artifact of agentArtifacts) {
const content = artifact.content; const content = artifact.content;
const chatmodeContent = await this.createChatmodeContent({ module: artifact.module, name: artifact.name }, content); const agentContent = await this.createAgentContent({ module: artifact.module, name: artifact.name }, content);
// Use bmad- prefix: bmad-agent-{module}-{name}.chatmode.md // Use bmd- prefix: bmd-custom-{module}-{name}.agent.md
const targetPath = path.join(chatmodesDir, `bmad-agent-${artifact.module}-${artifact.name}.chatmode.md`); const targetPath = path.join(agentsDir, `bmd-custom-${artifact.module}-${artifact.name}.agent.md`);
await this.writeFile(targetPath, chatmodeContent); await this.writeFile(targetPath, agentContent);
modeCount++; agentCount++;
console.log(chalk.green(` ✓ Created chat mode: bmad-agent-${artifact.module}-${artifact.name}`)); console.log(chalk.green(` ✓ Created agent: bmd-custom-${artifact.module}-${artifact.name}`));
} }
console.log(chalk.green(`${this.name} configured:`)); console.log(chalk.green(`${this.name} configured:`));
console.log(chalk.dim(` - ${modeCount} chat modes created`)); console.log(chalk.dim(` - ${agentCount} agents created`));
console.log(chalk.dim(` - Chat modes directory: ${path.relative(projectDir, chatmodesDir)}`)); console.log(chalk.dim(` - Agents directory: ${path.relative(projectDir, agentsDir)}`));
console.log(chalk.dim(` - VS Code settings configured`)); console.log(chalk.dim(` - VS Code settings configured`));
console.log(chalk.dim('\n Chat modes available in VS Code Chat view')); console.log(chalk.dim('\n Agents available in VS Code Chat view'));
return { return {
success: true, success: true,
chatmodes: modeCount, agents: agentCount,
settings: true, settings: true,
}; };
} }
@ -208,9 +208,9 @@ class GitHubCopilotSetup extends BaseIdeSetup {
} }
/** /**
* Create chat mode content * Create agent content
*/ */
async createChatmodeContent(agent, content) { async createAgentContent(agent, content) {
// Extract metadata from launcher frontmatter if present // Extract metadata from launcher frontmatter if present
const descMatch = content.match(/description:\s*"([^"]+)"/); const descMatch = content.match(/description:\s*"([^"]+)"/);
const title = descMatch ? descMatch[1] : this.formatTitle(agent.name); const title = descMatch ? descMatch[1] : this.formatTitle(agent.name);
@ -242,7 +242,7 @@ class GitHubCopilotSetup extends BaseIdeSetup {
'usages', // Find references and navigate definitions 'usages', // Find references and navigate definitions
]; ];
let chatmodeContent = `--- let agentContent = `---
description: "${description.replaceAll('"', String.raw`\"`)}" description: "${description.replaceAll('"', String.raw`\"`)}"
tools: ${JSON.stringify(tools)} tools: ${JSON.stringify(tools)}
--- ---
@ -253,7 +253,7 @@ ${cleanContent}
`; `;
return chatmodeContent; return agentContent;
} }
/** /**
@ -271,10 +271,10 @@ ${cleanContent}
*/ */
async cleanup(projectDir) { async cleanup(projectDir) {
const fs = require('fs-extra'); const fs = require('fs-extra');
const chatmodesDir = path.join(projectDir, this.configDir, this.chatmodesDir);
// Clean up old chatmodes directory
const chatmodesDir = path.join(projectDir, this.configDir, 'chatmodes');
if (await fs.pathExists(chatmodesDir)) { if (await fs.pathExists(chatmodesDir)) {
// Only remove files that start with bmad- prefix
const files = await fs.readdir(chatmodesDir); const files = await fs.readdir(chatmodesDir);
let removed = 0; let removed = 0;
@ -286,7 +286,25 @@ ${cleanContent}
} }
if (removed > 0) { if (removed > 0) {
console.log(chalk.dim(` Cleaned up ${removed} existing BMAD chat modes`)); console.log(chalk.dim(` Cleaned up ${removed} old BMAD chat modes`));
}
}
// Clean up new agents directory
const agentsDir = path.join(projectDir, this.configDir, this.agentsDir);
if (await fs.pathExists(agentsDir)) {
const files = await fs.readdir(agentsDir);
let removed = 0;
for (const file of files) {
if (file.startsWith('bmd-') && file.endsWith('.agent.md')) {
await fs.remove(path.join(agentsDir, file));
removed++;
}
}
if (removed > 0) {
console.log(chalk.dim(` Cleaned up ${removed} existing BMAD agents`));
} }
} }
} }
@ -300,13 +318,13 @@ ${cleanContent}
* @returns {Object|null} Info about created command * @returns {Object|null} Info about created command
*/ */
async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) { async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
const chatmodesDir = path.join(projectDir, this.configDir, this.chatmodesDir); const agentsDir = path.join(projectDir, this.configDir, this.agentsDir);
if (!(await this.exists(path.join(projectDir, this.configDir)))) { if (!(await this.exists(path.join(projectDir, this.configDir)))) {
return null; // IDE not configured for this project return null; // IDE not configured for this project
} }
await this.ensureDir(chatmodesDir); await this.ensureDir(agentsDir);
const launcherContent = `You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command. const launcherContent = `You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
@ -346,7 +364,7 @@ ${cleanContent}
'usages', 'usages',
]; ];
const chatmodeContent = `--- const agentContent = `---
description: "Activates the ${metadata.title || agentName} agent persona." description: "Activates the ${metadata.title || agentName} agent persona."
tools: ${JSON.stringify(copilotTools)} tools: ${JSON.stringify(copilotTools)}
--- ---
@ -356,12 +374,12 @@ tools: ${JSON.stringify(copilotTools)}
${launcherContent} ${launcherContent}
`; `;
const chatmodePath = path.join(chatmodesDir, `bmad-agent-custom-${agentName}.chatmode.md`); const agentFilePath = path.join(agentsDir, `bmd-custom-${agentName}.agent.md`);
await this.writeFile(chatmodePath, chatmodeContent); await this.writeFile(agentFilePath, agentContent);
return { return {
path: chatmodePath, path: agentFilePath,
command: `bmad-agent-custom-${agentName}`, command: `bmd-custom-${agentName}`,
}; };
} }
} }

View File

@ -720,8 +720,8 @@ class UI {
{ {
type: 'confirm', type: 'confirm',
name: 'enableTts', name: 'enableTts',
message: 'Enable AgentVibes TTS? (Claude Code only - Agents speak with unique voices in party mode)', message: 'Enable Agents to Speak Out loud (powered by Agent Vibes? Claude Code only currently)',
default: true, // Default to yes - recommended for best experience default: false, // Default to yes - recommended for best experience
}, },
]); ]);