bmad-method 6.5.1-next.1 → 6.5.1-next.11

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/README.md CHANGED
@@ -52,6 +52,15 @@ Follow the installer prompts, then open your AI IDE (Claude Code, Cursor, etc.)
52
52
  npx bmad-method install --directory /path/to/project --modules bmm --tools claude-code --yes
53
53
  ```
54
54
 
55
+ Override any module config option with `--set <module>.<key>=<value>` (repeatable). Run `--list-options [module]` to see locally-known official keys (built-in modules plus any external officials cached on this machine):
56
+
57
+ ```bash
58
+ npx bmad-method install --yes \
59
+ --modules bmm --tools claude-code \
60
+ --set bmm.project_knowledge=research \
61
+ --set bmm.user_skill_level=expert
62
+ ```
63
+
55
64
  [See all installation options](https://docs.bmad-method.org/how-to/non-interactive-installation/)
56
65
 
57
66
  > **Not sure what to do?** Ask `bmad-help` — it tells you exactly what's next and what's optional. You can also ask questions like `bmad-help I just finished the architecture, what do I do next?`
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "bmad-method",
4
- "version": "6.5.1-next.1",
4
+ "version": "6.5.1-next.11",
5
5
  "description": "Breakthrough Method of Agile AI-driven Development",
6
6
  "keywords": [
7
7
  "agile",
@@ -227,37 +227,39 @@ Prepare the content to append to the document:
227
227
 
228
228
  ### Architecture Completeness Checklist
229
229
 
230
- **✅ Requirements Analysis**
230
+ Mark each item `[x]` only if validation confirms it; leave `[ ]` if it is missing, partial, or unverified. Any unchecked item must be reflected in the Gap Analysis above and in the Overall Status below.
231
231
 
232
- - [x] Project context thoroughly analyzed
233
- - [x] Scale and complexity assessed
234
- - [x] Technical constraints identified
235
- - [x] Cross-cutting concerns mapped
232
+ **Requirements Analysis**
236
233
 
237
- **✅ Architectural Decisions**
234
+ - [ ] Project context thoroughly analyzed
235
+ - [ ] Scale and complexity assessed
236
+ - [ ] Technical constraints identified
237
+ - [ ] Cross-cutting concerns mapped
238
238
 
239
- - [x] Critical decisions documented with versions
240
- - [x] Technology stack fully specified
241
- - [x] Integration patterns defined
242
- - [x] Performance considerations addressed
239
+ **Architectural Decisions**
243
240
 
244
- **✅ Implementation Patterns**
241
+ - [ ] Critical decisions documented with versions
242
+ - [ ] Technology stack fully specified
243
+ - [ ] Integration patterns defined
244
+ - [ ] Performance considerations addressed
245
245
 
246
- - [x] Naming conventions established
247
- - [x] Structure patterns defined
248
- - [x] Communication patterns specified
249
- - [x] Process patterns documented
246
+ **Implementation Patterns**
250
247
 
251
- **✅ Project Structure**
248
+ - [ ] Naming conventions established
249
+ - [ ] Structure patterns defined
250
+ - [ ] Communication patterns specified
251
+ - [ ] Process patterns documented
252
252
 
253
- - [x] Complete directory structure defined
254
- - [x] Component boundaries established
255
- - [x] Integration points mapped
256
- - [x] Requirements to structure mapping complete
253
+ **Project Structure**
254
+
255
+ - [ ] Complete directory structure defined
256
+ - [ ] Component boundaries established
257
+ - [ ] Integration points mapped
258
+ - [ ] Requirements to structure mapping complete
257
259
 
258
260
  ### Architecture Readiness Assessment
259
261
 
260
- **Overall Status:** READY FOR IMPLEMENTATION
262
+ **Overall Status:** {{READY FOR IMPLEMENTATION | READY WITH MINOR GAPS | NOT READY}} (choose READY FOR IMPLEMENTATION only when all 16 checklist items are `[x]` and no Critical Gaps remain; choose NOT READY when any Critical Gap is open or any Requirements Analysis or Architectural Decisions item is unchecked; otherwise READY WITH MINOR GAPS)
261
263
 
262
264
  **Confidence Level:** {{high/medium/low}} based on validation results
263
265
 
@@ -55,7 +55,8 @@ Load {planning_artifacts}/epics.md and review:
55
55
  2. **Requirements Grouping**: Group related FRs that deliver cohesive user outcomes
56
56
  3. **Incremental Delivery**: Each epic should deliver value independently
57
57
  4. **Logical Flow**: Natural progression from user's perspective
58
- 5. **🔗 Dependency-Free Within Epic**: Stories within an epic must NOT depend on future stories
58
+ 5. **Dependency-Free Within Epic**: Stories within an epic must NOT depend on future stories
59
+ 6. **Implementation Efficiency**: Consider consolidating epics that all modify the same core files into fewer epics
59
60
 
60
61
  **⚠️ CRITICAL PRINCIPLE:**
61
62
  Organize by USER VALUE, not technical layers:
@@ -74,6 +75,18 @@ Organize by USER VALUE, not technical layers:
74
75
  - Epic 3: Frontend Components (creates reusable components) - **No user value**
75
76
  - Epic 4: Deployment Pipeline (CI/CD setup) - **No user value**
76
77
 
78
+ **❌ WRONG Epic Examples (File Churn on Same Component):**
79
+
80
+ - Epic 1: File Upload (modifies model, controller, web form, web API)
81
+ - Epic 2: File Status (modifies model, controller, web form, web API)
82
+ - Epic 3: File Access permissions (modifies model, controller, web form, web API)
83
+ - All three epics touch the same files — consolidate into one epic with ordered stories
84
+
85
+ **✅ CORRECT Alternative:**
86
+
87
+ - Epic 1: File Management Enhancement (upload, status, permissions as stories within one epic)
88
+ - Rationale: Single component, fully pre-designed, no feedback loop between epics
89
+
77
90
  **🔗 DEPENDENCY RULES:**
78
91
 
79
92
  - Each epic must deliver COMPLETE functionality for its domain
@@ -82,21 +95,38 @@ Organize by USER VALUE, not technical layers:
82
95
 
83
96
  ### 3. Design Epic Structure Collaboratively
84
97
 
85
- **Step A: Identify User Value Themes**
98
+ **Step A: Assess Context and Identify Themes**
99
+
100
+ First, assess how much of the solution design is already validated (Architecture, UX, Test Design).
101
+ When the outcome is certain and direction changes between epics are unlikely, prefer fewer but larger epics.
102
+ Split into multiple epics when there is a genuine risk boundary or when early feedback could change direction
103
+ of following epics.
104
+
105
+ Then, identify user value themes:
86
106
 
87
107
  - Look for natural groupings in the FRs
88
108
  - Identify user journeys or workflows
89
109
  - Consider user types and their goals
90
110
 
91
111
  **Step B: Propose Epic Structure**
92
- For each proposed epic:
112
+
113
+ For each proposed epic (considering whether epics share the same core files):
93
114
 
94
115
  1. **Epic Title**: User-centric, value-focused
95
116
  2. **User Outcome**: What users can accomplish after this epic
96
117
  3. **FR Coverage**: Which FR numbers this epic addresses
97
118
  4. **Implementation Notes**: Any technical or UX considerations
98
119
 
99
- **Step C: Create the epics_list**
120
+ **Step C: Review for File Overlap**
121
+
122
+ Assess whether multiple proposed epics repeatedly target the same core files. If overlap is significant:
123
+
124
+ - Distinguish meaningful overlap (same component end-to-end) from incidental sharing
125
+ - Ask whether to consolidate into one epic with ordered stories
126
+ - If confirmed, merge the epic FRs into a single epic, preserving dependency flow: each story must still fit within
127
+ a single dev agent's context
128
+
129
+ **Step D: Create the epics_list**
100
130
 
101
131
  Format the epics_list as:
102
132
 
@@ -90,6 +90,12 @@ Review the complete epic and story breakdown to ensure EVERY FR is covered:
90
90
  - Dependencies flow naturally
91
91
  - Foundation stories only setup what's needed
92
92
  - No big upfront technical work
93
+ - **File Churn Check:** Do multiple epics repeatedly modify the same core files?
94
+ - Assess whether the overlap pattern suggests unnecessary churn or is incidental
95
+ - If overlap is significant: Validate that splitting provides genuine value (risk mitigation, feedback loops, context size limits)
96
+ - If no justification for the split: Recommend consolidation into fewer epics
97
+ - ❌ WRONG: Multiple epics each modify the same core files with no feedback loop between them
98
+ - ✅ RIGHT: Epics target distinct files/components, OR consolidation was explicitly considered and rejected with rationale
93
99
 
94
100
  ### 5. Dependency Validation (CRITICAL)
95
101
 
@@ -1,33 +1,33 @@
1
1
  module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs
2
2
  BMad Method,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt,
3
- BMad Method,bmad-document-project,Document Project,DP,Analyze an existing project to produce useful documentation.,,anytime,,,false,project-knowledge,*
4
- BMad Method,bmad-generate-project-context,Generate Project Context,GPC,Scan existing codebase to generate a lean LLM-optimized project-context.md. Essential for brownfield projects.,,anytime,,,false,output_folder,project context
5
- BMad Method,bmad-quick-dev,Quick Dev,QQ,Unified intent-in code-out workflow: clarify plan implement review and present.,,anytime,,,false,implementation_artifacts,spec and project implementation
6
- BMad Method,bmad-correct-course,Correct Course,CC,Navigate significant changes. May recommend start over update PRD redo architecture sprint planning or correct epics and stories.,,anytime,,,false,planning_artifacts,change proposal
3
+ BMad Method,bmad-document-project,Document Project,DP,Analyze an existing project to produce useful documentation.,,,anytime,,,false,project-knowledge,*
4
+ BMad Method,bmad-generate-project-context,Generate Project Context,GPC,Scan existing codebase to generate a lean LLM-optimized project-context.md. Essential for brownfield projects.,,,anytime,,,false,output_folder,project context
5
+ BMad Method,bmad-quick-dev,Quick Dev,QQ,Unified intent-in code-out workflow: clarify plan implement review and present.,,,anytime,,,false,implementation_artifacts,spec and project implementation
6
+ BMad Method,bmad-correct-course,Correct Course,CC,Navigate significant changes. May recommend start over update PRD redo architecture sprint planning or correct epics and stories.,,,anytime,,,false,planning_artifacts,change proposal
7
7
  BMad Method,bmad-agent-tech-writer,Write Document,WD,"Describe in detail what you want, and the agent will follow documentation best practices. Multi-turn conversation with subprocess for research/review.",write,,anytime,,,false,project-knowledge,document
8
8
  BMad Method,bmad-agent-tech-writer,Update Standards,US,Update agent memory documentation-standards.md with your specific preferences if you discover missing document conventions.,update-standards,,anytime,,,false,_bmad/_memory/tech-writer-sidecar,standards
9
9
  BMad Method,bmad-agent-tech-writer,Mermaid Generate,MG,Create a Mermaid diagram based on user description. Will suggest diagram types if not specified.,mermaid,,anytime,,,false,planning_artifacts,mermaid diagram
10
10
  BMad Method,bmad-agent-tech-writer,Validate Document,VD,Review the specified document against documentation standards and best practices. Returns specific actionable improvement suggestions organized by priority.,validate,[path],anytime,,,false,planning_artifacts,validation report
11
11
  BMad Method,bmad-agent-tech-writer,Explain Concept,EC,Create clear technical explanations with examples and diagrams for complex concepts.,explain,[topic],anytime,,,false,project_knowledge,explanation
12
- BMad Method,bmad-brainstorming,Brainstorm Project,BP,Expert guided facilitation through a single or multiple techniques.,,1-analysis,,,false,planning_artifacts,brainstorming session
13
- BMad Method,bmad-market-research,Market Research,MR,"Market analysis competitive landscape customer needs and trends.",,1-analysis,,,false,"planning_artifacts|project-knowledge",research documents
14
- BMad Method,bmad-domain-research,Domain Research,DR,Industry domain deep dive subject matter expertise and terminology.,,1-analysis,,,false,"planning_artifacts|project_knowledge",research documents
15
- BMad Method,bmad-technical-research,Technical Research,TR,Technical feasibility architecture options and implementation approaches.,,1-analysis,,,false,"planning_artifacts|project_knowledge",research documents
12
+ BMad Method,bmad-brainstorming,Brainstorm Project,BP,Expert guided facilitation through a single or multiple techniques.,,,1-analysis,,,false,planning_artifacts,brainstorming session
13
+ BMad Method,bmad-market-research,Market Research,MR,Market analysis competitive landscape customer needs and trends.,,,1-analysis,,,false,planning_artifacts|project-knowledge,research documents
14
+ BMad Method,bmad-domain-research,Domain Research,DR,Industry domain deep dive subject matter expertise and terminology.,,,1-analysis,,,false,planning_artifacts|project_knowledge,research documents
15
+ BMad Method,bmad-technical-research,Technical Research,TR,Technical feasibility architecture options and implementation approaches.,,,1-analysis,,,false,planning_artifacts|project_knowledge,research documents
16
16
  BMad Method,bmad-product-brief,Create Brief,CB,An expert guided experience to nail down your product idea in a brief. a gentler approach than PRFAQ when you are already sure of your concept and nothing will sway you.,,-A,1-analysis,,,false,planning_artifacts,product brief
17
17
  BMad Method,bmad-prfaq,PRFAQ Challenge,WB,Working Backwards guided experience to forge and stress-test your product concept to ensure you have a great product that users will love and need through the PRFAQ gauntlet to determine feasibility and alignment with user needs. alternative to product brief.,,-H,1-analysis,,,false,planning_artifacts,prfaq document
18
- BMad Method,bmad-create-prd,Create PRD,CP,Expert led facilitation to produce your Product Requirements Document.,,2-planning,,,true,planning_artifacts,prd
18
+ BMad Method,bmad-create-prd,Create PRD,CP,Expert led facilitation to produce your Product Requirements Document.,,,2-planning,,,true,planning_artifacts,prd
19
19
  BMad Method,bmad-validate-prd,Validate PRD,VP,,,[path],2-planning,bmad-create-prd,,false,planning_artifacts,prd validation report
20
20
  BMad Method,bmad-edit-prd,Edit PRD,EP,,,[path],2-planning,bmad-validate-prd,,false,planning_artifacts,updated prd
21
- BMad Method,bmad-create-ux-design,Create UX,CU,"Guidance through realizing the plan for your UX, strongly recommended if a UI is a primary piece of the proposed project.",,2-planning,bmad-create-prd,,false,planning_artifacts,ux design
22
- BMad Method,bmad-create-architecture,Create Architecture,CA,Guided workflow to document technical decisions.,,3-solutioning,,,true,planning_artifacts,architecture
23
- BMad Method,bmad-create-epics-and-stories,Create Epics and Stories,CE,,,3-solutioning,bmad-create-architecture,,true,planning_artifacts,epics and stories
24
- BMad Method,bmad-check-implementation-readiness,Check Implementation Readiness,IR,Ensure PRD UX Architecture and Epics Stories are aligned.,,3-solutioning,bmad-create-epics-and-stories,,true,planning_artifacts,readiness report
25
- BMad Method,bmad-sprint-planning,Sprint Planning,SP,Kicks off implementation by producing a plan the implementation agents will follow in sequence for every story.,,4-implementation,,,true,implementation_artifacts,sprint status
26
- BMad Method,bmad-sprint-status,Sprint Status,SS,Anytime: Summarize sprint status and route to next workflow.,,4-implementation,bmad-sprint-planning,,false,,
27
- BMad Method,bmad-create-story,Create Story,CS,"Story cycle start: Prepare first found story in the sprint plan that is next or a specific epic/story designation.",create,,4-implementation,bmad-sprint-planning,bmad-create-story:validate,true,implementation_artifacts,story
21
+ BMad Method,bmad-create-ux-design,Create UX,CU,"Guidance through realizing the plan for your UX, strongly recommended if a UI is a primary piece of the proposed project.",,,2-planning,bmad-create-prd,,false,planning_artifacts,ux design
22
+ BMad Method,bmad-create-architecture,Create Architecture,CA,Guided workflow to document technical decisions.,,,3-solutioning,,,true,planning_artifacts,architecture
23
+ BMad Method,bmad-create-epics-and-stories,Create Epics and Stories,CE,,,,3-solutioning,bmad-create-architecture,,true,planning_artifacts,epics and stories
24
+ BMad Method,bmad-check-implementation-readiness,Check Implementation Readiness,IR,Ensure PRD UX Architecture and Epics Stories are aligned.,,,3-solutioning,bmad-create-epics-and-stories,,true,planning_artifacts,readiness report
25
+ BMad Method,bmad-sprint-planning,Sprint Planning,SP,Kicks off implementation by producing a plan the implementation agents will follow in sequence for every story.,,,4-implementation,,,true,implementation_artifacts,sprint status
26
+ BMad Method,bmad-sprint-status,Sprint Status,SS,Anytime: Summarize sprint status and route to next workflow.,,,4-implementation,bmad-sprint-planning,,false,,
27
+ BMad Method,bmad-create-story,Create Story,CS,Story cycle start: Prepare first found story in the sprint plan that is next or a specific epic/story designation.,create,,4-implementation,bmad-sprint-planning,bmad-create-story:validate,true,implementation_artifacts,story
28
28
  BMad Method,bmad-create-story,Validate Story,VS,Validates story readiness and completeness before development work begins.,validate,,4-implementation,bmad-create-story:create,bmad-dev-story,false,implementation_artifacts,story validation report
29
- BMad Method,bmad-dev-story,Dev Story,DS,Story cycle: Execute story implementation tasks and tests then CR then back to DS if fixes needed.,,4-implementation,bmad-create-story:validate,,true,,
30
- BMad Method,bmad-code-review,Code Review,CR,Story cycle: If issues back to DS if approved then next CS or ER if epic complete.,,4-implementation,bmad-dev-story,,false,,
31
- BMad Method,bmad-checkpoint-preview,Checkpoint,CK,Guided walkthrough of a change from purpose and context into details. Use for human review of commits branches or PRs.,,4-implementation,,,false,,
32
- BMad Method,bmad-qa-generate-e2e-tests,QA Automation Test,QA,Generate automated API and E2E tests for implemented code. NOT for code review or story validation — use CR for that.,,4-implementation,bmad-dev-story,,false,implementation_artifacts,test suite
33
- BMad Method,bmad-retrospective,Retrospective,ER,Optional at epic end: Review completed work lessons learned and next epic or if major issues consider CC.,,4-implementation,bmad-code-review,,false,implementation_artifacts,retrospective
29
+ BMad Method,bmad-dev-story,Dev Story,DS,Story cycle: Execute story implementation tasks and tests then CR then back to DS if fixes needed.,,,4-implementation,bmad-create-story:validate,,true,,
30
+ BMad Method,bmad-code-review,Code Review,CR,Story cycle: If issues back to DS if approved then next CS or ER if epic complete.,,,4-implementation,bmad-dev-story,,false,,
31
+ BMad Method,bmad-checkpoint-preview,Checkpoint,CK,Guided walkthrough of a change from purpose and context into details. Use for human review of commits branches or PRs.,,,4-implementation,,,false,,
32
+ BMad Method,bmad-qa-generate-e2e-tests,QA Automation Test,QA,Generate automated API and E2E tests for implemented code. NOT for code review or story validation — use CR for that.,,,4-implementation,bmad-dev-story,,false,implementation_artifacts,test suite
33
+ BMad Method,bmad-retrospective,Retrospective,ER,Optional at epic end: Review completed work lessons learned and next epic or if major issues consider CC.,,,4-implementation,bmad-code-review,,false,implementation_artifacts,retrospective
@@ -5,15 +5,11 @@ default_selected: true # This module will be selected by default for new install
5
5
 
6
6
  # Variables from Core Config inserted:
7
7
  ## user_name
8
+ ## project_name
8
9
  ## communication_language
9
10
  ## document_output_language
10
11
  ## output_folder
11
12
 
12
- project_name:
13
- prompt: "What is your project called?"
14
- default: "{directory_name}"
15
- result: "{value}"
16
-
17
13
  user_skill_level:
18
14
  prompt:
19
15
  - "What is your development experience level?"
@@ -1,13 +1,13 @@
1
1
  module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs
2
2
  Core,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt,
3
- Core,bmad-brainstorming,Brainstorming,BSP,Use early in ideation or when stuck generating ideas.,,anytime,,,false,{output_folder}/brainstorming,brainstorming session
4
- Core,bmad-party-mode,Party Mode,PM,Orchestrate multi-agent discussions when you need multiple perspectives or want agents to collaborate.,,anytime,,,false,,
5
- Core,bmad-help,BMad Help,BH,,,anytime,,,false,,
6
- Core,bmad-index-docs,Index Docs,ID,Use when LLM needs to understand available docs without loading everything.,,anytime,,,false,,
7
- Core,bmad-shard-doc,Shard Document,SD,Use when doc becomes too large (>500 lines) to manage effectively.,[path],anytime,,,false,,
8
- Core,bmad-editorial-review-prose,Editorial Review - Prose,EP,Use after drafting to polish written content.,[path],anytime,,,false,report located with target document,three-column markdown table with suggested fixes
9
- Core,bmad-editorial-review-structure,Editorial Review - Structure,ES,Use when doc produced from multiple subprocesses or needs structural improvement.,[path],anytime,,,false,report located with target document,
10
- Core,bmad-review-adversarial-general,Adversarial Review,AR,"Use for quality assurance or before finalizing deliverables. Code Review in other modules runs this automatically, but also useful for document reviews.",[path],anytime,,,false,,
11
- Core,bmad-review-edge-case-hunter,Edge Case Hunter Review,ECH,Use alongside adversarial review for orthogonal coverage — method-driven not attitude-driven.,[path],anytime,,,false,,
12
- Core,bmad-distillator,Distillator,DG,Use when you need token-efficient distillates that preserve all information for downstream LLM consumption.,[path],anytime,,,false,adjacent to source document or specified output_path,distillate markdown file(s)
13
- Core,bmad-customize,BMad Customize,BC,"Use when you want to change how an agent or workflow behaves — add persistent facts, swap templates, insert activation hooks, or customize menus. Scans what's customizable, picks the right scope (agent vs workflow), writes the override to _bmad/custom/, and verifies the merge. No TOML hand-authoring required.",,anytime,,,false,{project-root}/_bmad/custom,TOML override files
3
+ Core,bmad-brainstorming,Brainstorming,BSP,Use early in ideation or when stuck generating ideas.,,,anytime,,,false,{output_folder}/brainstorming,brainstorming session
4
+ Core,bmad-party-mode,Party Mode,PM,Orchestrate multi-agent discussions when you need multiple perspectives or want agents to collaborate.,,,anytime,,,false,,
5
+ Core,bmad-help,BMad Help,BH,,,,anytime,,,false,,
6
+ Core,bmad-index-docs,Index Docs,ID,Use when LLM needs to understand available docs without loading everything.,,,anytime,,,false,,
7
+ Core,bmad-shard-doc,Shard Document,SD,Use when doc becomes too large (>500 lines) to manage effectively.,,[path],anytime,,,false,,
8
+ Core,bmad-editorial-review-prose,Editorial Review - Prose,EP,Use after drafting to polish written content.,,[path],anytime,,,false,report located with target document,three-column markdown table with suggested fixes
9
+ Core,bmad-editorial-review-structure,Editorial Review - Structure,ES,Use when doc produced from multiple subprocesses or needs structural improvement.,,[path],anytime,,,false,report located with target document,
10
+ Core,bmad-review-adversarial-general,Adversarial Review,AR,"Use for quality assurance or before finalizing deliverables. Code Review in other modules runs this automatically, but also useful for document reviews.",,[path],anytime,,,false,,
11
+ Core,bmad-review-edge-case-hunter,Edge Case Hunter Review,ECH,Use alongside adversarial review for orthogonal coverage — method-driven not attitude-driven.,,[path],anytime,,,false,,
12
+ Core,bmad-distillator,Distillator,DG,Use when you need token-efficient distillates that preserve all information for downstream LLM consumption.,,[path],anytime,,,false,adjacent to source document or specified output_path,distillate markdown file(s)
13
+ Core,bmad-customize,BMad Customize,BC,"Use when you want to change how an agent or workflow behaves — add persistent facts, swap templates, insert activation hooks, or customize menus. Scans what's customizable, picks the right scope (agent vs workflow), writes the override to _bmad/custom/, and verifies the merge. No TOML hand-authoring required.",,,anytime,,,false,{project-root}/_bmad/custom,TOML override files
@@ -11,6 +11,11 @@ user_name:
11
11
  default: "BMad"
12
12
  result: "{value}"
13
13
 
14
+ project_name:
15
+ prompt: "What is your project called?"
16
+ default: "{directory_name}"
17
+ result: "{value}"
18
+
14
19
  communication_language:
15
20
  prompt: "What language should agents use when chatting with you?"
16
21
  scope: user
@@ -15,7 +15,18 @@ module.exports = {
15
15
  ['--modules <modules>', 'Comma-separated list of module IDs to install (e.g., "bmm,bmb")'],
16
16
  [
17
17
  '--tools <tools>',
18
- 'Comma-separated list of tool/IDE IDs to configure (e.g., "claude-code,cursor"). Use "none" to skip tool configuration.',
18
+ 'Comma-separated list of tool/IDE IDs to configure (e.g., "claude-code,cursor"). Required for fresh non-interactive (--yes) installs. Run with --list-tools to see all valid IDs.',
19
+ ],
20
+ ['--list-tools', 'Print all supported tool/IDE IDs (with target directories) and exit.'],
21
+ [
22
+ '--set <spec>',
23
+ 'Set a module config option non-interactively. Spec format: <module>.<key>=<value> (e.g. bmm.project_knowledge=research). Repeatable. Run --list-options to see available keys.',
24
+ (value, prev) => [...(prev || []), value],
25
+ [],
26
+ ],
27
+ [
28
+ '--list-options [module]',
29
+ 'List available --set keys for all locally-known official modules, or for a single module by code, then exit.',
19
30
  ],
20
31
  ['--action <type>', 'Action type for existing installations: install, update, or quick-update'],
21
32
  ['--user-name <name>', 'Name for agents to use (default: system username)'],
@@ -40,12 +51,49 @@ module.exports = {
40
51
  ],
41
52
  action: async (options) => {
42
53
  try {
54
+ if (options.listTools) {
55
+ const { formatPlatformList } = require('../ide/platform-codes');
56
+ process.stdout.write((await formatPlatformList()) + '\n');
57
+ process.exit(0);
58
+ }
59
+
60
+ if (options.listOptions !== undefined) {
61
+ const { formatOptionsList } = require('../list-options');
62
+ const moduleArg = options.listOptions === true ? null : options.listOptions;
63
+ const { text, ok } = await formatOptionsList(moduleArg);
64
+ const stream = ok ? process.stdout : process.stderr;
65
+ // process.exit() forces immediate termination and can truncate the
66
+ // buffered write when stdout/stderr is piped or captured by CI. Wait
67
+ // for the write to flush, then set process.exitCode and return so the
68
+ // event loop drains naturally. Non-zero exit when a single-module
69
+ // lookup misses so a CI typo like `--list-options bmn` doesn't look
70
+ // successful in scripts.
71
+ await new Promise((resolve, reject) => {
72
+ stream.write(text + '\n', (error) => (error ? reject(error) : resolve()));
73
+ });
74
+ process.exitCode = ok ? 0 : 1;
75
+ return;
76
+ }
77
+
43
78
  // Set debug flag as environment variable for all components
44
79
  if (options.debug) {
45
80
  process.env.BMAD_DEBUG_MANIFEST = 'true';
46
81
  await prompts.log.info('Debug mode enabled');
47
82
  }
48
83
 
84
+ // Validate --set syntax up-front so malformed entries fail fast,
85
+ // before we touch the network or filesystem. Parsed entries are
86
+ // re-derived inside ui.js where overrides are seeded.
87
+ if (options.set && options.set.length > 0) {
88
+ const { parseSetEntries } = require('../set-overrides');
89
+ try {
90
+ parseSetEntries(options.set);
91
+ } catch (error) {
92
+ await prompts.log.error(error.message);
93
+ process.exit(1);
94
+ }
95
+ }
96
+
49
97
  const config = await ui.promptInstall(options);
50
98
 
51
99
  // Handle cancel
@@ -54,8 +102,13 @@ module.exports = {
54
102
  process.exit(0);
55
103
  }
56
104
 
57
- // Handle quick update separately
105
+ // Handle quick update separately. --set is a post-install TOML patch so
106
+ // it works the same way for quick-update as for a regular install — the
107
+ // installer runs, then `applySetOverrides` patches the central config
108
+ // files. Pass the parsed overrides through.
58
109
  if (config.actionType === 'quick-update') {
110
+ const { parseSetEntries } = require('../set-overrides');
111
+ config.setOverrides = parseSetEntries(options.set || []);
59
112
  const result = await installer.quickUpdate(config);
60
113
  await prompts.log.success('Quick update complete!');
61
114
  await prompts.log.info(`Updated ${result.moduleCount} modules with preserved settings (${result.modules.join(', ')})`);
@@ -81,7 +134,7 @@ module.exports = {
81
134
  } else {
82
135
  await prompts.log.error(`Installation failed: ${error.message}`);
83
136
  }
84
- if (error.stack) {
137
+ if (error.stack && !error.expected) {
85
138
  await prompts.log.message(error.stack);
86
139
  }
87
140
  } catch {
@@ -3,7 +3,19 @@
3
3
  * User input comes from either UI answers or headless CLI flags.
4
4
  */
5
5
  class Config {
6
- constructor({ directory, modules, ides, skipPrompts, verbose, actionType, coreConfig, moduleConfigs, quickUpdate, channelOptions }) {
6
+ constructor({
7
+ directory,
8
+ modules,
9
+ ides,
10
+ skipPrompts,
11
+ verbose,
12
+ actionType,
13
+ coreConfig,
14
+ moduleConfigs,
15
+ quickUpdate,
16
+ channelOptions,
17
+ setOverrides,
18
+ }) {
7
19
  this.directory = directory;
8
20
  this.modules = Object.freeze([...modules]);
9
21
  this.ides = Object.freeze([...ides]);
@@ -15,6 +27,11 @@ class Config {
15
27
  this._quickUpdate = quickUpdate;
16
28
  // channelOptions carry a Map + Set; don't deep-freeze.
17
29
  this.channelOptions = channelOptions || null;
30
+ // Parsed `--set <module>.<key>=<value>` overrides, applied as a TOML
31
+ // patch AFTER the install finishes. Shape: { moduleCode: { key: value } }.
32
+ // Intentionally NOT integrated with the prompt/template/schema flow; see
33
+ // `tools/installer/set-overrides.js` for the rationale and tradeoffs.
34
+ this.setOverrides = setOverrides || {};
18
35
  Object.freeze(this);
19
36
  }
20
37
 
@@ -40,6 +57,7 @@ class Config {
40
57
  moduleConfigs: userInput.moduleConfigs || null,
41
58
  quickUpdate: userInput._quickUpdate || false,
42
59
  channelOptions: userInput.channelOptions || null,
60
+ setOverrides: userInput.setOverrides || {},
43
61
  });
44
62
  }
45
63
 
@@ -310,6 +310,19 @@ class Installer {
310
310
  moduleConfigs,
311
311
  });
312
312
 
313
+ // Apply post-install --set TOML patches. Runs after writeCentralConfig
314
+ // (inside generateManifests above) so the patch operates on the
315
+ // freshly written `_bmad/config.toml` / `_bmad/config.user.toml`.
316
+ // See `tools/installer/set-overrides.js` for routing rules.
317
+ if (config.setOverrides && Object.keys(config.setOverrides).length > 0) {
318
+ const { applySetOverrides } = require('../set-overrides');
319
+ const applied = await applySetOverrides(config.setOverrides, paths.bmadDir);
320
+ if (applied.length > 0) {
321
+ const summary = applied.map((a) => `${a.module}.${a.key} → ${a.file}`).join(', ');
322
+ await prompts.log.info(`Applied --set overrides: ${summary}`);
323
+ }
324
+ }
325
+
313
326
  message('Generating help catalog...');
314
327
  await this.mergeModuleHelpCatalogs(paths.bmadDir, manifestGen.agents);
315
328
  addResult('Help catalog', 'ok');
@@ -923,29 +936,15 @@ class Installer {
923
936
  /**
924
937
  * Merge all module-help.csv files into a single bmad-help.csv.
925
938
  * Scans all installed modules for module-help.csv and merges them.
926
- * Enriches agent info from the in-memory agent list produced by ManifestGenerator.
927
- * Output is written to _bmad/_config/bmad-help.csv.
939
+ * Output preserves the source schema verbatim see schema below.
928
940
  * @param {string} bmadDir - BMAD installation directory
929
- * @param {Array<Object>} agentEntries - Agents collected from module.yaml (code, name, title, icon, module, ...)
941
+ * @param {Array<Object>} _agentEntries - Unused; retained for call-site compatibility
930
942
  */
931
- async mergeModuleHelpCatalogs(bmadDir, agentEntries = []) {
943
+ async mergeModuleHelpCatalogs(bmadDir, _agentEntries = []) {
932
944
  const allRows = [];
933
- const headerRow =
934
- 'module,phase,name,code,sequence,workflow-file,command,required,agent-name,agent-command,agent-display-name,agent-title,options,description,output-location,outputs';
935
-
936
- // Build agent lookup from the in-memory list (agent code → command + display fields).
937
- const agentInfo = new Map();
938
- for (const agent of agentEntries) {
939
- if (!agent || !agent.code) continue;
940
- const agentCommand = agent.module ? `bmad:${agent.module}:agent:${agent.code}` : `bmad:agent:${agent.code}`;
941
- const displayName = agent.name || agent.code;
942
- const titleCombined = agent.icon && agent.title ? `${agent.icon} ${agent.title}` : agent.title || agent.code;
943
- agentInfo.set(agent.code, {
944
- command: agentCommand,
945
- displayName,
946
- title: titleCombined,
947
- });
948
- }
945
+ const headerRow = 'module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs';
946
+ const COLUMN_COUNT = 13;
947
+ const PHASE_INDEX = 7;
949
948
 
950
949
  // Get all installed module directories
951
950
  const entries = await fs.readdir(bmadDir, { withFileTypes: true });
@@ -984,64 +983,19 @@ class Installer {
984
983
 
985
984
  // Parse the line - handle quoted fields with commas
986
985
  const columns = this.parseCSVLine(line);
987
- if (columns.length >= 12) {
988
- // Map old schema to new schema
989
- // Old: module,phase,name,code,sequence,workflow-file,command,required,agent,options,description,output-location,outputs
990
- // New: module,phase,name,code,sequence,workflow-file,command,required,agent-name,agent-command,agent-display-name,agent-title,options,description,output-location,outputs
991
-
992
- const [
993
- module,
994
- phase,
995
- name,
996
- code,
997
- sequence,
998
- workflowFile,
999
- command,
1000
- required,
1001
- agentName,
1002
- options,
1003
- description,
1004
- outputLocation,
1005
- outputs,
1006
- ] = columns;
1007
-
1008
- // Pass through _meta rows as-is (module metadata, not a skill)
1009
- if (phase === '_meta') {
1010
- const finalModule = (!module || module.trim() === '') && moduleName !== 'core' ? moduleName : module || '';
1011
- const metaRow = [finalModule, '_meta', '', '', '', '', '', 'false', '', '', '', '', '', '', outputLocation || '', ''];
1012
- allRows.push(metaRow.map((c) => this.escapeCSVField(c)).join(','));
1013
- continue;
1014
- }
986
+ if (columns.length < COLUMN_COUNT - 1) continue;
1015
987
 
1016
- // If module column is empty, set it to this module's name (except for core which stays empty for universal tools)
1017
- const finalModule = (!module || module.trim() === '') && moduleName !== 'core' ? moduleName : module || '';
1018
-
1019
- // Lookup agent info
1020
- const cleanAgentName = agentName ? agentName.trim() : '';
1021
- const agentData = agentInfo.get(cleanAgentName) || { command: '', displayName: '', title: '' };
1022
-
1023
- // Build new row with agent info
1024
- const newRow = [
1025
- finalModule,
1026
- phase || '',
1027
- name || '',
1028
- code || '',
1029
- sequence || '',
1030
- workflowFile || '',
1031
- command || '',
1032
- required || 'false',
1033
- cleanAgentName,
1034
- agentData.command,
1035
- agentData.displayName,
1036
- agentData.title,
1037
- options || '',
1038
- description || '',
1039
- outputLocation || '',
1040
- outputs || '',
1041
- ];
1042
-
1043
- allRows.push(newRow.map((c) => this.escapeCSVField(c)).join(','));
988
+ // Pad short rows; truncate over-long rows
989
+ const padded = columns.slice(0, COLUMN_COUNT);
990
+ while (padded.length < COLUMN_COUNT) padded.push('');
991
+
992
+ // If module column is empty, fill with this module's name
993
+ // (core stays empty so its rows render as universal tools)
994
+ if ((!padded[0] || padded[0].trim() === '') && moduleName !== 'core') {
995
+ padded[0] = moduleName;
1044
996
  }
997
+
998
+ allRows.push(padded.map((c) => this.escapeCSVField(c)).join(','));
1045
999
  }
1046
1000
 
1047
1001
  if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
@@ -1053,44 +1007,34 @@ class Installer {
1053
1007
  }
1054
1008
  }
1055
1009
 
1056
- // Sort by module, then phase, then sequence
1057
- allRows.sort((a, b) => {
1058
- const colsA = this.parseCSVLine(a);
1059
- const colsB = this.parseCSVLine(b);
1010
+ // Sort by module, then phase. Stable sort preserves authored order within a phase.
1011
+ const decorated = allRows.map((row, index) => ({ row, index, cols: this.parseCSVLine(row) }));
1012
+ decorated.sort((a, b) => {
1013
+ const moduleA = (a.cols[0] || '').toLowerCase();
1014
+ const moduleB = (b.cols[0] || '').toLowerCase();
1015
+ if (moduleA !== moduleB) return moduleA.localeCompare(moduleB);
1060
1016
 
1061
- // Module comparison (empty module/universal tools come first)
1062
- const moduleA = (colsA[0] || '').toLowerCase();
1063
- const moduleB = (colsB[0] || '').toLowerCase();
1064
- if (moduleA !== moduleB) {
1065
- return moduleA.localeCompare(moduleB);
1066
- }
1067
-
1068
- // Phase comparison
1069
- const phaseA = colsA[1] || '';
1070
- const phaseB = colsB[1] || '';
1071
- if (phaseA !== phaseB) {
1072
- return phaseA.localeCompare(phaseB);
1073
- }
1017
+ const phaseA = a.cols[PHASE_INDEX] || '';
1018
+ const phaseB = b.cols[PHASE_INDEX] || '';
1019
+ if (phaseA !== phaseB) return phaseA.localeCompare(phaseB);
1074
1020
 
1075
- // Sequence comparison
1076
- const seqA = parseInt(colsA[4] || '0', 10);
1077
- const seqB = parseInt(colsB[4] || '0', 10);
1078
- return seqA - seqB;
1021
+ return a.index - b.index;
1079
1022
  });
1023
+ const sortedRows = decorated.map((d) => d.row);
1080
1024
 
1081
1025
  // Write merged catalog
1082
1026
  const outputDir = path.join(bmadDir, '_config');
1083
1027
  await fs.ensureDir(outputDir);
1084
1028
  const outputPath = path.join(outputDir, 'bmad-help.csv');
1085
1029
 
1086
- const mergedContent = [headerRow, ...allRows].join('\n');
1030
+ const mergedContent = [headerRow, ...sortedRows].join('\n');
1087
1031
  await fs.writeFile(outputPath, mergedContent, 'utf8');
1088
1032
 
1089
1033
  // Track the installed file
1090
1034
  this.installedFiles.add(outputPath);
1091
1035
 
1092
1036
  if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
1093
- await prompts.log.message(` Generated bmad-help.csv: ${allRows.length} workflows`);
1037
+ await prompts.log.message(` Generated bmad-help.csv: ${sortedRows.length} workflows`);
1094
1038
  }
1095
1039
  }
1096
1040
 
@@ -1352,6 +1296,10 @@ class Installer {
1352
1296
  ides: configuredIdes,
1353
1297
  coreConfig: quickModules.collectedConfig.core,
1354
1298
  moduleConfigs: quickModules.collectedConfig,
1299
+ // Forward `--set` overrides so the post-install patch step
1300
+ // (`applySetOverrides`) runs at the end of quick-update too. The
1301
+ // installer.install path applies them after writeCentralConfig.
1302
+ setOverrides: config.setOverrides || {},
1355
1303
  actionType: 'install',
1356
1304
  _quickUpdate: true,
1357
1305
  _preserveModules: skippedModules,