bro

Configuration

bro.config.ts — typed config, validated sections, safe fallbacks.

bro.config.ts (preferred) or bro.config.json in the repo root. Everything is optional — missing keys and wrong-type values fall back to per-section defaults instead of crashing. (A syntactically broken file is different — bro setup will tell you to fix it.)

// bro.config.ts — plain default export; every key optional
export default {
  personality: 'terse',
  stores: ['jsonl', 'beads'],
  debt: { dir: '.agents/review-debt' },
  sync: { ref: 'refs/bro/data', remote: 'origin', beads: true },
  act: { ignoreChecks: ['kilo'], maxRounds: 3 },
  plugins: ['./my-plugin.ts'],
}

The config file is written per-clone by bro setup and gitignored on purpose — store choices are machine-local.

Sections

stores

Artifact backends. jsonl is the evidence ledger — always written. beads is on by default (auto-inits .beads stealth when missing — announced on stderr, skipped on dry/list-only/empty-ledger runs, nothing lands in git) and projects debt into bd. gitref pushes artifact dirs to the data ref. Explicit "stores": ["jsonl"] is the beads opt-out.

debt

KeyDefaultWhat
dir.agents/review-debtLedger directory (BRO_DEBT_DIR env wins)

sync

KeyDefaultWhat
refrefs/bro/dataData ref — outside refs/heads, never a branch
remoteoriginRemote the data ref pushes/pulls
beadstrueAlso run bd sync — beads state (drill frames, wtfs, retros) has its own transport; false syncs only bro artifacts

act

KeyDefaultWhat
ignoreChecks[]Check-name substrings excluded from the exit gate — for chronically flaky external reviewers
maxRounds3Inline fix-round cap. Past it, remaining threads must defer to debt beads. 0 disables

plugins

External plugin specifiers — relative paths (contained to the repo) or package names, imported at startup. Each module's default export must be a BroPlugin. See Plugins.

On this page