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.
Files changed (86) hide show
  1. package/.vscode/settings.json +11 -5
  2. package/CHANGELOG.md +22 -1
  3. package/README.md +2 -2
  4. package/bmad-core/agents/bmad-master.md +15 -2
  5. package/bmad-core/agents/bmad-orchestrator.md +14 -0
  6. package/bmad-core/agents/dev.md +2 -2
  7. package/bmad-core/agents/pm.md +1 -1
  8. package/bmad-core/agents/po.md +1 -1
  9. package/bmad-core/{core-config.yml → core-config.yaml} +5 -0
  10. package/bmad-core/data/bmad-kb.md +4 -4
  11. package/bmad-core/tasks/create-brownfield-story.md +355 -0
  12. package/bmad-core/tasks/create-next-story.md +29 -4
  13. package/bmad-core/tasks/create-workflow-plan.md +289 -0
  14. package/bmad-core/tasks/shard-doc.md +3 -3
  15. package/bmad-core/tasks/update-workflow-plan.md +248 -0
  16. package/bmad-core/templates/architecture-tmpl.md +1 -1
  17. package/bmad-core/templates/brownfield-prd-tmpl.md +52 -28
  18. package/bmad-core/templates/fullstack-architecture-tmpl.md +3 -3
  19. package/bmad-core/utils/plan-management.md +223 -0
  20. package/bmad-core/workflows/brownfield-fullstack.yaml +297 -0
  21. package/bmad-core/workflows/brownfield-service.yaml +187 -0
  22. package/bmad-core/workflows/{brownfield-ui.yml → brownfield-ui.yaml} +110 -36
  23. package/bmad-core/workflows/{greenfield-fullstack.yml → greenfield-fullstack.yaml} +110 -36
  24. package/bmad-core/workflows/{greenfield-service.yml → greenfield-service.yaml} +110 -36
  25. package/bmad-core/workflows/{greenfield-ui.yml → greenfield-ui.yaml} +110 -36
  26. package/common/tasks/create-doc.md +21 -1
  27. package/docs/agentic-tools/roo-code-guide.md +1 -1
  28. package/docs/core-architecture.md +12 -12
  29. package/docs/user-guide.md +6 -6
  30. package/expansion-packs/bmad-creator-tools/tasks/generate-expansion-pack.md +9 -9
  31. package/expansion-packs/bmad-creator-tools/templates/agent-teams-tmpl.md +1 -1
  32. package/expansion-packs/bmad-creator-tools/templates/agent-tmpl.md +1 -1
  33. package/expansion-packs/bmad-infrastructure-devops/README.md +3 -3
  34. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
  35. package/package.json +1 -1
  36. package/tools/builders/web-builder.js +19 -20
  37. package/tools/bump-all-versions.js +2 -2
  38. package/tools/bump-core-version.js +1 -1
  39. package/tools/bump-expansion-version.js +1 -1
  40. package/tools/installer/README.md +1 -1
  41. package/tools/installer/bin/bmad.js +2 -2
  42. package/tools/installer/lib/config-loader.js +13 -12
  43. package/tools/installer/lib/file-manager.js +5 -5
  44. package/tools/installer/lib/ide-setup.js +14 -13
  45. package/tools/installer/lib/installer.js +26 -38
  46. package/tools/installer/package.json +1 -1
  47. package/tools/lib/dependency-resolver.js +9 -13
  48. package/tools/lib/yaml-utils.js +29 -0
  49. package/tools/update-expansion-version.js +3 -3
  50. package/tools/yaml-format.js +1 -1
  51. package/bmad-core/workflows/brownfield-fullstack.yml +0 -112
  52. package/bmad-core/workflows/brownfield-service.yml +0 -113
  53. package/dist/agents/analyst.txt +0 -2709
  54. package/dist/agents/architect.txt +0 -3903
  55. package/dist/agents/bmad-master.txt +0 -9173
  56. package/dist/agents/bmad-orchestrator.txt +0 -1257
  57. package/dist/agents/dev.txt +0 -298
  58. package/dist/agents/pm.txt +0 -2205
  59. package/dist/agents/po.txt +0 -1511
  60. package/dist/agents/qa.txt +0 -262
  61. package/dist/agents/sm.txt +0 -701
  62. package/dist/agents/ux-expert.txt +0 -1081
  63. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2358
  64. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1584
  65. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -809
  66. package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -6672
  67. package/dist/expansion-packs/bmad-creator-tools/agents/bmad-the-creator.txt +0 -1960
  68. package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2053
  69. package/dist/teams/team-all.txt +0 -10543
  70. package/dist/teams/team-fullstack.txt +0 -9731
  71. package/dist/teams/team-ide-minimal.txt +0 -3535
  72. package/dist/teams/team-no-ui.txt +0 -8619
  73. /package/.github/{FUNDING.yml → FUNDING.yaml} +0 -0
  74. /package/.github/workflows/{release.yml → release.yaml} +0 -0
  75. /package/bmad-core/agent-teams/{team-all.yml → team-all.yaml} +0 -0
  76. /package/bmad-core/agent-teams/{team-fullstack.yml → team-fullstack.yaml} +0 -0
  77. /package/bmad-core/agent-teams/{team-ide-minimal.yml → team-ide-minimal.yaml} +0 -0
  78. /package/bmad-core/agent-teams/{team-no-ui.yml → team-no-ui.yaml} +0 -0
  79. /package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/{phaser-2d-nodejs-game-team.yml → phaser-2d-nodejs-game-team.yaml} +0 -0
  80. /package/expansion-packs/bmad-2d-phaser-game-dev/{config.yml → config.yaml} +0 -0
  81. /package/expansion-packs/bmad-2d-phaser-game-dev/workflows/{game-dev-greenfield.yml → game-dev-greenfield.yaml} +0 -0
  82. /package/expansion-packs/bmad-2d-phaser-game-dev/workflows/{game-prototype.yml → game-prototype.yaml} +0 -0
  83. /package/expansion-packs/bmad-creator-tools/{config.yml → config.yaml} +0 -0
  84. /package/expansion-packs/bmad-infrastructure-devops/{config.yml → config.yaml} +0 -0
  85. /package/tools/installer/config/{ide-agent-config.yml → ide-agent-config.yaml} +0 -0
  86. /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: move_to_ide
