Brigade 0.18.0 draws a line between the commands you use every day and the operator suite that only some machines run. It also stops writing files you did not ask for at repo depth, and gives brigade run its own computed ground truth so synthesis works from facts instead of worker narration.
Two changes need a one-time action on upgrade. Read the migration notes below before you pull it.
Core and extras
The CLI surface is now split. 24 core groups (init, mcp, tools, skills, handoff, ingest, memory, work, outcome, operator, run, roster, runs, daily, security, scrub, doctor, status, add, stations, profiles, reconfigure, completions, extras) register the way they always have. 18 operator-suite groups (release, center, repos, research, roadmap, friction, chat, context, projects, learn, runbook, dogfood, pantry, notifications, budgets, untrusted, and the two fragments groups) now register only when extras are on.
Turn them on once per machine with brigade extras on, per invocation with BRIGADE_EXTRAS=1, or check the state with brigade extras status. A disabled extras command exits 2 with that guidance instead of a parse error, so nothing fails silently. brigade work phases moved behind the same wall.
Minimal repo installs
brigade init and operator quickstart at repo depth now write AGENTS.md and SAFETY_RULES.md plus gitignored .brigade/ state, and stop there. The full kit (rules/, the inactive hooks/pre-push, INSTALL_FOR_AGENTS.md, and the four default tool packs) moved behind --full or the repo-extras include. Workspace-depth installs are unchanged and still get the full kitchen.
Existing repos are untouched by the upgrade. Re-running quickstart only adds missing files and never overwrites.
brigade run gets ground truth
brigade run artifacts now carry facts Brigade computed, not the worker’s account of them. worker-results.json and synthesis.json include a ground_truth block: git diff --stat, the changed and untracked file lists, a changes.patch reference, and verify exit codes read from the actual .brigade/work/verify-runs receipts. The synthesis prompt gets a compact facts section, so the chef synthesizes against what happened.
When .graphtrail/graphtrail.db exists, a run now prepends a fail-open, read-only GraphTrail code-graph brief to the orchestration and worker prompts. Disable it with --no-code-graph; it records code_graph_brief metadata in run.json either way.
Fixes worth calling out
doctor’s memory-card budget check now honors.brigade/memory-care.toml(max_card_bytes,exclude_paths), matchingbrigade memory care. It used a hardcoded 8000-byte limit and scanned excluded directories, so the two subsystems disagreed. The default card budget is now 12000, single-sourced.brigade run --worktreecould write a corruptchanges.patchwhen trailing-whitespace trimming dropped a diff’s final blank context line. Patches are now byte-faithful, validated withgit apply --check --reversebefore a run is declared done, and a failed validation keeps the worktree as the recoverable copy and exits nonzero.brigade mcp syncno longer grows a.vscode/directory unasked. VS Code is included only when the repo already has one, or you pass--harness vscode.
Migration
Upgrading from 0.17.x, do these once:
- If any script, cron, or habit calls one of the 18 extras groups, run
brigade extras onon that machine (or exportBRIGADE_EXTRAS=1) before you upgrade. - If your setup expects
rules/,hooks/pre-push,INSTALL_FOR_AGENTS.md, or the default tool packs at repo depth, pass--fulloninitandoperator quickstart, or add therepo-extrasinclude.
Install or upgrade:
pipx install brigade-cli
The full changelog lives in the repo.