Breakthrough Method for Agile Ai Driven Development
Go to file
Brian Madison 5cb619c93c feat(installer): add --set and --list-options for non-interactive config
Closes #1663.

Adds two installer flags so module config options can be set without
interactive prompts. Designed for CI scripts, Dockerfiles, and
enterprise rollouts where the user wants to bake answers into the
install command rather than answer prompts.

`--set <module>.<key>=<value>` (repeatable) sets any module config
option. `--list-options [module]` lists every key the installer can
discover locally — built-in modules (`core`, `bmm`) plus any cached
official modules. One flag scales to every module without growing the
CLI surface per option.

```bash
npx bmad-method install --yes \
  --modules bmm --tools claude-code \
  --set bmm.project_knowledge=research \
  --set bmm.user_skill_level=expert \
  --set core.user_name=Brian
```

## How it works

`--set` is a post-install patch. The installer runs its normal flow
untouched, then `applySetOverrides` upserts each value into the
relevant config files:

- `_bmad/config.toml` (team scope, default)
- `_bmad/config.user.toml` (user scope, when the key already lives
  there — so user-scope keys like `core.user_name` and
  `bmm.user_skill_level` keep their proper file)
- `_bmad/<module>/config.yaml` (so declared schema keys carry forward
  via the existingValue path on the next install)

A module without `_bmad/<module>/config.yaml` is skipped silently —
no orphan sections in `config.toml` for uninstalled modules.

## Tradeoffs documented in install-bmad.md

- **Verbatim values.** `--set bmm.project_knowledge=research` writes
  `"research"`, not `"{project-root}/research"`. The `result:`
  template is not applied. Pass it explicitly if you want the
  rendered form: `--set bmm.project_knowledge='{project-root}/research'`.
- **Carry-forward, declared keys.** Free — values land in the
  per-module `config.yaml`, so the next install reads them as
  `existingValue` and they become the prompt default (accepted under
  `--yes`).
- **Carry-forward, undeclared keys.** Best-effort. The value lives in
  `config.toml` for the current install but won't be re-emitted on
  the next install (the manifest writer's schema-strict partition
  drops unknown keys). Re-pass `--set` if needed.
- **No "key not in schema" validation.** Whatever you assert is
  written.

## Security

Prototype-pollution defense: `--set __proto__.x=1` would otherwise
reach `overrides.__proto__[x] = 1` and pollute `Object.prototype`,
cascading into every plain-object lookup in the process. Defense-in-
depth via parser-level reserved-name rejection (`__proto__`,
`prototype`, `constructor`) AND `Object.create(null)` for the
override maps. Verified the attack reproduces without the guard and
is blocked with it.

## What's intentionally NOT integrated

`--set` deliberately does not touch the prompt / template / schema
collection flow. No pre-seeding answers, no question filtering, no
function-default evaluation, no schema-strict partition exemption.
That earlier integration approach was tried and scrapped: it
spread state across `Config`, `OfficialModules`,
`manifest-generator`, both collection helpers, and required parallel
plumbing for quick-update — every bug fix touched a different layer.
The post-install patch model covers the actual user need (set a
config value from CI) in ~330 lines of `set-overrides.js` without
the schema gymnastics.

## Files

- `tools/installer/set-overrides.js` (new): parser, prototype-pollution
  guard, `applySetOverrides` post-install patch, `upsertTomlKey` /
  `tomlString` / `tomlHasKey` line-based TOML helpers
- `tools/installer/list-options.js` (new): module.yaml discovery +
  formatter for `--list-options`
- `tools/installer/commands/install.js`: register `--set` /
  `--list-options` flags, early validation, `--list-options` exit-code
  handling (await `stream.write` callback then `process.exitCode` to
  avoid truncating piped output), thread `setOverrides` through to
  quick-update
- `tools/installer/core/config.js`: carry `setOverrides` field for
  the post-install patch step
- `tools/installer/core/installer.js`: invoke `applySetOverrides`
  after `writeCentralConfig` (covers regular install + quick-update
  via the shared install path)
- `tools/installer/ui.js`: parse `--set` for early validation, warn
  about overrides targeting modules not in `--modules`, drop those
  entries before threading
- `docs/how-to/install-bmad.md`, `README.md`: usage, routing rules,
  carry-forward semantics, tradeoffs

