bmad-method 4.23.0 → 4.24.1
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/.vscode/settings.json +11 -5
- package/CHANGELOG.md +22 -1
- package/README.md +2 -2
- package/bmad-core/agents/bmad-master.md +15 -2
- package/bmad-core/agents/bmad-orchestrator.md +14 -0
- package/bmad-core/agents/dev.md +2 -2
- package/bmad-core/agents/pm.md +1 -1
- package/bmad-core/agents/po.md +1 -1
- package/bmad-core/{core-config.yml → core-config.yaml} +5 -0
- package/bmad-core/data/bmad-kb.md +4 -4
- package/bmad-core/tasks/create-brownfield-story.md +355 -0
- package/bmad-core/tasks/create-next-story.md +29 -4
- package/bmad-core/tasks/create-workflow-plan.md +289 -0
- package/bmad-core/tasks/shard-doc.md +3 -3
- package/bmad-core/tasks/update-workflow-plan.md +248 -0
- package/bmad-core/templates/architecture-tmpl.md +1 -1
- package/bmad-core/templates/brownfield-prd-tmpl.md +52 -28
- package/bmad-core/templates/fullstack-architecture-tmpl.md +3 -3
- package/bmad-core/utils/plan-management.md +223 -0
- package/bmad-core/workflows/brownfield-fullstack.yaml +297 -0
- package/bmad-core/workflows/brownfield-service.yaml +187 -0
- package/bmad-core/workflows/{brownfield-ui.yml → brownfield-ui.yaml} +110 -36
- package/bmad-core/workflows/{greenfield-fullstack.yml → greenfield-fullstack.yaml} +110 -36
- package/bmad-core/workflows/{greenfield-service.yml → greenfield-service.yaml} +110 -36
- package/bmad-core/workflows/{greenfield-ui.yml → greenfield-ui.yaml} +110 -36
- package/common/tasks/create-doc.md +21 -1
- package/docs/agentic-tools/roo-code-guide.md +1 -1
- package/docs/core-architecture.md +12 -12
- package/docs/user-guide.md +6 -6
- package/expansion-packs/bmad-creator-tools/tasks/generate-expansion-pack.md +9 -9
- package/expansion-packs/bmad-creator-tools/templates/agent-teams-tmpl.md +1 -1
- package/expansion-packs/bmad-creator-tools/templates/agent-tmpl.md +1 -1
- package/expansion-packs/bmad-infrastructure-devops/README.md +3 -3
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
- package/package.json +1 -1
- package/tools/builders/web-builder.js +19 -20
- package/tools/bump-all-versions.js +2 -2
- package/tools/bump-core-version.js +1 -1
- package/tools/bump-expansion-version.js +1 -1
- package/tools/installer/README.md +1 -1
- package/tools/installer/bin/bmad.js +2 -2
- package/tools/installer/lib/config-loader.js +13 -12
- package/tools/installer/lib/file-manager.js +5 -5
- package/tools/installer/lib/ide-setup.js +14 -13
- package/tools/installer/lib/installer.js +26 -38
- package/tools/installer/package.json +1 -1
- package/tools/lib/dependency-resolver.js +9 -13
- package/tools/lib/yaml-utils.js +29 -0
- package/tools/update-expansion-version.js +3 -3
- package/tools/yaml-format.js +1 -1
- package/bmad-core/workflows/brownfield-fullstack.yml +0 -112
- package/bmad-core/workflows/brownfield-service.yml +0 -113
- package/dist/agents/analyst.txt +0 -2709
- package/dist/agents/architect.txt +0 -3903
- package/dist/agents/bmad-master.txt +0 -9173
- package/dist/agents/bmad-orchestrator.txt +0 -1257
- package/dist/agents/dev.txt +0 -298
- package/dist/agents/pm.txt +0 -2205
- package/dist/agents/po.txt +0 -1511
- package/dist/agents/qa.txt +0 -262
- package/dist/agents/sm.txt +0 -701
- package/dist/agents/ux-expert.txt +0 -1081
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2358
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1584
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -809
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -6672
- package/dist/expansion-packs/bmad-creator-tools/agents/bmad-the-creator.txt +0 -1960
- package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2053
- package/dist/teams/team-all.txt +0 -10543
- package/dist/teams/team-fullstack.txt +0 -9731
- package/dist/teams/team-ide-minimal.txt +0 -3535
- package/dist/teams/team-no-ui.txt +0 -8619
- /package/.github/{FUNDING.yml → FUNDING.yaml} +0 -0
- /package/.github/workflows/{release.yml → release.yaml} +0 -0
- /package/bmad-core/agent-teams/{team-all.yml → team-all.yaml} +0 -0
- /package/bmad-core/agent-teams/{team-fullstack.yml → team-fullstack.yaml} +0 -0
- /package/bmad-core/agent-teams/{team-ide-minimal.yml → team-ide-minimal.yaml} +0 -0
- /package/bmad-core/agent-teams/{team-no-ui.yml → team-no-ui.yaml} +0 -0
- /package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/{phaser-2d-nodejs-game-team.yml → phaser-2d-nodejs-game-team.yaml} +0 -0
- /package/expansion-packs/bmad-2d-phaser-game-dev/{config.yml → config.yaml} +0 -0
- /package/expansion-packs/bmad-2d-phaser-game-dev/workflows/{game-dev-greenfield.yml → game-dev-greenfield.yaml} +0 -0
- /package/expansion-packs/bmad-2d-phaser-game-dev/workflows/{game-prototype.yml → game-prototype.yaml} +0 -0
- /package/expansion-packs/bmad-creator-tools/{config.yml → config.yaml} +0 -0
- /package/expansion-packs/bmad-infrastructure-devops/{config.yml → config.yaml} +0 -0
- /package/tools/installer/config/{ide-agent-config.yml → ide-agent-config.yaml} +0 -0
- /package/tools/installer/config/{install.config.yml → install.config.yaml} +0 -0
|
@@ -68,42 +68,92 @@ workflow:
|
|
|
68
68
|
condition: user_has_generated_ui
|
|
69
69
|
notes: "If user generated UI with v0/Lovable: For polyrepo setup, place downloaded project in separate frontend repo. For monorepo, place in apps/web or frontend/ directory. Review architecture document for specific guidance."
|
|
70
70
|
|
|
71
|
+
- agent: po
|
|
72
|
+
action: shard_documents
|
|
73
|
+
creates: sharded_docs
|
|
74
|
+
requires: all_artifacts_in_project
|
|
75
|
+
notes: |
|
|
76
|
+
Shard documents for IDE development:
|
|
77
|
+
- Option A: Use PO agent to shard: @po then ask to shard docs/prd.md
|
|
78
|
+
- Option B: Manual: Drag shard-doc task + docs/prd.md into chat
|
|
79
|
+
- Creates docs/prd/ and docs/architecture/ folders with sharded content
|
|
80
|
+
|
|
81
|
+
- agent: sm
|
|
82
|
+
action: create_story
|
|
83
|
+
creates: story.md
|
|
84
|
+
requires: sharded_docs
|
|
85
|
+
repeats: for_each_epic
|
|
86
|
+
notes: |
|
|
87
|
+
Story creation cycle:
|
|
88
|
+
- SM Agent (New Chat): @sm → *create
|
|
89
|
+
- Creates next story from sharded docs
|
|
90
|
+
- Story starts in "Draft" status
|
|
91
|
+
|
|
92
|
+
- agent: analyst/pm
|
|
93
|
+
action: review_draft_story
|
|
94
|
+
updates: story.md
|
|
95
|
+
requires: story.md
|
|
96
|
+
optional: true
|
|
97
|
+
condition: user_wants_story_review
|
|
98
|
+
notes: |
|
|
99
|
+
OPTIONAL: Review and approve draft story
|
|
100
|
+
- NOTE: story-review task coming soon
|
|
101
|
+
- Review story completeness and alignment
|
|
102
|
+
- Update story status: Draft → Approved
|
|
103
|
+
|
|
104
|
+
- agent: dev
|
|
105
|
+
action: implement_story
|
|
106
|
+
creates: implementation_files
|
|
107
|
+
requires: story.md
|
|
108
|
+
notes: |
|
|
109
|
+
Dev Agent (New Chat): @dev
|
|
110
|
+
- Implements approved story
|
|
111
|
+
- Updates File List with all changes
|
|
112
|
+
- Marks story as "Review" when complete
|
|
113
|
+
|
|
114
|
+
- agent: qa
|
|
115
|
+
action: review_implementation
|
|
116
|
+
updates: implementation_files
|
|
117
|
+
requires: implementation_files
|
|
118
|
+
optional: true
|
|
119
|
+
notes: |
|
|
120
|
+
OPTIONAL: QA Agent (New Chat): @qa → review-story
|
|
121
|
+
- Senior dev review with refactoring ability
|
|
122
|
+
- Fixes small issues directly
|
|
123
|
+
- Leaves checklist for remaining items
|
|
124
|
+
- Updates story status (Review → Done or stays Review)
|
|
125
|
+
|
|
126
|
+
- agent: dev
|
|
127
|
+
action: address_qa_feedback
|
|
128
|
+
updates: implementation_files
|
|
129
|
+
condition: qa_left_unchecked_items
|
|
130
|
+
notes: |
|
|
131
|
+
If QA left unchecked items:
|
|
132
|
+
- Dev Agent (New Chat): Address remaining items
|
|
133
|
+
- Return to QA for final approval
|
|
134
|
+
|
|
135
|
+
- repeat_development_cycle:
|
|
136
|
+
action: continue_for_all_stories
|
|
137
|
+
notes: |
|
|
138
|
+
Repeat story cycle (SM → Dev → QA) for all epic stories
|
|
139
|
+
Continue until all stories in PRD are complete
|
|
140
|
+
|
|
141
|
+
- agent: po
|
|
142
|
+
action: epic_retrospective
|
|
143
|
+
creates: epic-retrospective.md
|
|
144
|
+
condition: epic_complete
|
|
145
|
+
optional: true
|
|
146
|
+
notes: |
|
|
147
|
+
OPTIONAL: After epic completion
|
|
148
|
+
- NOTE: epic-retrospective task coming soon
|
|
149
|
+
- Validate epic was completed correctly
|
|
150
|
+
- Document learnings and improvements
|
|
151
|
+
|
|
71
152
|
- workflow_end:
|
|
72
|
-
action:
|
|
153
|
+
action: project_complete
|
|
73
154
|
notes: |
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
1. ENSURE DOCUMENTS ARE IN PROJECT:
|
|
77
|
-
- Copy final prd.md to project's docs/prd.md
|
|
78
|
-
- Copy final architecture.md to project's docs/architecture.md
|
|
79
|
-
- All documents must be in the project before proceeding
|
|
80
|
-
|
|
81
|
-
2. SHARD DOCUMENTS (in IDE):
|
|
82
|
-
- Option A: Use PO agent to shard: @po then ask to shard docs/prd.md
|
|
83
|
-
- Option B: Manual: Drag shard-doc task + docs/prd.md into chat
|
|
84
|
-
- This creates docs/prd/ and docs/architecture/ folders with sharded content
|
|
85
|
-
|
|
86
|
-
3. START DEVELOPMENT CYCLE:
|
|
87
|
-
a. SM Agent (New Chat): @sm → *create
|
|
88
|
-
- Creates next story from sharded docs
|
|
89
|
-
- Review and approve story (Draft → Approved)
|
|
90
|
-
|
|
91
|
-
b. Dev Agent (New Chat): @dev
|
|
92
|
-
- Implements approved story
|
|
93
|
-
- Updates File List with all changes
|
|
94
|
-
- Marks story as "Review" when complete
|
|
95
|
-
|
|
96
|
-
c. QA Agent (New Chat): @qa → review-story
|
|
97
|
-
- Senior dev review with refactoring ability
|
|
98
|
-
- Fixes small issues directly
|
|
99
|
-
- Leaves checklist for remaining items
|
|
100
|
-
- Updates story status (Review → Done or stays Review)
|
|
101
|
-
|
|
102
|
-
d. If QA left unchecked items:
|
|
103
|
-
- Dev Agent (New Chat): Address remaining items
|
|
104
|
-
- Return to QA for final approval
|
|
105
|
-
|
|
106
|
-
4. REPEAT: Continue cycle for all epic stories
|
|
155
|
+
All stories implemented and reviewed!
|
|
156
|
+
Project development phase complete.
|
|
107
157
|
|
|
108
158
|
Reference: data#bmad-kb:IDE Development Workflow
|
|
109
159
|
|
|
@@ -124,21 +174,45 @@ workflow:
|
|
|
124
174
|
G --> H
|
|
125
175
|
H --> I{PO finds issues?}
|
|
126
176
|
I -->|Yes| J[Return to relevant agent for fixes]
|
|
127
|
-
I -->|No| K[
|
|
177
|
+
I -->|No| K[po: shard documents]
|
|
128
178
|
J --> H
|
|
179
|
+
|
|
180
|
+
K --> L[sm: create story]
|
|
181
|
+
L --> M{Review draft story?}
|
|
182
|
+
M -->|Yes| N[analyst/pm: review & approve story]
|
|
183
|
+
M -->|No| O[dev: implement story]
|
|
184
|
+
N --> O
|
|
185
|
+
O --> P{QA review?}
|
|
186
|
+
P -->|Yes| Q[qa: review implementation]
|
|
187
|
+
P -->|No| R{More stories?}
|
|
188
|
+
Q --> S{QA found issues?}
|
|
189
|
+
S -->|Yes| T[dev: address QA feedback]
|
|
190
|
+
S -->|No| R
|
|
191
|
+
T --> Q
|
|
192
|
+
R -->|Yes| L
|
|
193
|
+
R -->|No| U{Epic retrospective?}
|
|
194
|
+
U -->|Yes| V[po: epic retrospective]
|
|
195
|
+
U -->|No| W[Project Complete]
|
|
196
|
+
V --> W
|
|
129
197
|
|
|
130
198
|
B -.-> B1[Optional: brainstorming]
|
|
131
199
|
B -.-> B2[Optional: market research]
|
|
132
200
|
D -.-> D1[Optional: user research]
|
|
133
201
|
E -.-> E1[Optional: technical research]
|
|
134
202
|
|
|
135
|
-
style
|
|
203
|
+
style W fill:#90EE90
|
|
204
|
+
style K fill:#ADD8E6
|
|
205
|
+
style L fill:#ADD8E6
|
|
206
|
+
style O fill:#ADD8E6
|
|
136
207
|
style D3 fill:#E6E6FA
|
|
137
208
|
style D4 fill:#E6E6FA
|
|
138
209
|
style B fill:#FFE4B5
|
|
139
210
|
style C fill:#FFE4B5
|
|
140
211
|
style D fill:#FFE4B5
|
|
141
212
|
style E fill:#FFE4B5
|
|
213
|
+
style N fill:#F0E68C
|
|
214
|
+
style Q fill:#F0E68C
|
|
215
|
+
style V fill:#F0E68C
|
|
142
216
|
```
|
|
143
217
|
|
|
144
218
|
decision_guidance:
|
|
@@ -13,11 +13,22 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
|
|
|
13
13
|
|
|
14
14
|
## Execution Flow
|
|
15
15
|
|
|
16
|
+
### 0. Check Workflow Plan (if configured)
|
|
17
|
+
|
|
18
|
+
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
|
|
19
|
+
|
|
20
|
+
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
|
|
21
|
+
- If plan exists and this document creation is part of the plan:
|
|
22
|
+
- Verify this is the expected next step
|
|
23
|
+
- If out of sequence and `enforceSequence: true`, warn user and halt without user override
|
|
24
|
+
- If out of sequence and `enforceSequence: false`, ask for confirmation
|
|
25
|
+
- Continue with normal execution after plan check
|
|
26
|
+
|
|
16
27
|
### 1. Identify Template
|
|
17
28
|
|
|
18
29
|
- Load from `templates#*` or `{root}/templates directory`
|
|
19
30
|
- Agent-specific templates are listed in agent's dependencies
|
|
20
|
-
- If agent has `templates: [prd-tmpl, architecture-tmpl]
|
|
31
|
+
- If agent has `templates: [prd-tmpl, architecture-tmpl]` for example, then offer to create "PRD" and "Architecture" documents
|
|
21
32
|
|
|
22
33
|
### 2. Ask Interaction Mode
|
|
23
34
|
|
|
@@ -54,6 +65,15 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
|
|
|
54
65
|
- Begin directly with content (no preamble)
|
|
55
66
|
- Include any handoff prompts from template
|
|
56
67
|
|
|
68
|
+
### 6. Update Workflow Plan (if applicable)
|
|
69
|
+
|
|
70
|
+
[[LLM: After successful document creation]]
|
|
71
|
+
|
|
72
|
+
- If plan tracking is enabled and document was part of plan:
|
|
73
|
+
- Call update-workflow-plan task to mark step complete
|
|
74
|
+
- Parameters: task: create-doc, step_id: {from plan}, status: complete
|
|
75
|
+
- Show next recommended step from plan
|
|
76
|
+
|
|
57
77
|
## Common Mistakes to Avoid
|
|
58
78
|
|
|
59
79
|
❌ Skipping elicitation tasks
|
|
@@ -33,7 +33,7 @@ Select mode from the mode selector (usually in status bar):
|
|
|
33
33
|
### File Permission Summary
|
|
34
34
|
|
|
35
35
|
- **Documentation agents** (analyst, pm, po, sm): `.md`, `.txt` only
|
|
36
|
-
- **bmad-architect**: `.md`, `.txt`, `.
|
|
36
|
+
- **bmad-architect**: `.md`, `.txt`, `.yaml`, `.yaml`, `.json`
|
|
37
37
|
- **bmad-qa**: Test files (`.test.*`, `.spec.*`) and `.md`
|
|
38
38
|
- **bmad-ux-expert**: `.md`, `.css`, `.scss`, `.html`, `.jsx`, `.tsx`
|
|
39
39
|
- **Full access**: `bmad-dev`, `bmad-bmad-master`, `bmad-orchestrator`
|
|
@@ -75,12 +75,12 @@ The `.bmad-core` directory contains all the definitions and resources that give
|
|
|
75
75
|
|
|
76
76
|
### 3.2. Agent Teams (`.bmad-core/agent-teams/`)
|
|
77
77
|
|
|
78
|
-
- **Purpose**: Team files (e.g., `team-all.
|
|
78
|
+
- **Purpose**: Team files (e.g., `team-all.yaml`) define collections of agents and workflows that are bundled together for a specific purpose, like "full-stack development" or "backend-only". This creates a larger, pre-packaged context for web UI environments.
|
|
79
79
|
- **Structure**: A team file lists the agents to include. It can use wildcards, such as `"*"` to include all agents. This allows for the creation of comprehensive bundles like `team-all`.
|
|
80
80
|
|
|
81
81
|
### 3.3. Workflows (`.bmad-core/workflows/`)
|
|
82
82
|
|
|
83
|
-
- **Purpose**: Workflows are YAML files (e.g., `greenfield-fullstack.
|
|
83
|
+
- **Purpose**: Workflows are YAML files (e.g., `greenfield-fullstack.yaml`) that define a prescribed sequence of steps and agent interactions for a specific project type. They act as a strategic guide for the user and the `bmad-orchestrator` agent.
|
|
84
84
|
- **Structure**: A workflow defines sequences for both complex and simple projects, lists the agents involved at each step, the artifacts they create, and the conditions for moving from one step to the next. It often includes a Mermaid diagram for visualization.
|
|
85
85
|
|
|
86
86
|
### 3.4. Reusable Resources (`templates`, `tasks`, `checklists`, `data`)
|
|
@@ -239,10 +239,10 @@ bmad-method/
|
|
|
239
239
|
│ │ ├── sm.md # Scrum master agent
|
|
240
240
|
│ │ └── ux-expert.md # UX designer agent
|
|
241
241
|
│ ├── agent-teams/ # Pre-configured agent teams
|
|
242
|
-
│ │ ├── team-all.
|
|
243
|
-
│ │ ├── team-fullstack.
|
|
244
|
-
│ │ ├── team-ide-minimal.
|
|
245
|
-
│ │ └── team-no-ui.
|
|
242
|
+
│ │ ├── team-all.yaml # All agents bundle
|
|
243
|
+
│ │ ├── team-fullstack.yaml # Full-stack development team
|
|
244
|
+
│ │ ├── team-ide-minimal.yaml # Minimal IDE-focused team
|
|
245
|
+
│ │ └── team-no-ui.yaml # Backend-only team
|
|
246
246
|
│ ├── checklists/ # Quality assurance checklists
|
|
247
247
|
│ │ ├── architect-checklist.md
|
|
248
248
|
│ │ ├── po-master-checklist.md
|
|
@@ -268,11 +268,11 @@ bmad-method/
|
|
|
268
268
|
│ │ ├── template-format.md # Template markup spec
|
|
269
269
|
│ │ └── workflow-management.md # Workflow helpers
|
|
270
270
|
│ ├── workflows/ # Development workflows
|
|
271
|
-
│ │ ├── brownfield-enhancement.
|
|
272
|
-
│ │ ├── greenfield-fullstack.
|
|
273
|
-
│ │ ├── greenfield-service.
|
|
274
|
-
│ │ └── greenfield-simple.
|
|
275
|
-
│ └── core-config.
|
|
271
|
+
│ │ ├── brownfield-enhancement.yaml
|
|
272
|
+
│ │ ├── greenfield-fullstack.yaml
|
|
273
|
+
│ │ ├── greenfield-service.yaml
|
|
274
|
+
│ │ └── greenfield-simple.yaml
|
|
275
|
+
│ └── core-config.yaml # V4 configuration system
|
|
276
276
|
│
|
|
277
277
|
├── dist/ # Pre-built bundles (generated)
|
|
278
278
|
│ ├── agents/ # Individual agent bundles
|
|
@@ -378,7 +378,7 @@ bmad-method/
|
|
|
378
378
|
|
|
379
379
|
### Key Files
|
|
380
380
|
|
|
381
|
-
- **core-config.
|
|
381
|
+
- **core-config.yaml**: V4's flexible configuration system
|
|
382
382
|
- **bmad-kb.md**: Central knowledge base loaded by most agents
|
|
383
383
|
- **template-format.md**: Specification for BMAD's template markup
|
|
384
384
|
- **dependency-resolver.js**: Manages agent resource loading
|
package/docs/user-guide.md
CHANGED
|
@@ -104,7 +104,7 @@ After upgrading:
|
|
|
104
104
|
2. Optionally run the `doc-migration-task` to align your documents with V4 templates - you can do this with your agent by saying something like: 'run {drag in task} against {drag prd or arch file from docs} to align with {drag the template from .bmad-core/templates/full-stack-architecture.md}'
|
|
105
105
|
3. If you have separate front-end and backend architecture docs you can modify step 2 to merge both into a single full stack architecture or separate Front and Back end.
|
|
106
106
|
|
|
107
|
-
The reason #2 and #3 are optional is because now BMAD V4 makes sharding optional for the SM. See [Core Configuration](#core-configuration
|
|
107
|
+
The reason #2 and #3 are optional is because now BMAD V4 makes sharding optional for the SM. See [Core Configuration](#core-configuration)
|
|
108
108
|
|
|
109
109
|
**Note**: The agents in `.bmad-core/` fully replace the items in `bmad-agent/` - you can remove the backup folder versions.
|
|
110
110
|
|
|
@@ -456,7 +456,7 @@ The SM agent serves as a critical bridge between high-level planning and technic
|
|
|
456
456
|
|
|
457
457
|
When the SM agent executes the `create-next-story` task:
|
|
458
458
|
|
|
459
|
-
1. **Loads Configuration**: Reads `core-config.
|
|
459
|
+
1. **Loads Configuration**: Reads `core-config.yaml` to understand project structure
|
|
460
460
|
2. **Identifies Next Story**: Sequentially processes stories from epics (1.1, 1.2, 2.1, etc.)
|
|
461
461
|
3. **Gathers Architecture Context**: Reads relevant sharded architecture documents based on story type:
|
|
462
462
|
|
|
@@ -1131,11 +1131,11 @@ This file allows you to define your preferred technologies, patterns, and standa
|
|
|
1131
1131
|
|
|
1132
1132
|
When creating custom web bundles or uploading to AI platforms, include your `technical-preferences.md` content to ensure agents have your preferences from the start of any conversation.
|
|
1133
1133
|
|
|
1134
|
-
### Core Configuration
|
|
1134
|
+
### Core Configuration
|
|
1135
1135
|
|
|
1136
|
-
The `bmad-core/core-config.
|
|
1136
|
+
The `bmad-core/core-config.yaml` file is a critical V4 innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
|
|
1137
1137
|
|
|
1138
|
-
#### Understanding core-config.
|
|
1138
|
+
#### Understanding core-config.yaml
|
|
1139
1139
|
|
|
1140
1140
|
This configuration file acts as a map for BMAD agents, telling them exactly where to find your project documents and how they're structured. It's what makes V4 agents intelligent enough to work with V3 projects, custom layouts, or any document organization you prefer.
|
|
1141
1141
|
|
|
@@ -1350,7 +1350,7 @@ customTechnicalDocuments:
|
|
|
1350
1350
|
1. **Always Configure for Your Structure**: Don't force your project to match BMAD defaults
|
|
1351
1351
|
2. **Keep devLoadAlwaysFiles Focused**: Only include files needed for every dev task
|
|
1352
1352
|
3. **Use Debug Log**: Enable when troubleshooting story implementation issues
|
|
1353
|
-
4. **Version Control core-config.
|
|
1353
|
+
4. **Version Control core-config.yaml**: Track changes to understand project evolution
|
|
1354
1354
|
5. **Document Custom Patterns**: If using custom epicFilePattern, document it
|
|
1355
1355
|
|
|
1356
1356
|
#### Troubleshooting
|
|
@@ -286,7 +286,7 @@ IMPORTANT: Only proceed after plan.md is approved
|
|
|
286
286
|
expansion-packs/
|
|
287
287
|
└── {pack-name}/
|
|
288
288
|
├── plan.md (ALREADY CREATED)
|
|
289
|
-
├── manifest.
|
|
289
|
+
├── manifest.yaml
|
|
290
290
|
├── README.md
|
|
291
291
|
├── agents/
|
|
292
292
|
│ ├── {pack-name}-orchestrator.md (REQUIRED - Custom themed orchestrator)
|
|
@@ -309,13 +309,13 @@ expansion-packs/
|
|
|
309
309
|
├── workflows/
|
|
310
310
|
│ └── {domain}-workflow.md (REQUIRED if multiple agents)
|
|
311
311
|
└── agent-teams/
|
|
312
|
-
└── {domain}-team.
|
|
312
|
+
└── {domain}-team.yaml (REQUIRED if multiple agents)
|
|
313
313
|
|
|
314
314
|
```
|
|
315
315
|
|
|
316
316
|
#### 3.2 Create Manifest
|
|
317
317
|
|
|
318
|
-
Create `manifest.
|
|
318
|
+
Create `manifest.yaml`:
|
|
319
319
|
|
|
320
320
|
```yaml
|
|
321
321
|
name: {pack-name}
|
|
@@ -358,7 +358,7 @@ files:
|
|
|
358
358
|
- {domain}-workflow.md # REQUIRED if multiple agents - decision trees
|
|
359
359
|
|
|
360
360
|
agent-teams:
|
|
361
|
-
- {domain}-team.
|
|
361
|
+
- {domain}-team.yaml # REQUIRED if multiple agents - team config
|
|
362
362
|
|
|
363
363
|
# Data files users must provide (in their bmad-core/data/ directory)
|
|
364
364
|
required_user_data:
|
|
@@ -494,7 +494,7 @@ cp common/utils/workflow-management.md expansion-packs/{pack-name}/utils/
|
|
|
494
494
|
1. Design decision trees for workflow branching
|
|
495
495
|
2. Create handoff protocols to specialist agents
|
|
496
496
|
3. Implement validation loops and quality checkpoints
|
|
497
|
-
4. **If multiple agents**: Create team configuration in `agent-teams/{domain}-team.
|
|
497
|
+
4. **If multiple agents**: Create team configuration in `agent-teams/{domain}-team.yaml`
|
|
498
498
|
5. **If multiple agents**: Create workflow in `workflows/{domain}-workflow.md`
|
|
499
499
|
6. Ensure orchestrator references workflow-management utility
|
|
500
500
|
7. Verify ALL referenced tasks exist (including core utilities)
|
|
@@ -665,7 +665,7 @@ Before declaring complete:
|
|
|
665
665
|
|
|
666
666
|
1. [ ] Decision trees and workflow orchestration complete
|
|
667
667
|
2. [ ] Knowledge base files embedded (best practices, terminology, standards)
|
|
668
|
-
3. [ ] Manifest.
|
|
668
|
+
3. [ ] Manifest.yaml reflects all components and dependencies
|
|
669
669
|
4. [ ] All items in plan.md marked complete
|
|
670
670
|
5. [ ] No orphaned tasks or templates
|
|
671
671
|
|
|
@@ -772,7 +772,7 @@ These files are automatically available to all agents and don't require user set
|
|
|
772
772
|
```text
|
|
773
773
|
healthcare/
|
|
774
774
|
├── plan.md (Created first for approval)
|
|
775
|
-
├── manifest.
|
|
775
|
+
├── manifest.yaml (with dependency mapping and character descriptions)
|
|
776
776
|
├── README.md (featuring character introductions and numbered options)
|
|
777
777
|
├── agents/
|
|
778
778
|
│ ├── healthcare-orchestrator.md (Dr. Sarah Chen - YAML-in-Markdown)
|
|
@@ -798,7 +798,7 @@ healthcare/
|
|
|
798
798
|
│ ├── clinical-trial-workflow.md (decision trees with Mermaid diagrams)
|
|
799
799
|
│ └── compliance-audit-workflow.md (handoff protocols and quality gates)
|
|
800
800
|
└── agent-teams/
|
|
801
|
-
└── healthcare-team.
|
|
801
|
+
└── healthcare-team.yaml (coordinated team configurations)
|
|
802
802
|
|
|
803
803
|
Required user data files (bmad-core/data/):
|
|
804
804
|
- medical-terminology.md (institution-specific terms and abbreviations)
|
|
@@ -1009,7 +1009,7 @@ Embedded knowledge (automatic):
|
|
|
1009
1009
|
- [ ] All agent references verified (tasks, templates, data, checklists)
|
|
1010
1010
|
- [ ] Data requirements documented with validation criteria and examples
|
|
1011
1011
|
- [ ] README includes character introductions and numbered options explanation
|
|
1012
|
-
- [ ] manifest.
|
|
1012
|
+
- [ ] manifest.yaml reflects actual files with dependency mapping and character descriptions
|
|
1013
1013
|
|
|
1014
1014
|
**Advanced Quality Gates:**
|
|
1015
1015
|
|
|
@@ -150,5 +150,5 @@ workflows: null
|
|
|
150
150
|
3. Replace all placeholders with actual values
|
|
151
151
|
4. Ensure agent names match available agents in the system
|
|
152
152
|
5. Verify workflow names match available workflows
|
|
153
|
-
6. Save as team-[descriptor].
|
|
153
|
+
6. Save as team-[descriptor].yaml or [domain]-team.yaml
|
|
154
154
|
7. Place in the agent-teams directory of the appropriate location]]
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
CRITICAL: Read the full YML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:
|
|
12
12
|
|
|
13
|
-
```
|
|
13
|
+
```yaml
|
|
14
14
|
activation-instructions:
|
|
15
15
|
- Follow all instructions in this file -> this defines you, your persona and more importantly what you can do. STAY IN CHARACTER!
|
|
16
16
|
- Only read the files/tasks listed here when user selects them for execution to minimize context usage
|
|
@@ -28,7 +28,7 @@ Install this expansion pack when your project requires:
|
|
|
28
28
|
|
|
29
29
|
### Agents
|
|
30
30
|
|
|
31
|
-
- `devops.
|
|
31
|
+
- `devops.yaml` - DevOps and Platform Engineering agent configuration
|
|
32
32
|
|
|
33
33
|
### Personas
|
|
34
34
|
|
|
@@ -116,8 +116,8 @@ Before deployment:
|
|
|
116
116
|
|
|
117
117
|
The DevOps agent can be added to team configurations:
|
|
118
118
|
|
|
119
|
-
- `team-technical.
|
|
120
|
-
- `team-full-org.
|
|
119
|
+
- `team-technical.yaml` - For technical implementation teams
|
|
120
|
+
- `team-full-org.yaml` - For complete organizational teams
|
|
121
121
|
|
|
122
122
|
## Dependencies
|
|
123
123
|
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const fs = require("node:fs").promises;
|
|
2
2
|
const path = require("node:path");
|
|
3
3
|
const DependencyResolver = require("../lib/dependency-resolver");
|
|
4
|
+
const yamlUtils = require("../lib/yaml-utils");
|
|
4
5
|
|
|
5
6
|
class WebBuilder {
|
|
6
7
|
constructor(options = {}) {
|
|
@@ -111,10 +112,12 @@ class WebBuilder {
|
|
|
111
112
|
|
|
112
113
|
processAgentContent(content) {
|
|
113
114
|
// First, replace content before YAML with the template
|
|
115
|
+
const yamlContent = yamlUtils.extractYamlFromAgent(content);
|
|
116
|
+
if (!yamlContent) return content;
|
|
117
|
+
|
|
114
118
|
const yamlMatch = content.match(/```ya?ml\n([\s\S]*?)\n```/);
|
|
115
119
|
if (!yamlMatch) return content;
|
|
116
|
-
|
|
117
|
-
const yamlContent = yamlMatch[1];
|
|
120
|
+
|
|
118
121
|
const yamlStartIndex = content.indexOf(yamlMatch[0]);
|
|
119
122
|
const yamlEndIndex = yamlStartIndex + yamlMatch[0].length;
|
|
120
123
|
|
|
@@ -259,7 +262,7 @@ class WebBuilder {
|
|
|
259
262
|
const agentTeamsDir = path.join(packDir, "agent-teams");
|
|
260
263
|
try {
|
|
261
264
|
const teamFiles = await fs.readdir(agentTeamsDir);
|
|
262
|
-
const teamFile = teamFiles.find((f) => f.endsWith(".
|
|
265
|
+
const teamFile = teamFiles.find((f) => f.endsWith(".yaml"));
|
|
263
266
|
|
|
264
267
|
if (teamFile) {
|
|
265
268
|
console.log(` Building team bundle for ${packName}`);
|
|
@@ -272,7 +275,7 @@ class WebBuilder {
|
|
|
272
275
|
for (const outputDir of outputDirs) {
|
|
273
276
|
const teamsOutputDir = path.join(outputDir, "teams");
|
|
274
277
|
await fs.mkdir(teamsOutputDir, { recursive: true });
|
|
275
|
-
const outputFile = path.join(teamsOutputDir, teamFile.replace(".
|
|
278
|
+
const outputFile = path.join(teamsOutputDir, teamFile.replace(".yaml", ".txt"));
|
|
276
279
|
await fs.writeFile(outputFile, bundle, "utf8");
|
|
277
280
|
console.log(` ✓ Created bundle: ${path.relative(this.rootDir, outputFile)}`);
|
|
278
281
|
}
|
|
@@ -294,11 +297,11 @@ class WebBuilder {
|
|
|
294
297
|
sections.push(this.formatSection(`agents#${agentName}`, agentContent));
|
|
295
298
|
|
|
296
299
|
// Resolve and add agent dependencies
|
|
297
|
-
const
|
|
298
|
-
if (
|
|
300
|
+
const yamlContent = yamlUtils.extractYamlFromAgent(agentContent);
|
|
301
|
+
if (yamlContent) {
|
|
299
302
|
try {
|
|
300
303
|
const yaml = require("js-yaml");
|
|
301
|
-
const agentConfig = yaml.load(
|
|
304
|
+
const agentConfig = yaml.load(yamlContent);
|
|
302
305
|
|
|
303
306
|
if (agentConfig.dependencies) {
|
|
304
307
|
// Add resources, first try expansion pack, then core
|
|
@@ -306,7 +309,7 @@ class WebBuilder {
|
|
|
306
309
|
if (Array.isArray(resources)) {
|
|
307
310
|
for (const resourceName of resources) {
|
|
308
311
|
let found = false;
|
|
309
|
-
const extensions = [".md", ".
|
|
312
|
+
const extensions = [".md", ".yaml"];
|
|
310
313
|
|
|
311
314
|
// Try expansion pack first
|
|
312
315
|
for (const ext of extensions) {
|
|
@@ -391,7 +394,7 @@ class WebBuilder {
|
|
|
391
394
|
|
|
392
395
|
// Add team configuration and parse to get agent list
|
|
393
396
|
const teamContent = await fs.readFile(teamConfigPath, "utf8");
|
|
394
|
-
const teamFileName = path.basename(teamConfigPath, ".
|
|
397
|
+
const teamFileName = path.basename(teamConfigPath, ".yaml");
|
|
395
398
|
const teamConfig = this.parseYaml(teamContent);
|
|
396
399
|
sections.push(this.formatSection(`agent-teams#${teamFileName}`, teamContent));
|
|
397
400
|
|
|
@@ -416,9 +419,9 @@ class WebBuilder {
|
|
|
416
419
|
try {
|
|
417
420
|
const resourceFiles = await fs.readdir(resourcePath);
|
|
418
421
|
for (const resourceFile of resourceFiles.filter(
|
|
419
|
-
(f) => f.endsWith(".md") || f.endsWith(".
|
|
422
|
+
(f) => f.endsWith(".md") || f.endsWith(".yaml")
|
|
420
423
|
)) {
|
|
421
|
-
const fileName = resourceFile.replace(/\.(md|
|
|
424
|
+
const fileName = resourceFile.replace(/\.(md|yaml)$/, "");
|
|
422
425
|
expansionResources.set(`${resourceDir}#${fileName}`, true);
|
|
423
426
|
}
|
|
424
427
|
} catch (error) {
|
|
@@ -474,13 +477,9 @@ class WebBuilder {
|
|
|
474
477
|
sections.push(this.formatSection(`agents#${agentId}`, coreAgentContent));
|
|
475
478
|
|
|
476
479
|
// Parse and collect dependencies from core agent
|
|
477
|
-
const
|
|
478
|
-
if (
|
|
480
|
+
const yamlContent = yamlUtils.extractYamlFromAgent(coreAgentContent, true);
|
|
481
|
+
if (yamlContent) {
|
|
479
482
|
try {
|
|
480
|
-
// Clean up the YAML to handle command descriptions after dashes
|
|
481
|
-
let yamlContent = agentYaml[1];
|
|
482
|
-
yamlContent = yamlContent.replace(/^(\s*-)(\s*"[^"]+")(\s*-\s*.*)$/gm, "$1$2");
|
|
483
|
-
|
|
484
483
|
const agentConfig = this.parseYaml(yamlContent);
|
|
485
484
|
if (agentConfig.dependencies) {
|
|
486
485
|
for (const [resourceType, resources] of Object.entries(agentConfig.dependencies)) {
|
|
@@ -508,7 +507,7 @@ class WebBuilder {
|
|
|
508
507
|
// Always prefer expansion pack versions if they exist
|
|
509
508
|
for (const [key, dep] of allDependencies) {
|
|
510
509
|
let found = false;
|
|
511
|
-
const extensions = [".md", ".
|
|
510
|
+
const extensions = [".md", ".yaml"];
|
|
512
511
|
|
|
513
512
|
// Always check expansion pack first, even if the dependency came from a core agent
|
|
514
513
|
if (expansionResources.has(key)) {
|
|
@@ -568,11 +567,11 @@ class WebBuilder {
|
|
|
568
567
|
try {
|
|
569
568
|
const resourceFiles = await fs.readdir(resourcePath);
|
|
570
569
|
for (const resourceFile of resourceFiles.filter(
|
|
571
|
-
(f) => f.endsWith(".md") || f.endsWith(".
|
|
570
|
+
(f) => f.endsWith(".md") || f.endsWith(".yaml")
|
|
572
571
|
)) {
|
|
573
572
|
const filePath = path.join(resourcePath, resourceFile);
|
|
574
573
|
const fileContent = await fs.readFile(filePath, "utf8");
|
|
575
|
-
const fileName = resourceFile.replace(/\.(md|
|
|
574
|
+
const fileName = resourceFile.replace(/\.(md|yaml)$/, "");
|
|
576
575
|
|
|
577
576
|
// Only add if not already included as a dependency
|
|
578
577
|
const resourceKey = `${resourceDir}#${fileName}`;
|
|
@@ -32,7 +32,7 @@ async function bumpAllVersions() {
|
|
|
32
32
|
const updatedItems = [];
|
|
33
33
|
|
|
34
34
|
// First, bump the core version
|
|
35
|
-
const coreConfigPath = path.join(__dirname, '..', 'bmad-core', 'core-config.
|
|
35
|
+
const coreConfigPath = path.join(__dirname, '..', 'bmad-core', 'core-config.yaml');
|
|
36
36
|
try {
|
|
37
37
|
const coreConfigContent = fs.readFileSync(coreConfigPath, 'utf8');
|
|
38
38
|
const coreConfig = yaml.load(coreConfigContent);
|
|
@@ -59,7 +59,7 @@ async function bumpAllVersions() {
|
|
|
59
59
|
for (const entry of entries) {
|
|
60
60
|
if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'README.md') {
|
|
61
61
|
const packId = entry.name;
|
|
62
|
-
const configPath = path.join(expansionPacksDir, packId, 'config.
|
|
62
|
+
const configPath = path.join(expansionPacksDir, packId, 'config.yaml');
|
|
63
63
|
|
|
64
64
|
if (fs.existsSync(configPath)) {
|
|
65
65
|
try {
|
|
@@ -30,7 +30,7 @@ function bumpVersion(currentVersion, type) {
|
|
|
30
30
|
|
|
31
31
|
async function bumpCoreVersion() {
|
|
32
32
|
try {
|
|
33
|
-
const coreConfigPath = path.join(__dirname, '..', 'bmad-core', 'core-config.
|
|
33
|
+
const coreConfigPath = path.join(__dirname, '..', 'bmad-core', 'core-config.yaml');
|
|
34
34
|
|
|
35
35
|
const coreConfigContent = fs.readFileSync(coreConfigPath, 'utf8');
|
|
36
36
|
const coreConfig = yaml.load(coreConfigContent);
|
|
@@ -38,7 +38,7 @@ function bumpVersion(currentVersion, type) {
|
|
|
38
38
|
|
|
39
39
|
async function updateVersion() {
|
|
40
40
|
try {
|
|
41
|
-
const configPath = path.join(__dirname, '..', 'expansion-packs', packId, 'config.
|
|
41
|
+
const configPath = path.join(__dirname, '..', 'expansion-packs', packId, 'config.yaml');
|
|
42
42
|
|
|
43
43
|
if (!fs.existsSync(configPath)) {
|
|
44
44
|
console.error(`Error: Expansion pack '${packId}' not found`);
|
|
@@ -16,7 +16,7 @@ installer/
|
|
|
16
16
|
│ ├── ide-setup.js # IDE-specific setup
|
|
17
17
|
│ └── prompts.js # Interactive CLI prompts
|
|
18
18
|
├── config/ # Configuration files
|
|
19
|
-
│ └── install.config.
|
|
19
|
+
│ └── install.config.yaml # Installation profiles
|
|
20
20
|
├── templates/ # IDE template files
|
|
21
21
|
│ ├── cursor-rules.md # Cursor template
|
|
22
22
|
│ ├── claude-commands.md # Claude Code template
|
|
@@ -158,7 +158,7 @@ async function promptInstallation() {
|
|
|
158
158
|
const choices = [];
|
|
159
159
|
|
|
160
160
|
// Load core config to get short-title
|
|
161
|
-
const coreConfigPath = path.join(__dirname, '..', '..', '..', 'bmad-core', 'core-config.
|
|
161
|
+
const coreConfigPath = path.join(__dirname, '..', '..', '..', 'bmad-core', 'core-config.yaml');
|
|
162
162
|
const coreConfig = yaml.load(await fs.readFile(coreConfigPath, 'utf8'));
|
|
163
163
|
const coreShortTitle = coreConfig['short-title'] || 'BMad Agile Core System';
|
|
164
164
|
|
|
@@ -166,7 +166,7 @@ async function promptInstallation() {
|
|
|
166
166
|
let bmadOptionText;
|
|
167
167
|
if (state.type === 'v4_existing') {
|
|
168
168
|
const currentVersion = state.manifest?.version || 'unknown';
|
|
169
|
-
const newVersion = coreConfig.version || 'unknown'; // Use version from core-config.
|
|
169
|
+
const newVersion = coreConfig.version || 'unknown'; // Use version from core-config.yaml
|
|
170
170
|
const versionInfo = currentVersion === newVersion
|
|
171
171
|
? `(v${currentVersion} - reinstall)`
|
|
172
172
|
: `(v${currentVersion} → v${newVersion})`;
|