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.
- brigade_cli-0.5.0/LICENSE +21 -0
- brigade_cli-0.5.0/MANIFEST.in +4 -0
- brigade_cli-0.5.0/PKG-INFO +211 -0
- brigade_cli-0.5.0/QUICKSTART.md +101 -0
- brigade_cli-0.5.0/README.md +188 -0
- brigade_cli-0.5.0/pyproject.toml +44 -0
- brigade_cli-0.5.0/setup.cfg +4 -0
- brigade_cli-0.5.0/src/brigade/__init__.py +3 -0
- brigade_cli-0.5.0/src/brigade/__main__.py +5 -0
- brigade_cli-0.5.0/src/brigade/cli.py +258 -0
- brigade_cli-0.5.0/src/brigade/config.py +65 -0
- brigade_cli-0.5.0/src/brigade/doctor.py +393 -0
- brigade_cli-0.5.0/src/brigade/fragments.py +64 -0
- brigade_cli-0.5.0/src/brigade/handoff.py +23 -0
- brigade_cli-0.5.0/src/brigade/ingest.py +298 -0
- brigade_cli-0.5.0/src/brigade/install.py +217 -0
- brigade_cli-0.5.0/src/brigade/prompt.py +135 -0
- brigade_cli-0.5.0/src/brigade/py.typed +0 -0
- brigade_cli-0.5.0/src/brigade/reconfigure.py +64 -0
- brigade_cli-0.5.0/src/brigade/registry.py +39 -0
- brigade_cli-0.5.0/src/brigade/scrub.py +90 -0
- brigade_cli-0.5.0/src/brigade/selection.py +66 -0
- brigade_cli-0.5.0/src/brigade/station.py +36 -0
- brigade_cli-0.5.0/src/brigade/status.py +24 -0
- brigade_cli-0.5.0/src/brigade/templates/claude/memory-handoffs/TEMPLATE.md +57 -0
- brigade_cli-0.5.0/src/brigade/templates/codex/memory-handoffs/TEMPLATE.md +57 -0
- brigade_cli-0.5.0/src/brigade/templates/depth/repo.json +12 -0
- brigade_cli-0.5.0/src/brigade/templates/depth/workspace.json +30 -0
- brigade_cli-0.5.0/src/brigade/templates/generic/harness-adapter-checklist.md +55 -0
- brigade_cli-0.5.0/src/brigade/templates/generic/memory-contract.md +41 -0
- brigade_cli-0.5.0/src/brigade/templates/harnesses/claude.json +12 -0
- brigade_cli-0.5.0/src/brigade/templates/harnesses/codex.json +11 -0
- brigade_cli-0.5.0/src/brigade/templates/harnesses/hermes.json +16 -0
- brigade_cli-0.5.0/src/brigade/templates/harnesses/openclaw.json +17 -0
- brigade_cli-0.5.0/src/brigade/templates/hermes/README.md +25 -0
- brigade_cli-0.5.0/src/brigade/templates/hermes/memory-handoff.harness.json +36 -0
- brigade_cli-0.5.0/src/brigade/templates/hermes/model-lanes.harness.json +17 -0
- brigade_cli-0.5.0/src/brigade/templates/hermes/workspace.harness.json +30 -0
- brigade_cli-0.5.0/src/brigade/templates/hooks/pre-push +36 -0
- brigade_cli-0.5.0/src/brigade/templates/includes/publisher.json +15 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/backup-restic.md +126 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/chat-surface-crawlers.md +103 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/content-safety.md +54 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/handoff-flow.md +70 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/memory-architecture.md +56 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/memory-care-staleness.md +58 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/memory-scanner.md +98 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/multi-workspace-handoff-admin.md +63 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/obsidian-notes.md +82 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/pipeline-standups.md +88 -0
- brigade_cli-0.5.0/src/brigade/templates/memory/cards/tokenjuice-output-compaction.md +106 -0
- brigade_cli-0.5.0/src/brigade/templates/openclaw/README.md +40 -0
- brigade_cli-0.5.0/src/brigade/templates/openclaw/acp-escalation.openclaw.json +33 -0
- brigade_cli-0.5.0/src/brigade/templates/openclaw/model-aliases.openclaw.json +21 -0
- brigade_cli-0.5.0/src/brigade/templates/openclaw/ollama-memory-search.openclaw.json +24 -0
- brigade_cli-0.5.0/src/brigade/templates/policies/public-content.json +28 -0
- brigade_cli-0.5.0/src/brigade/templates/policies/public-repo.json +27 -0
- brigade_cli-0.5.0/src/brigade/templates/scripts/backup-restic.sh +156 -0
- brigade_cli-0.5.0/src/brigade/templates/skills/note/SKILL.md +173 -0
- brigade_cli-0.5.0/src/brigade/templates/workspace/AGENTS.md +146 -0
- brigade_cli-0.5.0/src/brigade/templates/workspace/CLAUDE.md +48 -0
- brigade_cli-0.5.0/src/brigade/templates/workspace/HEARTBEAT.md +41 -0
- brigade_cli-0.5.0/src/brigade/templates/workspace/IDENTITY.md +27 -0
- brigade_cli-0.5.0/src/brigade/templates/workspace/INSTALL_FOR_AGENTS.md +61 -0
- brigade_cli-0.5.0/src/brigade/templates/workspace/MEMORY.md +102 -0
- brigade_cli-0.5.0/src/brigade/templates/workspace/SAFETY_RULES.md +164 -0
- brigade_cli-0.5.0/src/brigade/templates/workspace/SOUL.md +92 -0
- brigade_cli-0.5.0/src/brigade/templates/workspace/TOOLS.md +116 -0
- brigade_cli-0.5.0/src/brigade/templates/workspace/USER.md +88 -0
- brigade_cli-0.5.0/src/brigade/templates.py +88 -0
- brigade_cli-0.5.0/src/brigade_cli.egg-info/PKG-INFO +211 -0
- brigade_cli-0.5.0/src/brigade_cli.egg-info/SOURCES.txt +91 -0
- brigade_cli-0.5.0/src/brigade_cli.egg-info/dependency_links.txt +1 -0
- brigade_cli-0.5.0/src/brigade_cli.egg-info/entry_points.txt +3 -0
- brigade_cli-0.5.0/src/brigade_cli.egg-info/requires.txt +3 -0
- brigade_cli-0.5.0/src/brigade_cli.egg-info/top_level.txt +1 -0
- brigade_cli-0.5.0/tests/test_cli_alias.py +10 -0
- brigade_cli-0.5.0/tests/test_config.py +83 -0
- brigade_cli-0.5.0/tests/test_doctor.py +212 -0
- brigade_cli-0.5.0/tests/test_fragments.py +142 -0
- brigade_cli-0.5.0/tests/test_gitignore.py +131 -0
- brigade_cli-0.5.0/tests/test_handoff.py +29 -0
- brigade_cli-0.5.0/tests/test_ingest.py +295 -0
- brigade_cli-0.5.0/tests/test_init.py +249 -0
- brigade_cli-0.5.0/tests/test_install.py +88 -0
- brigade_cli-0.5.0/tests/test_neutrality.py +43 -0
- brigade_cli-0.5.0/tests/test_prompt.py +39 -0
- brigade_cli-0.5.0/tests/test_reconfigure.py +42 -0
- brigade_cli-0.5.0/tests/test_registry.py +18 -0
- brigade_cli-0.5.0/tests/test_scrub.py +86 -0
- brigade_cli-0.5.0/tests/test_selection.py +76 -0
- brigade_cli-0.5.0/tests/test_station.py +26 -0
- 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,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"
|