diff --git a/.github/workflows/bundle-latest.yaml b/.github/workflows/bundle-latest.yaml
index a963cecc..d8a0da0e 100644
--- a/.github/workflows/bundle-latest.yaml
+++ b/.github/workflows/bundle-latest.yaml
@@ -100,8 +100,53 @@ jobs:
fi
done
- # Create index.html for GitHub Pages
- cat > dist/bundles/index.html << 'EOF'
+ # Generate index.html dynamically based on actual bundles
+ TIMESTAMP=$(date -u +"%Y-%m-%d %H:%M UTC")
+ COMMIT_SHA=$(git rev-parse --short HEAD)
+
+ # Function to generate agent links for a module
+ generate_agent_links() {
+ local module=$1
+ local agent_dir="dist/bundles/$module/agents"
+
+ if [ ! -d "$agent_dir" ]; then
+ echo ""
+ return
+ fi
+
+ local links=""
+ local count=0
+
+ # Find all XML files and generate links
+ for xml_file in "$agent_dir"/*.xml; do
+ if [ -f "$xml_file" ]; then
+ local agent_name=$(basename "$xml_file" .xml)
+ # Convert filename to display name (pm -> PM, tech-writer -> Tech Writer)
+ local display_name=$(echo "$agent_name" | sed 's/-/ /g' | awk '{for(i=1;i<=NF;i++) {if(length($i)==2) $i=toupper($i); else $i=toupper(substr($i,1,1)) tolower(substr($i,2));}}1')
+
+ if [ $count -gt 0 ]; then
+ links="$links | "
+ fi
+ links="$links$display_name"
+ count=$((count + 1))
+ fi
+ done
+
+ echo "$links"
+ }
+
+ # Generate agent links for each module
+ BMM_LINKS=$(generate_agent_links "bmm")
+ CIS_LINKS=$(generate_agent_links "cis")
+ BMGD_LINKS=$(generate_agent_links "bmgd")
+
+ # Count agents for bulk downloads
+ BMM_COUNT=$(find dist/bundles/bmm/agents -name '*.xml' 2>/dev/null | wc -l | tr -d ' ')
+ CIS_COUNT=$(find dist/bundles/cis/agents -name '*.xml' 2>/dev/null | wc -l | tr -d ' ')
+ BMGD_COUNT=$(find dist/bundles/bmgd/agents -name '*.xml' 2>/dev/null | wc -l | tr -d ' ')
+
+ # Create index.html
+ cat > dist/bundles/index.html << EOF
@@ -132,50 +177,63 @@ jobs:
Available Modules
+ EOF
+
+ # Add BMM section if agents exist
+ if [ -n "$BMM_LINKS" ]; then
+ cat >> dist/bundles/index.html << EOF
-
+ EOF
+ fi
+ # Add CIS section if agents exist
+ if [ -n "$CIS_LINKS" ]; then
+ cat >> dist/bundles/index.html << EOF
+ EOF
+ fi
+
+ # Add BMGD section if agents exist
+ if [ -n "$BMGD_LINKS" ]; then
+ cat >> dist/bundles/index.html << EOF
+ EOF
+ fi
+
+ # Add bulk downloads section
+ cat >> dist/bundles/index.html << EOF
Bulk Downloads
Download all agents for a module as a zip archive:
Usage
@@ -193,12 +251,6 @@ jobs:
EOF
- # Replace placeholders
- TIMESTAMP=$(date -u +"%Y-%m-%d %H:%M UTC")
- COMMIT_SHA=$(git rev-parse --short HEAD)
- sed -i "s/\$TIMESTAMP/$TIMESTAMP/" dist/bundles/index.html
- sed -i "s/\$COMMIT_SHA/$COMMIT_SHA/" dist/bundles/index.html
-
- name: Checkout bmad-bundles repo
uses: actions/checkout@v4
with:
diff --git a/.gitignore b/.gitignore
index aed5f2dc..0c3840de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -67,3 +67,4 @@ z*/
.bmad
.claude
+.codex
diff --git a/src/modules/bmm/docs/agents-guide.md b/src/modules/bmm/docs/agents-guide.md
index 52d20775..f6886ede 100644
--- a/src/modules/bmm/docs/agents-guide.md
+++ b/src/modules/bmm/docs/agents-guide.md
@@ -321,7 +321,7 @@ The BMad Method Module (BMM) provides a comprehensive team of specialized AI age
**Workflows:**
- `workflow-status` - Check what to do next
-- `create-design` - Conduct design thinking workshop to define UX specification with:
+- `create-ux-design` - Conduct design thinking workshop to define UX specification with:
- Visual exploration and generation
- Collaborative decision-making
- AI-assisted design tools (v0, Lovable)
@@ -944,7 +944,7 @@ Quick reference for agent selection:
| ----------------------- | ---- | ------------------ | --------------------------------------------- | ------------------------------------- |
| **Analyst** | 📊 | 1 (Analysis) | brainstorm, brief, research, document-project | Discovery, requirements, brownfield |
| **PM** | 📋 | 2 (Planning) | prd, tech-spec, epics-stories | Planning, requirements docs |
-| **UX Designer** | 🎨 | 2 (Planning) | create-design, validate-design | UX-heavy projects, design |
+| **UX Designer** | 🎨 | 2 (Planning) | create-ux-design, validate-design | UX-heavy projects, design |
| **Architect** | 🏗️ | 3 (Solutioning) | architecture, implementation-readiness | Technical design, architecture |
| **SM** | 🏃 | 4 (Implementation) | sprint-planning, create-story, story-context | Story management, sprint coordination |
| **DEV** | 💻 | 4 (Implementation) | develop-story, code-review, story-done | Implementation, coding |
diff --git a/src/modules/bmm/docs/enterprise-agentic-development.md b/src/modules/bmm/docs/enterprise-agentic-development.md
index fd4c22f5..00738bcc 100644
--- a/src/modules/bmm/docs/enterprise-agentic-development.md
+++ b/src/modules/bmm/docs/enterprise-agentic-development.md
@@ -240,7 +240,7 @@ Continuous deployment to production
**UX Designer Workflow:**
```bash
-bmad ux *create-design
+bmad ux *create-ux-design
```
**BMad produces:**
diff --git a/src/modules/bmm/docs/test-architecture.md b/src/modules/bmm/docs/test-architecture.md
index 694f3bb1..1e985a05 100644
--- a/src/modules/bmm/docs/test-architecture.md
+++ b/src/modules/bmm/docs/test-architecture.md
@@ -295,7 +295,7 @@ These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks*
| Workflow Stage | Test Architect | Dev / Team | Outputs |
| -------------------------- | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| **Phase 1**: Discovery | - | Analyst ➕ `*research`, `*product-brief` | Domain research, compliance analysis, product brief |
-| **Phase 2**: Planning | Run ➕ `*nfr-assess` | PM `*prd` (creates PRD with FRs/NFRs), UX `*create-design` | Enterprise PRD with FRs/NFRs, UX design, ➕ NFR documentation |
+| **Phase 2**: Planning | Run ➕ `*nfr-assess` | PM `*prd` (creates PRD with FRs/NFRs), UX `*create-ux-design` | Enterprise PRD with FRs/NFRs, UX design, ➕ NFR documentation |
| **Phase 3**: Solutioning | Run `*framework`, `*ci` AFTER architecture and epic creation | Architect `*architecture`, `*create-epics-and-stories`, `*implementation-readiness` | Architecture, epics/stories, test framework, CI pipeline |
| **Phase 4**: Sprint Start | - | SM `*sprint-planning` | Sprint plan with all epics |
| **Phase 4**: Epic Planning | Run `*test-design` for THIS epic 🔄 (compliance focus) | Review epic scope and compliance requirements | `test-design-epic-N.md` with security/performance/compliance focus |
diff --git a/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md b/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md
index fc5d6458..cc0e2f07 100644
--- a/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md
+++ b/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md
@@ -26,12 +26,12 @@
Load the FULL file: {output_folder}/bmm-workflow-status.yaml
Parse workflow_status section
- Check status of "create-design" workflow
+ Check status of "create-ux-design" workflow
Get project_level from YAML metadata
Find first non-completed workflow (next expected workflow)
-
-
+
+
Re-running will overwrite the existing UX design. Continue? (y/n)
@@ -39,7 +39,7 @@
-
+
Continue with UX Design anyway? (y/n)
@@ -1139,9 +1139,9 @@ Based on your deployment intent: {{recommendation}}
Load the FULL file: {output_folder}/bmm-workflow-status.yaml
- Find workflow_status key "create-design"
+ Find workflow_status key "create-ux-design"
ONLY write the file path as the status value - no other text, notes, or metadata
- Update workflow_status["create-design"] = "{default_output_file}"
+ Update workflow_status["create-ux-design"] = "{default_output_file}"
Save file, preserving ALL comments and structure including STATUS DEFINITIONS
Find first non-completed workflow in workflow_status (next workflow to do)
diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md b/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md
index 92e6934e..50041275 100644
--- a/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md
+++ b/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md
@@ -652,7 +652,7 @@ Your PRD is complete!"
Check workflow path to determine next expected workflows:
- Look for "create-epics-and-stories" as optional after PRD
-- Look for "create-design" as conditional (if_has_ui)
+- Look for "create-ux-design" as conditional (if_has_ui)
- Look for "create-epics-and-stories-after-ux" as optional
- Identify the required next phase workflow
@@ -675,7 +675,7 @@ Based on your {{project_track}} workflow path, you can:
**Option B: UX Design First** (Recommended if UI)
- `workflow create-design`
+ `workflow create-ux-design`
- Design user experience and interactions
- Epic breakdown can incorporate UX details later
@@ -691,7 +691,7 @@ Based on your {{project_track}} workflow path, you can:
**Typical next workflows:**
-1. `workflow create-design` - UX Design (if UI exists)
+1. `workflow create-ux-design` - UX Design (if UI exists)
2. `workflow create-architecture` - Technical architecture
3. `workflow create-epics-and-stories` - Epic breakdown
diff --git a/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml b/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml
index 525c79a7..e95c69d8 100644
--- a/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml
+++ b/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml
@@ -60,10 +60,10 @@ phases:
agent: "pm"
command: "validate-prd"
- - id: "create-design"
+ - id: "create-ux-design"
recommended: true
agent: "ux-designer"
- command: "create-design"
+ command: "create-ux-design"
note: "Recommended - must integrate with existing UX patterns"
- phase: 2
diff --git a/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml b/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml
index 82b1e721..cc475f4b 100644
--- a/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml
+++ b/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml
@@ -48,10 +48,10 @@ phases:
agent: "pm"
command: "validate-prd"
- - id: "create-design"
+ - id: "create-ux-design"
recommended: true
agent: "ux-designer"
- command: "create-design"
+ command: "create-ux-design"
note: "Highly recommended for enterprise - design system and patterns"
- phase: 2
diff --git a/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml b/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml
index f207f52f..c8d25ba0 100644
--- a/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml
+++ b/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml
@@ -59,10 +59,10 @@ phases:
agent: "pm"
command: "validate-prd"
- - id: "create-design"
+ - id: "create-ux-design"
conditional: "if_has_ui"
agent: "ux-designer"
- command: "create-design"
+ command: "create-ux-design"
- phase: 2
name: "Solutioning"
diff --git a/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml b/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml
index 1d1ced9b..bbad70d9 100644
--- a/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml
+++ b/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml
@@ -48,10 +48,10 @@ phases:
command: "validate-prd"
note: "Quality check for PRD completeness"
- - id: "create-design"
+ - id: "create-ux-design"
conditional: "if_has_ui"
agent: "ux-designer"
- command: "create-design"
+ command: "create-ux-design"
note: "Determined after PRD - user/agent decides if needed"
- phase: 2
diff --git a/tools/cli/installers/lib/core/config-collector.js b/tools/cli/installers/lib/core/config-collector.js
index cd3a8aef..17c233bb 100644
--- a/tools/cli/installers/lib/core/config-collector.js
+++ b/tools/cli/installers/lib/core/config-collector.js
@@ -359,6 +359,25 @@ class ConfigCollector {
return result;
}
+ /**
+ * Get the default username from the system
+ * @returns {string} Capitalized username\
+ */
+ getDefaultUsername() {
+ let result = 'BMad';
+ try {
+ const os = require('node:os');
+ const userInfo = os.userInfo();
+ if (userInfo && userInfo.username) {
+ const username = userInfo.username;
+ result = username.charAt(0).toUpperCase() + username.slice(1);
+ }
+ } catch {
+ // Do nothing, just return 'BMad'
+ }
+ return result;
+ }
+
/**
* Collect configuration for a single module
* @param {string} moduleName - Module name
@@ -604,6 +623,11 @@ class ConfigCollector {
}
}
+ // Special handling for user_name: default to system user
+ if (moduleName === 'core' && key === 'user_name' && !existingValue) {
+ item.default = this.getDefaultUsername();
+ }
+
// Determine question type and default value
let questionType = 'input';
let defaultValue = item.default;
diff --git a/tools/cli/installers/lib/ide/antigravity.js b/tools/cli/installers/lib/ide/antigravity.js
index 3bccd911..9f35d0f7 100644
--- a/tools/cli/installers/lib/ide/antigravity.js
+++ b/tools/cli/installers/lib/ide/antigravity.js
@@ -20,7 +20,7 @@ const { getAgentsFromBmad, getAgentsFromDir } = require('./shared/bmad-artifacts
*/
class AntigravitySetup extends BaseIdeSetup {
constructor() {
- super('antigravity', 'Google Antigravity', false);
+ super('antigravity', 'Google Antigravity', true);
this.configDir = '.agent';
this.workflowsDir = 'workflows';
}
diff --git a/tools/cli/lib/ui.js b/tools/cli/lib/ui.js
index 323fdaaf..8de8825e 100644
--- a/tools/cli/lib/ui.js
+++ b/tools/cli/lib/ui.js
@@ -201,15 +201,51 @@ class UI {
CLIUtils.displaySection('Tool Integration', 'Select AI coding assistants and IDEs to configure');
- const answers = await inquirer.prompt([
- {
- type: 'checkbox',
- name: 'ides',
- message: 'Select tools to configure:',
- choices: ideChoices,
- pageSize: 15,
- },
- ]);
+ let answers;
+ let userConfirmedNoTools = false;
+
+ // Loop until user selects at least one tool OR explicitly confirms no tools
+ while (!userConfirmedNoTools) {
+ answers = await inquirer.prompt([
+ {
+ type: 'checkbox',
+ name: 'ides',
+ message: 'Select tools to configure:',
+ choices: ideChoices,
+ pageSize: 15,
+ },
+ ]);
+
+ // If tools were selected, we're done
+ if (answers.ides && answers.ides.length > 0) {
+ break;
+ }
+
+ // Warn that no tools were selected - users often miss the spacebar requirement
+ console.log();
+ console.log(chalk.red.bold('⚠️ WARNING: No tools were selected!'));
+ console.log(chalk.red(' You must press SPACEBAR to select items, then ENTER to confirm.'));
+ console.log(chalk.red(' Simply highlighting an item does NOT select it.'));
+ console.log();
+
+ const { goBack } = await inquirer.prompt([
+ {
+ type: 'confirm',
+ name: 'goBack',
+ message: chalk.yellow('Would you like to go back and select at least one tool?'),
+ default: true,
+ },
+ ]);
+
+ if (goBack) {
+ // Re-display the section header before looping back
+ console.log();
+ CLIUtils.displaySection('Tool Integration', 'Select AI coding assistants and IDEs to configure');
+ } else {
+ // User explicitly chose to proceed without tools
+ userConfirmedNoTools = true;
+ }
+ }
return {
ides: answers.ides || [],