What to commit and what to keep local, which settings to agree on, one adapter per teammate on a shared spine, a safe update policy, CI gates and onboarding.
BMAD+ lives in the project, so a team shares it the way it shares any other part of the repository: by deciding what is versioned, what is configured the same way for everyone and who changes it. This page lists those decisions and the facts that make each one safe: ownership hashes, preserved edits, an update policy per project, adapters generated from one spine. It is for tech leads and for anyone who has to onboard colleagues who use different AI tools. Where a choice is a matter of taste rather than a fact, the text says so.
Generated and copied by the installer; hashed in the manifest.
Committing them gives every teammate the same instructions without running the installer. Not committing them means each person installs the same version. Both work; pick one.
_bmad/config.yaml
Your settings: language, execution mode, checkpoints, uat, swarm. Written once and merged, never overwritten.
The natural file to share, since it holds the team’s conventions.
_bmad/update-policy.json
Written by update-policy when you change the policy.
Share it if the team wants one policy; it names the allowed version range.
_bmad/review-rules.yaml and its documents
Project review rules.
Share it: a findings file answers exactly one rule set, so the team should review against the same one.
_bmad/.bmad-plus-install.json
The manifest: version, packs, tools, a SHA-256 for each installed file.
It must stay consistent with the files it describes, so version it together with them or neither.
.agents/memory/
Decisions, lessons, patterns, context, handoffs.
Version it if the memory is the team’s. Install and update never overwrite these files.
.agents/memory/.brain-link
The absolute path of the brain linked on one machine.
All adapters are generated from the same registry as AGENTS.md, so a teammate on Cursor and one on Claude Code get the same roster and rules; only the file format differs. --tools takes several ids at once (--tools claude-code,cursor), all, or none. The installer detects tools from their folders (.claude/, .gemini/, .cursor/, .codex/, .opencode/, .aider.conf.yml) when you do not pass --tools; --yes with no detected tool writes no adapter. A BMAD+ adapter that you edited is preserved. An instruction file you wrote yourself is preserved by an interactive install and by update; install --yes first copies it to <file>.bak and then replaces it. Legacy installer files are backed up as <file>.bak.
Adapters
Tool id
File written
Detected from
claude-code
CLAUDE.md
a .claude/ folder
gemini-cli
GEMINI.md
a .gemini/ folder
antigravity
GEMINI.md (shared with gemini-cli)
a .gemini/antigravity/ folder
cursor
.cursor/rules/bmad-plus.mdc (always applied)
a .cursor/ folder
codex-cli
.codex/AGENTS.md
a .codex/ folder
opencode
.opencode/AGENTS.md
a .opencode/ folder
aider
CONVENTIONS.md; add read: CONVENTIONS.md to .aider.conf.yml or run /read CONVENTIONS.md in Aider
an .aider.conf.yml file
A teammate who adds a tool later runs the installer again with that tool: the run keeps what is already installed and adds the missing adapter. --tools none installs agents, skills and memory without touching any tool configuration, which is the right option for a project whose CLAUDE.md or AGENTS.md is maintained by hand.
The default is notification: the generated instructions ask the assistant to run update-check once per session and to report. Nothing is applied. For a team, the practical pattern is one person (or one CI job) who decides when to move, applies update, reviews the report and commits; the others get the result with their next pull. If the team wants updates to flow without a human, auto needs an explicit semver range and several guards: the registry result must be fresh, the managed files unchanged, the installation hash inventory complete, the target version exactly the one recorded in the command, and the Node requirement met. Offline, stale or failed lookups never allow an automatic update.
Output captured from a real run. Source: Replayed on a test server on 2026-10-18 with the 0.23.0 source (tools/cli/bmad-plus-cli.js) in a throwaway Git project
off stops every lookup. notify (default) reports. auto needs --range; add --allow-prerelease or --stable-only to control prereleases. The registry is fixed to https://registry.npmjs.org/.
An update preserves files changed since their recorded hash and reports them; a conflict blocks the automatic path. Files a new version no longer ships are removed after a restorable backup. Each applied update writes .bmad/updates/<receipt-id>/ with receipt.json and backups/; update --restore <receipt-id> --yes returns to it and refuses to overwrite later local edits.
An installation older than 0.13 (without file hashes) cannot be updated automatically; one explicit migration, npx --yes bmad-plus@0.23.1 update --yes, backs up what it replaces.
install never changes the installed version: a downgrade is refused and an upgrade goes through update. If two teammates installed different versions, the one with the older version runs update.
A lock .bmad/update.lock protects the project during an update (considered stale after 60 minutes or when its owner is dead); doctor reports a lock that is not its own.
BMAD+ installs no Git hook and no lifecycle hook in your project, because an instruction can be skipped. What a team can enforce, it enforces with its own CI, using exit codes that are designed for it.
Checks a team can wire into CI
Check
Command
Fails when
Installation integrity
bmad-plus doctor --json
Exit 1 on any error (a missing required file, for instance). Modified files are warnings.
Update awareness
bmad-plus update-check --json
Exit 1 for an invalid runtime, installation or policy; an unreachable registry is unknown, not a failure.
Review gate on pull requests
The recipes of docs/recipes/ci-review/
The review is incomplete (exit 2) or has open findings (exit 1).
A release has an accepted human run
uat-release-gate.mjs from the uat skill
No finished run, another revision, an unclassified failure, an unconfirmed write (exits 1 to 3; 4 means the gate could not run).
A version has a recipe at all
uat-spec-present.mjs
No recipe names the version in package.json.
A team intake file is valid
bmad-plus intake check FILE
Exit 1 with every problem listed.
Shield evidence
bmad-plus assurance verify and ai-register check
assurance verify exits 1 when a claim is unsupported; ai-register check only warns.
Open AGENTS.md for the roster and the team’s rules, then type bmad-help in the chat. Read the settings in _bmad/config.yaml so you know which checkpoints will stop and ask you.
04
Link the memory to your machine
With the Memory pack, install detects a brain on your machine (BMAD_PLUS_BRAIN, a _brain/ folder in a parent directory, ~/.bmad-plus/brain/, then a non-empty ~/.claude/memory/) and records it in .agents/memory/.brain-link. That file is yours alone; the project memory files around it are the team’s.
Approvals: if the team wants a person to approve architecture and delivery, keep require_approval on those checkpoints. Autopilot with auto everywhere is a deliberate choice, not a default.
Budget: a swarm larger than swarm.budget is refused until a human says yes; paid media generation is asked for every time. Nobody should pass --approved on behalf of someone else.
OSINT: researching a named person requires a recorded purpose and legal basis, per run. In a team this means a person who owns that decision. See the trust page.
Shield: the reports are AI-generated and carry a "not legal advice" marking; a compliance decision stays with a qualified person.
Secrets: API keys belong in the environment of each person or of CI, never in the repository. The review redaction floor and the acceptance-note redaction mask common credential shapes; they do not replace not committing secrets.
Ownership: every file BMAD+ wrote is hashed. A file a teammate edited is kept by update and uninstall and reported by doctor as modified (a warning), so local customisation is visible, not silently overwritten.
Use when a new tech lead takes over, or before onboarding a colleague. The assistant only reads; nothing is changed.
In your AI assistant
Read _bmad/config.yaml, _bmad/update-policy.json if it exists, _bmad/review-rules.yaml if it exists and the manifest _bmad/.bmad-plus-install.json. Summarise in a table: installed version, packs, tools, execution mode, each checkpoint behaviour, uat mode, swarm budget, update policy mode and range. Then list what a new teammate would need to do to get the same setup, and flag any setting that looks inconsistent with the others. Change nothing.
What you should get A table of the real values read from the files, an onboarding list (install with the same packs, add your tool, read the spine) and a short list of inconsistencies, for example execution_mode: autopilot with every checkpoint on auto. No file is modified.