Browse the documentation

doctor

A read-only health report on an installation: manifest, ownership inventory, modified files, instruction files, runtimes. Flags, every check code, the JSON report, real output and exit codes.

On this page
  1. Synopsis
  2. Exit codes
  3. Real output
  4. What it checks
  5. The JSON report
  6. Examples

doctor answers one question: is this installation intact? It compares what is on disk with what the manifest says BMAD+ installed, checks the configuration and instruction files, looks at the runtimes the packs need, and prints what it found. It never writes to the project and never contacts npm; to learn whether a newer release exists, use update-check. Run it after an install, after an update, or when something behaves oddly.

Synopsis

In your project terminal
npx bmad-plus doctor [-d <path>] [-l <code>] [--json] [--verify-python]

Options of doctor
FlagArgumentWhat it does
-d, --directory <path>folderProject to check (default: current folder).
-l, --lang <code>language codeAccepted for consistency; the report is always in English.
--json-Print the whole report as JSON instead of the human summary.
--verify-python-Also run the installed Python interpreters to check their version and imports. Without it, doctor runs no interpreter. It still never provisions or repairs anything.

Exit codes

Exit codes of doctor
CodeMeaning
0No check is an error. Warnings alone do not fail the command.
1At least one check is an error (for instance a missing required file, an unknown pack, a stale lock, a Node.js version below the minimum).

Real output

Recorded right after the install shown on the install page (Core and Design, 0.23.0). The human report lists only what is not a plain pass, plus the manifest line, then a summary box. “87/87 checks passed” counts every check, including the passing ones that are not listed.

doctor after a clean install
npx bmad-plus doctor --directory .\demo-app
T   BMAD+ Doctor v0.23.0
|
*  Manifest found: v0.23.0
|
o  BMAD+ Health Report ---------------------------------------------------------------------------------+
|                                                                                                       |
|  87/87 checks passed                                                                                  |
|  0 error(s), 0 warning(s)                                                                             |
|  Installed: v0.23.0 | Executing CLI: v0.23.0                                                          |
|  Ownership inventory: complete                                                                        |
|  Integrations use host-managed execution; host capabilities were not probed.                          |
|  Optional Nexus process execution requires an explicit plan; executable availability was not probed.  |
|                                                                                                       |
+-------------------------------------------------------------------------------------------------------+
|
•  Published version is not checked here. Use `bmad-plus update-check --json` to check npm.
|
—  Installation checks passed.

Output captured from a real run. Source: Captured during the 0.23.0 acceptance run, 2026-10-18 (step 2; npm notice lines removed)

What it checks

Each check has a code, a status (pass, warning or error), a message and often a path. The codes below are the ones the command can emit.

Check codes
CodeStatusMeaning and what to do
installation.missingerrorNo manifest: BMAD+ is not installed in this folder. Check the folder or install.
manifest.unreadable, manifest.invaliderrorThe manifest cannot be read or lacks required fields. Restore it, or run install again.
manifest.validpassManifest found, with its version.
lock.activewarningAn install or update holds the lock right now (pid and start time shown). Wait.
lock.staleerrorA lock older than 60 minutes, unreadable for over a minute, or whose process is dead. If nothing runs, delete .bmad/update.lock.
lock.unreadablewarningThe lock could not be inspected.
version.clipass / warningInstalled and running versions match, or not. A mismatch is the cue to run update.
pack.unknown, pack.core-missingerrorThe manifest lists a pack this package does not know, or lacks Core.
studio.resourcespass / errorWith Dev Studio: its workflows and resources resolve (or why not).
shield.ai-registerpass / warningWith Shield: the AI processing register covers the AI integrations found. Never an error.
file.unchangedpassA managed file matches its recorded hash.
file.modifiedwarningA managed file was changed locally. Review before updating; update will preserve it.
file.unownedwarningA required file exists with no recorded hash.
file.missing, file.unreadableerrorA required file is absent or unreadable. Re-run install to restore it.
inventory.complete, .incomplete, .legacy, .invalid, inventory.omissionspass / warning / errorState of the ownership inventory. legacy (no inventory) and incomplete limit what update --auto may do; invalid is an error.
config.present, config.missing, config.unreadablepass / errorIs _bmad/config.yaml there?
integrations.legacy, integrations.invalid, adapters.invalidwarning / errorThe recorded tool selection or adapter hashes are missing or invalid.
adapter.unchanged, .adopted, .unowned, .modified, .missing, .unreadablepass / warning / errorState of AGENTS.md and each selected tool file: untouched; replaced by a repository-generated file; not recognised as BMAD+’s; edited by you; absent; unreadable.
runtime.nodepass / errorNode.js is at least the minimum (20.0.0).
runtime.requirementspass / errorFor Python packs: the requirements file ships in the package.
runtime.python-unverified, runtime.python-probewarning / passPython environment state; with --verify-python, the interpreter version and imports were actually run.
package.unreadableerrorThe executing package cannot be inspected.

The JSON report

With --json the output is a single JSON document and nothing else. Its top-level keys are schemaVersion, projectDir, status (ok, warning or error), versions (installed, cli, and published, always null because doctor never queries npm), inventory (status, trackedFiles), packs, integrations, processExecution, runtimes, checks (the full list, passes included) and summary (passed, warnings, errors). The exit code follows summary.errors.

Note What doctor does not know

It does not probe your assistant: “Integrations use host-managed execution; host capabilities were not probed.” A green report means the files are intact, not that your AI tool has loaded them.

Examples

Gate a CI job on the result
npx bmad-plus doctor --json > doctor.json || echo "installation needs attention"

Check Python imports too
npx bmad-plus doctor --verify-python

See also