bmad-method 6.2.3-next.8 → 6.3.0

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 (76) hide show
  1. package/.claude-plugin/marketplace.json +0 -3
  2. package/README.md +8 -9
  3. package/README_CN.md +1 -1
  4. package/README_VN.md +110 -0
  5. package/package.json +1 -1
  6. package/removals.txt +17 -0
  7. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +1 -1
  8. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/data/prd-purpose.md +197 -0
  9. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01-discovery.md +1 -1
  10. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +1 -1
  11. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-02-review.md +1 -1
  12. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-03-edit.md +1 -1
  13. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-04-complete.md +1 -3
  14. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +1 -1
  15. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +1 -1
  16. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +1 -1
  17. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/workflow.md +1 -1
  18. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/workflow.md +1 -1
  19. package/src/bmm-skills/4-implementation/bmad-agent-dev/SKILL.md +5 -0
  20. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/SKILL.md +29 -0
  21. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/generate-trail.md +38 -0
  22. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-01-orientation.md +105 -0
  23. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-02-walkthrough.md +89 -0
  24. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-03-detail-pass.md +106 -0
  25. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-04-testing.md +74 -0
  26. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-05-wrapup.md +24 -0
  27. package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-01-gather-context.md +38 -15
  28. package/src/bmm-skills/4-implementation/bmad-correct-course/checklist.md +2 -2
  29. package/src/bmm-skills/4-implementation/bmad-correct-course/workflow.md +8 -8
  30. package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/checklist.md +1 -1
  31. package/src/bmm-skills/4-implementation/bmad-quick-dev/compile-epic-context.md +62 -0
  32. package/src/bmm-skills/4-implementation/bmad-quick-dev/spec-template.md +1 -1
  33. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-01-clarify-and-route.md +33 -6
  34. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-02-plan.md +20 -8
  35. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-03-implement.md +2 -0
  36. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-oneshot.md +16 -4
  37. package/src/bmm-skills/4-implementation/bmad-quick-dev/workflow.md +1 -5
  38. package/src/bmm-skills/4-implementation/bmad-retrospective/workflow.md +134 -134
  39. package/src/bmm-skills/4-implementation/bmad-sprint-planning/sprint-status-template.yaml +1 -1
  40. package/src/bmm-skills/4-implementation/bmad-sprint-planning/workflow.md +3 -3
  41. package/src/bmm-skills/4-implementation/bmad-sprint-status/workflow.md +2 -2
  42. package/src/bmm-skills/module-help.csv +2 -0
  43. package/src/core-skills/bmad-help/SKILL.md +4 -2
  44. package/src/core-skills/bmad-party-mode/SKILL.md +121 -2
  45. package/src/core-skills/module-help.csv +1 -0
  46. package/tools/installer/cli-utils.js +18 -9
  47. package/tools/installer/commands/install.js +1 -1
  48. package/tools/installer/core/existing-install.js +2 -8
  49. package/tools/installer/core/install-paths.js +0 -3
  50. package/tools/installer/core/installer.js +180 -463
  51. package/tools/installer/core/manifest-generator.js +8 -14
  52. package/tools/installer/core/manifest.js +94 -102
  53. package/tools/installer/ide/_config-driven.js +149 -38
  54. package/tools/installer/ide/shared/skill-manifest.js +1 -16
  55. package/tools/installer/install-messages.yaml +19 -26
  56. package/tools/installer/modules/community-manager.js +377 -0
  57. package/tools/installer/modules/custom-module-manager.js +644 -0
  58. package/tools/installer/modules/external-manager.js +65 -49
  59. package/tools/installer/modules/official-modules.js +117 -65
  60. package/tools/installer/modules/plugin-resolver.js +398 -0
  61. package/tools/installer/modules/registry-client.js +66 -0
  62. package/tools/installer/{external-official-modules.yaml → modules/registry-fallback.yaml} +3 -12
  63. package/tools/installer/ui.js +549 -666
  64. package/src/bmm-skills/4-implementation/bmad-agent-qa/SKILL.md +0 -61
  65. package/src/bmm-skills/4-implementation/bmad-agent-qa/bmad-skill-manifest.yaml +0 -11
  66. package/src/bmm-skills/4-implementation/bmad-agent-quick-flow-solo-dev/SKILL.md +0 -53
  67. package/src/bmm-skills/4-implementation/bmad-agent-quick-flow-solo-dev/bmad-skill-manifest.yaml +0 -11
  68. package/src/bmm-skills/4-implementation/bmad-agent-sm/SKILL.md +0 -55
  69. package/src/bmm-skills/4-implementation/bmad-agent-sm/bmad-skill-manifest.yaml +0 -11
  70. package/src/core-skills/bmad-party-mode/steps/step-01-agent-loading.md +0 -138
  71. package/src/core-skills/bmad-party-mode/steps/step-02-discussion-orchestration.md +0 -187
  72. package/src/core-skills/bmad-party-mode/steps/step-03-graceful-exit.md +0 -167
  73. package/src/core-skills/bmad-party-mode/workflow.md +0 -183
  74. package/tools/installer/core/custom-module-cache.js +0 -260
  75. package/tools/installer/custom-handler.js +0 -112
  76. package/tools/installer/modules/custom-modules.js +0 -197