153
+ action: project_complete
73
154
  notes: |
74
- Planning phase complete! Now transition to IDE Development:
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[Move to IDE Environment]
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 K fill:#90EE90
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]`, offer to create "PRD" and "Architecture" documents
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`, `.yml`, `.yaml`, `.json`
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.yml`) 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.
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.yml`) 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.
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.yml # All agents bundle
243
- │ │ ├── team-fullstack.yml # Full-stack development team
244
- │ │ ├── team-ide-minimal.yml # Minimal IDE-focused team
245
- │ │ └── team-no-ui.yml # Backend-only team
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.yml
272
- │ │ ├── greenfield-fullstack.yml
273
- │ │ ├── greenfield-service.yml
274
- │ │ └── greenfield-simple.yml
275
- │ └── core-config.yml # V4 configuration system
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.yml**: V4's flexible configuration system
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
@@ -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-coreconfigyml)
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.yml` to understand project structure
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 (core-config.yml)
1134
+ ### Core Configuration
1135
1135
 
1136
- The `bmad-core/core-config.yml` file is a critical V4 innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
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.yml
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.yml**: Track changes to understand project evolution
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.yml
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.yml (REQUIRED if multiple agents)
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.yml`:
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.yml # REQUIRED if multiple agents - team config
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.yml`
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.yml reflects all components and dependencies
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.yml (with dependency mapping and character descriptions)
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.yml (coordinated team configurations)
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.yml reflects actual files with dependency mapping and character descriptions
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].yml or [domain]-team.yml
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
- ```yml
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.yml` - DevOps and Platform Engineering agent configuration
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.yml` - For technical implementation teams
120
- - `team-full-org.yml` - For complete organizational teams
119
+ - `team-technical.yaml` - For technical implementation teams
120
+ - `team-full-org.yaml` - For complete organizational teams
121
121
 
122
122
  ## Dependencies
123
123
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bmad-method",
3
- "version": "4.23.0",
3
+ "version": "4.24.1",
4
4
  "description": "Breakthrough Method of Agile AI-driven Development",
5
5
  "main": "tools/cli.js",
6
6
  "bin": {
@@ -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(".yml"));
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(".yml", ".txt"));
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 agentYaml = agentContent.match(/```yaml\n([\s\S]*?)\n```/);
298
- if (agentYaml) {
300
+ const yamlContent = yamlUtils.extractYamlFromAgent(agentContent);
301
+ if (yamlContent) {
299
302
  try {
300
303
  const yaml = require("js-yaml");
301
- const agentConfig = yaml.load(agentYaml[1]);
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", ".yml", ".yaml"];
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, ".yml");
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(".yml")
422
+ (f) => f.endsWith(".md") || f.endsWith(".yaml")
420
423
  )) {
421
- const fileName = resourceFile.replace(/\.(md|yml)$/, "");
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 agentYaml = coreAgentContent.match(/```yaml\n([\s\S]*?)\n```/);
478
- if (agentYaml) {
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", ".yml", ".yaml"];
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(".yml")
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|yml)$/, "");
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.yml');
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.yml');
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.yml');
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.yml');
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.yml # Installation profiles
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.yml');
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.yml
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})`;