brigade-cli 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. brigade_cli-0.5.0/LICENSE +21 -0
  2. brigade_cli-0.5.0/MANIFEST.in +4 -0
  3. brigade_cli-0.5.0/PKG-INFO +211 -0
  4. brigade_cli-0.5.0/QUICKSTART.md +101 -0
  5. brigade_cli-0.5.0/README.md +188 -0
  6. brigade_cli-0.5.0/pyproject.toml +44 -0
  7. brigade_cli-0.5.0/setup.cfg +4 -0
  8. brigade_cli-0.5.0/src/brigade/__init__.py +3 -0
  9. brigade_cli-0.5.0/src/brigade/__main__.py +5 -0
  10. brigade_cli-0.5.0/src/brigade/cli.py +258 -0
  11. brigade_cli-0.5.0/src/brigade/config.py +65 -0
  12. brigade_cli-0.5.0/src/brigade/doctor.py +393 -0
  13. brigade_cli-0.5.0/src/brigade/fragments.py +64 -0
  14. brigade_cli-0.5.0/src/brigade/handoff.py +23 -0
  15. brigade_cli-0.5.0/src/brigade/ingest.py +298 -0
  16. brigade_cli-0.5.0/src/brigade/install.py +217 -0
  17. brigade_cli-0.5.0/src/brigade/prompt.py +135 -0
  18. brigade_cli-0.5.0/src/brigade/py.typed +0 -0
  19. brigade_cli-0.5.0/src/brigade/reconfigure.py +64 -0
  20. brigade_cli-0.5.0/src/brigade/registry.py +39 -0
  21. brigade_cli-0.5.0/src/brigade/scrub.py +90 -0
  22. brigade_cli-0.5.0/src/brigade/selection.py +66 -0
  23. brigade_cli-0.5.0/src/brigade/station.py +36 -0
  24. brigade_cli-0.5.0/src/brigade/status.py +24 -0
  25. brigade_cli-0.5.0/src/brigade/templates/claude/memory-handoffs/TEMPLATE.md +57 -0
  26. brigade_cli-0.5.0/src/brigade/templates/codex/memory-handoffs/TEMPLATE.md +57 -0
  27. brigade_cli-0.5.0/src/brigade/templates/depth/repo.json +12 -0
  28. brigade_cli-0.5.0/src/brigade/templates/depth/workspace.json +30 -0
  29. brigade_cli-0.5.0/src/brigade/templates/generic/harness-adapter-checklist.md +55 -0
  30. brigade_cli-0.5.0/src/brigade/templates/generic/memory-contract.md +41 -0
  31. brigade_cli-0.5.0/src/brigade/templates/harnesses/claude.json +12 -0
  32. brigade_cli-0.5.0/src/brigade/templates/harnesses/codex.json +11 -0
  33. brigade_cli-0.5.0/src/brigade/templates/harnesses/hermes.json +16 -0
  34. brigade_cli-0.5.0/src/brigade/templates/harnesses/openclaw.json +17 -0
  35. brigade_cli-0.5.0/src/brigade/templates/hermes/README.md +25 -0
  36. brigade_cli-0.5.0/src/brigade/templates/hermes/memory-handoff.harness.json +36 -0
  37. brigade_cli-0.5.0/src/brigade/templates/hermes/model-lanes.harness.json +17 -0
  38. brigade_cli-0.5.0/src/brigade/templates/hermes/workspace.harness.json +30 -0
  39. brigade_cli-0.5.0/src/brigade/templates/hooks/pre-push +36 -0
  40. brigade_cli-0.5.0/src/brigade/templates/includes/publisher.json +15 -0
  41. brigade_cli-0.5.0/src/brigade/templates/memory/cards/backup-restic.md +126 -0
  42. brigade_cli-0.5.0/src/brigade/templates/memory/cards/chat-surface-crawlers.md +103 -0
  43. brigade_cli-0.5.0/src/brigade/templates/memory/cards/content-safety.md +54 -0
  44. brigade_cli-0.5.0/src/brigade/templates/memory/cards/handoff-flow.md +70 -0
  45. brigade_cli-0.5.0/src/brigade/templates/memory/cards/memory-architecture.md +56 -0
  46. brigade_cli-0.5.0/src/brigade/templates/memory/cards/memory-care-staleness.md +58 -0
  47. brigade_cli-0.5.0/src/brigade/templates/memory/cards/memory-scanner.md +98 -0
  48. brigade_cli-0.5.0/src/brigade/templates/memory/cards/multi-workspace-handoff-admin.md +63 -0
  49. brigade_cli-0.5.0/src/brigade/templates/memory/cards/obsidian-notes.md +82 -0
  50. brigade_cli-0.5.0/src/brigade/templates/memory/cards/pipeline-standups.md +88 -0
  51. brigade_cli-0.5.0/src/brigade/templates/memory/cards/tokenjuice-output-compaction.md +106 -0
  52. brigade_cli-0.5.0/src/brigade/templates/openclaw/README.md +40 -0
  53. brigade_cli-0.5.0/src/brigade/templates/openclaw/acp-escalation.openclaw.json +33 -0
  54. brigade_cli-0.5.0/src/brigade/templates/openclaw/model-aliases.openclaw.json +21 -0
  55. brigade_cli-0.5.0/src/brigade/templates/openclaw/ollama-memory-search.openclaw.json +24 -0
  56. brigade_cli-0.5.0/src/brigade/templates/policies/public-content.json +28 -0
  57. brigade_cli-0.5.0/src/brigade/templates/policies/public-repo.json +27 -0
  58. brigade_cli-0.5.0/src/brigade/templates/scripts/backup-restic.sh +156 -0
  59. brigade_cli-0.5.0/src/brigade/templates/skills/note/SKILL.md +173 -0
  60. brigade_cli-0.5.0/src/brigade/templates/workspace/AGENTS.md +146 -0
  61. brigade_cli-0.5.0/src/brigade/templates/workspace/CLAUDE.md +48 -0
  62. brigade_cli-0.5.0/src/brigade/templates/workspace/HEARTBEAT.md +41 -0
  63. brigade_cli-0.5.0/src/brigade/templates/workspace/IDENTITY.md +27 -0
  64. brigade_cli-0.5.0/src/brigade/templates/workspace/INSTALL_FOR_AGENTS.md +61 -0
  65. brigade_cli-0.5.0/src/brigade/templates/workspace/MEMORY.md +102 -0
  66. brigade_cli-0.5.0/src/brigade/templates/workspace/SAFETY_RULES.md +164 -0
  67. brigade_cli-0.5.0/src/brigade/templates/workspace/SOUL.md +92 -0
  68. brigade_cli-0.5.0/src/brigade/templates/workspace/TOOLS.md +116 -0
  69. brigade_cli-0.5.0/src/brigade/templates/workspace/USER.md +88 -0
  70. brigade_cli-0.5.0/src/brigade/templates.py +88 -0
  71. brigade_cli-0.5.0/src/brigade_cli.egg-info/PKG-INFO +211 -0
  72. brigade_cli-0.5.0/src/brigade_cli.egg-info/SOURCES.txt +91 -0
  73. brigade_cli-0.5.0/src/brigade_cli.egg-info/dependency_links.txt +1 -0
  74. brigade_cli-0.5.0/src/brigade_cli.egg-info/entry_points.txt +3 -0
  75. brigade_cli-0.5.0/src/brigade_cli.egg-info/requires.txt +3 -0
  76. brigade_cli-0.5.0/src/brigade_cli.egg-info/top_level.txt +1 -0
  77. brigade_cli-0.5.0/tests/test_cli_alias.py +10 -0
  78. brigade_cli-0.5.0/tests/test_config.py +83 -0
  79. brigade_cli-0.5.0/tests/test_doctor.py +212 -0
  80. brigade_cli-0.5.0/tests/test_fragments.py +142 -0
  81. brigade_cli-0.5.0/tests/test_gitignore.py +131 -0
  82. brigade_cli-0.5.0/tests/test_handoff.py +29 -0
  83. brigade_cli-0.5.0/tests/test_ingest.py +295 -0
  84. brigade_cli-0.5.0/tests/test_init.py +249 -0
  85. brigade_cli-0.5.0/tests/test_install.py +88 -0
  86. brigade_cli-0.5.0/tests/test_neutrality.py +43 -0
  87. brigade_cli-0.5.0/tests/test_prompt.py +39 -0
  88. brigade_cli-0.5.0/tests/test_reconfigure.py +42 -0
  89. brigade_cli-0.5.0/tests/test_registry.py +18 -0
  90. brigade_cli-0.5.0/tests/test_scrub.py +86 -0
  91. brigade_cli-0.5.0/tests/test_selection.py +76 -0
  92. brigade_cli-0.5.0/tests/test_station.py +26 -0
  93. brigade_cli-0.5.0/tests/test_status.py +27 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Solomon Neas
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,4 @@
1
+ recursive-include src/solo_mise/templates *
2
+ include README.md
3
+ include QUICKSTART.md
4
+ include LICENSE
@@ -0,0 +1,211 @@
1
+ Metadata-Version: 2.4
2
+ Name: brigade-cli
3
+ Version: 0.5.0
4
+ Summary: Run your agent brigade: an operator-system CLI that bootstraps, checks, and operates agent workspaces across harnesses.
5
+ Author-email: Solomon Neas <srneas@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/escoffier-labs/brigade
8
+ Project-URL: Cookbook, https://github.com/solomonneas/solos-cookbook
9
+ Project-URL: Issues, https://github.com/escoffier-labs/brigade/issues
10
+ Keywords: agents,openclaw,claude-code,codex,memory,bootstrap,brigade,operator
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Requires-Python: >=3.10
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ Provides-Extra: dev
21
+ Requires-Dist: pytest>=7; extra == "dev"
22
+ Dynamic: license-file
23
+
24
+ <p align="center">
25
+ <img src="docs/assets/solo-mise-banner.png" alt="Solomon's Mise en Place banner">
26
+ </p>
27
+
28
+ <h1 align="center">Solomon's Mise en Place</h1>
29
+
30
+ <p align="center">
31
+ <strong>Mise en place for agent memory.</strong>
32
+ </p>
33
+
34
+ <p align="center">
35
+ <em>Public-safe workspace bootstrap, memory handoffs, and publish guards for real agent setups.</em>
36
+ </p>
37
+
38
+ <p align="center">
39
+ <img src="https://img.shields.io/github/actions/workflow/status/escoffier-labs/brigade/ci.yml?branch=main&style=for-the-badge&label=ci" alt="CI status">
40
+ <img src="https://img.shields.io/badge/python-3.10%2B-blue?style=for-the-badge&logo=python&logoColor=white" alt="Python 3.10+">
41
+ <img src="https://img.shields.io/badge/license-MIT-green?style=for-the-badge" alt="MIT license">
42
+ <img src="https://img.shields.io/badge/harnesses-4-orange?style=for-the-badge" alt="4 harnesses">
43
+ </p>
44
+
45
+ <p align="center">
46
+ <code>brigade</code> is the installable starter kit behind <a href="https://github.com/solomonneas/solos-cookbook">Solomon's Guide to Cookin' with Gas</a>.
47
+ It gives you the workspace skeleton, handoff inbox, conservative ingester, and publish guard that make a multi-agent setup usable without leaking private junk into public repos.
48
+ </p>
49
+
50
+ ## What this is
51
+
52
+ Mise en place means "everything in its place before the work starts." In a kitchen, that is chopped mirepoix, clean pans, labels, and a station that does not make you hunt for salt & butter mid-service. For agents, it is the same idea: rules, memory, tools, handoff inboxes, publish guards, and boring verification already laid out before the session gets expensive.
53
+
54
+ This package lays down a clean starting point for an agent workspace or a repo that needs durable memory handoffs. It is meant for people running real tools, real docs, and real automation across OpenClaw, Claude Code, Codex, Hermes, or a similar harness.
55
+
56
+ The cookbook explains the why. This package gives you the kitchen.
57
+
58
+ ## What you get
59
+
60
+ - sanitized bootstrap files for agent behavior, safety, tools, identity, and memory
61
+ - a canonical memory layout where one configured owner holds durable knowledge
62
+ - a shared `.claude/memory-handoffs/` inbox for Claude Code, Codex, and other side harnesses
63
+ - starter memory cards and routing rules
64
+ - multi-workspace handoff patterns for people administering more than one agent setup
65
+ - memory-care staleness checks so durable cards do not quietly rot
66
+ - TokenJuice output-compaction guidance for Claude Code and Codex, including wrapper notes and savings expectations
67
+ - content-guard publish gates so private infrastructure does not leak into public docs
68
+ - adapter fragments for OpenClaw (tested), Hermes (stubbed), and generic harnesses
69
+ - doctor checks that prove the system is wired before you trust it
70
+
71
+ ## What you do not get
72
+
73
+ - private hostnames, IPs, account IDs, or personal details
74
+ - live auth profiles or OAuth tokens
75
+ - cron jobs that post publicly by default
76
+ - destructive automation or write-enabled integrations without explicit opt-in
77
+
78
+ ## Install
79
+
80
+ ```bash
81
+ pipx install brigade-cli
82
+ ```
83
+
84
+ Or, to track `main`:
85
+
86
+ ```bash
87
+ pipx install git+https://github.com/escoffier-labs/brigade
88
+ ```
89
+
90
+ The workspace config directory is `.brigade` (older `.solo-mise` installs are still read), and the `solo-mise` command is a deprecated alias for `brigade`.
91
+
92
+ ## Quick path
93
+
94
+ Run `brigade init` with no flags for the interactive picker:
95
+
96
+ ```bash
97
+ brigade init --target ~/agent-kitchen
98
+ ```
99
+
100
+ For CI or scripts, pass flags directly:
101
+
102
+ ```bash
103
+ brigade init --target ~/agent-kitchen --depth workspace --harnesses claude,codex,openclaw
104
+ brigade init --target ./repo --depth repo --harnesses codex
105
+ brigade init --target ./repo --harnesses none # generic install
106
+ ```
107
+
108
+ Once installed, `brigade doctor` verifies the wiring and `brigade status` reports over the station registry.
109
+
110
+ ## Two axes: depth + harnesses
111
+
112
+ brigade installs material on two independent axes:
113
+
114
+ **Depth, how much shared baseline you want:**
115
+
116
+ | Depth | Installs |
117
+ |---|---|
118
+ | `repo` *(default)* | `AGENTS.md`, `SAFETY_RULES.md`, `INSTALL_FOR_AGENTS.md`, `hooks/pre-push`, `.brigade/policies/public-repo.json` |
119
+ | `workspace` | repo + `MEMORY.md`, `TOOLS.md`, `USER.md`, `SOUL.md`, `IDENTITY.md`, `HEARTBEAT.md`, `memory/cards/`, starter cards |
120
+
121
+ **Harnesses, which tools you actually use:**
122
+
123
+ | Harness | Role | Adds |
124
+ |---|---|---|
125
+ | `claude` | writer | `CLAUDE.md` + `.claude/memory-handoffs/` inbox |
126
+ | `codex` | writer | `.codex/memory-handoffs/` inbox (AGENTS.md is in the baseline) |
127
+ | `openclaw` | reader | `.brigade/openclaw/` config fragments + cron stubs |
128
+ | `hermes` | reader | `.brigade/hermes/` adapter fragments (experimental) |
129
+
130
+ **Includes, optional add-ons:**
131
+
132
+ | Include | Adds |
133
+ |---|---|
134
+ | `publisher` | `.brigade/policies/public-content.json` + content-safety memory card + scrub-cache |
135
+
136
+ ## Picking your harnesses
137
+
138
+ Four common combos:
139
+
140
+ - **Claude Code only:** `--harnesses claude`, the lightest setup, just one writer.
141
+ - **Claude Code + OpenClaw:** `--harnesses claude,openclaw`, durable memory owner (OpenClaw) plus side writer (Claude Code).
142
+ - **Claude Code + Codex + OpenClaw:** `--harnesses claude,codex,openclaw`, both writers feed into OpenClaw as the canonical owner.
143
+ - **Codex + OpenClaw:** `--harnesses codex,openclaw`, Codex-first user with OpenClaw as the canonical store.
144
+
145
+ The canonical memory owner is picked automatically by priority (`openclaw > hermes > claude > codex > this-repo`). Override with `--owner`.
146
+
147
+ Re-running `brigade init` against an existing target is safe. It refuses to overwrite tracked files without `--force`, and the `.gitignore` block it manages is replaced between its markers without touching the rest of your file.
148
+
149
+ See [QUICKSTART.md](QUICKSTART.md) for setup, verification, and the ingest flow.
150
+
151
+ ### What a green doctor looks like
152
+
153
+ ```text
154
+ brigade doctor: target /home/you/agent-kitchen (generic)
155
+ [ok] bootstrap: AGENTS.md /home/you/agent-kitchen/AGENTS.md
156
+ [ok] bootstrap: CLAUDE.md /home/you/agent-kitchen/CLAUDE.md
157
+ [ok] bootstrap: MEMORY.md /home/you/agent-kitchen/MEMORY.md
158
+ [ok] bootstrap: TOOLS.md /home/you/agent-kitchen/TOOLS.md
159
+ [ok] bootstrap: USER.md /home/you/agent-kitchen/USER.md
160
+ [ok] bootstrap: SAFETY_RULES.md /home/you/agent-kitchen/SAFETY_RULES.md
161
+ [ok] bootstrap: INSTALL_FOR_AGENTS.md /home/you/agent-kitchen/INSTALL_FOR_AGENTS.md
162
+ [ok] handoff: inbox /home/you/agent-kitchen/.claude/memory-handoffs
163
+ [ok] handoff: TEMPLATE.md /home/you/agent-kitchen/.claude/memory-handoffs/TEMPLATE.md
164
+ [ok] handoff: processed/ /home/you/agent-kitchen/.claude/memory-handoffs/processed
165
+ [ok] memory: cards/ /home/you/agent-kitchen/memory/cards
166
+ [ok] publish: hooks/pre-push /home/you/agent-kitchen/hooks/pre-push
167
+ [ok] publish: content-guard /home/you/repos/content-guard
168
+
169
+ summary: 14 checks, 0 failed, 0 manual
170
+ ```
171
+
172
+ Anything `[warn]` is fine; `[fail]` means the install is incomplete. The `openclaw` and `hermes` harnesses add their own checks on top.
173
+
174
+ ### Privacy
175
+
176
+ brigade makes no network calls. It does not phone home, collect telemetry, or sync anything to a server. Everything happens on your local filesystem against the templates packaged with the install. The only file that touches the network is the `pre-push` hook, and it runs the local `content-guard` scanner against your own commits before they leave the machine.
177
+
178
+ ## The design
179
+
180
+ One memory owner stays canonical (typically OpenClaw or Hermes when present, otherwise `this-repo`). Writer harnesses drop handoffs into their own inboxes; the ingester scans all of them.
181
+
182
+ ```text
183
+ Claude Code Codex
184
+ | |
185
+ v v
186
+ .claude/memory-handoffs/ .codex/memory-handoffs/
187
+ \ /
188
+ \ /
189
+ v v
190
+ brigade ingest
191
+ |
192
+ v
193
+ memory/cards/*.md, TOOLS.md, USER.md,
194
+ rules/*.md, .learnings/*.md
195
+ ```
196
+
197
+ The ingester is intentionally conservative. Safe card handoffs become cards. Targeted updates append to the right file. Ambiguous material gets kicked out for review instead of being trusted automatically.
198
+
199
+ For users running multiple agent homes, treat the owner workspace as the hub. Remote or secondary workspaces can write handoffs into their own per-harness inboxes, then a trusted sync pulls those files into a staging inbox on the owner. That keeps agents informed about what happened elsewhere without creating multiple canonical memories.
200
+
201
+ Token-heavy terminal work gets the same treatment: make the wrapper explicit, make the escape hatch obvious, and tell every harness what is happening. The TokenJuice starter card documents Claude Code's PreToolUse wrapper path, Codex's hook setup, and the savings model.
202
+
203
+ ## Related
204
+
205
+ - [Solomon's Cookbook](https://github.com/solomonneas/solos-cookbook): the long-form guide and reference docs
206
+ - [content-guard](https://github.com/solomonneas/content-guard): the publish-gate scanner used by the pre-push hook
207
+ - [OpenClaw](https://github.com/openclaw/openclaw): the reference memory owner
208
+
209
+ ## License
210
+
211
+ MIT
@@ -0,0 +1,101 @@
1
+ # Quickstart
2
+
3
+ Five minutes from clone to a working agent kitchen.
4
+
5
+ ## 1. Install
6
+
7
+ ```bash
8
+ pipx install git+https://github.com/solomonneas/solo-mise
9
+ ```
10
+
11
+ If you do not have `pipx`:
12
+
13
+ ```bash
14
+ python3 -m pip install --user pipx
15
+ python3 -m pipx ensurepath
16
+ ```
17
+
18
+ ## First install
19
+
20
+ The fastest path is to run `solo-mise init` with no flags and answer the prompts:
21
+
22
+ ```bash
23
+ $ solo-mise init --target ~/agent-kitchen
24
+
25
+ Which harnesses do you use? (type numbers separated by space/comma to toggle, enter to confirm)
26
+ [x] 1. Claude Code
27
+ [ ] 2. Codex
28
+ [ ] 3. OpenClaw
29
+ [ ] 4. Hermes (experimental)
30
+
31
+ Depth? (type a number, enter for default)
32
+ * 1. repo (handoff flow + publish guard)
33
+ 2. workspace (full home: MEMORY.md, TOOLS.md, USER.md, ...)
34
+
35
+ Add-ons? (type numbers separated by space/comma to toggle, enter to confirm)
36
+ [ ] 1. publisher (content-guard policies for blog/social/docs)
37
+ ```
38
+
39
+ Defaults are claude harness, repo depth, no includes. Enter ships the install.
40
+
41
+ ## CI / scripted install
42
+
43
+ Pass flags directly to skip the prompt:
44
+
45
+ ```bash
46
+ # Claude Code + Codex + OpenClaw, full workspace
47
+ solo-mise init --target ~/agent-kitchen \
48
+ --depth workspace \
49
+ --harnesses claude,codex,openclaw
50
+
51
+ # Codex-only project, minimal install
52
+ solo-mise init --target ./my-project --depth repo --harnesses codex
53
+
54
+ # Generic layout, no harness-specific files
55
+ solo-mise init --target ./my-project --harnesses none
56
+ ```
57
+
58
+ ## Verifying
59
+
60
+ After install, `solo-mise doctor --target <path>` reports the apparent harness shape and checks every configured inbox and adapter:
61
+
62
+ ```
63
+ solo-mise doctor: target /home/you/agent-kitchen
64
+ harnesses: claude, codex, openclaw (owner=openclaw, depth=workspace)
65
+ [ok] bootstrap: AGENTS.md /home/you/agent-kitchen/AGENTS.md
66
+ [ok] handoff: claude inbox /home/you/agent-kitchen/.claude/memory-handoffs
67
+ [ok] handoff: codex inbox /home/you/agent-kitchen/.codex/memory-handoffs
68
+ [ok] openclaw: config /home/you/.openclaw/openclaw.json
69
+ ...
70
+ ```
71
+
72
+ A `[fail]` line means the install is incomplete; `[warn]` is informational; `[todo]` means the check needs your attention (e.g. Hermes is experimental).
73
+
74
+ ## Reconfiguring
75
+
76
+ To change which harnesses are installed on an existing target:
77
+
78
+ ```bash
79
+ # Add a harness
80
+ solo-mise reconfigure --target . --harnesses claude,codex
81
+
82
+ # Drop one (without removing its files)
83
+ solo-mise reconfigure --target . --harnesses claude
84
+
85
+ # Drop one and remove its files
86
+ solo-mise reconfigure --target . --harnesses claude --prune
87
+ ```
88
+
89
+ ## The handoff flow
90
+
91
+ The starter handoff template lives at `<inbox>/TEMPLATE.md`. Copy it to a new dated file (e.g. `2026-05-16-1430-fixed-X.md`), fill it in, and the ingester promotes safe card handoffs into `memory/cards/`, appends targeted updates to the right file, and kicks ambiguous material to the review inbox.
92
+
93
+ See the [Solo Cookbook](https://github.com/solomonneas/solos-cookbook) for the longer-form guidance on what makes a good handoff and when to use which routing.
94
+
95
+ ## Next steps
96
+
97
+ - Read [the cookbook](https://github.com/solomonneas/solos-cookbook) for the deep version of every concept here.
98
+ - Customize `USER.md` and `TOOLS.md` with your real preferences and runbooks (kept private; do not commit personal details).
99
+ - Wire the ingester on a cron or a manual end-of-day workflow.
100
+ - Add a memory-care staleness scan when your card set starts to matter. See `memory/cards/memory-care-staleness.md`.
101
+ - If you use TokenJuice, wire Claude Code and Codex hooks deliberately and tell agents what the wrapper means. See `memory/cards/tokenjuice-output-compaction.md`.
@@ -0,0 +1,188 @@
1
+ <p align="center">
2
+ <img src="docs/assets/solo-mise-banner.png" alt="Solomon's Mise en Place banner">
3
+ </p>
4
+
5
+ <h1 align="center">Solomon's Mise en Place</h1>
6
+
7
+ <p align="center">
8
+ <strong>Mise en place for agent memory.</strong>
9
+ </p>
10
+
11
+ <p align="center">
12
+ <em>Public-safe workspace bootstrap, memory handoffs, and publish guards for real agent setups.</em>
13
+ </p>
14
+
15
+ <p align="center">
16
+ <img src="https://img.shields.io/github/actions/workflow/status/escoffier-labs/brigade/ci.yml?branch=main&style=for-the-badge&label=ci" alt="CI status">
17
+ <img src="https://img.shields.io/badge/python-3.10%2B-blue?style=for-the-badge&logo=python&logoColor=white" alt="Python 3.10+">
18
+ <img src="https://img.shields.io/badge/license-MIT-green?style=for-the-badge" alt="MIT license">
19
+ <img src="https://img.shields.io/badge/harnesses-4-orange?style=for-the-badge" alt="4 harnesses">
20
+ </p>
21
+
22
+ <p align="center">
23
+ <code>brigade</code> is the installable starter kit behind <a href="https://github.com/solomonneas/solos-cookbook">Solomon's Guide to Cookin' with Gas</a>.
24
+ It gives you the workspace skeleton, handoff inbox, conservative ingester, and publish guard that make a multi-agent setup usable without leaking private junk into public repos.
25
+ </p>
26
+
27
+ ## What this is
28
+
29
+ Mise en place means "everything in its place before the work starts." In a kitchen, that is chopped mirepoix, clean pans, labels, and a station that does not make you hunt for salt & butter mid-service. For agents, it is the same idea: rules, memory, tools, handoff inboxes, publish guards, and boring verification already laid out before the session gets expensive.
30
+
31
+ This package lays down a clean starting point for an agent workspace or a repo that needs durable memory handoffs. It is meant for people running real tools, real docs, and real automation across OpenClaw, Claude Code, Codex, Hermes, or a similar harness.
32
+
33
+ The cookbook explains the why. This package gives you the kitchen.
34
+
35
+ ## What you get
36
+
37
+ - sanitized bootstrap files for agent behavior, safety, tools, identity, and memory
38
+ - a canonical memory layout where one configured owner holds durable knowledge
39
+ - a shared `.claude/memory-handoffs/` inbox for Claude Code, Codex, and other side harnesses
40
+ - starter memory cards and routing rules
41
+ - multi-workspace handoff patterns for people administering more than one agent setup
42
+ - memory-care staleness checks so durable cards do not quietly rot
43
+ - TokenJuice output-compaction guidance for Claude Code and Codex, including wrapper notes and savings expectations
44
+ - content-guard publish gates so private infrastructure does not leak into public docs
45
+ - adapter fragments for OpenClaw (tested), Hermes (stubbed), and generic harnesses
46
+ - doctor checks that prove the system is wired before you trust it
47
+
48
+ ## What you do not get
49
+
50
+ - private hostnames, IPs, account IDs, or personal details
51
+ - live auth profiles or OAuth tokens
52
+ - cron jobs that post publicly by default
53
+ - destructive automation or write-enabled integrations without explicit opt-in
54
+
55
+ ## Install
56
+
57
+ ```bash
58
+ pipx install brigade-cli
59
+ ```
60
+
61
+ Or, to track `main`:
62
+
63
+ ```bash
64
+ pipx install git+https://github.com/escoffier-labs/brigade
65
+ ```
66
+
67
+ The workspace config directory is `.brigade` (older `.solo-mise` installs are still read), and the `solo-mise` command is a deprecated alias for `brigade`.
68
+
69
+ ## Quick path
70
+
71
+ Run `brigade init` with no flags for the interactive picker:
72
+
73
+ ```bash
74
+ brigade init --target ~/agent-kitchen
75
+ ```
76
+
77
+ For CI or scripts, pass flags directly:
78
+
79
+ ```bash
80
+ brigade init --target ~/agent-kitchen --depth workspace --harnesses claude,codex,openclaw
81
+ brigade init --target ./repo --depth repo --harnesses codex
82
+ brigade init --target ./repo --harnesses none # generic install
83
+ ```
84
+
85
+ Once installed, `brigade doctor` verifies the wiring and `brigade status` reports over the station registry.
86
+
87
+ ## Two axes: depth + harnesses
88
+
89
+ brigade installs material on two independent axes:
90
+
91
+ **Depth, how much shared baseline you want:**
92
+
93
+ | Depth | Installs |
94
+ |---|---|
95
+ | `repo` *(default)* | `AGENTS.md`, `SAFETY_RULES.md`, `INSTALL_FOR_AGENTS.md`, `hooks/pre-push`, `.brigade/policies/public-repo.json` |
96
+ | `workspace` | repo + `MEMORY.md`, `TOOLS.md`, `USER.md`, `SOUL.md`, `IDENTITY.md`, `HEARTBEAT.md`, `memory/cards/`, starter cards |
97
+
98
+ **Harnesses, which tools you actually use:**
99
+
100
+ | Harness | Role | Adds |
101
+ |---|---|---|
102
+ | `claude` | writer | `CLAUDE.md` + `.claude/memory-handoffs/` inbox |
103
+ | `codex` | writer | `.codex/memory-handoffs/` inbox (AGENTS.md is in the baseline) |
104
+ | `openclaw` | reader | `.brigade/openclaw/` config fragments + cron stubs |
105
+ | `hermes` | reader | `.brigade/hermes/` adapter fragments (experimental) |
106
+
107
+ **Includes, optional add-ons:**
108
+
109
+ | Include | Adds |
110
+ |---|---|
111
+ | `publisher` | `.brigade/policies/public-content.json` + content-safety memory card + scrub-cache |
112
+
113
+ ## Picking your harnesses
114
+
115
+ Four common combos:
116
+
117
+ - **Claude Code only:** `--harnesses claude`, the lightest setup, just one writer.
118
+ - **Claude Code + OpenClaw:** `--harnesses claude,openclaw`, durable memory owner (OpenClaw) plus side writer (Claude Code).
119
+ - **Claude Code + Codex + OpenClaw:** `--harnesses claude,codex,openclaw`, both writers feed into OpenClaw as the canonical owner.
120
+ - **Codex + OpenClaw:** `--harnesses codex,openclaw`, Codex-first user with OpenClaw as the canonical store.
121
+
122
+ The canonical memory owner is picked automatically by priority (`openclaw > hermes > claude > codex > this-repo`). Override with `--owner`.
123
+
124
+ Re-running `brigade init` against an existing target is safe. It refuses to overwrite tracked files without `--force`, and the `.gitignore` block it manages is replaced between its markers without touching the rest of your file.
125
+
126
+ See [QUICKSTART.md](QUICKSTART.md) for setup, verification, and the ingest flow.
127
+
128
+ ### What a green doctor looks like
129
+
130
+ ```text
131
+ brigade doctor: target /home/you/agent-kitchen (generic)
132
+ [ok] bootstrap: AGENTS.md /home/you/agent-kitchen/AGENTS.md
133
+ [ok] bootstrap: CLAUDE.md /home/you/agent-kitchen/CLAUDE.md
134
+ [ok] bootstrap: MEMORY.md /home/you/agent-kitchen/MEMORY.md
135
+ [ok] bootstrap: TOOLS.md /home/you/agent-kitchen/TOOLS.md
136
+ [ok] bootstrap: USER.md /home/you/agent-kitchen/USER.md
137
+ [ok] bootstrap: SAFETY_RULES.md /home/you/agent-kitchen/SAFETY_RULES.md
138
+ [ok] bootstrap: INSTALL_FOR_AGENTS.md /home/you/agent-kitchen/INSTALL_FOR_AGENTS.md
139
+ [ok] handoff: inbox /home/you/agent-kitchen/.claude/memory-handoffs
140
+ [ok] handoff: TEMPLATE.md /home/you/agent-kitchen/.claude/memory-handoffs/TEMPLATE.md
141
+ [ok] handoff: processed/ /home/you/agent-kitchen/.claude/memory-handoffs/processed
142
+ [ok] memory: cards/ /home/you/agent-kitchen/memory/cards
143
+ [ok] publish: hooks/pre-push /home/you/agent-kitchen/hooks/pre-push
144
+ [ok] publish: content-guard /home/you/repos/content-guard
145
+
146
+ summary: 14 checks, 0 failed, 0 manual
147
+ ```
148
+
149
+ Anything `[warn]` is fine; `[fail]` means the install is incomplete. The `openclaw` and `hermes` harnesses add their own checks on top.
150
+
151
+ ### Privacy
152
+
153
+ brigade makes no network calls. It does not phone home, collect telemetry, or sync anything to a server. Everything happens on your local filesystem against the templates packaged with the install. The only file that touches the network is the `pre-push` hook, and it runs the local `content-guard` scanner against your own commits before they leave the machine.
154
+
155
+ ## The design
156
+
157
+ One memory owner stays canonical (typically OpenClaw or Hermes when present, otherwise `this-repo`). Writer harnesses drop handoffs into their own inboxes; the ingester scans all of them.
158
+
159
+ ```text
160
+ Claude Code Codex
161
+ | |
162
+ v v
163
+ .claude/memory-handoffs/ .codex/memory-handoffs/
164
+ \ /
165
+ \ /
166
+ v v
167
+ brigade ingest
168
+ |
169
+ v
170
+ memory/cards/*.md, TOOLS.md, USER.md,
171
+ rules/*.md, .learnings/*.md
172
+ ```
173
+
174
+ The ingester is intentionally conservative. Safe card handoffs become cards. Targeted updates append to the right file. Ambiguous material gets kicked out for review instead of being trusted automatically.
175
+
176
+ For users running multiple agent homes, treat the owner workspace as the hub. Remote or secondary workspaces can write handoffs into their own per-harness inboxes, then a trusted sync pulls those files into a staging inbox on the owner. That keeps agents informed about what happened elsewhere without creating multiple canonical memories.
177
+
178
+ Token-heavy terminal work gets the same treatment: make the wrapper explicit, make the escape hatch obvious, and tell every harness what is happening. The TokenJuice starter card documents Claude Code's PreToolUse wrapper path, Codex's hook setup, and the savings model.
179
+
180
+ ## Related
181
+
182
+ - [Solomon's Cookbook](https://github.com/solomonneas/solos-cookbook): the long-form guide and reference docs
183
+ - [content-guard](https://github.com/solomonneas/content-guard): the publish-gate scanner used by the pre-push hook
184
+ - [OpenClaw](https://github.com/openclaw/openclaw): the reference memory owner
185
+
186
+ ## License
187
+
188
+ MIT
@@ -0,0 +1,44 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "brigade-cli"
7
+ version = "0.5.0"
8
+ description = "Run your agent brigade: an operator-system CLI that bootstraps, checks, and operates agent workspaces across harnesses."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "Solomon Neas", email = "srneas@gmail.com" }]
13
+ keywords = ["agents", "openclaw", "claude-code", "codex", "memory", "bootstrap", "brigade", "operator"]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "License :: OSI Approved :: MIT License",
17
+ "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3.10",
19
+ "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
21
+ ]
22
+ dependencies = []
23
+
24
+ [project.optional-dependencies]
25
+ dev = ["pytest>=7"]
26
+
27
+ [project.urls]
28
+ Homepage = "https://github.com/escoffier-labs/brigade"
29
+ Cookbook = "https://github.com/solomonneas/solos-cookbook"
30
+ Issues = "https://github.com/escoffier-labs/brigade/issues"
31
+
32
+ [project.scripts]
33
+ brigade = "brigade.cli:main"
34
+ solo-mise = "brigade.cli:main_deprecated"
35
+
36
+ [tool.setuptools.packages.find]
37
+ where = ["src"]
38
+
39
+ [tool.setuptools.package-data]
40
+ brigade = ["py.typed", "templates/**/*"]
41
+
42
+ [tool.pytest.ini_options]
43
+ testpaths = ["tests"]
44
+ addopts = "-ra"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """Solomon's Mise en Place: installable starter kit for an agent kitchen."""
2
+
3
+ __version__ = "0.5.0"
@@ -0,0 +1,5 @@
1
+ """Enable `python -m brigade`."""
2
+ from .cli import main
3
+
4
+ if __name__ == "__main__":
5
+ raise SystemExit(main())