@@ -29,7 +29,7 @@
29
29
  # WORKFLOW NOTES:
30
30
  # ===============
31
31
  # - Mark epic as 'in-progress' when starting work on its first story
32
- # - SM typically creates next story ONLY after previous one is 'done' to incorporate learnings
32
+ # - Developer typically creates next story ONLY after previous one is 'done' to incorporate learnings
33
33
  # - Dev moves story to 'review', then Dev runs code-review (fresh context, ideally different LLM)
34
34
 
35
35
  # EXAMPLE STRUCTURE (your actual epics/stories will replace these):
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Goal:** Generate sprint status tracking from epics, detecting current story statuses and building a complete sprint-status.yaml file.
4
4
 
5
- **Your Role:** You are a Scrum Master generating and maintaining sprint tracking. Parse epic files, detect story statuses, and produce a structured sprint-status.yaml.
5
+ **Your Role:** You are a Developer generating and maintaining sprint tracking. Parse epic files, detect story statuses, and produce a structured sprint-status.yaml.
6
6
 
7
7
  ---
8
8
 
@@ -162,7 +162,7 @@ development_status:
162
162
  # ===============
163
163
  # - Epic transitions to 'in-progress' automatically when first story is created
164
164
  # - Stories can be worked in parallel if team capacity allows
165
- # - SM typically creates next story after previous one is 'done' to incorporate learnings
165
+ # - Developer typically creates next story after previous one is 'done' to incorporate learnings
166
166
  # - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended)
167
167
 
168
168
  generated: { date }
@@ -260,4 +260,4 @@ optional ↔ done
260
260
  2. **Sequential Default**: Stories are typically worked in order, but parallel work is supported
261
261
  3. **Parallel Work Supported**: Multiple stories can be `in-progress` if team capacity allows
262
262
  4. **Review Before Done**: Stories should pass through `review` before `done`
263
- 5. **Learning Transfer**: SM typically creates next story after previous one is `done` to incorporate learnings
263
+ 5. **Learning Transfer**: Developer typically creates next story after previous one is `done` to incorporate learnings
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Goal:** Summarize sprint status, surface risks, and recommend the next workflow action.
4
4
 
5
- **Your Role:** You are a Scrum Master providing clear, actionable sprint visibility. No time estimates — focus on status, risks, and next steps.
5
+ **Your Role:** You are a Developer providing clear, actionable sprint visibility. No time estimates — focus on status, risks, and next steps.
6
6
 
7
7
  ---
8
8
 
@@ -129,7 +129,7 @@ Enter corrections (e.g., "1=in-progress, 2=backlog") or "skip" to continue witho
129
129
  4. Else if any story status == backlog → recommend `create-story`
130
130
  5. Else if any retrospective status == optional → recommend `retrospective`
131
131
  6. Else → All implementation items done; congratulate the user - you both did amazing work together!
132
- <action>Store selected recommendation as: next_story_id, next_workflow_id, next_agent (SM/DEV as appropriate)</action>
132
+ <action>Store selected recommendation as: next_story_id, next_workflow_id, next_agent (DEV)</action>
133
133
  </step>
134
134
 
135
135
  <step n="4" goal="Display summary">
@@ -1,4 +1,5 @@
1
1
  module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs
2
+ BMad Method,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt,
2
3
  BMad Method,bmad-document-project,Document Project,DP,Analyze an existing project to produce useful documentation.,,anytime,,,false,project-knowledge,*
3
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
4
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
@@ -27,5 +28,6 @@ BMad Method,bmad-create-story,Create Story,CS,"Story cycle start: Prepare first
27
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
28
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,,
29
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,,
30
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
31
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
@@ -7,7 +7,7 @@ description: 'Analyzes current state and user query to answer BMad questions or
7
7
 
