* feat(cli): complete @clack/prompts migration
Full migration of BMAD CLI installer from legacy terminal libraries
(chalk, ora, boxen, figlet, wrap-ansi, cli-table3, readline) to unified
@clack/prompts v1.0.0 visual system.
Foundation (prompts.js + cli-utils.js):
- Extended prompts.js wrapper with box, spinner, progress, taskLog,
path, autocomplete, selectKey, stream, color re-export
- Refactored cli-utils.js: displayLogo uses box(), sections use note(),
steps use log.step(), removed boxen/figlet/wrap-ansi/cli-table3
UI orchestration (ui.js):
- Replaced ~100 console.log+chalk calls with log.*, note(), box()
- Replaced ora spinner with @clack spinner
- Module selection: autocompleteMultiselect with locked core module,
bulleted post-selection display, maxItems for no-scroll
Spinner migration (installer.js):
- Replaced 40+ ora spinner calls with @clack spinner
- All spinner.stop() calls include meaningful messages
- Failure paths use spinner.error() (red cross) instead of stop()
Readline migration (agent/installer.js + config-collector.js):
- Migrated readline prompts to @clack text/confirm/select
- Fixed chalk.dim bug (chalk was never imported)
- Removed chalk from config-collector.js
IDE handlers + modules (7 files):
- Replaced chalk+ora across all IDE handlers and module manager
- Fixed options.installer undefined bug in manager.js update()
Cleanup:
- Removed ora, boxen, figlet, wrap-ansi, cli-table3 from dependencies
- chalk stays (used outside tools/cli/ scope)
- Replaced hand-drawn Unicode update box in bmad-cli.js with box()
- Added process.stdin.setMaxListeners(25) for sequential prompts
Spinner wrapper adds isSpinning state tracking (not native to @clack).
Removed dead groupMultiselect and sortKey sort calls.
Ref: tech-spec-installer-clack-migration-ui-enhancement.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cli): consolidate installer output to single spinner + summary
Replace ~40 lines of output from 15+ spinner start/stop cycles with a
single animated spinner during installation and a final note() summary
block showing checkmarks per step.
Key changes:
- Add results collector pattern in install() method
- Replace spinner.stop/start pairs with addResult + spinner.message
- Add renderInstallSummary() using prompts.note() with colored output
- Propagate silent flag through IDE handlers and module manager
- Add spinner race condition guards (start while spinning, stop while stopped)
- Add no-op spinner pattern for silent external module cloning
- Fix stdin listener limit to be defensive with Math.max
- Add GIT_TERMINAL_PROMPT=0 for non-interactive git operations
- Merge locked values into initialValue for autocomplete prompts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(cli): resolve code review findings from @clack/prompts migration
Address 31 issues across 14 CLI files found during PR #1586 review
(Augment Code + CodeRabbit):
- Fix bmadDir ReferenceError by hoisting declaration before try block
- Wrap console.log monkey-patch in try/finally for safe restoration
- Fix transformWorkflowPath dead code and undefined return path
- Fix broken symlink crash in _config-driven.js and codex.js cleanup
- Pass installer instance through update() for agent recompilation
- Fix @clack/prompts API: defaultValue→default, initialValue→default
- Use nullish coalescing (??) instead of logical OR for falsy values
- Forward options in recursive promptToolSelection calls
- Remove no-op replaceAll('_bmad','_bmad') in manager and generator
- Remove unused confirm prompt in config-collector hasNoConfig branch
- Guard spinner.message() when spinner is not running
- Add missing methods to silent spinner stub (cancel, clear, isSpinning)
- Wrap install.js error handler with inner try/catch + console fallback
- Gate codex per-entry error log with silent flag
- Add return statements to all stream wrapper methods
- Remove dead variables (availableNames, hasCustomContentItems)
- Filter core module from update flow selection
- Replace borderColor ternary chain with object map
- Fix Kilo "agents" label to "modes" in IDE manager
- Normalize error return shape for unsupported IDEs
- Fix spinner message timing before dependency resolution
- Guard undefined moduleDir in dependency-resolver
- Fix workflowsInstalled counter inflation in custom handler
- Migrate console.warn calls to prompts.log.warn
- Replace console.log() with prompts.log.message('')
- Fix legacyBmadPath hardcoded to .bmad instead of entry.name
- Fix focusedValue never assigned breaking SPACE toggle and hints
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
The downloads page offered bmad-sources.zip and bmad-prompts.zip, both
redundant: GitHub provides source archives for every tag natively, and
npx bmad-method install is the supported path for compiled prompts.
Remove the downloads page, all bundle generation code, the archiver
dependency, and nav links. The llms.txt and llms-full.txt files (the
genuinely useful artifacts) continue to be generated as before.
The manual-release.yaml workflow has been broken since the v6 alpha
rewrite — it calls `npm run validate` which no longer exists. Releases
are now handled via the /draft-changelog and release skills instead.
- Delete .github/workflows/manual-release.yaml
- Delete tools/docs/BUNDLE_DISTRIBUTION_SETUP.md (references deleted workflow)
- Remove release:major/minor/patch/watch npm scripts (triggered deleted workflow)
Can be restored from git history if a CI-based release workflow is needed again.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Update all references to the help task file from the old path
`_bmad/core/tasks/bmad-help.md` to the new path `_bmad/core/tasks/help.md`.
Affected files:
- 7 workflow step files across multiple workflows
- 1 IDE tool command generator (updated comments)
- Override _isActionKey to treat SPACE as an action key instead of search input,
and add key handler to toggle selections when not navigating
- update IDE selection prompt message from "Select tools:" to "Integrate with:".
* docs: add official external modules reference page
* chore: remove obsolete docs and basement files
* fix: update robots.txt URLs to docs.bmad-method.org
* fix: generate robots.txt dynamically from site base URL
Replace static robots.txt with an Astro endpoint that uses the
configured site URL, so sitemap references are correct on both
fork deployments and production.
* fix: unify site URL resolution in build-docs.js
build-docs.js had its own hardcoded fallback URL
(bmad-code-org.github.io) instead of using the shared
getSiteUrl() function, causing URL mismatches between
robots.txt, llms.txt, and sitemaps. Now all components
resolve the site URL through the same function. Renamed
site-url.js to .mjs to avoid Node ESM detection warnings.
* fix: correct module names and relocate prompt file
- CIS: "Creative Innovation Suite" → "Creative Intelligence Suite"
- GDS: "Game Dev Suite" → "Game Dev Studio"
- Move _prompt-external-modules-page.md from docs/ to tools/docs/
* refactor: convert build-docs to ESM, eliminate mutable globals
- Convert build-docs.js to build-docs.mjs (CJS → ESM)
- Import getSiteUrl directly, remove async import workaround
- Kill mutable SITE_URL global, call getSiteUrl() where needed
- Clean up Banner.astro variable naming
- Update package.json and CI workflow for .mjs extension
* feat: add non-interactive installation support
Add command-line flags to support non-interactive installation for CI/CD
pipelines and automated deployments:
- --directory: Installation directory
- --modules: Comma-separated module IDs
- --tools: Tool/IDE IDs (use "none" to skip)
- --custom-content: Custom module paths
- --action: Action type for existing installations
- --user-name, --communication-language, --document-output-language, --output-folder: Core config
- -y, --yes: Accept all defaults
When flags are provided, prompts are skipped. Missing values gracefully
fall back to interactive prompts.
* fix: complete non-interactive installation support
- Fix validation checks using truthy instead of !== true
- Add skipPrompts flag to skip module config prompts with --yes
- Add getDefaultModules() for automatic module selection with --yes
- Fix IDE selection to use array check instead of length check
Co-Authored-By: AiderDesk <https://github.com/hotovo/aider-desk>
---------
Co-authored-by: Brian <bmadcode@gmail.com>
The --prefer-offline flag causes npm to use cached package metadata,
which can be stale and fail to resolve recently published versions.
Also updates deprecated --production flag to --omit=dev.
Fixes#1438
* fix: trim activation header to avoid YAML formatting issues in kilo installer
* refactor: convert kilo installer to use YAML object serialization and add workflow support
- Replace string concatenation with yaml.parse/stringify for proper YAML handling
- Add workflow command generation and export to .kilocode/workflows/
- Implement clearBmadWorkflows to remove old BMAD workflow files
- Convert createModeEntry to createModeObject returning structured objects
- Update cleanup to use YAML parsing for proper mode filtering
- Update installCustomAgentLauncher to use object-based config
* fix: add task and tool command generation to kilo installer
---------
Co-authored-by: Brian <bmadcode@gmail.com>
* fix: support CRLF line endings and add task/tool templates for all IDEs
* fix: preserve file extensions in IDE task/tool paths and update BMAD branding
* fix: double extension issue in wrapper filename generation
* fix: correct path handling and variable reference in task/tool command generator
* fix: change default BMAD folder name from 'bmad' to '_bmad' across all IDE components
* refactor: centralize BMAD_FOLDER_NAME constant in path-utils
* fix: Replace the rest of BMAD_FOLDER magic values
* fix: add safety checks for setBmadFolderName method calls in IdeManager
* fix: convert absolute paths to relative in task-tool-command-generator
* fix: support .xml task files in bmad-artifacts task discovery
* fix: skip internal tasks in manifest generation and IDE command discovery
* fix: skip empty artifact_types targets and remove unused vscode_settings target
* fix: skip internal tools in manifest generation and improve Windows path handling in command generator
* fix: use csv-parse library for proper CSV handling in manifest generation
* refactor: extract CSV text cleaning to reusable method in manifest generator
* fix: normalize path separators to forward slashes in agent file copying for cross-platform compatibility
---------
Co-authored-by: Alex Verkhovsky <alexey.verkhovsky@gmail.com>
Co-authored-by: Brian <bmadcode@gmail.com>
* feat: add cross-file reference validator for CI
Add tools/validate-file-refs.js that validates cross-file references
in BMAD source files (agents, workflows, tasks, steps). Catches broken
file paths, missing referenced files, wrong extensions, and absolute
path leaks before they reach users.
Addresses broken-file-ref and path-handling bug classes which account
for 25% of all historical bugs (59 closed issues, 129+ comments).
- Scans src/ for YAML, markdown, and XML files
- Validates {project-root}/_bmad/ references against source tree
- Checks relative path references, exec attributes, invoke-task tags
- Detects absolute path leaks (/Users/, /home/, C:\)
- Adds validate:refs npm script and CI step in quality.yaml
* feat: strip JSON example blocks to reduce false-positive broken refs
Add stripJsonExampleBlocks() to the markdown reference extractor so
bare JSON example/template blocks (braces on their own lines) are
removed before pattern matching. This prevents paths inside example
data from being flagged as broken references.
* feat: add line numbers, fix utility/ path mapping, improve verbose output
- Add utility/ to direct path mapping (was incorrectly falling through
to src/modules/utility/)
- Show line numbers for broken references in markdown files
- Show YAML key path for broken references in YAML files
- Print file headers in verbose mode for all files with refs
* fix: correct verbose [OK]/[BROKEN] overlap and line number drift
Broken refs no longer print [OK] before [BROKEN] in --verbose mode.
Code block stripping now preserves newlines so offsetToLine() reports
accurate line numbers when code blocks precede broken references.
* fix: address review feedback, add CI annotations and step summary
Address alexeyv's review findings on PR #1494:
- Fix exec-attr prefix handling for {_bmad}/ and bare _bmad/ paths
- Fix mapInstalledToSource fallback (remove phantom src/modules/ mapping)
- Switch extractYamlRefs to parseDocument() for YAML line numbers
Add CI integration (stories 2-1, 2-2):
- Emit ::warning annotations for broken refs and abs-path leaks
- Write markdown table to $GITHUB_STEP_SUMMARY
- Guard both behind environment variable checks
Harden CI output:
- escapeAnnotation() encodes %, \r, \n per GitHub Actions spec
- escapeTableCell() escapes pipe chars in step summary table
---------
Co-authored-by: Alex Verkhovsky <alexey.verkhovsky@gmail.com>
Co-authored-by: Brian <bmadcode@gmail.com>
Prevents Claude from auto-invoking BMad skills without explicit user
request. Adds disable-model-invocation: true frontmatter to all
command templates and inline generators for Claude Code and Codex.
Co-authored-by: Brian <bmadcode@gmail.com>
Comprehensive fix for installer failures related to Astro/Starlight peer dependencies:
1. Update @astrojs/starlight from 0.37.0 to 0.37.5 (latest stable)
2. Add .npmrc with legacy-peer-deps to prevent peer dependency warnings
3. Update module installer to use --legacy-peer-deps flag for external modules
This resolves issues where:
- npm shows peer dependency warnings that users interpret as failures
- External module installations fail due to strict peer dependency checking
- Different npm versions handle peer dependencies inconsistently
Technical note: Starlight 0.37.x requires astro@^5.5.0, which is compatible
with astro@5.16.0 (^5.5.0 means >=5.5.0 <6.0.0). The issue was npm's warning
display, not actual incompatibility.
Fixes: Installation errors reported in v6.0.0-Beta.2
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: correct malformed XML syntax and remove hardcoded path
- Fix missing opening quote in activation-steps.txt: `n={HELP_STEP}"` → `n="{HELP_STEP}"`
- Remove spurious hyphen: `-Let` → `Let`
- Replace hardcoded `/Users/brianmadison/...` path with relative path
Fixes#1435
* fix: add missing HELP_STEP placeholder replacement
The activation-steps.txt template includes a {HELP_STEP} placeholder,
but activation-builder.js never calculated or replaced it. This caused
the literal string "{HELP_STEP}" to appear in compiled agent files.
Added helpStep calculation between menuStep and haltStep, and adjusted
subsequent step numbers accordingly.
Fixes#1441
* Update src/bmm/workflows/2-plan-workflows/create-prd/validation-report-prd-workflow.md
---------
Co-authored-by: Alex Verkhovsky <alexey.verkhovsky@gmail.com>
* fix(ide): add support for Gemini CLI TOML format
* fix(ide): Added normalization for config.extension, added .yml to the extension array
---------
Co-authored-by: Brian <bmadcode@gmail.com>
* docs: radical reduction of documentation scope for v6 beta
Archive and basement unreviewed content to ship a focused, minimal doc set.
Changes:
- Archive stale how-to workflow guides (will rewrite for v6)
- Archive outdated explanation and reference content
- Move unreviewed content to basement for later review
- Reorganize TEA docs into dedicated /tea/ section
- Add workflow-map visual reference page
- Simplify getting-started tutorial and sidebar navigation
- Add explanation pages: brainstorming, adversarial-review, party-mode,
quick-flow, advanced-elicitation
- Fix base URL handling for subdirectory deployments (GitHub Pages forks)
The goal is a minimal, accurate doc set for beta rather than
comprehensive but potentially misleading content.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: restructure BMM and agents documentation by consolidating and flattening index files.
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
- Add .github/prompts directory alongside .github/agents
- Use UnifiedInstaller with TemplateType.COPILOT for prompts/workflows/tasks/tools
- Fix typo: bmd-custom- -> bmad- prefix for agents
- Update cleanup to handle both directories
- Format fixes for auggie.js and windsurf.js
- Add fileExtension parameter support to path-utils (toColonPath, toDashPath)
- Add TemplateType.GEMINI to unified-installer for TOML output format
- Update task-tool-command-generator to support TOML format
- Refactor gemini.js to use UnifiedInstaller with:
- NamingStyle.FLAT_DASH for dash-separated filenames
- TemplateType.GEMINI for TOML format (description + prompt fields)
- fileExtension: '.toml' for Gemini CLI
TOML format:
description = "BMAD Agent: Title"
prompt = """
Content here
"""
- Replace manual artifact collection with UnifiedInstaller class
- Remove nested folder structure (.windsurf/workflows/bmad/[module]/[type]/)
- Now installs flat files to .windsurf/workflows/ (e.g., bmad-bmm-agent-pm.md)
- Use NamingStyle.FLAT_DASH and TemplateType.WINDSURF
- Add customTemplateFn for Windsurf-specific auto_execution_mode frontmatter
- Simplify cleanup() and update installCustomAgentLauncher() for flat structure
- Replace individual generators with UnifiedInstaller class
- Use NamingStyle.FLAT_COLON and TemplateType.CODEX
- Remove manual counting logic, use counts from UnifiedInstaller
- Keep cleanup() and installCustomAgentLauncher() as-is
* Add interactive workflow guide page
Replace confusing static SVG workflow diagram with an interactive
guide at /workflow-guide. Users select their track (Quick Flow,
BMad Method, Enterprise) and see relevant phases, agents, commands,
and outputs. Update link validator to recognize custom page routes.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add visual dev loop indicator to workflow guide
Wrap create-story, dev-story, and code-review in a dashed border
group with a "Repeat for each story" label to clearly communicate
the iterative development cycle in Phase 4.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Simplify workflow guide to vertical slash command flow
Replace expandable phase cards with a clean vertical flow showing
slash commands as the primary element, with down arrows between
steps, agent badges, required/optional status, and concise
descriptions. Add prominent /bmad-help callout and note that
agent loading is optional.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Simplify README Quick Start with numbered command flows
Replace wordy paragraphs and track table with two clear numbered
paths (Quick Flow: 3 commands, BMad Method: 6 steps) and a
prominent /bmad-help callout as the primary guidance mechanism.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add Party Mode to README, /bmad-help to getting-started
Add Party Mode bullet to Why BMad section, note about agent-based
usage as an alternative to direct workflows, and a /bmad-help
mention in the getting-started tutorial after installation.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add link to getting-started tutorial in README Quick Start
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add workflow guide link to docs index New Here section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Update README tagline and format modules table
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix workflow-guide links to use relative paths
The /workflow-guide absolute path breaks with non-root base paths.
Use relative paths since workflow-guide is a custom Astro page
outside the docs collection. Docs-to-docs links keep the /docs/
pattern which the rehype plugin handles.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Revert workflow-guide links to absolute paths
Use /workflow-guide to match the /docs/ convention used throughout.
Works correctly on the production site where base path is /.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
The mergeModuleHelpCatalogs function depends on agent-manifest.csv
being populated, but was being called before generateManifests.
This caused new modules' agent info to be empty in the help catalog.
Fixes issue where game-dev-studio workflows weren't appearing
in bmad-help.csv and IDE commands weren't being generated.