Brigade is the brigade de cuisine, but a kitchen is a team of stations. This is the Escoffier Labs fleet: which tools Brigade actually calls, the evidence pipeline that feeds it, and why the kitchen metaphor turns out to be the architecture.
Auguste Escoffier’s contribution to cooking was not a recipe — it was an org chart. The brigade de cuisine split a chaotic kitchen into stations, each owning one job, each handing off cleanly to the next, with the chef coordinating. Escoffier Labs is that idea applied to agent operations: one small, sharp tool per concern, composed by Brigade.
Brigade is the executive chef and the pass. The fleet is the line. Crucially, Brigade keeps the line at arm’s length: it never imports another fleet tool as a Python library. Every relationship below is either a subprocess shell-out to a tool’s own CLI, an install argument, or a small shared constant. That is what keeps each tool independently shippable and Brigade dependency-free.
Hub-and-spoke of the code-confirmed integrations. Solid edges are subprocess calls or install targets Brigade drives; dashed edges are the reverse — tools that depend on Brigade (a shared budget constant) or feed it through a skill rather than being called by it.
brigade → content-guardscrubbrigade → agentpantryauth syncbrigade → code-searchsearchbrigade → miseledgerevidencebrigade → agent-notifynotifybrigade → tokenjuicecompactmemory-doctor ⇢ brigadeimportsskillet ⇢ brigadehandoffsbrigade ⇢ solos-cookbookdoctrineThe evidence station is the clearest example of fleet composition. Two exporters normalize agent activity into one shared schema (miseledger.adapter.v1 JSONL); miseledger is the local SQLite ledger Brigade queries for investigation and release evidence. Each stage is a separate, independently shippable Go tool.
Every Escoffier Labs tool, its role, stack, and exact relationship to Brigade. "declares" = linked in brigade’s pyproject; "calls" = Brigade shells out to it; "feeds" = it sends data into Brigade; "imports" = it depends on a brigade constant; "independent" = thematically part of the fleet but not wired into Brigade; "planned" = design only, not shipped.
| Tool | Role | Stack | Relation to Brigade |
|---|---|---|---|
| content-guard | Publish-safety / content scrub gate | Python | declares shelled by scrub.py; linked in pyproject |
| agentpantry | Agent session auth / secret sync | Go (GitHub releases) | declares go install + linked in pyproject |
| solos-cookbook | The production doctrine Brigade packages | Docs | declares linked in pyproject (Cookbook) |
| code-search-api | Local semantic code search | Python / FastAPI | calls reached over plain local HTTP |
| code-search-mcp | MCP wrapper over code-search-api | Node / TypeScript | feeds feeds code context to agents |
| miseledger | Local-first evidence ledger | Go / SQLite | feeds queried by the evidence station |
| stationtrail | Agent session-log exporter | Go | feeds feeds miseledger (adapter.v1) |
| sourceharvest | Local notes + git exporter | Go | feeds feeds miseledger (adapter.v1) |
| tokenjuice | Output compaction (tokens station) | CLI | calls managed + shelled by Brigade |
| agent-notify | Operator notification wiring | CLI | calls managed + shelled by Brigade |
| memory-doctor | Memory-index health checks | CLI | imports imports brigade.budgets constant |
| bootstrap-doctor | Bootstrap-file health checks | CLI | imports optionally sources brigade.budgets |
| skillet | Reusable agent skills (process roster) | Agent skills | feeds brigade-handoffs skill writes Brigade memory |
| mise-en-scene | Interactive technical explainers | React / TypeScript | independent presentation; not wired into Brigade |
| cloche | Screenshot / image-card capture | Rust (crates.io) | independent session-capture utility |
| usage-tracker | Token / cost analytics | React / TypeScript | independent observability; not wired into Brigade |
| upstream-drift | LLM-summarized upstream watcher | CLI | independent independent utility |
| escoffier-fleet-kit | Fleet publishing / branding infra | Tooling | independent meta; builds the fleet, not called by it |
| shortlist | Candidate triage (design + phase-1 plan) | Design only | planned specs only — no source shipped |
The kitchen names are not flavor text. Each encodes an operational principle that shows up directly in the code.
| Kitchen role | Fleet expression | Operating principle |
|---|---|---|
| Brigade de cuisine | Brigade CLI | A coordinated team beats a lone generalist; the chef owns the pass. |
| Mise en place | Two-layer memory + init | Prep everything before service; slim index, detail on demand. |
| Stations | core / memory / guard / search / ... | One concern per station, each with its own doctor health check. |
| The pass | content-guard + scrub | Nothing leaves the kitchen without passing the chef’s inspection. |
| Expediter (aboyeur) | brigade run orchestrator | One voice calls and sequences the orders across the line. |
| Dockets / receipts | plain-file receipts | Every order is written down: auditable, greppable, never silent. |
| Garde-manger / larder | memory station / pantry | Cold prep and provisioning kept ready and labeled, not hunted for. |