8
8
  ## Purpose
9
9
 
10
- Help the user understand where they are in their BMad workflow and what to do next. Answer BMad questions when asked.
10
+ Help the user understand where they are in their BMad workflow and what to do next, and also answer broader questions when asked that could be augmented with remote sources such as module documentation sources.
11
11
 
12
12
  ## Desired Outcomes
13
13
 
@@ -18,6 +18,7 @@ When this skill completes, the user should:
18
18
  3. **Know how to invoke it** — skill name, menu code, action context, and any args that shortcut the conversation
19
19
  4. **Get offered a quick start** — when a single skill is the clear next step, offer to run it for the user right now rather than just listing it
20
20
  5. **Feel oriented, not overwhelmed** — surface only what's relevant to their current position; don't dump the entire catalog
21
+ 6. **Get answers to general questions** — when the question doesn't map to a specific skill, use the module's registered documentation to give a grounded answer
21
22
 
22
23
  ## Data Sources
23
24
 
@@ -25,6 +26,7 @@ When this skill completes, the user should:
25
26
  - **Config**: `config.yaml` and `user-config.yaml` files in `{project-root}/_bmad/` and its subfolders — resolve `output-location` variables, provide `communication_language` and `project_knowledge`
26
27
  - **Artifacts**: Files matching `outputs` patterns at resolved `output-location` paths reveal which steps are possibly completed; their content may also provide grounding context for recommendations
27
28
  - **Project knowledge**: If `project_knowledge` resolves to an existing path, read it for grounding context. Never fabricate project-specific details.
29
+ - **Module docs**: Rows with `_meta` in the `skill` column carry a URL or path in `output-location` pointing to the module's documentation (e.g., llms.txt). Fetch and use these to answer general questions about that module.
28
30
 
29
31
  ## CSV Interpretation
30
32
 
@@ -70,4 +72,4 @@ For each recommended item, present:
70
72
  - Present all output in `{communication_language}`
71
73
  - Recommend running each skill in a **fresh context window**
72
74
  - Match the user's tone — conversational when they're casual, structured when they want specifics
73
- - If the active module is ambiguous, ask rather than guess
75
+ - If the active module is ambiguous, retrieve all meta rows remote sources to find relevant info also to help answer their question
@@ -1,6 +1,125 @@
1
1
  ---
2
2
  name: bmad-party-mode
3
- description: 'Orchestrates group discussions between all installed BMAD agents, enabling natural multi-agent conversations. Use when user requests party mode.'
3
+ description: 'Orchestrates group discussions between installed BMAD agents, enabling natural multi-agent conversations where each agent is a real subagent with independent thinking. Use when user requests party mode, wants multiple agent perspectives, group discussion, roundtable, or multi-agent conversation about their project.'
4
4
  ---
5
5
 