## Test plan

Suite 44 (24 cases): parser, prototype-pollution guard, `tomlString`
escaping, `upsertTomlKey` across insert/replace/missing-section/
empty-file/preserved-newline cases, `applySetOverrides` happy path +
uninstalled-module skip + missing-user-toml-creation + empty-input
no-op, `discoverOfficialModuleYamls` / `formatOptionsList` sanity
(hermetic via `BMAD_EXTERNAL_MODULES_CACHE` temp dir). 355 total
passing. Lint + prettier + markdownlint clean.

E2E smoke verified across:

- [x] `--set` writes correct files (team toml / user toml / per-module
  yaml) for declared and undeclared keys
- [x] Quick-update without `--set` carries forward declared keys via
  `existingValue` path
- [x] Quick-update WITH `--set` applies cleanly (uniform behavior
  across action types)
- [x] `--set` for unselected module: warned, no orphan section
- [x] Prototype pollution: rejected with non-zero exit
- [x] `--list-options bmm` exit 0 with full output through pipe;
  `--list-options nope` exit 1
- [x] Translated docs (`docs/{cs,fr,vi-vn,zh-cn}/`) intentionally not
  touched — they'll lag behind English until the translation pipeline
  runs
2026-04-28 19:52:46 -05:00
.augment chore(tools): align Augment config with skill-validator as single source of truth 2026-03-15 17:41:54 -06:00
.claude-plugin chore: remove SM agent (Bob) and migrate to Developer agent (#2186) 2026-04-02 12:25:24 -07:00
.github fix(publish): advance @next dist-tag after stable release (#2320) 2026-04-26 10:30:41 -05:00
.husky docs: fix docs build (#1336) 2026-01-15 16:44:14 -06:00
.vscode excorcise the deamons part 1 - remove dead uneeed artifacts and items no longer being supported beyond beta of the BMM or core - but could return later as a module 2026-02-04 15:44:25 -06:00
docs feat(installer): add --set and --list-options for non-interactive config 2026-04-28 19:52:46 -05:00
src fix: align bmad-help.csv with documented schema and clean up source rows (#2278) (#2349) 2026-04-27 23:54:21 -05:00
test feat(installer): add --set and --list-options for non-interactive config 2026-04-28 19:52:46 -05:00
tools feat(installer): add --set and --list-options for non-interactive config 2026-04-28 19:52:46 -05:00
website docs: remove Bob from workflow map diagrams 2026-04-12 23:12:32 -05:00
.coderabbit.yaml feat(coderabbit): add docs-staleness check for all src/ changes 2026-03-17 15:30:32 -06:00
.gitignore feat(skills): TOML-based agent and workflow customization (#2284) 2026-04-19 19:30:29 -05:00
.markdownlint-cli2.yaml refactor: replace 'execute' with 'Read fully and follow:' in workflow prompts (#1387) 2026-01-23 22:25:19 -06:00
.npmignore chore: remove dead agent schema validation infrastructure 2026-03-17 20:20:12 -06:00
.npmrc fix: resolve npm install peer dependency issues 2026-01-30 15:37:42 +00:00
.nvmrc feat: v6.0.0-alpha.0 - the future is now 2025-09-28 23:17:07 -05:00
.prettierignore chore: ignore .junie/ IDE integration folder (#1719) 2026-02-20 20:33:23 -06:00
AGENTS.md feat(tools): add deterministic skill validator for CI 2026-03-17 23:49:01 -06:00
CHANGELOG.md docs: add v6.5.0 changelog entry (#2314) 2026-04-25 21:24:43 -05:00
CNAME Add CNAME file 2026-01-07 18:18:12 +08:00
CONTRIBUTING.md docs: add contribution guardrails for unsolicited PRs (#2207) 2026-04-04 12:13:06 -05:00
CONTRIBUTORS.md project licence, contribution and discord noise updates, along with improved simplified issue templates 2026-01-18 17:03:47 -06:00
LICENSE project licence, contribution and discord noise updates, along with improved simplified issue templates 2026-01-18 17:03:47 -06:00
README.md feat(installer): add --set and --list-options for non-interactive config 2026-04-28 19:52:46 -05:00
README_CN.md chore: remove SM agent (Bob) and migrate to Developer agent (#2186) 2026-04-02 12:25:24 -07:00
README_VN.md docs(vi-vn): sync translations and add missing checkpoint-preview page (#2222) 2026-04-09 20:49:18 -07:00
SECURITY.md Enhance security policy documentation (#1312) 2026-01-14 16:27:52 -06:00
TRADEMARK.md project licence, contribution and discord noise updates, along with improved simplified issue templates 2026-01-18 17:03:47 -06:00
Wordmark.png feat: update website header with new BMAD Method branding (#1352) 2026-01-18 00:25:12 -06:00
banner-bmad-method.png feat: update website header with new BMAD Method branding (#1352) 2026-01-18 00:25:12 -06:00
eslint.config.mjs feat(skills): TOML-based agent and workflow customization (#2284) 2026-04-19 19:30:29 -05:00
package-lock.json chore(release): v6.5.0 [skip ci] 2026-04-26 02:25:31 +00:00
package.json chore(release): v6.5.0 [skip ci] 2026-04-26 02:25:31 +00:00
prettier.config.mjs feat: v6.0.0-alpha.0 - the future is now 2025-09-28 23:17:07 -05:00
removals.txt fix(installer): remove pre-v6.2.0 wrapper skills on update (closes #2309) (#2315) 2026-04-25 22:08:44 -05:00

README.md

BMad Method

Version License: MIT Node.js Version Python Version uv Discord

Build More Architect Dreams — An AI-driven agile development module for the BMad Method Module Ecosystem, the best and most comprehensive Agile AI Driven Development framework that has true scale-adaptive intelligence that adjusts from bug fixes to enterprise systems.

100% free and open source. No paywalls. No gated content. No gated Discord. We believe in empowering everyone, not just those who can pay for a gated community or courses.

Why the BMad Method?

Traditional AI tools do the thinking for you, producing average results. BMad agents and facilitated workflows act as expert collaborators who guide you through a structured process to bring out your best thinking in partnership with the AI.

  • AI Intelligent Help — Invoke the bmad-help skill anytime for guidance on what's next
  • Scale-Domain-Adaptive — Automatically adjusts planning depth based on project complexity
  • Structured Workflows — Grounded in agile best practices across analysis, planning, architecture, and implementation
  • Specialized Agents — 12+ domain experts (PM, Architect, Developer, UX, and more)
  • Party Mode — Bring multiple agent personas into one session to collaborate and discuss
  • Complete Lifecycle — From brainstorming to deployment

Learn more at docs.bmad-method.org


🚀 What's Next for BMad?

V6 is here and we're just getting started! The BMad Method is evolving rapidly with optimizations including Cross Platform Agent Team and Sub Agent inclusion, Skills Architecture, BMad Builder v1, Dev Loop Automation, and so much more in the works.

📍 Check out the complete Roadmap →


Quick Start

Prerequisites: Node.js v20+ · Python 3.10+ · uv

npx bmad-method install

Want the newest prerelease build? Use npx bmad-method@next install. Expect higher churn than the default install.

Follow the installer prompts, then open your AI IDE (Claude Code, Cursor, etc.) in your project folder.

Non-Interactive Installation (for CI/CD):

npx bmad-method install --directory /path/to/project --modules bmm --tools claude-code --yes

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):

npx bmad-method install --yes \
  --modules bmm --tools claude-code \
  --set bmm.project_knowledge=research \
  --set bmm.user_skill_level=expert

See all installation options

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?

Modules

BMad Method extends with official modules for specialized domains. Available during installation or anytime after.

Module Purpose
BMad Method (BMM) Core framework with 34+ workflows
BMad Builder (BMB) Create custom BMad agents and workflows
Test Architect (TEA) Risk-based test strategy and automation
Game Dev Studio (BMGD) Game development workflows (Unity, Unreal, Godot)
Creative Intelligence Suite (CIS) Innovation, brainstorming, design thinking

Documentation

BMad Method Docs Site — Tutorials, guides, concepts, and reference

Quick links:

Community

Support BMad

BMad is free for everyone and always will be. Star this repo, buy me a coffee, or email contact@bmadcode.com for corporate sponsorship.

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

MIT License — see LICENSE for details.


BMad and BMAD-METHOD are trademarks of BMad Code, LLC. See TRADEMARK.md for details.

Contributors

See CONTRIBUTORS.md for contributor information.