All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Removed the opt-in
brigade run --deliberategrounded-deliberation mode (planner,brigade.deliberation.v1artifact emission, and related runs show/watch/resume surfaces). Recoverable from git history; see #442 / #471.
- Imported
stations/notifyGo module into the Brigade monorepo. Unified release manifests now enumerate five native components (25 platform assets pluscomponent-manifest-v1.jsonandchecksums.txt) with managed resolution throughbrigade setup. - Beta pre-pin compatibility: beta installs the CI-green
mainBrigade wheel but reuses the last verified stable component manifest;agent-notifyis omitted from setup until a stable manifest publishes its assets. Stable validation stays strict. - Public update-channel and component-manifest policy docs.
- Agent Pantry compatibility probe:
brigade pantryrequiresagentpantry version --json>=0.5.0before invoking doctor, status, or inventory surfaces. Pantry remains an external Go binary. - Passive update notice: after a successful command, brigade prints a one-line
stderr notice (at most once per 24h) when a newer release is on PyPI.
Anonymous, TTY-only, skipped in CI; disable with
BRIGADE_NO_UPDATE_CHECK=1. brigade mcp sync --user-scope(andbrigade operator sync-mcp --user-scope) no longer writes stdio MCP servers into a user-wide client config silently: interactive runs show the destination, stdio count, and the servers-times-sessions process formula and ask for confirmation, non-interactive and--jsonruns require--allow-global-stdio, and plan/sync items now carrytransportandscope. (#349)
brigade runno longer dies on the first unparsable plan when the chef's final message is prose. The corrective plan turn now restates the output contract ("reply with the JSON plan object and nothing else") alongside the parse error, and orchestrator seats that launch in a harness plan mode (claude, cursor, grok under read-only) are told not to write a plan, design, or context file: the failed write is what let user-level hooks replace the plan JSON with hook rebuttal prose. Retries stay bounded at one correction. (#518)- Agent Pantry version parsing stays non-throwing and bounded for arbitrarily
long numeric segments: the parser accepts ASCII-numeric semver triples only,
enforces a conservative per-segment digit bound, catches
int()conversionValueError, and surfaces the fixedinvalid-versionlabel for oversized or non-ASCII-digit input without ever echoing raw content. Added huge-segment and non-ASCII-digit regressions covering observed/detail and adjacent stdout. docs/component-manifest-policy.mdno longer presents the five-component / 25-asset contract as a current stable release. It is now stated as the future first stable manifest contract afteragent-notifypublication, with current bundledagent-notifyassets empty/unpublished and no stable release claimed.
brigade evidencenow owns crawler runtime selection: it resolves the crawler binary, runs a read-only compatibility check before delegating to MiseLedger, refuses an incompatible runtime, persists per-source last-run, and makes evidence doctor/status health the worst of MiseLedger health, crawler compatibility, and the latest crawl - so aNO_PENDINGqueue no longer masks a failed producer. (#404)brigade roster doctorand worker dispatch preflightcloudflare-ai-gateway/seats forCLOUDFLARE_ACCOUNT_ID/CLOUDFLARE_GATEWAY_ID, failing before the child launches and classifying the failure as provider configuration. (#394)brigade doctorwarns when more than one enabled producer can write the same memory-care queue artifact, with a read-only migration plan. (#403)
- Install/update reconciliation now detects and removes the obsolete standalone
brigade-work-loop.pyhook (anchored to executable position so unrelated hooks are never touched) and reports a stale legacy registration with the exact repair command, preventing the legacy hook's unbounded untracked-file read from OOMing a session. (#397) - Evidence ledger import skips an oversized JSONL line instead of aborting the whole import. (#420)
- The
solo-misecommand alias, deprecated since the Brigade rename. Usebrigade. The.solo-miseworkspace-directory read fallback is unaffected. (#421)
0.25.0 - 2026-07-20
- Native component releases now publish one verified asset set for
brigade setup, andbrigade updatehas explicitstableandbetaupdate channels. (#364 / #398) - The Phase 4A policy documents migration and archive gates for GraphTrail, GraphTrail MCP, MiseLedger, and SessionFind. The compatibility window is active as of the v0.25.0 publication, and the policy does not authorize archival. (#399)
- GraphTrail's direct
miseledgerCargo feature,graphtrail context --evidence, andgraphtrail linksare deprecated. They remain functional for at least two minor GraphTrail releases or 90 days after the first GraphTrail release containing this deprecation, whichever is longer. Usebrigade code sync,brigade code context,brigade code impact,brigade evidence crawl,brigade evidence search, andbrigade evidence doctor. (#392)
- In-house repository and release-input guard policies preserve only approved agent co-author trailers; outbound public policies still strip them. (#386 / #396)
- Concurrent sessions no longer mistake another session's write for their own, so completed closeout does not re-arm. (#380 / #395)
- Published-artifact acceptance recognizes SessionFind command-list help output. (#393)
0.24.0 - 2026-07-20
brigade version --componentsreports managed native component installation state, and Windows native acceptance now installs and exercises the supported component paths. (#374 / #375)- GraphTrail v0.4.0 and MiseLedger v0.6.0 source is available under
engines/; their standalone repositories and release pipelines remain unchanged until Phase 4. (#379 / #381) - The
brigade.code-reference.v1schema and canonical vectors define the exact code-reference contract for evidence lookups before lexical fallback. (#361 / PR #389) - Executable
brigade code sync|context|impactandbrigade evidence crawl|search|doctorare available;brigade searchkeeps tested aliases for two minor releases or 90 days, whichever is longer. (#362 / PR #390)
brigade runterminalizes interrupted and stale runs, refuses read-only execution for seats without that capability, and rejects empty tasks. (#382 / #383 / #384)
0.23.3 - 2026-07-19
- Post-install smoke now accepts sessionfind v0.6.0's released command-list
--helpshape while retaining legacy usage-text compatibility, so clean Windows setup succeeds without Go or Cargo. (#355 / PR #372)
0.23.2 - 2026-07-19
- Post-install smoke now accepts sessionfind v0.6.0's successful
--helpexit while retaining absolute managed-path and usage-text validation. (#355 / PR #370)
0.23.1 - 2026-07-19
- Versioned component manifest v1 with pinned GraphTrail platform artifacts and provenance checks. (#353 / PR #367)
brigade setupinstalls those pinned native components transactionally, with dry-run, offline cache, rollback, smoke checks, and state recording. (#355 / PR #368)
- Clarified cross-platform installation documentation. (#351)
0.23.0 - 2026-07-18
- ACPX late permission prompts after a completed
end_turnanswer no longer discard the usable final result. Brigade now preserves the terminal text, stdout/stderr, exit code, session/request metadata, and records a typedtransport_warningwhile marking the workerokwith warning instead of failing the run. Post-permission assistant chunks and permission errors without pre-final text no longer qualify as usable-with-warning. Pre-final permission failures remain failed. Stderr fallback infers late-32072only when the stream has no structured JSON-RPC error; any structured error takes precedence over stderr markers. (#337) proc.run()decodes child stdout and stderr as explicit UTF-8 on every platform, includingTimeoutExpiredpartial output, normalizes missing streams to empty text, preserves recoverable bytes with deterministic UTF-8 replacement, exposes explicit decode status onproc.Result, and surfaces typed harness decode failures throughrun_agentand ACP without counting a model verdict. Provider, output-validation, and chronology failures stay distinct. (#336)- Run control selects a supported local transport per platform: Unix-domain sockets remain the default on Linux and macOS when the socket path fits platform limits; otherwise Brigade falls back to authenticated loopback TCP with an ephemeral port. Run metadata records a typed
control_transportdescriptor for clients, legacycontrol_socketremains for Unix runs, and malformed descriptors fail closed without leaking private paths or owner tokens into public summaries. (#341) - Agent adapter detection and dispatch now share one resolved executable identity on Windows, so doctor can mark a seat runnable without
run_agentlater failing withcommand not foundafter discarding an npm shim. Only native.exefiles and extensionless paths with a verified PE signature are runnable;.cmd,.bat, and unverified npm shims fail before inference withunsupported-command-shimand path-safe remediation to put the package native executable directory earlier on PATH. Launched provider workspace-trust refusals classify asprovider-preflightinstead of command resolution, and remaining process-creation failures no longer leak absolute paths. (#340)
-
brigade repos adoptionseparates configured harness wiring from observed work-loop use across the local repository fleet. It reportsunwired,partial,advisory-only,enforced-idle,active,bypassed, andstalerows, correlates Claude session writes with brief, verify, outcome, GraphTrail, MiseLedger, and handoff evidence, exposes fleet denominators and stable JSON monitor keys, and provides a read-onlyrepairplan. (#317) -
brigade operator checkupaccepts repeatable--surfaceselectors, lists stable surface names with--list-surfaces, and provides anevidence-looppreset for work receipt integrity and outcome capture, GraphTrail health and receipt deltas, and MiseLedger work-receipt import state. Scoped JSON separatesselected_readyfrom unevaluatedoverall_readyand reports selected, skipped, and per-surface elapsed data. The default six-doctor checkup is unchanged. (#298) -
The versioned
harness-contract.v1schema provides safe availability and opt-in version probes with bounded, redacted output. Codex Desktop and Cursor GUI remain external-only, while Antigravity availability resolves only theagyandantigravitycommand candidates without executing vendor commands. (#342) -
Project-scoped Claude Code work-loop hooks can brief once per session and repository, route direct verification commands through Brigade, and check completion receipts after write work.
brigade work hooks install|update|status|uninstallmanages the package without replacing unrelated Claude settings or hooks. -
brigade receipts export miseledger --jsonprints a typedbrigade.miseledger_export_result.v1summary (statusempty,nothing-new,exported, orfailed, plus export/skip/error counts) to stdout while writing JSONL to a named--outfile. A zero-receipt non-JSON export exits 0 with no output.--fleet --jsonruns the same export across enabled[[repo]]entries from.brigade/repos.toml, aggregates rows into one batch, keeps per-repo cursors, imports valid partial output at most once, returnsbrigade.miseledger_fleet_export_result.v1with per-repo counts and privacy-safe errors, and treats aggregate import failure as top-levelfailedwithout incrementingfailed_count. (#254) -
Route as a third outcome-ledger cohort axis (Phase 1: record and surface, no scoring change).
brigade outcome capturestamps a coarse route manifest (followed,path,size, sortedsignals,coverage) and aroute_fingerprinton each record, resolved from the owningbrigade run's route. A bare verify-capture with no owning run is the honest unrouted cohort.brigade outcome explainsplits records into routed-vs-unrouted cohorts with a help-rate, so the ledger can finally answer whether runs that followed a composed route verify greener. Ratchet unchanged; seedocs/design/route-outcome-cohort.md. -
Recency-weighted outcome ranking (context-aware outcomes follow-up):
outcome rank --recency(default half-life 45 days,--recency-half-life DAYSto override) weights the score it sorts by over recency-weighted counts, so a signal's weight halves every half-life and credit earned under a drifted-away environment fades without rewriting the append-only log. It applies to the pooled score by default and the capability-shrunk score with--by-capability; the two flags compose. Off by default, so rank output stays byte-identical. The Wilson bound and shrinkage prior now accept fractional counts; the promotion ratchet never uses recency. See docs/design/context-blind-spot.md.
- Security health and release readiness now honor the latest accepted-risk closeout by exact finding fingerprint, while new or changed findings become active again. Harness-wiring health also follows the configured template-inclusion policy instead of blocking a release on excluded managed-template URLs.
- Route calibration from a task corpus: a docs rewrite (
rewrite the QUICKSTART) no longer takes the full code route (a barerewrite/redesignno longer beats a docs hint), UI wordspanel/dashboard/sidebar/widget/view/tooltipnow pull the UI review lenses, and a migration earns tests the way an auth change does. - Route derivation no longer misroutes conventional-commit code work as docs:
fix(install): ... referencing docsandfeat(skills): ship ... CHANGELOG.mdroute as code, while prose likefix typo in READMEandfix(docs): ...stay docs. A code fix losing its review lenses to a stray "docs" keyword was the one misroute direction that cost coverage.
brigade run --route-signal +auth-surface/~ship-requestedand the same flag onbrigade routeforce-add or suppress a derived route signal when the heuristic is wrong on one task, a middle ground short of--no-route. Forced signals still pull their dependents (a forced+auth-surfaceearns tests and a security review).brigade route --jsonnow carriestriggered_by(the live signal that pulled each stage in) andoverrides, alongside the existing signals/approvals/route/waves/held.- Property tests fuzz the router over 2,000 random catalogs, asserting the invariants a route must always hold (held stages never route, inputs always satisfiable, waves a strict topological order, cycles raise). Plan attempts now record
unknown_covers: acoverstag naming a stage not in the route is surfaced instead of silently ignored. --route-signalrefuses to add or suppress a path signal (code/docs/system): the path is a derive-time decision, and stripping it collapsed the route to a pathless remnant. Found by dogfooding the newlatent-premisesreview skill against the router's own diff.brigade run --wait[=SECONDS]can wait for an active per-target run lock with a finite timeout; lock conflicts remain fail-fast unless the flag is present.- Explicit adapter execution modes keep read-only and writable CLI flags aligned, reject unsupported direct Cursor Composer plan runs, and point those seats to the reviewed ACP transport. Authenticated ACP checks passed
composer-2.5andgrok-4.5; Brigade does not rewrite the direct-onlygrok-4.5-xhighalias because acpx exposes no separate reasoning flag. - The GraphTrail personalized ranking benchmark corpus adds checked synthetic MRR and latency thresholds; the managed snapshot pins that reviewed revision.
- Internal typed run transport and receipt modules separate adapter execution from artifact writing without changing CLI or artifact contracts.
- Capability-aware outcome scoring (Phase 2 of context-aware outcomes):
outcome rankandoutcome explainresolve the current runtime capability and score each artifact's content-current records earned under it, with a thin cohort pulled toward the pooled rate by deterministic shrinkage(helped + kappa*pooled_rate)/(total + kappa)(one documentedkappa=4.0).outcome rank --by-capabilitysorts by "what worked under my current context" (shrunk estimate, then on-capability sample size, then pooled). Records with no capability fingerprint are grandfathered into the current-capability cohort, so a pre-context ledger's default rank/explain output stays byte-identical until signals under a different capability accumulate. The default sort and the promotion ratchet are unchanged; the ratchet still scores the pooled current-fingerprint cohort only. Recency decay and a regression-attribution guard are tracked as follow-ups in docs/design/context-blind-spot.md. - Runtime-context manifest on outcome records (Phase 1 of context-aware outcomes):
outcome captureandoutcome recordnow stamp each new record with a coarsecontextmanifest (Brigade version, interpreter major.minor, platform, plus best-effort harness and model tagged with their source) and acapability_fingerprintover the low-cardinality vector{harness, model_family, python, platform}.outcome explainsurfaces a per-capability breakdown. This is capture-and-surface only: scores, rank order, and the promotion ratchet are unchanged, and records without a manifest are grandfathered. A content hash cannot see the harness a signal was earned under; this is the data foundation for cohort-aware scoring. Design and three-model rationale in docs/design/context-blind-spot.md. - Transitive card-link fingerprints: a card's
content_fingerprintnow folds in the transitive closure of the cards it[[links]](each reachable card's content hash), so editing a linked card invalidates every card that reaches it, the same logic_tracking idea applied to memory cards. The walk is cycle-safe, deterministic, and tolerant of dead links (a[[missing]]link contributes nothing until that card exists). A card with no resolvable links hashes to exactlysha256(card content), byte-identical to the prior scheme, so existing single-card records are never invalidated. - Skill bundle fingerprints (the ledger's
logic_tracking): a skill'scontent_fingerprintnow covers its whole bundle (every file's path plus content hash, skipping.DS_Storeand theskill.jsonsidecar), so editing a bundled helper invalidates the skill's signals the same way editingSKILL.mddoes. A skill whose only content file isSKILL.mdhashes to exactlysha256(SKILL.md), byte-identical to the prior scheme, so existing single-file records are never invalidated. Cards stay single-file; transitive[[wiki-link]]tracking remains future work. - Fingerprint-aware promotion ratchet:
outcome reconcileandoutcome forknow score the current-fingerprint cohort when deciding, so an edited skill must re-earninstall_min_helpedagainst the text that now ships instead of coasting on signals for text that no longer exists. The decision rules (thresholds, cooldown, forward-only ratchet) are unchanged; only the score fed in narrows, and grandfathering keeps a never-edited artifact's decision, receipt, and output byte-identical to before. Decisions that drop proven-stale evidence carry audit fields (content_fingerprint,lifetime_*,stale_records,legacy_records). - Skill content fingerprints in the outcome ledger (CocoIndex's memo-key idea applied to the ratchet):
outcome captureandoutcome recordstamp each new record with the SHA-256 of the artifact's content (content_fingerprint, the installed copy first and the registry master as fallback), andoutcome rank/outcome explaindefault to a score that drops proven-stale records (fingerprinted against a different revision) while keeping lifetime counts visible, so an edited skill earns its score back instead of inheriting signals for text that no longer exists. Pre-fingerprint records are grandfathered into the current score, so a never-edited skill keeps its score andrankoutput stays byte-identical until a skill is actually edited. The ledger remains append-only and the digest chain unchanged; reconcile/promotion rules are untouched. - Deterministic route brief for
brigade run:route_catalog.derive_signalsmaps the task to signals (auth surface, UI, migration, bug, docs, system, ship request), a pure-function router (brigade/router.py, algorithm adapted from alp-river, MIT) composes the required stages into dependency-ordered parallel waves with while/until holds, and the plan prompt carries the result. Plans tag assignments withcovers; a plan missing required stages gets one corrective retry, and gaps are recorded inplan-attempts.jsonrather than failing the run. The route lands inrun.jsontelemetry. Opt out withbrigade run --no-route; release a held ship stage with--approve-ship. brigade route <task> [--template --changed-path --approve-ship --json]shows the composed route for a task: signals, stages with the signal that pulled each in, parallel waves, and held stages. At run time the route also reads git-changed paths (segment-matched) and an optional--route-templatehint.- Registry skills
latent-premises(unguarded-assumption review across input/contract/environment/ordering/cardinality) andretry-safety(side-effect re-run safety, migration deploy-window lens), vendored from skillet. brigade stations verify <path>checks an explicitly selectedstation.jsonwithout running install commands. On POSIX, read-only surfaces and narrowly checked help/version probes run without a shell in an isolated temporary home, with process-group cleanup, finite positive timeouts, strict JSON parsing, and a 64 KiB combined output ceiling. Windows fails closed before probe creation. JSON results omit raw child output, control characters are removed from details, unreadable manifests return structured exit 2, and managed-catalog drift is advisory unless--check-managedis set.
- Embedded memory-doctor verbs under
brigade memory:status,lint(dead wiki-links),compact(flatten/tighten MEMORY.md), andinit-git. Also available aspython -m brigade.memory_doctor. Handoff promotion stays onbrigade ingest. - Search station CLI:
brigade search status|doctorand review-onlysync planfor GraphTrail plus optional code-search. Shared station health schema (station_health) powers status/doctor/plan across stations. - Tokens station CLI:
brigade tokens status|doctorand review-onlywire planfor Token Glace (current name; TokenJuice is the old name) plus optionalusage-trackermanaged tool under the tokens station. brigade stations discoverfinds localstation.jsoncatalogs (brigade.station.v1) and printsbrigade add <path>next commands.- Plating managed tool under the guard station for optional demo render / leak scan / drift verify helpers.
- Evidence station CLI:
brigade evidence status|doctor, review-onlycrawl planandexport plan, andbrigade add evidencenext-step banner. MiseLedger stays a process-boundary Go binary; crawl/import are operator-run. - Pantry station first-class path:
brigade pantry doctor, status/expiry/setup plans emit explicitnextcommands and product docs links, andbrigade add pantryprints the multi-machine setup sequence. Agent Pantry stays a process-boundary Go sidecar. - MCP adapter for Hermes: user-scoped
~/.hermes/config.yamlundermcp_servers(YAML subset, zero-dep surgical merge). Requires--user-scope. - MCP adapters for Grok CLI: project
.grok/config.toml(grok) and user~/.grok/config.toml(grok-user, requires--user-scope). Same Codex-like[mcp_servers.<name>]TOML shape. (#183)
- Release preflight now bumps and synchronizes every version stamp before the full verification and cold-start gates, and the checklist confirms the published PyPI version after tagging.
- MCP Codex/Grok empty-
argsfingerprint conflicts:to_providerno longer emitsargs: [], matching TOML render which omits empty arrays, so force-sync stays idempotent. (#181) - MCP import of url-only servers no longer lands as invalid
stdio+url; coerce tohttp/sse, including OpenClaw sources with a bogustransport: stdioor a command that is actually a URL. (#182) - Productized GraphTrail ↔ Brigade ↔ MiseLedger dogfood path:
brigade operator checkupreports optional loop health (graph/ledger/ last and meanbrief_hit_ratefrom run receipts) without blocking readiness;brigade add graphtrailinstalls the code-graph tool under the search station; QUICKSTART documents install → checkup → export → rank. - Outcome rank/reconcile surfaces mean
context_eval.brief_hit_rateper skill as a quality signal (secondary sort among equal Wilson scores; install/rollback thresholds still use verified exit codes only). brigade-workskill teaches the full loop: verify with capture → outcome from run → MiseLedger export → evidence brief next time.brigade addaccepts a managed tool name (e.g.graphtrail) as well as a station name, so optional loop sidecars install without pulling every tool on the station.
- Memory station no longer installs the external memory-doctor package. Maintenance is built into brigade-cli; bootstrap-doctor remains an optional sidecar for OpenClaw prefix trim.
- Verified binary pins for runbooks: a runbook can pin each step's binary by sha256,
runbook planshows pin status without executing,runbook runrefuses on mismatch unless--allow-pin-mismatchis passed and records the check (and any override) in the receipt, andbrigade runbook pin <runbook.json>writes pins from the current binaries. Unpinned runbooks behave exactly as before. (#156) - Tamper-evident receipts: verify, runbook, and outcome artifacts carry a sha256
digestsblock binding the receipt payload and every referenced log file;memory/outcome/records.jsonlis hash-chained withprev_digest/digestso an edited or deleted middle record breaks visibly;brigade receipts verifywalks everything and reports OK, MISMATCH, MISSING, or legacy, wired intobrigade doctorandoutcome doctor. Pre-existing artifacts report as legacy, not failures. (#157) - Optional receipt signing:
brigade receipts keygenwrites a local 0600 key, receipts then carry an HMAC-SHA256signatureandkey_idover the receipt digest, andreceipts verifyreports SIGNED-OK, flips SIGNATURE-MISMATCH nonzero, or marks foreign-key signatures unverifiable. Without a key, receipts are byte-identical to before. (#164) - Code-graph delta receipts: verify runs and
brigade runsnapshot the target's GraphTrail database (WAL-safe), re-sync and diff after, and attach a compactcode_graph_deltasummary to the receipt with the full diff as a digest-coveredgraph-delta.jsonsidecar. Snapshots are deleted after the diff with their sha256s kept as attestations. Fail-open everywhere; read-only, dry-run, and--no-code-graphruns skip capture. (#158) - MiseLedger receipt export:
brigade receipts export miseledgeremits onemiseledger.adapter.v1JSONL line per verify-run and run receipt, withraw.hashreusing the receipt digest so re-imports dedupe on content identity.--new-onlyadds a cursor so reruns export only new receipts, and--importpipes the export straight throughmiseledger import adapter, fail-open when the binary is absent and skipping the import subprocess entirely when nothing new was exported. (#159, #162, #165) - Git provenance on receipts: verify receipts and run payloads capture
head,branch, anddirty_filesinside the digest-covered content, and the MiseLedger export emits the GitHub commit URL as a link. (#162) - Delta-aware outcome ledger:
outcome capturecopies the receipt's compact code-graph delta onto the hash-chained record,outcome capture --run-receipt <run-id|latest>captures from run receipts (where code actually changes) with status mapped to signal, andoutcome rank/reconcilereportgraph: N changing / M no-opper subject. Promotion decision rules are unchanged. (#163, #169) - Context evals on run receipts: when a run had a code-graph brief and its delta captured cleanly,
context_evalrecords whether the pre-run context named the files the run actually touched (hits,missed,brief_hit_rate). Absent when there is no brief, no clean delta, or nothing changed. (#167) - Evidence briefs close the receipts-to-context loop:
brigade runcan attach a capped, fail-open brief of recent verified evidence for the target repo pulled from MiseLedger, always framed as untrusted evidence rather than instructions, gated by--no-evidence, and recorded inrun.json.brigade work import context --from-miseledger '<query>'runs the same fetch on demand. (#171) - Workflow sequence scanner: mines run artifacts for recurring command sequences and proposes runbooks (with empty pin stubs) from what operators actually repeat. (#155)
- Detached run control:
brigade run --detach, live watch, and steer/interrupt verbs for app-server runs. (#154) - Vendored content-guard under
brigade.guard, addedpython -m brigade.guardandbrigade guard ..., and packaged the guard policies so scrub works without a separate checkout. (#166)
brigade scrubnow defaults to the embeddedbrigade.guardscanner and policy set. SettingCONTENT_GUARD_DIRstill preserves the old external checkout behavior, includingpython -m content_guardwith that checkout'ssrconPYTHONPATH. (#166)
- Run receipts are written atomically, closing a race where a concurrent reader could catch a partially written
run.json. (#161) - Friction imports use shared import identity keys, so re-imports no longer duplicate items. (#153)
- The technical guide no longer overstates runbook approval semantics. (#152)
- Managed station tools now declare machine-readable surfaces: live doctor JSON, bounded markdown briefs, summary JSON, and verify commands where each tool supports them.
brigade stations list --jsonincludes those surfaces so profiles can show what a station can feed into automation before it is installed. brigade add <path>can discover a localstation.jsonmanifest, report its install command and machine surfaces, and refuse to run manifest install commands unless--installis passed. Built-in station installation by station name still works as before.brigade runnow has a run-level brief budget. Code graph and upstream drift impact briefs are ranked by task type, clipped when needed, and recorded inrun.jsonwith attached brief names, sizes, and truncation flags.brigade runcan attach a fail-open upstream drift impact brief when a repo has a GraphTrail database and pending upstream-drift state. The brief combines drift report excerpts withgraphtrail impactoutput so workers see likely blast radius before editing.brigade memory care scannow validatesevidence:frontmatter for receipt-like paths and MiseLedger evidence refs, reportingmissing-evidence-refissues and evidence reference counts.brigade pantry expiry-alertreports near-expiry Agent Pantry sessions and plans anagent-notifymessage by default. It sends only when--sendis passed.brigade outcome rebuild-status,fork, anddiffadd a drift oracle for outcome receipts. Operators can rebuildstatus.jsonfrom records and compare alternate reconciliation configs without mutating live state.
- The three largest modules are now packages:
repos_cmd(6,417 lines -> 8 files),tools_cmd(6,079 -> 18), andphases_cmd(5,621 -> 7), each behind a facade that preserves the full external surface and monkeypatch semantics; no source file exceeds 2,000 lines. The mypy override list dropped from 45 entries to 21, and type-ratcheting surfaced and fixed four latent defects along the way (a friction-show crash on malformed JSON, a notifications tuple-shape crash, a fleet-health wrong-module read, and a research runner returning an object where callers expected text). - Agent Pantry health now prefers
agentpantry doctor --json, uses the old status JSON as a compatibility fallback, and exposes the newinventory --markdownbrief surface for near-expiry session summaries.
Upgrading from 0.17.x, two breaking changes need one-time action:
- Extras surface. If any script, cron, or habit runs
release,center,repos,research,roadmap,friction,chat,context,projects,learn,runbook,dogfood,pantry,notifications,budgets,untrusted, either fragments group, orwork phases, runbrigade extras ononce per machine before upgrading (or exportBRIGADE_EXTRAS=1in that environment). Disabled commands exit 2 with this guidance rather than failing silently. - Minimal repo installs.
brigade initandoperator quickstartat repo depth now write onlyAGENTS.mdandSAFETY_RULES.mdplus gitignored state. If your setup expectsrules/,hooks/pre-push,INSTALL_FOR_AGENTS.md, or the default tool packs, pass--full(or add therepo-extrasinclude). Existing repos are untouched by the upgrade itself; re-running quickstart on an existing repo only adds missing files and never overwrites.
- README opening reframed: the one-liner now leads with the per-tool config and memory sprawl instead of abstract nouns, "What it does" defines a receipt as the file it is, and a sample verify-receipt ticket shows one. The receipts wording elsewhere in the opening was trimmed so the word appears where it is the feature, not as a refrain.
brigade runartifacts now carry brigade-computed ground truth (issue #125):worker-results.jsonandsynthesis.jsoninclude aground_truthblock withgit diff --stat, the changed and untracked file lists, achanges.patchreference, and verify exit codes parsed from the actual.brigade/work/verify-runsreceipts. The synthesis prompt gets a compact brigade-computed facts section, so the chef synthesizes against facts instead of worker narration.brigade runnow attaches a fail-open GraphTrail code-graph brief when.graphtrail/graphtrail.dbexists. The read-only markdown context is prepended to orchestration and worker prompts, can be disabled with--no-code-graph, and recordscode_graph_briefmetadata inrun.json.
brigade work phases(the phase-execution ledger) moved behind the extras wall with the other operator-suite surface; it stubs out with enable guidance when extras are disabled.- The shared
render.emitrenderer now backs the mechanical output sites intools_cmd,daily_cmd,center_cmd, andphases_cmd(110 sites converted, byte-identical output); sites with interleaved logic or stderr remain on direct prints.
- The CLI surface is now split into core and extras. 18 operator-suite command groups (
release,center,repos,research,roadmap,friction,chat,context,projects,learn,runbook,dogfood,pantry,notifications,budgets,untrusted,openclaw-fragments,hermes-fragments) register only when extras are enabled. Enable once withbrigade extras on, per invocation withBRIGADE_EXTRAS=1, and check withbrigade extras status. A disabled extras command exits 2 with that guidance instead of a parse error. The 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) are unchanged. - Repo-depth installs default to a minimal footprint:
AGENTS.mdandSAFETY_RULES.mdplus gitignored.brigade/state and the selected harness inboxes and skills. The full kit (rules/, the inactivehooks/pre-push,INSTALL_FOR_AGENTS.md, and the four default tool packs projected intotools/andscripts/) moved behind--fullonbrigade initandoperator quickstart, or therepo-extrasinclude. Workspace-depth installs are unchanged and always get the full kitchen.
doctor's memory-card budget check now honors.brigade/memory-care.toml(max_card_bytesandexclude_paths), matchingbrigade memory care. It previously used a hardcoded 8000-byte limit and scanned excluded directories (e.g.archive/,decay/), so the two subsystems disagreed. The default card budget is now 12000 (single-sourced inbudgets.MEMORY_CARD_BUDGET_BYTES), reconciling the prior 8000-vs-12000 default mismatch.brigade run --worktreecould write a corruptchanges.patch: trailing-whitespace trimming dropped a diff's final blank context line, andgit applyrejected the file (issue #124). Patches are now written byte-faithful, validated withgit apply --check --reversebefore the run is declared done, and a failed validation keeps the worktree as the recoverable copy and exits nonzero.- Repo-depth installs no longer point agents at files that do not exist: the generated
AGENTS.md,CLAUDE.md, andINSTALL_FOR_AGENTS.mdreferencedSOUL.md,USER.md,MEMORY.md, andmemory/cards/, none of which a repo-depth install creates. Repo depth now gets repo-scoped variants; manifest file entries accept an optionaldepthkey for per-depth template selection. brigade mcp syncno longer grows a.vscode/directory unasked. VS Code is included only when the repo already has.vscode/; the skip is reported in the plan notes and--harness vscodestill forces it.- An empty tool catalog (
.brigade/tools.tomlwith no[[tool]]entries) is now valid, and default tools that were never projected no longer blockoperator doctorreadiness. Once tracked sources exist undertools/, a missing projection blocks again as drift.
brigade operator quickstart --dry-runprints the file-by-file plan the README always promised: each planned step lists its dir and file writes, including the operator-init artifacts and the MCP catalog path.brigade extras on|off|statusmanages the extras surface via a user-level marker under$XDG_CONFIG_HOME/brigade/extras.
- README: the sample doctor output now matches a fresh install (content-guard reported missing until
brigade add guard), and the no-background-process claim names its one scoped exception (brigade tools runtime start).
- Per-adapter model pinning:
agents.<name>.modelnow pins a model ongrok,opencode,pi,kimi,cursor, andantigravity, in addition toclaudeandcodex. A registry places each adapter's model flag where that CLI expects it, somodel = "grok-composer-2.5-fast"on agrokagent runs Grok Composer under a Brigade run.brigade roster doctorvalidates every pin and fails before dispatch when an adapter can't pin a model or when anollama:ref carries a straymodel =. Ollama cloud models run through the existingollama:<model>ref, e.g.ollama:qwen3-coder-next:cloud.
- The
grok,amp, andcrushwriter adapters invoked a--promptflag that none of those CLIs accept, so every run through them failed at argument parsing. They now use each CLI's real one-shot form:grok -p,amp -x, andcrush run. brigade roster doctorno longer crashes on endpoint-mode agents (endpoint+model, nocli); it reports the endpoint and skips the CLI model-pin check.
- Built-in station profiles with
brigade profiles list/showandbrigade stations list, so new installs can see the default repo, workspace, and fleet station bundles before adding sidecars. - A default
skillsstation that wiresbrigade-workandultra-work-scoutinto selected harnesses duringbrigade init.ultra-work-scoutgives agents a broad Scout workflow for large or ambiguous work, andbrigade add skillsnow points users at the optional Skillet roster instead of pretending Skillet is a local binary.
- The token sidecar is now Token Glace throughout live templates, managed-tool wiring, docs, and tests.
brigade add tokensinstalls and doctorstoken-glace. - The default repo profile now selects the core sidecar set for memory, guard, security, tokens, evidence, search, and skills while leaving host-global or heavier stations such as MCP, pantry, and notifications opt-in.
The verified-learning loop can no longer silently mislead. An onboarding audit adversarially traced the loop end to end and found several ways it reported success while doing nothing, or quietly poisoned its own ranking. This release closes them and makes the loop's own health visible.
outcome reconcile --applyno longer marks a skillpromotedwhen the physical install fails. The forward-only ratchet never re-emits install for apromotedartifact, so a false promotion was permanent and invisible; a failed install now keeps the skill acandidate(with cooldown) so a laterskills inbox accept+ reconcile retries.--applyoutput surfaces the execution result so it is never byte-identical to a dry-run that did nothing, and a skill missing from the registry reportsinstall-skipped: not in registry. Cards (status-only promotion) are unaffected.- A verify command rejected by Brigade's own parser (shell metacharacters, a high-risk executable, an unresolvable binary) is recorded with status
rejected, notfailed. Invalid input is neutral (0) tooutcome capture, never a verified regression (-1). The overall receipt isfailedonly when a command actually ran and failed or timed out. outcomeno longer collapses distinct manual signals. A record written without--evidencecannot be proven a duplicate, so it counts as its own signal instead of merging into one, and manualfriction/learningsproducers can reach the install threshold. Records that carry anevidence_refstill dedup as before.
brigade work verify run --capture <id> [--capture-kind skill|card]captures the run's outcome in the same command, so the loop closes without a separate manualoutcome capturestep.brigade work briefreportsoutcome_loophealth: verify-run, record, scored, and promoted counts, plus a warning when verify runs exist but the ledger is empty (loop half-fed) or neither exists (loop dormant).outcome capturewarns when the artifact id is not a known installed skill or memory card, naming what is available, so a hallucinated id stops silently poisoning the ranking (the record is still written)..brigade/work/verify-runs/is capped (newest 50 retained) so receipts and raw command logs no longer grow without bound.
- The
brigade-workskill, README, and QUICKSTART teach the daily loop directly: capture against an id you actually have (a real skill, a memory card, orbrigade-workitself), the one-step--captureform, and the registry-accept prerequisite for autonomous promotion.
brigade initis now additive on an existing target instead of aborting: it keeps existing files (never clobbers without--force), writes only the missing ones, and always wires thebrigade-workskill into the harness skill dirs. This fixes the upgrade/brownfield gap found in onboarding smoke tests, where a repo that already hadAGENTS.md/CLAUDE.md(every previously-onboarded repo, and most real projects) got nothing wired becauseinitrefused to overwrite and exited. Re-runninginitafter upgrading now wires the work loop without losing local edits;--forcestill overwrites to refresh the bootstrap directives.
brigade initandoperator quickstartnow wire the newbrigade-workskill into each selected harness's skills directory by default (--no-wireto opt out) and print agent-facing onboarding, so a fresh install is actually used by the agent's work loop instead of sitting dormant. The skill teaches the loop:brigade work briefat the start, verify THROUGHbrigade work verify run(not raw),brigade outcome capture <skill-or-card-id> --run-id latestafter each verify, and a handoff at the end. Mandatory "Daily Work Loop" directives were added to theAGENTS.mdandCLAUDE.mdtemplates (replacing the conditional internal-dogfood block, keepingAGENTS.mdunder the bootstrap budget), plus a "use it, don't just sit next to it" section inINSTALL_FOR_AGENTS.md.
- README now leads the quickstart with a recorded, clean-machine demo (
docs/assets/quickstart.svg, reproducible fromdocs/assets/quickstart.cast) and adds realoperator doctorreadiness output plus a realbrigade mcp syncdry-run diff, so the headline claims are shown working, not just described.
brigade mcpsyncs one canonical MCP server catalog (.brigade/mcp.json) into each tool's native MCP config file.init/add/listbuild the catalog;planpreviews;sync(dry-run unless--write) merges into Claude (.mcp.json), Cursor (.cursor/mcp.json), Codex (.codex/config.toml), VS Code (.vscode/mcp.json, withinputs), OpenCode (opencode.json), and Antigravity (~/.gemini/config/mcp_config.json, user-scoped via--user-scope);doctorvalidates;importreads an existing tool's config back into the catalog. The merge is by server key with ownership tracked in the gitignored.brigade/mcp/state.json: servers the user added are preserved, a server edited outside Brigade is a conflict (skipped unless--force), orphans are removed only with--pruneand only when still pristine, and env values are always written as${VAR}references (or VS Code${input:VAR}), never inlined secrets.brigade operator sync-mcpwraps it with a validate->sync->summary receipt. Newmcpstation (aliasbrigadier).brigade mcpuser-global adapterscodex-user(~/.codex/config.toml),claude-user(~/.claude.json), andopenclaw(~/.openclaw/openclaw.json), so a machine's daily tools can be synced alongside repo-local configs.brigade mcp import --keep-secretskeeps literal env secrets verbatim instead of demoting them to${VAR}references, for unioning existing working configs whose tools do not expand${VAR}.brigade outcomeverified-autonomous learning loop (capture/record/score/explain/reconcile/rank): a learned skill is promoted only when a model-unauthored signal (verify exit codes, friction/learnings deltas) confirms it helped, Wilson-scored so thin evidence never out-ranks vetted skills.reconcileis dry-run by default; with--applyit installs across harnesses or rolls back on a measured regression. The durable ledger is git-tracked undermemory/outcome/, readable without Brigade.brigade contextpacks now carry acode_graphsection from GraphTrail's read-onlygraphtrail context(entry points, related files, caller/callee counts for the selected task). The binary resolves via$GRAPHTRAIL_BIN, PATH, then~/.cargo/bin, and the section is skipped gracefully when the binary, the repo's.graphtraildb, or a task is absent.brigade operator quickstartnow scaffolds the MCP on-ramp: it creates the canonical.brigade/mcp.json, previews the projection with a read-onlymcp plan, and surfacesbrigade mcp init/sync --writein the printed next steps. It never writes harness MCP configs automatically and respects--dry-run.
- The "Brigade does not write runtime MCP configs / auto-sync harness configs" statements in the tool catalog and technical guide are reworded: runtime MCP server config sync is now an explicit, bounded capability provided by
brigade mcp(dry-run by default, merge-by-key, never inlines secrets, never automatic). The tool-catalogmcpfamily projection remains a documentation stub. - The Hermes adapter is graduated from experimental to validated (verified against a real Hermes v0.17 install): the handoff contract and reviewed skill install both work, and the "experimental" framing is dropped across the harness picker, doctor, install/fragment notices, templates, README, and QUICKSTART.
- MCP sync is now idempotent for remote (http/sse) servers on Codex (
_codex_render_tablerenders thetype/transport, so a re-sync no longer falsely reports aconflict). Dotted/quoted server names (e.g.io.github.example) round-trip without duplicating into invalid TOML, and the Python 3.10toml_compatfallback reader now parses quoted dotted table keys. Authorization headers for remote servers are emitted and parsed for codex, vscode, opencode, and openclaw (previously dropped), kept as${VAR}references. brigade outcomeno longer double-counts a re-captured or retried verify run: scoring counts distinct verified evidence keyed on(source, evidence_ref, task_id), so an identical receipt cannot cross the auto-install threshold on its own.brigade runbook runhonors only an operator-supplied--approved; a file-embeddedapproved: trueno longer authorizes shell execution. Commands are validated whole (not just the first token), inline-script shell wrappers that negate the allowlist are rejected with a warning, andSECURITY.mddocuments that runbook steps are arbitrary shell, as trustworthy as the file author.- Hermes skill installs now reach the real Hermes store (
$HERMES_HOME/skills/brigade-imports/<id>) with rendered frontmatter, gated on the Hermes home existing, so reviewed skills appear inhermes skills listinstead of an unread repo-local path.
brigade doctor --jsonandbrigade status --jsonemit machine-readable output (target, harnesses, owner, depth, per-check status/name/detail, summary counts, and areadyflag), so the two most diagnostic surfaces can feed scripts and a future fleet aggregation instead of being text-only.brigade security diff --base <dir> --against <dir> [--json]compares two security reports and reports new, resolved, and persisting findings (matched by the scan's stable per-finding fingerprint). It returns nonzero when there are new findings, so a change that introduces a finding can be caught in review or CI.brigade operator checkup [--json]runs every read-only first-run doctor (doctor,operator doctor,handoff doctor,tools doctor,skills doctor,security doctor) in one pass and rolls them up to a singleready/blocking_surfacesverdict with the next command to run, so a new operator no longer has to copy-paste each doctor from the first-10-minutes guide.brigade doctornow lints AGENTS.md quality: it warns (never fails) when the file lacks a "Definition of Done" section or a memory-handoff section, since agents work better with explicit done criteria and a handoff footer. The Brigade-seeded AGENTS.md now ships a Definition of Done section (issue #84).brigade run --read-onlynow warns when an assigned agent cannot hard-enforce read-only. Each adapter is classified hard (native sandbox or tool allowlist), soft (prompt-only), or none; soft and none agents are listed on stderr and recorded in aread-only-enforcement.jsonrun receipt, and a writable--sandboxoverride downgrades even natively-sandboxed CLIs to best-effort (issue #87).brigade repos doctor --deepruns the operator checkup (every first-run doctor) in each enabled fleet repo and aggregates a fleet-wideready/blocking_repo_countverdict, so you can health-check many repos in one pass instead of cd-ing into each (issue #78).brigade completions bash|zsh|fishprints a static shell completion script generated from the CLI's own command tree (zero runtime dependencies; the tree is embedded, not shelled out). bash completes the full command tree, zsh reuses it via bashcompinit, and fish completes the top level plus one subcommand level (issue #89).brigade memory search <query> [--json]runs a deterministic keyword search over memory cards, ranking title, tag, and summary matches above body matches (the stdlib precursor to the roadmapped on-device semantic retrieval) (issue #90).brigade memory serve-mcp --stdioexposes memory cards over a read-only MCP stdio server under acard://scheme (resources pluslist_cards/get_card/search_cardstools), reusing the proven skills MCP pattern; reads are scoped to the configured card roots and it never edits canonical memory (issue #88).brigade projects doctoradds the station doctor that every peer station already has, reporting project-consolidation health and exiting nonzero on issues (issue #90).brigade skills uninstall <skill> --target <harness|all>removes an installed skill (the inverse ofskills install), records an uninstall receipt in the install history, and refuses cleanly when nothing is installed (issue #90).brigade friction show [--severity] [--json]reads back the latest friction scan, which previously could only be written (issue #90).
- Internal: the skills and memory MCP stdio servers now share one harness (
mcp_server.serve_stdio) instead of carrying near-identical JSON-RPC loops. No command surface or protocol change; a new read-only MCP surface is now a few callbacks. - The repo fleet scan now summarizes repos on a small thread pool instead of serially. Each summary is independent and IO-bound (git calls plus file stats), so a multi-repo fleet scans noticeably faster while output stays in config order; a single-repo fleet is unchanged.
brigade doctornow groups host-global findings (OpenClaw config, the content-guard clone, uninstalled managed tools) under a "machine-level (not specific to this repo)" header in text output and tags each check with ascopeofrepoormachinein--json, so a single-repo run no longer reads as if the repo is responsible for machine-wide state (issue #80).brigade security suppressandbrigade security unsuppressgain--json, so an agent or CI step can parse the suppression result (issue #90).brigade scrubgains--jsonand now writes a summary-only.brigade/scrub/latest.jsonreceipt (verdict, policy, exit code, never the matched snippets), with--no-receiptto opt out, giving the egress gate the audit trail every other station already has (issue #90).brigade runbook closeout --import-issues [--dry-run]routes each failed step of a runbook run into the work import inbox (deduped by run id and step), so a mid-run failure reaches the same review queue every other station's failures land in (issue #90).brigade init --git-excludewrites Brigade's ignore block to the local-only.git/info/excludeinstead of the tracked.gitignore, for third-party clones you do not want to commit Brigade ignores into (issue #81). Automatic detection of a third-party clone is intentionally deferred: there is no reliable repo-owner signal, and a guess would false-positive on your own published repos.
brigade init --no-gitignoreis now honored. The flag was parsed but never forwarded to the installer, so a.gitignorewas written anyway;install_selectionnow takesupdate_gitignoreand skips the write when asked.brigade init --git-excludenow resolves a linked-worktree.gitfile (gitdir: <path>) to write the exclude under the worktree's own git dir, instead of silently falling back to a tracked.gitignore.- The seeded
pre-pushcontent-guard hook no longer reports a scanner error as a content leak. It now discriminates content-guard's exit codes: exit 1 (findings) blocks with the leak message, any other nonzero exit is reported as "scanner failed to run" rather than mislabeled as violations (issue #82). brigade doctormemory-care freshness no longer reports a same-day scan as "in the future". The scanner stampsscan_datein UTC, but doctor compared it against the host's local date, so an evening run in a behind-UTC timezone warned falsely (issue #83). Doctor now compares in UTC.brigade init --depth workspacenow creates.brigade/memory-care/decay, the directory doctor actually checks, instead of the legacymemory/cards/decay. A fresh workspace no longer draws a "staleness scanner not wired" warning on first contact (issue #79).localio.write_jsonnow writes receipts atomically (temp file plusos.replace), so a reader or a crashed writer never observes a half-written JSON receipt; on failure the original file is left intact and the temp file is removed.- Apply the v0.11.0 subprocess hang-guard (closed stdin plus a timeout) to the remaining direct
subprocess.runsites that lacked it:localio.check_git_ignored, the work-family_githelper, and scrub's git probes. A stuck git call now fails fast instead of hanging the command. brigade scrubfails closed when the content-guard scan times out: a hung scanner is reported asblocked(exit 124) instead of being able to let content past the egress gate.
brigade runnow guards dirty git worktrees by default, supports--allow-dirty, prevents concurrent runs with a local lock, and can run agents in a detached--worktreewhile capturing the resultingchanges.patch.brigade runplans can stage worker assignments so dependent workers receive earlier-stage results while same-stage workers still run in parallel.- Roster agents can pin a model with
model = "..."for the claude and codex adapters (claude --model,codex exec -m), so one roster can split an architect model from builder models; pins are recorded in run artifacts. - Rosters can set
limits.sandbox(read-only,workspace-write, ordanger-full-access) as the default native Codex sandbox forbrigade run, and runs without a repo roster now fall back toPath.home()/.brigade/roster.toml. brigade run --sandboxto override the native Codex sandbox mode while keeping--read-onlyavailable for prompt-level review rules.brigade friction: mine workflow friction from notes and session artifacts into a reviewable report.- Three new writer harnesses: Grok CLI (
grok), Amp (amp), and Crush (crush), each with its own.{harness}/memory-handoffsinbox, tool projections, skills adapter, and agent argv, bringing the writer-harness total to eighteen.
- Agent subprocesses now run with stdin closed, so
codex execno longer hangs until the roster timeout when brigade itself runs with a piped, never-closing stdin (background launchers, CI wrappers). brigade research sourcesno longer misreports route status when a configured source adapter is missing itstype: the malformed entry previously shifted every following source's executable check onto the wrong adapter.
- Split the
work_cmdtest suite into per-area modules while preserving facade patch coverage. - Internal restructuring with no command surface changes:
operator_cmdandwork_cmd/servicessplit into focused modules, the CLI moved to per-command dispatch modules, and shared git-ignore/TOML/datetime helpers moved to neutral homes. The lint gate now includes ruff bugbear (B).
- README opens with a "Try it in 60 seconds" block (install, wire one repo, verify) above the project story, so a first-time visitor reaches a runnable command without scrolling.
- Added
.github/PULL_REQUEST_TEMPLATE.mdcovering the contributor checklist already documented in CONTRIBUTING.md: tests, changelog discipline, the content-guard PII gate, zero-runtime-deps, and conventional commits.
brigade operator verify-harnesstreats warn-status checks (host advisories like a global gitignore shadowing an inbox template) as informational:readynow flips only on failures, a newwarning_countreports advisories, and quickstart consequently returnsstatus: okon such hosts while surfacing the advisory count and the verify command on the step line.docs/first-10-minutes.mdexplains thestatus: warn/ exit-code semantics on first apply and warns that activating the repo hooks path would override an existing globalcore.hooksPaththat already runs content-guard.
brigade handoff migrate: converts near-miss homegrown handoff notes (loose- Type:style metadata) into the Brigade template through the standard draft renderer. Dry-run by default;--applyrewrites convertible notes, preserves originals undermigrated-originals/, verifies the result passes lint, and records a receipt. Injection-flagged notes are never converted. This closes the top adoption friction: existing notes no longer fail lint identically to garbage.
brigade handoff lintnow reports prompt-injection signal counts per file (content-guard checks egress, not instructions), so a poisoned note can no longer read as fully clean from the lint path.brigade doctorcollapses missing optional managed tools into one summary line instead of a per-tool wall, keeping single-workspace reports readable on first contact.brigade operator adopt plancounts guidance files and guidance directories separately instead of callingmemory/cards/a file.
brigade operator doctor --profile local-operatorno longer reportsready: nowhen content-guard is installed but its pre-push hook is inactive. The hook ships inactive by design, so a fresh setup now treatscontent_guard_hook_not_enabledas advisory under the local-operator profile; the strictinternal-dogfoodprofile still blocks on it. Found by the new cold-start gate running with neutralized git config: the maintainer's global hooksPath had masked the clean-machine behavior in every earlier test.
- Cold-start release gate:
docs/runbooks/cold-start-gate.{json,sh}executes the documented new-user journey (install, quickstart, handoff draft and lint, doctors, gitignore regression guards) in a neutral sandbox, wired into the RELEASE.md pre-tag checklist.docs/cold-start-testing.mddocuments it plus the three agent-driven cold-start scenarios that have been finding first-contact bugs all week.
brigade memory care backfill: bulk-repairs cards that predate the freshness convention by derivinglast_reviewedfrom each card's last git commit date (file mtime outside git, labeled as such) and proposingfresh_untilfrom the configured stale window. Dry-run by default,--applywrites frontmatter without ever overwriting existing values and records a receipt under.brigade/memory-care/backfills/.- New
evidencestation (aliasledger) wiring the MiseLedger family of managed tools:miseledger(local-first evidence ledger, doctored viastatus --json),stationtrail(agent-session log exporter, doctored viadoctor --json), andsourceharvest(source-system record exporter, presence-checked viaversion). All three install fromgithub.com/escoffier-labs/...and are advisory: they inspect host-global state and never FAIL a workspace doctor run.
- Corrected stale
github.com/solomonneas/...install URLs and doc links forcontent-guard,agent-notify, andsolos-cookbookto their actualescoffier-labsorg, sobrigade addinstalls from the right repos. - Internal refactor, no behavior change: shared helpers extracted into
brigade.localio(JSON/JSONL/timestamps/hashes/slugs),brigade.actionqueue(action-queue lifecycle for center/repos/release stations), andbrigade.reportstore(report-bundle lifecycle for center, repos, release candidates, and fleet release trains); and the 11.8k-linework_cmdmodule is now a package (constants,helpers,ledger,config,services,session) behind an explicit re-export facade guarded by a frozen surface test. Station variants with genuinely different semantics (phases actions/reports, release-train privacy conventions) intentionally stay local.
- Content Guard hook detection no longer reports "installed" when
core.hooksPathis inherited from global or system git config and points at a pre-push that does not run content-guard. Inherited hooks that do run content-guard stay green; unrelated ones report a newexternal-hooks-pathmode with acontent_guard_hook_unrelatedwarning and the activation command. brigade operator verify-harnessnow detects when an inbox's deliberately un-ignoredTEMPLATE.mdis shadowed by an external ignore source (commonly a global gitignore entry like.claude/), which git cannot override and which was previously silent.
brigade handoff sources initnow scopes the default watched inboxes to the workspace's configured harness selection instead of enrolling all fifteen writer inboxes; explicit--inboxesvalues are unchanged.brigade untrusted scanrefuses a bare file path as positional text (it was silently scanning the path string itself) and points at--from-file.brigade handoff doctorcollapses absent, unwatched writer inboxes into a single summary line instead of printing one row per unselected harness.brigade operator quickstartsays when the memory owner was auto-selected and how to override it, and operator boundary text now says Brigade never activates hooks (the templates ship an inactivehooks/pre-pushfile).
docs/first-10-minutes.mdgains a "Handoff Concepts In 60 Seconds" section covering inbox choice, types, card versus no-card actions, and the required content flags.
brigade security scannow screens pending handoff notes for prompt-injection signals as a dedicatedhandoff-injectioncheck with ahandoff-inboxsurface. Inboxes were previously skipped entirely so note content was not attributed to the repo author, which also meant a malicious pending note scanned clean; it now reuses the same untrusted-context signal the ingest gate uses.processed/andTEMPLATE.mdstay excluded.brigade memory care scanwrites its state under.brigade/memory-care/decay/instead of inside the user'smemory/cards/tree. Explicitoutput_pathconfigs are honored unchanged, and readers (import-issues, status, doctor) fall back to the legacymemory/cards/decay/location when it still holds the latest scan.
brigade tools defaults,tools init, andtools pack importno longer rewrite the managed.gitignoreblock with a hardcoded codex-only selection, which was silently dropping the other selected harnesses' handoff-inbox ignore entries (found by a cold-start test: a codex+claude quickstart left.claude/memory-handoffs/commit-prone).operator quickstart --dry-runnow reports every step asplannedinstead of printing[ok] brigade-initfor a step it did not run, andbrigade init --dry-runmarks files that already exist as refused-without-force instead of implying it would overwrite them.brigade handoff draftnow states clearly when a draft was written but failed lint, with the kept path and next step; the--content/--content-filehelp text now says one of them is required; and the README handoff example includes--contentso it works verbatim.docs/first-10-minutes.mdno longer pins an old version string, describes the doctors' real per-check output shape, and documents everything quickstart actually writes (bridge files, safety rules, the inactive pre-push hook, and the deliberately un-ignored inbox templates).
brigade --helpnow opens with a short start-here block and lists commands in five groups (core memory loop, daily operator loop, stations and tools, review/security/research, wiring and advanced) instead of one flat 36-command dump. Subcommand help screens are unchanged, every command stays functional and listed, anddocs/command-inventory.mdis unaffected.
- Quickstart and
brigade tools defaultsnow scope built-in tool projections to the workspace's selected harnesses plus the neutralscripts/folder, so a--harnesses codexsetup no longer writes folders for every supported harness. - The workspace
AGENTS.md,INSTALL_FOR_AGENTS.md, andhandoff-flowcard templates now render the selected writer handoff inboxes instead of hardcoding.claude/memory-handoffs/, and the missing-template fallback now points atbrigade handoff-templateinstead of a host-private path. - The Hermes adapter README now opens issues against the correct repository.
- Added a first-10-minutes guide and compact support response templates for install, quickstart, doctor, commit-scope, homegrown setup, and security questions after launch.
- Dogfood runs can now use configured
--agent-cliadapters for Claude Code, Codex, OpenCode, Antigravity throughagy --print, Pi throughpi -p, Cursor throughcursor-agent -p, Aider, Goose, Continue, GitHub Copilot CLI, Qwen Code, Kimi Code, AdaL, OpenHands, orollama:<model>instead of being hardwired to Codex.
0.8.1 - 2026-06-08
- Operator adoption migration rollup:
brigade operator migration status/doctor/import-issues/consolidatesummarizes redacted adoption progress across operator config, external surfaces, review receipts, pending imports, and pending tasks, then lets current migration rollups supersede tiny record-level follow-ups without exposing raw scheduler or process details. - Redacted operator surface registry:
brigade operator surfaces capture/list/doctor/review/reviews/import-issuescaptures shell crontab, OpenClaw cron, and PM2 coverage as counts, status totals, ordinal labels, review decisions, and fingerprints under.brigade/operator/surfaces/, omitting raw cron lines, job names, process names, command paths, host details, and environment values. - Existing-operator adoption loop:
brigade operator adopt plan/capture/import-issuesinventories guidance files, harness roots, handoff inboxes, local state folders, and count-level external scheduler/process surfaces before changing a homegrown operator workspace. - Research handoff export:
brigade research export-handoff,brigade research handoffs doctor, andbrigade research handoffs import-issuesroute completed research runs into selected writer harness inboxes as linted Memory Handoffs, track export fingerprints, and surface missing or stale exports without ingesting memory. - Operator notification visibility: new
brigade notifications statusandbrigade notifications setup plancommands inspect optionalagent-notifywiring and print reviewed Codex/Claude hook snippets without sending messages, editing hook files, or storing channel secrets. Notification health now appears inbrigade doctor,brigade center status,brigade work brief, andbrigade daily status/planas an advisory setup item. - Internal dogfood bootstrap:
brigade operator init --profile internal-dogfoodwrites repo-local production dogfood config defaults and refreshes read-only security evidence, whilebrigade operator status --profile internal-dogfoodreports machine-vs-repo wiring, gitignore state, dogfood readiness, daily health, security evidence, notification config, and local readiness. - Internal dogfood guidance:
brigade operator guide,docs/internal-dogfood.md, and the workspaceAGENTS.mdtemplate now document the explicit Brigade loop, repo onboarding command, handoff expectations, and no-daemon/no-remote-mutation boundaries. - Cross-harness operator tool sync:
brigade operator sync-toolsprojects trackedtools/*.mdsources into local Claude, Codex, and OpenCode folders while keeping generated harness files ignored. - Portable workspace bootstrap:
brigade operator bootstrap-portableimports optional tool and skill packs, merges built-in portable tools, writes missing built-in source files, projects managed tool outputs across local harness folders, and reports tool plus skill health. - Security scanner secret response guidance: secret findings now include redacted response options for
.envor environment storage, scrub/rotate, KeePass review, and session transcript redaction. Session and chat transcript paths are classified assurface: session-chatfor exposed API keys, tokens, passwords, and private keys. - Reviewed self-learning skill proposals:
brigade learn skill-candidatesgroups repeated learning evidence into reusable skill candidates, andbrigade learn propose-skill <candidate-id>writes an unreviewed generated skill source plus a normal skill inbox proposal without accepting, installing, publishing, or editing memory automatically. - New-user quickstart:
brigade operator quickstartruns the repo template install, local operator config, portable tool and skill bootstrap, and selected harness checks as one local-only first-user flow, with--dry-runsupport. - New-user issue support: quickstart JSON now includes a compact
issue_report, the README links a first-run troubleshooting guide, and GitHub issue templates use Brigade naming with a dedicated quickstart setup form. - Learning skill proposal usability:
brigade learn skill-candidates --source <source>filters repeated evidence by producer, security scan imports preserve safe grouping metadata and response options, andbrigade learn propose-skill --dry-runpreviews generated source plus inbox writes before creating a proposal. - Compact operator readiness verdict:
brigade operator doctor --profile internal-dogfoodprints a short ready/not-ready summary, blocker count, next command, and local tracked-vs-generated reminders. - Handoff draft writer:
brigade handoff draftwrites a linted Memory Handoff draft using Brigade's card/no-card section style, so agents can record workflow changes without hand-writing boilerplate. - Plan-First Operator Loop:
brigade work task plan <id> --writenow writes a plan.md + JSON plan artifact (assumptions, acceptance, risks, steps, next safe command);--metawrites a plan-for-the-plan;--from-research <run-id>attaches a research report as quarantined evidence. Newbrigade work plans,brigade work import context(untrusted raw-context intake),brigade work plan-promote/work plan-proposals(accepted plans -> local draft template/rule/skill proposals, never installed).work doctor/work briefsurface pending tasks lacking a plan artifact. - First-class OpenCode handoff support:
.opencode/memory-handoffs/is now a built-in writer inbox (install scaffolding, ingest, doctor, handoff doctor source coverage, fleet sweep, security skip-list, and the interactive selector), so OpenCode handoffs ingest without a manual--handoff-inboxflag. The writer-inbox map is now centralized inbrigade.selection.WRITER_INBOXES. - Shared untrusted-context policy helper (
brigade.untrusted):wrap_untrustedframes external content as data-not-instructions with a content-derived fence, andscan_untrustedreports injection signals. Adopted in the research extractor, and handoff ingest now routes injection-flagged content to the review inbox instead of auto-filing it into a card or document. - New
researchcommand group: local-first iterative deep research grounded in a trusted local corpus, with an opt-in, quarantined web tier (Playwright, no API keys required). Emits a self-contained HTML report and a memory handoff; runs persist under.brigade/research/and are resumable/cancellable. Uses the rosterresearchermodel (cloud); Brigade never runs a model locally. - New
pantrystation (aliaslarder) and theagentpantrymanaged tool.brigade add pantryinstalls agentpantry viago install, andbrigade doctor/brigade statushealth-check it by shelling out toagentpantry status --json. Like the memory satellites, agentpantry inspects host-global state, so its checks are advisory and never FAIL a workspace run: an unwired install (no config) is aWARN, a missing pre-shared key is aWARN, otherwiseOK.
brigade operator quickstartnow scopes.brigade/handoff-sources.jsonto the selected writer harnesses and writes an initial local handoff-ingest latest-run log, so a fresh one-harness setup does not warn about unwired side harnesses or a missing ingestor log.brigade operator doctor --profile local-operatorno longer points brand-new local setups at release-readiness import work as the primary next command when the only readiness item is a missing release receipt.brigade daily statusnow uses a lightweight daily center snapshot and bounded status sections so slow readiness subsystems report warnings instead of hanging the daily loop.- Operator migration imports now supersede stale rollup imports when a source fingerprint changes, preventing older replacement batches from staying ahead of current rollups in the daily queue.
brigade operator doctor --profile local-operatorno longer treats a generated but unenabled Content Guard hook as a blocking issue in fresh quickstart installs. Missing Content Guard remains visible as advisory setup state.- Removed an unsafe temp-directory cleanup example from the init failure issue template and contributor smoke-test docs, replacing it with
mktemp -dfresh target setup. - The security scanner no longer reports its own plaintext-password detector variable names as findings while scanning Brigade source.
- Corrected the stale
github.com/solomonneas/...install URLs for thememory-doctorandbootstrap-doctormanaged tools to their actualescoffier-labsorg, sobrigade add memoryinstalls from the right repos. - Dedupe guard in
brigade ingestdocument routing. Ano-cardroute whose content (or its first meaningful line/anchor) is already present in the target document is now sent to the review inbox instead of being appended again, matching the canonical pipeline and preventing duplicate content on re-routed handoffs.
- Documented the existing-operator adoption path, migration rollup, redacted surface reviews, and security scanner first-response workflow in the README, quickstart, technical guide, and agent-assisted setup guide.
- Added a first-response checklist for likely real credential findings, covering redacted review,
.envor environment storage, KeePass preservation, transcript scrubbing, rotation, and closeout. - Refreshed contributor setup guidance for Brigade naming, current source paths, quickstart issue reports, and intended GitHub label taxonomy for public support triage.
- Added expected quickstart and operator doctor output to the new-user quickstart guide.
0.8.0 - 2026-06-01
- Canonical flat bootstrap thresholds in
brigade.budgets(DEFAULT_BOOTSTRAP_SOFT_LIMIT,DEFAULT_BOOTSTRAP_HARD_LIMIT,BOOTSTRAP_HARD_LIMIT_CEILING) for the whole-file auditor model, so downstream bootstrap tooling can source one set of limits instead of redeclaring its own. - Handoff backlog detection.
brigade handoff doctor(and the memory station inbrigade doctor) now emits ahandoff_backlogwarning when an inbox has pending handoffs whose oldest entry is older than three days, i.e. handoffs are being written but nothing is ingesting them.InboxHealthgained anoldest_pending_age_secondsfield. At the fleet level,brigade repos scan/doctornow emit arepo_handoff_backlogwarning for any fleet repo with an un-ingested, stale handoff pile-up. This catches the silent gap where a repo's inbox is never reached by the canonical ingester (for example an uncovered repo missing from the ingest config). - Canonical budgets module
brigade.budgetsis now the single source of truth for bootstrap-file byte budgets, memory-card budgets, the MEMORY.md index line limit, and the handoff-backlog and memory-care staleness thresholds.doctor,ingest,handoff, andreposall consume it so preventive guards and post-hoc warnings can never disagree. Satellite tools (bootstrap-doctor, memory-doctor) are intended to depend on brigade and consume these definitions rather than redeclaring them. - Bootstrap budget guard in
brigade ingest. Ano-cardhandoff that would push a bootstrap file (e.g.TOOLS.md,USER.md) past its byte budget is now routed to the review inbox instead of appended, so the ingester can no longer silently bloat a session-prefix file past its truncation ceiling. Non-bootstrap targets such as.learnings/*are unaffected. brigade repos ingestfleet driver. Sweeps every registered, reachable fleet repo, routing each repo's handoffs into the canonical owner's memory and archiving the processed handoffs back in the source repo. Defaults to a dry run; pass--applyto write.ingest.rungained anownerparameter and a reusableingest.ingest_intocore to support the many-writers/one-owner model.
brigade work backup initnow writes wider staleness thresholds for theclouddestination (snapshot_stale_hours = 192,check_stale_hours/prune_stale_hours = 336) so an off-site copy on a slower cadence such as a weekly backup does not report stale every day. Thenasdestination defaults are unchanged. Existing.brigade/backups.tomlfiles are not modified.
docs/backup-health.mdnow documents the two-tier NAS-frequent plus cloud-weekly threshold pattern and clarifies that backup health monitors snapshot-history backups (restic/borg), not bidirectional last-writer-wins file syncs such as a KeePass database mirror.
0.7.0 - 2026-05-31
brigade work phases session checkpoint <session-id|latest>for local AFK session recovery points that record safe summaries, notes, current next-step state, and suggested commands without executing anything.brigade work phases session checkpoints list/show/comparefor text and JSON inspection of local AFK session recovery points and stale next-step detection.brigade work phases session checkpoints import-issuesfor routing blocked or stale checkpoint issues into dedupedsource: phase-session-checkpointwork imports.brigade work phases session next/resumenow include the latest checkpoint summary and checkpoint issue counts when a session has recovery metadata.brigade work phases session recovery-noteplusrecovery-notes list/showfor local AFK recovery notes with safe summaries, notes, evidence labels, session references, and activity timeline events.brigade work phases session recovery-notes closeoutfor reviewed, deferred, blocked, or archived closeout metadata on AFK recovery notes.brigade daily plannow includes active phase session checkpoint issues asphase-session-checkpointcandidates with suggested checkpoint import commands.brigade daily runcan write one safe local phase session checkpoint as its selected bounded action.brigade work phases session riskfor a read-only AFK session risk summary across next-step blockers, checkpoint drift, recovery notes, and phase doctor issues.brigade work phases session verificationfor read-only verification rollups across the phase records in an AFK session.brigade work phases session privacyfor read-only privacy-check rollups across the phase records in an AFK session.brigade work phases session handoffsfor read-only handoff coverage rollups across the phase records in an AFK session.brigade release doctornow warns when active phase-session checkpoint evidence is blocked or stale.- Release candidate evidence now includes the latest phase session checkpoint and checkpoint compare summary.
brigade center reviewsnow includes blocked or stale phase-session checkpoint review items.brigade work briefnow includes latest phase-session checkpoint and checkpoint compare evidence.brigade work phases actions plan/buildnow creates local actions for blocked or stale phase-session checkpoints.brigade work phases session checkpoints archivefor moving an old checkpoint into local archive metadata.- Phase session reports now include recovery evidence for latest checkpoints, checkpoint compare issues, and recovery notes.
brigade work phases schemanow publishes AFK session health contracts for session next, resume, checkpoints, recovery notes, risk, verification, privacy, handoffs, reports, progress, and gate outputs.brigade work phases session protocol <session-id|latest>for a wrapper-safe AFK resume protocol that summarizes next step, risk, progress, checkpoint state, completion gate, allowed command prefixes, forbidden actions, and whethersession resumeis safe to record.brigade release candidate comparenow detects phase session checkpoint, checkpoint-compare, and completion-gate drift after a candidate bundle is built.brigade work phases session audit <session-id|latest>for a read-only AFK session self-audit across resume protocol, progress, risk, verification, privacy, handoff, and completion-gate evidence.- Phase 226-250 AFK hardening closeout recorded the final session gate path for checkpoint, recovery, wrapper protocol, release compare, and self-audit work.
brigade work phases session start/list/show/closeoutfor local AFK phase execution sessions that track a requested range, current phase, phase status, commit and test counts, report references, closeout state, and next command.brigade work phases session next/resumefor read-only or metadata-only AFK session recovery that identifies the safest next phase command without executing it.brigade work phases session report build/list/showfor local Markdown and JSON evidence bundles over phase execution sessions.brigade work phases session activity <session-id|latest>for a chronological read-only activity ledger across phase records, starts, completions, tests, commits, reports, actions, imports, closeouts, handoffs, and resumes.brigade work phases session progress <session-id|latest>for read-only percent complete, status counts, blockers, current phase, next command, test coverage, commit and push coverage, and remaining-step summaries.brigade work phases session import-issues <session-id|latest>for routing unresolved AFK session blockers into dedupedsource: phase-sessionwork imports.brigade work phases goal scaffold --range <range>for local editable/goaldrafts from ledger state, session evidence, blockers, and roadmap references.brigade work phases session gate <session-id|latest>for the final read-only AFK session claim check, with release doctor and candidate evidence carrying the latest gate result.brigade daily status/plan/review/run/doctornow surface active phase sessions, and daily run can build one phase session report or close out one completed reviewed session as its single safe step.- Release doctor, release candidate evidence, center status/reviews, and work brief/doctor now include compact phase session and session report state.
brigade work phases evidence add <phase-id>for appending local evidence attachments to phase records, with doctor warnings for missing referenced evidence files.brigade work phases verify plan/recordfor local phase verification matrices that show expected commands and record operator-supplied outcomes without executing tests.brigade work phases reconcile <phase-id|range|latest>for read-only local git reconciliation of phase commit hashes, push refs, branch containment, and dirty worktree state.brigade work phases privacy <phase-id|range|latest>for local phase evidence privacy scans with redacted findings and recorded clean or blocked summaries.brigade work phases handoff <phase-id|range|latest>for drafting and optionally linting a Memory Handoff from selected phase evidence without editing canonical memory.brigade work phases closeout <phase-id|range|latest>for local reviewed, deferred, blocked, or archived phase ledger closeouts, plus stale unreviewed completed-phase doctor warnings.brigade work phases compare <phase-id|range|latest>for read-only phase evidence freshness checks against local HEAD, referenced files, report age, test evidence, and doctor issue counts.brigade work phases actions plan/build/list/show/start/done/defer/archivefor metadata-only phase-ledger action queues sourced from doctor issues and closeout blockers.brigade daily plan/review/runnow considers phase-ledger actions and unresolved phase issues, and can start one phase action or build one phase report as a bounded local daily step.- Release doctor, release candidate bundles, and release candidate compare now include phase-ledger closeout and report evidence, with warnings for unresolved closeouts, stale reports, and unreviewed pushed phases.
brigade work phases report closeout <report-id|latest>for local reviewed, deferred, superseded, or archived phase report bundle closeout metadata.brigade work phases report compare <report-id|latest>for read-only checks of saved phase report freshness against current ledger status, doctor issues, HEAD labels, and report closeouts.- Phase ledger health now includes phase action queue counts and top action details, with visibility in daily status, work brief, work doctor, and center status.
brigade work phases actions import-issuesfor routing open phase action records into the work inbox as dedupedsource: phase-ledger-actiontask imports.- Phase health and release candidate evidence now include the latest phase report compare summary, and release doctor warns when report compare has open issues.
brigade work phases init/plan/list/schema/status/next/show/start/complete/defer/doctor/import-issuesplusbrigade work phases report build/list/showfor a gitignored phase execution ledger that makes unattended multi-phase work auditable, detects silent compression, writes local reports, routes ledger issues into the work inbox, and surfaces phase-ledger health in daily, work, center, and release views.- Daily hardening audits now perform phase-aware checks across daily receipts, center contracts, inbox evidence quality, repo fleet daily-use state, and release self-dogfood evidence, with release readiness and release candidates carrying compact summaries for those checks.
brigade daily hardening plan/audit/import-issues/closeoutplusdocs/phase-115-164-plan.mdfor the production-hardening queue across daily reliability, operator-center contracts, inbox evidence quality, repo-fleet daily use, and self-dogfood release evidence.brigade daily resume/repair/unblock/protocol,brigade daily telemetry doctor, daily approval compare/archive commands, normalized daily adapter receipts, explainable plans, verification-aware closeout fields, local telemetry, and release evidence for the daily driver.brigade daily approvals list/show/approve/reject/holdplusbrigade daily run --approval <approval-id>for local approval requests that preserve daily-driver context across approval-required boundaries.brigade daily init/schema/history/show/doctorplus local.brigade/daily.tomlsettings for daily-driver config, JSON contracts, receipt inspection, and stale or blocked run health.brigade daily status/plan/review/run/closeoutfor an agent-facing daily driver that ranks local operator evidence, selects one safe action, runs or stages one bounded item with receipts, and closes out the day without arbitrary execution or remote mutation.brigade work import provenancefor a read-only cross-producer import provenance audit with text and JSON output.brigade roadmap commandsfor a parser-derived public command documentation contract with text, JSON, generateddocs/command-inventory.md, and stale-inventory checks.docs/phase-61-100-plan.mdas the public, testable phase queue for roadmap completion hardening.- Public
templates/index that points fresh-start users at the packaged starter templates without exposing local dogfood workspace files. - Built-in
brigade doctorbootstrap budget checks that fail hard when installed bootstrap files exceed conservative byte limits. - Built-in
brigade doctormemory-card budget checks that fail whenmemory/cards/*.mdcards become too large. - Built-in
brigade doctormemory-index checks that fail whenMEMORY.mdlinks to missingmemory/cards/*.mdfiles. brigade doctormemory-care freshness checks for stale decay scans, plus hard failures for corrupt scan or refresh-queue JSON.brigade run "<task>", a bounded aboyeur flow that asks one rostered orchestrator to plan assignments, dispatches worker CLIs in parallel, then asks the orchestrator to synthesize the final answer..brigade/roster.tomlloading for cross-model agent rosters using the user's installed CLIs (codex,claude, orollama:<model>). Claude is optional, not required.brigade roster initandbrigade roster doctorto scaffold a Codex/Ollama starter roster and validate roster syntax plus installed CLI availability.brigade dogfoodfor a built-in Codex-only, prompt-level read-only, inspected run with artifacts and optional handoff.brigade dogfood initto persist machine-local dogfood defaults in gitignored.brigade/dogfood.toml, enabling a one-command dailybrigade dogfoodpath.brigade dogfood statusto report local dogfood readiness, effective paths, CLI availability, ignore coverage, sandbox mode, and latest run.brigade dogfood latest,brigade dogfood next, and per-run dogfoodsummary.mdartifacts for turning the latest run into the next work item without copying artifact paths.brigade run --show-planand--verbosevisibility modes, plus defensive runtime enforcement of rosterallow_models.brigade run --inspectto print a readable artifact summary immediately after a run completes.brigade run --cwd,--output-dir, and default.brigade/runs/<id>artifacts for dogfooding auditable runs.- Start, finish, and duration metadata in
run.jsonartifacts. roster.jsonrun artifacts that capture the effective orchestrator, agents, limits, allow-list, and timeouts for later review.plan-attempts.jsonrun artifacts that capture raw planner outputs and parse errors for debugging failed planning runs.synthesis.jsonrun artifacts that capture orchestrator synthesis status, detail, and raw text for non-dry runs.- Successful
--handoffruns now record the written handoff path inrun.json. brigade run --handoffto write a Memory Handoff for successful runs, with--handoff-inboxoverride.brigade runs listto print recent run artifact directories from.brigade/runs.brigade runs latestto show the newest run summary without copying a run path frombrigade runs list.brigade runs show <run-dir>to print a readable summary of one run artifact directory.brigade work statusto report the current repo branch, dirty files, dogfood readiness, latest run, and extracted next step for daily work sessions.brigade work startandbrigade work endto create local.brigade/work/session artifacts for normal daily work loops.brigade work end --handoffto write a Memory Handoff from closed work session artifacts.brigade work list,brigade work latest, andbrigade work showto inspect local work session artifacts.brigade work recapto summarize recent or date-filtered work sessions.brigade work runto start a work session, run dogfood, close the session, write a work handoff, and print a recap in one command.brigade work resumeto show the active or latest work session, latest dogfood run, extracted next step, and suggested command.brigade work nextto resolve the next daily task without inspecting artifacts, plusbrigade work runnow uses the latest extracted next step when no task is passed.brigade work next --jsonto expose the resolved daily task, active session, dogfood snapshot, and suggested command to wrappers.brigade work bootstrapto initialize and verify the dogfood-backed daily work loop in one command.brigade work briefandbrigade work brief --jsonas a start-of-day entrypoint with git state, latest sessions, latest dogfood run, resolved next task, and suggested command.brigade work tasksplusbrigade work task add/show/doneto manage a gitignored local task ledger under.brigade/work/tasks.json.- Typed task metadata and repeatable acceptance criteria for
brigade work task add, plusbrigade work task planfor the completion checklist. brigade work task add --templateforvertical-slice,bugfix,red-green-refactor,docs, andsecurity-follow-updefaults.brigade work task add --from-issue <issue-url-or-number>to import GitHub issue title and metadata through the existingghCLI when available.brigade work task add --from-issuenow imports acceptance criteria from GitHub issue-body checkboxes and acceptance/test sections into the local task acceptance field without storing the raw body.- Repo installs now include public-safe workflow rule templates under
rules/issue-tdd-loop.mdandrules/acceptance-driven-work.md, andbrigade work doctorreports missing rule templates. brigade work import issue-repairsto route incomplete, stale, unchecked, or closed-remote issue-backed local tasks into repairable local imports without GitHub mutation.brigade work acceptancenow includes completion-time acceptance gaps, code-review finding outcomes, latest work closeout status, and fuller release readiness plus release candidate evidence.- Handoff ingestor log parsing now recognizes skipped, failed, malformed, unreachable-source, and no-reply warning states in issues and normalized reconcile receipts.
- Handoff source coverage issues now carry source keys and fingerprints, so uncovered writer inbox repairs dedupe and dismissed items stay quiet until coverage changes.
brigade release schemafor a wrapper-friendly local manifest of release readiness, candidate, fleet train, waiver, and manual evidence JSON record contracts.brigade release candidate auditandimport-issuesfor local release candidate provenance checks and work-inbox routing without publishing or remote mutation.brigade center schemafor a read-only wrapper-facing manifest of operator center status, activity, reviews, templates, report, report review, and action queue JSON contracts.brigade center readiness plan/closeout/list/show/import-issuesfor final local operator readiness closeouts over roadmap, docs command inventory, center, release, repo fleet, security, memory, tools, context, learning, waivers, and a manual-only publish checklist.brigade center report diff <base> <compare> --recordfor local operator report diff receipts that track new review items, resolved items, new blockers, and stale receipt references.brigade center actions doctorandimport-issuesfor local operator action aging policy warnings and explicit work-inbox routing.brigade repos discover planfor dry-run repository discovery under explicit configured roots with include/exclude rules, safe labels, path redaction, and no cloning.brigade work runnow records consumed task snapshots in work-session artifacts and stores completed session, dogfood run, and acceptance metadata on completed ledger tasks.brigade work run --queue-nextto queue the successful run's extracted next step, with duplicate pending task protection.brigade work import add/list/show/promoteto manage a gitignored local import inbox for scanner-discovered candidate work.brigade work inboxto group pending scanner imports by source, kind, priority, age, and acceptance coverage with suggested next commands.brigade work import validateandbrigade work import ingestfor scanner-authored JSONL import files.- Scanner-authored task imports can now carry
type,priority,template, andacceptance, and promotion preserves those fields on local ledger tasks. brigade work import plan <import-id>to preview the exact task a reviewed import would create.brigade work import promote --run <import-id>to promote one task import and immediately run it through the work-session loop.brigade work import memory-careto convertmemory/cards/decay/refresh-queue.jsoninto local work imports.brigade memory care init/scan/status/doctor/import-issuesfor read-only local memory card decay scanning, refresh queue production, daily-loop health, and reviewed work inbox routing.- Memory-care scans now flag missing reviewed dates and missing freshness dates, and status output summarizes reviewed, freshness, confidence, and evidence metadata coverage without editing cards.
brigade memory care plan-fixesfor planning-only reviewed/freshness metadata repair candidates with blockers, import metadata, and daily brief visibility.brigade work import chat-sweepto convert.brigade/chat-memory-sweeps/latest.jsonissues into local work imports.brigade work import memory-refreshto convert memory-refresh candidates into TDD-ready scanner task imports with card identity, refresh reason, evidence summary, and acceptance criteria.- Chat sweep imports now convert actionable sweep issues into task imports, preserve local provider/channel/thread/confidence metadata, and omit raw private chat fields.
brigade chat surfaces init/list/show/doctorplusbrigade chat sweep validate/ingest/import-issuesfor local chat export fixtures that normalize safe findings into scanner inbox imports without live chat APIs.- Chat surface providers now support aliases for common export names, including Discord, Slack, Telegram, ClickClack, generic JSON, and JSONL, normalized to canonical provider families.
- Scanner producer imports now use source item keys and fingerprints for idempotency, including dismissed-import protection until a source item materially changes.
- Inbox doctor now reuses the cross-producer provenance audit to flag producer imports missing source identity, source fingerprints, safe summaries, evidence references, or scanner run metadata.
- Context packs now summarize docs and guidance files by presence and safe metadata instead of copying file contents, learning candidates avoid raw import text fallback, and release note inputs redact secret-looking values.
- Memory-care scan issues include stable source fingerprints for stale, expired, undersourced, contradictory, missing-index-link, orphaned-card, oversized-card, and missing-frontmatter findings, while keeping memory card edits explicit.
brigade work scanners init/list/show/plan/doctorfor a gitignored local scanner registry and schedule planner that never executes scanners automatically.brigade work scanners doctor --import-issuesto route scanner registry health warnings into the existing local work inbox.brigade work scanners run <scanner-id>,run --all,run --due,runs, andrun-show <run-id>for explicit local scanner producer execution with gitignored receipts, stdout/stderr logs, output snapshots, due-run planning, pending import count reporting, and scanner-health imports for failed, stale, due, or malformed runs.- Scanner runs can now attach provenance to matching new imports and can explicitly ingest configured JSONL output with
brigade work scanners run ... --ingest-output. brigade work sweep,brigade work sweeps, andbrigade work sweep-show <sweep-id>for explicit daily scanner sweeps that run due producers, ingest configured JSONL outputs by default, write gitignored sweep reports, and keep promotion manual.brigade work sweep-review <sweep-id>andsweep-review latestfor read-only triage of sweep-created imports, skipped and dismissed fingerprints, provenance health, grouping, and suggested next commands.brigade work inbox doctorandbrigade work inbox archivefor scanner inbox hygiene checks and archiving old promoted, dismissed, or superseded imports.brigade work import plan-handoffandpromote-handofffor lint-gated Memory Handoff drafts from durable non-task scanner imports, with provenance preservation and raw chat privacy checks.brigade handoff list/show/archivefor local Memory Handoff draft queue visibility, stale or invalid draft health, and reviewed archive records without running the ingestor.brigade handoff runs,run-show, andreconcilefor local handoff ingestion receipt visibility, draft outcome reconciliation, and archive outcome metadata without running the ingestor.brigade work review init/plan/run/runs/show/import-findings/findings/finding-show/closeoutfor explicit local multi-harness code review producers, receipts, normalized findings, imported finding resolution, local closeout records, andcode-reviewwork inbox imports without automatic fixes or remote mutation.brigade work verify plan/run/runs/showandbrigade work closeout <session-id-or-latest>for local verification receipts and work closeout records that collect task acceptance, test command results, scanner sweep status, code review closeout state, handoff draft status, and session evidence without CI or remote mutation.brigade release plan/doctor/run/runs/showfor local release-readiness receipts that collect work closeout, verification, review closeout, scanner sweep, security, handoff, content-guard, docs, changelog, roadmap, and git-state evidence without pushing, tagging, or mutating remotes.brigade release ci doctor/import-issuesfor local GitHub Actions platform deprecation warnings from workflow files or saved CI summaries, including redacted safe excerpts, release-readiness evidence, and work-inbox routing.brigade release smoke plan/record/list/show/doctorfor local install smoke matrix receipts across supported depth and harness combinations, including stale and missing smoke warnings in release readiness and center activity.brigade release candidate plan/build/list/show/archivefor local release candidate bundles with readiness evidence, release notes drafts, manual-only publish plans, changed file lists, blockers, warnings, and content-guard summaries without pushing, tagging, or creating releases.brigade release candidate compareandcloseoutfor local candidate freshness checks and reviewed, superseded, archived, or draft closeout metadata.brigade context plan/build/list/show/archivefor local context engineering packs with safe summaries, task acceptance, recent evidence, and explicit private-evidence exclusions.brigade context sync plan/recordfor read-only context sync planning receipts against configured harness destinations, with conflict and freshness checks but no context file writes.brigade context doctor/import-issuesfor stale context packs, missing source references, stale task acceptance, stale tool references, andsource: context-packwork imports.brigade projects audit/import-issuesplusbrigade projects readiness plan/record/list/showfor gitignored local project consolidation decisions, manual-only migration planning, and local readiness receipts covering docs, license, security, release, ownership, and migration blockers.brigade projects closeout/closeouts/closeout-showfor reviewed, deferred, superseded, or archived project migration closeouts that quiet unchanged readiness issues and resurface changed fingerprints.brigade learn plan/doctor/import-issuesplusbrigade learn closeout/closeouts/closeout-showfor bounded local learning candidates that become reviewed tasks, handoffs, suppressions, accepted risk, archive, deferral, or dismissal, with unchanged closeouts quieted and changed fingerprints resurfaced.brigade learn replay export/list/show/comparefor safe local before/after learning replay receipts, redacted summaries, compare receipts, release evidence, and operator-center review surfacing.brigade security sarifand security scan SARIF bundle output for dependency-free SARIF 2.1.0 evidence generated from redacted local findings.brigade security template-auditfor focused public template and docs privacy checks, with placeholder allowlists, doctor integration, and release-readiness evidence.- Security guardrail coverage now labels repo guidance, skills, slash commands, subagents, and tool wrappers separately, including prompt-injection and environment-exfiltration patterns with template confidence handling.
- Security policy presets now include
ci, and security closeouts record policy-pack blocker, warning, and accepted-risk evidence for release readiness and candidate packets. brigade tools pack build/list/show/archiveandbrigade tools sync plan/applyfor portable tool evidence bundles and reviewed projection sync over the existing managed projection path.brigade tools parity status/closeoutfor local reviewed projection parity receipts that quiet unchanged missing, stale, unmanaged, conflicted, or parity-gap projection issues while resurfacing changed fingerprints.- Release readiness and release candidate evidence now include tool pack freshness, projection parity closeout state, sync-plan blockers, approval queue counts, run history, and checkpoint state without applying projections.
brigade work backup closeout,brigade security closeout,brigade handoff closeout,brigade memory care closeout, andbrigade work acceptancefor reviewable local closeout and acceptance rollup receipts.- Backup health status now separates raw, active, quieted, changed-fingerprint, and restore rehearsal issue counts, and release evidence includes the safe backup operator summary without copying private destination values.
brigade center status/activity/reviews/templates,brigade center report plan/build/list/show/archive/review/compare/closeout, andbrigade center actions plan/build/list/show/start/done/defer/archivefor local operator-center summaries, local report bundles, reviewed daily action queues, freshness comparison, and report closeout over work, scanner, review, handoff, tool, learning, context, project, security, and release state.brigade roadmap auditandbrigade roadmap patternsfor roadmap closure checks, stale phase warnings, documented command drift, neutral pattern-family coverage, and source-pattern decisions.brigade repos init/list/show/scan/doctor/import-issuesfor gitignored local repo-fleet readiness checks, safe setup metadata, fallback guidance detection, andrepo-fleetwork inbox imports.brigade repos health-commandsfor read-only inspection of optional fleet health command labels, timeouts, latest sweep receipt status, stale receipts, and failed command receipts.brigade repos sweep plan/run/runs/show/closeoutfor explicit repo-fleet evidence refresh sweeps that run configured local read/report commands, write gitignored sweep receipts, track per-repo command status, and surface stale, failed, or unclosed sweeps through repo, center, work, and release health.brigade repos report plan/build/list/show/archive/closeoutandbrigade repos actions plan/build/list/show/start/done/defer/archivefor local repo-fleet operator rollups and reviewed fleet action queues using safe labels, counts, statuses, fingerprints, and receipt labels only.brigade repos actions dispatch plan/apply/report,dispatch --all-reviewed,reconcile, andcontext plan/buildfor routing reviewed fleet actions into target repo work imports, explaining dismissed, superseded, changed, or broken dispatch state, building action-scoped context packs, and reconciling target repo completion evidence back into the local fleet queue.brigade repos release plan/build/list/show/compare/closeout/archivefor local fleet release train bundles that collect per-repo release readiness, release candidates, fleet action reconciliation, verification, review, security, and operator evidence into manual-only publish plans without remote mutation.brigade repos release actionsandbrigade repos release evidencefor reviewed release train action queues and manual publish evidence records that stay local, explicit, and non-executing.brigade repos release reconcileandsummaryfor resolving fleet release actions against manual evidence and including reconciliation summaries in release train closeouts.brigade repos release report/matrix/checklist/hygiene/import-issues/readyfor local release train review reports, matrix tables across readiness, evidence, actions, and waivers, evidence checklists, hygiene checks, unresolved evidence imports, and manual publish readiness gates.brigade repos release waivers,activity,manifest, andauditfor explicit release-train waivers, chronological train activity, bundle manifests, bundle audits, and waiver-aware manual publish readiness.- Release-train waivers now support expiry, owner labels, policy templates, renewal, health checks, work-inbox import routing, and ready/audit visibility for expired, stale, missing-expiry, missing-owner, weak-reason, invalid-scope, repo-drift, or train-changed waivers.
brigade work sweep closeout <sweep-id|latest>for reviewable sweep closeout records that block unresolved pending imports, support explicit deferrals, and surface unclosed sweeps through inbox hygiene.brigade work backup init/status/doctor/import-issuesfor read-only local backup health summaries andbackup-healthinbox imports.- Backup health checks for stale snapshots, failed or stale checks, failed or stale prunes, missing summaries, overdue restore rehearsals, and unsafe private summary fields.
brigade tools init/list/show/search/describe/contracts/call plan/call queue/call list/call show/call approve/call reject/call hold/call run/runtime/policy/plan/apply/doctor/import-issues, plusbrigade tools run list/show/latest/replayandbrigade tools checkpoint list/show/approve/reject/resume, for portable tool, slash command, skill, superpower, script, and MCP catalog discovery plus explicit projection writes, read-only call planning, local call approval review, explicit approved script and local MCP execution, run history inspection, replay review, checkpointed resume, runtime supervision, and host-local execution policy.- Tool catalog health checks for missing sources, missing manifests or schemas, invalid schema JSON, invalid contract schemas, missing examples, bad argument templates, missing contracts, parity gaps, missing projections, unmanaged projections, locally edited managed projections, stale projections, MCP config issues, stale health files, unsafe auth/env fields, and high-risk command shapes.
- Schema-backed call plans validate local JSON args against a dependency-free JSON Schema subset, render configured argument templates, report blockers, and redact secret-looking fields without invoking tools.
- Portable tool call approvals are stored in gitignored
.brigade/tools/calls.jsonl, dedupe equivalent pending or approved calls, reject blocked approvals, and surface stale pending or stale approved calls in doctor, brief, andtool-catalogimports. - Approved portable script calls can now be run explicitly with
brigade tools call run <call-id>or--next, with local receipts and stdout/stderr logs written under gitignored.brigade/tools/runs/. brigade tools run list/show/latest/replayinspects local execution receipts and queues reviewed replay candidates without direct reruns or bypassing approval, runtime, or policy gates.brigade tools checkpoint list/show/approve/reject/resumerecords script-requested local checkpoints, reviews allowed resume choices, and resumes only after revalidating approval, runtime, policy, contract, source, and projection gates.- Approved local MCP calls can now run through
brigade tools call runvia a configured local stdio command, already-running managed runtime, JSON-RPCinitialize/tools/list/tools/call, and receipts with redacted MCP request and response summaries. brigade tools runtime init/list/show/status/start/stop/restart/doctorfor explicit local runtime supervision with PID files, logs, stale PID detection, port conflict checks, health checks, and tool-call runtime gating.brigade tools policy init/show/doctorfor host-local execution policy, including allowed families/effects, denied effects, required approval modes, timeout caps, runtime allow-lists, and env label bindings without storing secrets.- Managed tool projections record source and projection fingerprints so
brigade tools plan,apply, anddoctorcan distinguish missing, current, stale, unmanaged, and conflicted projection states. tool-cataloginbox imports with stable source fingerprints and dismissed-import protection until a catalog issue materially changes.brigade work import triageto group pending imports by source and kind.brigade work import dismissto close noisy imports without promoting them.brigade work import promote --allwith optional--sourceand--kindfilters for batch promotion.brigade work import list/triage/promote/dismissmetadata filters for scanner-specific fields such ashandoff_issue_category.brigade work import dismiss --allfor filtered bulk dismissal of pending imports.brigade handoff doctorto compare pending.claudeand.codexmemory handoffs against gitignored local source config.- Repo installs now include
.brigade/handoff-sources.example.jsonas the local handoff ingestor source-list contract. brigade handoff doctoringestor-log checks for stale latest-run logs, skipped malformed handoffs, warning summaries, and no-reply/no-update masking signals.brigade handoff issuesandbrigade handoff import-issuesto turn handoff ingest warnings into grouped repair guidance and local work imports.brigade handoff issues --categoryandbrigade handoff import-issues --categoryfor category-limited handoff issue review/import.brigade handoff lintto validate pending or explicit handoff files before ingest and catch card/document action mismatches that would be skipped later.brigade handoff sync-issuesto import new handoff-ingest issues without resurrecting dismissed ones and close stale local handoff tasks/imports.docs/import-schema.mddocumenting the local import JSONL contract for scanners and wrappers.- Cybersecurity plugin roadmap covering broad agent-workspace security checks plus Brigade-specific scanner, doctor, import, and multi-harness security checks.
- Built-in
securitystation andbrigade security scanfor read-only agent workspace security checks. - Deeper MCP security checks for unpinned
npx, shell metacharacters, secret-looking env values, sensitive or broad file args, high-risk local commands, large server sets, and missing timeouts. - Supply-chain security checks for package scripts, GitHub Actions permissions and action refs, Python URL dependencies, and legacy install hooks.
brigade security enrichfor explicit post-scan enrichment artifacts, with an offline local provider and opt-in MISP provider config.brigade security scan --import-findingsto route security findings into the local work import inbox for review, with sourcesecurity-scan, stable source fingerprints, safe metadata, evidence paths, and dismissed-import protection.brigade security initto write gitignored local defaults to.brigade/security.toml, including scan profiles, enabled checks, include/exclude paths, severity thresholds, suppressions, and output paths.brigade security config,brigade security doctor,brigade security findings, andbrigade security show <finding-id>for local config inspection, health checks, grouped finding review, and single-finding inspection.brigade security fixto create the local security artifact directory and refresh the managed.gitignoreblock.brigade security review,brigade security suppress, andbrigade security unsuppressfor a local finding review lifecycle with required suppression reasons. Suppress and unsuppress accept finding ids, id prefixes, or fingerprints.- Security policy presets (
personal,public-repo,strict), scan profiles (public-repo,internal-workspace,local-only-audit), template scanning controls, stable finding ids and fingerprints, and fingerprint suppressions. brigade security scan --output-dir <dir>to write redactedsecurity-report.jsonandsecurity-report.mdevidence bundles.brigade work brief,brigade doctor, andbrigade work doctornow report security config health, latest security evidence bundle status, open finding health, and local security artifact ignore coverage.brigade doctorandbrigade work doctornow warn on stale security suppressions and suppressions missing reasons.- Security scan secret evidence is redacted before reports, docs, session artifacts, or work imports are written.
ROADMAP.mdcovering the daily-driver path, scanner-ready inbox, chat-surface scanners, memory-card decay refresh, and portable operator setup.brigade work noteto append timestamped checkpoints to the active work session without ending it.brigade work doctorto check dogfood config, Codex availability, local artifact paths, handoff inbox, ignore coverage, and latest run context for the daily work loop.- Workspace installs now include
.brigade/memory-care.example.jsonas a scanner wiring contract for memory-care decay output. - Workspace installs now include
.brigade/chat-memory-sweep.example.jsonplus an OpenClaw memory-sweep cron fragment for nightly chat/session sweep wiring. - Roster-level and per-agent
timeout_secondscontrols for bounded CLI calls. brigade run --read-onlyprompt policy for planning and review runs that should inspect and recommend only, with nativecodex exec --sandbox read-onlyenforcement for Codex agents.
brigade roadmap auditnow reads documented commands from command snippets instead of prose and normalizes parameterized examples such asbrigade tools show <id>to their CLI command path.brigade roadmap audit --jsonnow includes deferred roadmap ownership records with subsystem, owner, reason, source section, status, and suggested phase.- Roadmap phase headings now distinguish foundations, active work, and the phase queue so stale Current/Next warnings are actionable.
- Public repo contents now keep live dogfood workspace files, internal planning notes, and root memory cards untracked; public templates remain under
src/brigade/templates/. - Dogfood handoff defaults now use
.codex/memory-handoffs/for new Codex-driven local configs while preserving explicit configured inbox paths such as.claude/memory-handoffs/. - Bootstrap truncation is now treated as a hard doctor failure to prevent by moving durable detail into memory cards before agents load context.
- Dogfood runs now default to a 600 second per-agent timeout for practical daily repo reviews.
- Dogfood next-step extraction now handles markdown
## Nextsections and can fall back tosummary.mdwhenfinal.txtdoes not contain a next-step label. brigade work runnow consumes the oldest pending ledger task before falling back to the latest extracted dogfood next step, and marks consumed tasks done after successful runs.brigade work task add --from-nextnow reuses an equivalent pending task instead of adding duplicates.brigade work briefnow reports acceptance coverage for the next ledger task, andbrigade work runpasses accepted ledger criteria into the dogfood task prompt.brigade work briefnow includes pending local work imports and import counts in both text and JSON output.brigade work briefnow surfaces issue-backed next-task context.brigade work doctornow warns on pending tasks without acceptance criteria, unchecked or closed issue-backed tasks, and active work sessions left open too long.brigade work doctornow warns on stale scanner imports, task imports missing acceptance criteria, and noisy scanner sources with many dismissed imports.brigade work briefnow surfaces pending handoff ingest issue counts when the local handoff source config has an ingestor latest-run log.- The managed gitignore block now treats
.brigade/dogfood.toml,.brigade/security.toml,.brigade/runs/, and.brigade/security/as local state. - The managed gitignore block now treats
.brigade/handoff-sources.jsonas host-local state. - Live smoke docs now keep Codex agent execution in a trusted repo cwd while writing temporary roster, artifacts, and handoff output under
/tmp. - Handoff write failures now preserve final run artifacts, print the final answer, return nonzero, and mark
run.jsonashandoff-failed. - Dogfood runs default to prompt-level read-only plus Codex's
danger-full-accesssandbox setting for trusted-workspace use so repo inspection works on hosts where native read-only sandboxing blocks shell inspection;--native-read-only-sandboxopts into stricter native enforcement.
brigade initnow collapses mixed current and legacy managed.gitignoreblocks into one regenerated Brigade block.
0.6.0 - 2026-05-24
- Managed tools: external CLIs that Brigade can install and wire per station via
brigade add <station>. Brigade shells out to each tool, never importing it in process. memory-doctorandbootstrap-doctorattached to thememorystation.content-guardattached to theguardstation.- New
tokensstation with Token Glace for output compaction. brigade doctorfolds installed managed tools into its report and surfaces each tool's own health. Tools that are not installed are reported as non-failing[todo]hints, so doctor stays green on a bare host.memory-doctorandbootstrap-doctorinspect the operator's canonical memory and bootstrap files (host-global), so their findings are labeled operator-scoped and treated as advisory[warn], never failing a workspacebrigade doctorrun.
0.5.0 - 2026-05-24
- Renamed the project to Brigade. The PyPI distribution is now
brigade-cliand the command isbrigade. The workspace config directory is now.brigade, with a.solo-miseread fallback so older installs keep working.
- Built-in station registry that drives the doctor checks.
brigade statuscommand, alongsidebrigade initandbrigade doctor, reporting over the station registry.
- The
solo-misecommand is kept as a deprecated alias forbrigade.
0.4.0 - 2026-05-17
- Removed the
--profile <name>flag fromsolo-mise init. The flag has been deprecated since v0.3.0 with a stderr migration warning. Use--depth <minimal|standard|deep>plus--harnesses <list>instead. Migration table in the v0.3.0 notes below.
Removed src/solo_mise/init.py, the templates/profiles/ directory and its six legacy profile manifests, plus templates.load_profile and selection.profile_to_selection. No user-facing impact beyond the flag removal above.
Same as v0.3.0. If you somehow have v0.2.0-era scripts still using --profile, see the table in the v0.3.0 section below.
0.3.0 - 2026-05-16
- Two-axis selection model:
--depth {repo,workspace}+--harnesses {claude,codex,openclaw,hermes}+--include publisher. Pick any combination of harnesses. - Interactive prompt on bare
solo-mise init(no flags). Defaults to claude + repo + no includes. .solo-mise/config.jsonis now the per-target source of truth for selection state. Read bydoctor,ingest, andreconfigure.solo-mise reconfigure --target . [--prune]adjusts an existing install to a new selection.--pruneremoves orphaned files for deselected harnesses.- Per-writer handoff inboxes:
.codex/memory-handoffs/for Codex (in addition to existing.claude/memory-handoffs/). - Ingester now scans all configured writer inboxes.
- Doctor reports apparent harness shape, checks per-writer inbox, warns on orphaned inbox dirs from unselected harnesses.
- README reframed around the two-axis model. New "Picking your harnesses" section walks through four common combos.
- CONTRIBUTING.md "Adding a profile" replaced by "Adding a harness" + "Adding a depth" + "Adding an include".
solo-mise init --profile <x>still works but prints a stderr deprecation note pointing at the new flags. Will be removed in v0.4.0.
If you have v0.2.0 scripts using --profile:
| v0.2.0 | v0.3.0+ |
|---|---|
--profile repo |
--depth repo --harnesses claude |
--profile workspace |
--depth workspace --harnesses claude |
--profile openclaw |
--depth workspace --harnesses claude,openclaw |
--profile hermes |
--depth workspace --harnesses claude,hermes |
--profile generic |
--depth workspace --harnesses none |
--profile publisher |
--depth repo --harnesses claude --include publisher |
0.2.0 - 2026-05-16
- Memory-care staleness scaffolding:
memory/cards/decay/layout and a doctor warning when the decay folder is missing, so durable cards do not quietly rot. - Multi-workspace handoff patterns for users administering more than one agent
home; secondary workspaces write into their own
.claude/memory-handoffs/, the owner pulls those into a staging inbox. - TokenJuice output-compaction guidance card covering Claude Code's PreToolUse wrapper path, Codex hook setup, and realistic savings expectations.
- Obsidian
/noteskill template underskills/note/for theworkspaceprofile. scripts/backup-restic.shtemplate, exposed via theworkspaceprofile.- Managed
.gitignoreblock:solo-mise initnow creates or updates a# >>> solo-mise gitignore block >>>section in the target's.gitignore. Re-runs replace only the content between the markers, so user-authored rules are preserved. Skip with--no-gitignore. - Release pipeline:
.github/workflows/publish.ymlbuilds an sdist + wheel on everyv*tag and pushes to PyPI. - CI matrix:
install-from-sourcesmoke now runs against all six profiles (repo,workspace,openclaw,hermes,generic,publisher). - Project meta:
CONTRIBUTING.md,SECURITY.md,CODE_OF_CONDUCT.md, and.github/ISSUE_TEMPLATE/(bug, profile-init-fails, ingester-misclassified).
- Deepened the
workspaceprofile's bootstrap files (AGENTS.md,CLAUDE.md,IDENTITY.md,SOUL.md,HEARTBEAT.md,MEMORY.md,SAFETY_RULES.md,TOOLS.md,USER.md,INSTALL_FOR_AGENTS.md). - README: centered banner, refreshed badges, added a sample
doctorrun, noted that solo-mise makes no network calls, called outinitidempotency. - CI now pins the
content-guardcheckout tov0.1.1instead of tracking the default branch. solo-mise init --profile hermesprints a louder experimental-status notice on stderr in addition to the post-install note.
- Stale
DREAMS.mdfrom the repo root and lingering references in templates.
0.1.0 - 2026-05-13
Initial release.
solo-miseCLI withinit,doctor,scrub, andhandoff-templatesubcommands.- Six profiles:
repo(default),workspace,openclaw,hermes,generic,publisher. - Conservative handoff ingester at
.claude/memory-handoffs/: safe card handoffs become cards, targeted updates append, ambiguous material is kicked out for review. - Content-guard pre-push hook for public-leak prevention.
- Sanitized bootstrap file set, starter memory cards, routing rules.
- OpenClaw adapter fragments and harness-aware doctor checks.
- Experimental Hermes adapter fragments.