6
- Follow the instructions in ./workflow.md.
6
+ # Party Mode
7
+
8
+ Facilitate roundtable discussions where BMAD agents participate as **real subagents** — each spawned independently via the Agent tool so they think for themselves. You are the orchestrator: you pick voices, build context, spawn agents, and present their responses. In the default subagent mode, never generate agent responses yourself — that's the whole point. In `--solo` mode, you roleplay all agents directly.
9
+
10
+ ## Why This Matters
11
+
12
+ The whole point of party mode is that each agent produces a genuinely independent perspective. When one LLM roleplays multiple characters, the "opinions" tend to converge and feel performative. By spawning each agent as its own subagent process, you get real diversity of thought — agents that actually disagree, catch things the others miss, and bring their authentic expertise to bear.
13
+
14
+ ## Arguments
15
+
16
+ Party mode accepts optional arguments when invoked:
17
+
18
+ - `--model <model>` — Force all subagents to use a specific model (e.g. `--model haiku`, `--model opus`). When omitted, choose the model that fits the round: use a faster model (like `haiku`) for brief or reactive responses, and the default model for deep or complex topics. Match model weight to the depth of thinking the round requires.
19
+ - `--solo` — Run without subagents. Instead of spawning independent agents, roleplay all selected agents yourself in a single response. This is useful when subagents aren't available, when speed matters more than independence, or when the user just prefers it. Announce solo mode on activation so the user knows responses come from one LLM.
20
+
21
+ ## On Activation
22
+
23
+ 1. **Parse arguments** — check for `--model` and `--solo` flags from the user's invocation.
24
+
25
+ 2. Load config from `{project-root}/_bmad/core/config.yaml` and resolve:
26
+ - Use `{user_name}` for greeting
27
+ - Use `{communication_language}` for all communications
28
+
29
+ 3. **Read the agent manifest** at `{project-root}/_bmad/_config/agent-manifest.csv`. Build an internal roster of available agents with their displayName, title, icon, role, identity, communicationStyle, and principles.
30
+
31
+ 4. **Load project context** — search for `**/project-context.md`. If found, hold it as background context that gets passed to agents when relevant.
32
+
33
+ 5. **Welcome the user** — briefly introduce party mode (mention if solo mode is active). Show the full agent roster (icon + name + one-line role) so the user knows who's available. Ask what they'd like to discuss.
34
+
35
+ ## The Core Loop
36
+
37
+ For each user message:
38
+
39
+ ### 1. Pick the Right Voices
40
+
41
+ Choose 2-4 agents whose expertise is most relevant to what the user is asking. Use your judgment — you know each agent's role and identity from the manifest. Some guidelines:
42
+
43
+ - **Simple question**: 2 agents with the most relevant expertise
44
+ - **Complex or cross-cutting topic**: 3-4 agents from different domains
45
+ - **User names specific agents**: Always include those, plus 1-2 complementary voices
46
+ - **User asks an agent to respond to another**: Spawn just that agent with the other's response as context
47
+ - **Rotate over time** — avoid the same 2 agents dominating every round
48
+
49
+ ### 2. Build Context and Spawn
50
+
51
+ For each selected agent, spawn a subagent using the Agent tool. Each subagent gets:
52
+
53
+ **The agent prompt** (built from the manifest data):
54
+ ```
55
+ You are {displayName} ({title}), a BMAD agent in a collaborative roundtable discussion.
56
+
57
+ ## Your Persona
58
+ - Icon: {icon}
59
+ - Communication Style: {communicationStyle}
60
+ - Principles: {principles}
61
+ - Identity: {identity}
62
+
63
+ ## Discussion Context
64
+ {summary of the conversation so far — keep under 400 words}
65
+
66
+ {project context if relevant}
67
+
68
+ ## What Other Agents Said This Round
69
+ {if this is a cross-talk or reaction request, include the responses being reacted to — otherwise omit this section}
70
+
71
+ ## The User's Message
72
+ {the user's actual message}
73
+
74
+ ## Guidelines
75
+ - Respond authentically as {displayName}. Your perspective should reflect your genuine expertise.
76
+ - Start your response with: {icon} **{displayName}:**
77
+ - Speak in {communication_language}.
78
+ - Scale your response to the substance — don't pad. If you have a brief point, make it briefly.
79
+ - Disagree with other agents when your expertise tells you to. Don't hedge or be polite about it.
80
+ - If you have nothing substantive to add, say so in one sentence rather than manufacturing an opinion.
81
+ - You may ask the user direct questions if something needs clarification.
82
+ - Do NOT use tools. Just respond with your perspective.
83
+ ```
84
+
85
+ **Spawn all agents in parallel** — put all Agent tool calls in a single response so they run concurrently. If `--model` was specified, use that model for all subagents. Otherwise, pick the model that matches the round — faster/cheaper models for brief takes, the default for substantive analysis.
86
+
87
+ **Solo mode** — if `--solo` is active, skip spawning. Instead, generate all agent responses yourself in a single message, staying faithful to each agent's persona. Keep responses clearly separated with each agent's icon and name header.
88
+
89
+ ### 3. Present Responses
90
+
91
+ Present each agent's full response to the user — distinct, complete, and in their own voice. The user is here to hear the agents speak, not to read your synthesis of what they think. Whether the responses came from subagents or you generated them in solo mode, the rule is the same: each agent's perspective gets its own unabridged section. Never blend, paraphrase, or condense agent responses into a summary.
92
+
93
+ The format is simple: each agent's response one after another, separated by a blank line. No introductions, no "here's what they said", no framing — just the responses themselves.
94
+
95
+ After all agent responses are presented in full, you may optionally add a brief **Orchestrator Note** — flagging a disagreement worth exploring, or suggesting an agent to bring in next round. Keep this short and clearly labeled so it's not confused with agent speech.
96
+
97
+ ### 4. Handle Follow-ups
98
+
99
+ The user drives what happens next. Common patterns:
100
+
101
+ | User says... | You do... |
102
+ |---|---|
103
+ | Continues the general discussion | Pick fresh agents, repeat the loop |
104
+ | "Winston, what do you think about what Sally said?" | Spawn just Winston with Sally's response as context |
105
+ | "Bring in Amelia on this" | Spawn Amelia with a summary of the discussion so far |
106
+ | "I agree with John, let's go deeper on that" | Spawn John + 1-2 others to expand on John's point |
107
+ | "What would Mary and Amelia think about Winston's approach?" | Spawn Mary and Amelia with Winston's response as context |
108
+ | Asks a question directed at everyone | Back to step 1 with all agents |
109
+
110
+ The key insight: you can spawn any combination at any time. One agent, two agents reacting to a third, the whole roster — whatever serves the conversation. Each spawn is cheap and independent.
111
+
112
+ ## Keeping Context Manageable
113
+
114
+ As the conversation grows, you'll need to summarize prior rounds rather than passing the full transcript to each subagent. Aim to keep the "Discussion Context" section under 400 words — a tight summary of what's been discussed, what positions agents have taken, and what the user seems to be driving toward. Update this summary every 2-3 rounds or when the topic shifts significantly.
115
+
116
+ ## When Things Go Sideways
117
+
118
+ - **Agents are all saying the same thing**: Bring in a contrarian voice, or ask a specific agent to play devil's advocate by framing the prompt that way.
119
+ - **Discussion is going in circles**: Summarize the impasse and ask the user what angle they want to explore next.
120
+ - **User seems disengaged**: Ask directly — continue, change topic, or wrap up?
121
+ - **Agent gives a weak response**: Don't retry. Present it and let the user decide if they want more from that agent.
122
+
123
+ ## Exit
124
+
125
+ When the user says they're done (any natural phrasing — "thanks", "that's all", "end party mode", etc.), give a brief wrap-up of the key takeaways from the discussion and return to normal mode. Don't force exit triggers — just read the room.
@@ -1,4 +1,5 @@
1
1
  module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs
2
+ Core,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt,
2
3
  Core,bmad-brainstorming,Brainstorming,BSP,Use early in ideation or when stuck generating ideas.,,anytime,,,false,{output_folder}/brainstorming,brainstorming session
3
4
  Core,bmad-party-mode,Party Mode,PM,Orchestrate multi-agent discussions when you need multiple perspectives or want agents to collaborate.,,anytime,,,false,,
4
5
  Core,bmad-help,BMad Help,BH,,,anytime,,,false,,
@@ -19,24 +19,33 @@ const CLIUtils = {
19
19
  * Display BMAD logo and version using @clack intro + box
20
20
  */
21
21
  async displayLogo() {
22
- const version = this.getVersion();
23
22
  const color = await prompts.getColor();
24
-
25
- // ASCII art logo
26
- const logo = [
23
+ const termWidth = process.stdout.columns || 80;
24
+
25
+ // Full "BMad Method" logo for wide terminals, "BMad" only for narrow
26
+ const logoWide = [
27
+ ' ██████╗ ███╗ ███╗ █████╗ ██████╗ ███╗ ███╗███████╗████████╗██╗ ██╗ ██████╗ ██████╗ ™',
28
+ '██╔══██╗████╗ ████║██╔══██╗██╔══██╗ ████╗ ████║██╔════╝╚══██╔══╝██║ ██║██╔═══██╗██╔══██╗',
29
+ '██████╔╝██╔████╔██║███████║██║ ██║ ██╔████╔██║█████╗ ██║ ███████║██║ ██║██║ ██║',
30
+ '██╔══██╗██║╚██╔╝██║██╔══██║██║ ██║ ██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██║ ██║██║ ██║',
31
+ '██████╔╝██║ ╚═╝ ██║██║ ██║██████╔╝ ██║ ╚═╝ ██║███████╗ ██║ ██║ ██║╚██████╔╝██████╔╝',
32
+ '╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ',
33
+ ];
34
+
35
+ const logoNarrow = [
27
36
  ' ██████╗ ███╗ ███╗ █████╗ ██████╗ ™',
28
37
  ' ██╔══██╗████╗ ████║██╔══██╗██╔══██╗',
29
38
  ' ██████╔╝██╔████╔██║███████║██║ ██║',
30
39
  ' ██╔══██╗██║╚██╔╝██║██╔══██║██║ ██║',
31
40
  ' ██████╔╝██║ ╚═╝ ██║██║ ██║██████╔╝',
32
41
  ' ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝',
33
- ]
34
- .map((line) => color.yellow(line))
35
- .join('\n');
42
+ ];
36
43
 
37
- const tagline = ' Build More, Architect Dreams';
44
+ const logoLines = termWidth >= 95 ? logoWide : logoNarrow;
45
+ const logo = logoLines.map((line) => color.blue(line)).join('\n');
46
+ const tagline = color.white(' Build More, Architect Dreams\n © BMad Code');
38
47
 
39
- await prompts.box(`${logo}\n${tagline}`, `v${version}`, {
48
+ await prompts.box(`${logo}\n${tagline}`, '', {
40
49
  contentAlign: 'center',
41
50
  rounded: true,
42
51
  formatBorder: color.blue,
@@ -17,12 +17,12 @@ module.exports = {
17
17
  '--tools <tools>',
18
18
  'Comma-separated list of tool/IDE IDs to configure (e.g., "claude-code,cursor"). Use "none" to skip tool configuration.',
19
19
  ],
20
- ['--custom-content <paths>', 'Comma-separated list of paths to custom modules/agents/workflows'],
21
20
  ['--action <type>', 'Action type for existing installations: install, update, or quick-update'],
22
21
  ['--user-name <name>', 'Name for agents to use (default: system username)'],
23
22
  ['--communication-language <lang>', 'Language for agent communication (default: English)'],
24
23
  ['--document-output-language <lang>', 'Language for document output (default: English)'],
25
24
  ['--output-folder <path>', 'Output folder path relative to project root (default: _bmad-output)'],
25
+ ['--custom-source <sources>', 'Comma-separated Git URLs or local paths to install custom modules from'],
26
26
  ['-y, --yes', 'Accept all defaults and skip prompts where possible'],
27
27
  ],
28
28
  action: async (options) => {
@@ -10,14 +10,13 @@ const { Manifest } = require('./manifest');
10
10
  class ExistingInstall {
11
11
  #version;
12
12
 
13
- constructor({ installed, version, hasCore, modules, ides, customModules }) {
13
+ constructor({ installed, version, hasCore, modules, ides }) {
14
14
  this.installed = installed;
15
15
  this.#version = version;
16
16
  this.hasCore = hasCore;
17
17
  this.modules = Object.freeze(modules.map((m) => Object.freeze({ ...m })));
18
18
  this.moduleIds = Object.freeze(this.modules.map((m) => m.id));
19
19
  this.ides = Object.freeze([...ides]);
20
- this.customModules = Object.freeze([...customModules]);
21
20
  Object.freeze(this);
22
21
  }
23
22
 
@@ -35,7 +34,6 @@ class ExistingInstall {
35
34
  hasCore: false,
36
35
  modules: [],
37
36
  ides: [],
38
- customModules: [],
39
37
  });
40
38
  }
41
39
 
@@ -53,15 +51,11 @@ class ExistingInstall {
53
51
  let hasCore = false;
54
52
  const modules = [];
55
53
  let ides = [];
56
- let customModules = [];
57
54
 
58
55
  const manifest = new Manifest();
59
56
  const manifestData = await manifest.read(bmadDir);
60
57
  if (manifestData) {
61
58
  version = manifestData.version;
62
- if (manifestData.customModules) {
63
- customModules = manifestData.customModules;
64
- }
65
59
  if (manifestData.ides) {
66
60
  ides = manifestData.ides.filter((ide) => ide && typeof ide === 'string');
67
61
  }
@@ -120,7 +114,7 @@ class ExistingInstall {
120
114
  return ExistingInstall.empty();
121
115
  }
122
116
 
123
- return new ExistingInstall({ installed, version, hasCore, modules, ides, customModules });
117
+ return new ExistingInstall({ installed, version, hasCore, modules, ides });
124
118
  }
125
119
  }
126
120
 
@@ -20,14 +20,12 @@ class InstallPaths {
20
20
 
21
21
  const configDir = path.join(bmadDir, '_config');
22
22
  const agentsDir = path.join(configDir, 'agents');
23
- const customCacheDir = path.join(configDir, 'custom');
24
23
  const coreDir = path.join(bmadDir, 'core');
25
24
 
26
25
  for (const [dir, label] of [
27
26
  [bmadDir, 'bmad directory'],
28
27
  [configDir, 'config directory'],
29
28
  [agentsDir, 'agents config directory'],
30
- [customCacheDir, 'custom modules cache'],
31
29
  [coreDir, 'core module directory'],
32
30
  ]) {
33
31
  await ensureWritableDir(dir, label);
@@ -40,7 +38,6 @@ class InstallPaths {
40
38
  bmadDir,
41
39
  configDir,
42
40
  agentsDir,
43
- customCacheDir,
44
41
  coreDir,
45
42
  isUpdate,
46
43
  });