conclave-team 0.1.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.
- conclave_team-0.1.0/.gitignore +8 -0
- conclave_team-0.1.0/LICENSE +21 -0
- conclave_team-0.1.0/PKG-INFO +258 -0
- conclave_team-0.1.0/README.md +235 -0
- conclave_team-0.1.0/conclave/__init__.py +3 -0
- conclave_team-0.1.0/conclave/__main__.py +3 -0
- conclave_team-0.1.0/conclave/cli.py +535 -0
- conclave_team-0.1.0/conclave/config.py +201 -0
- conclave_team-0.1.0/conclave/devils.py +65 -0
- conclave_team-0.1.0/conclave/loop.py +169 -0
- conclave_team-0.1.0/conclave/notify.py +42 -0
- conclave_team-0.1.0/conclave/providers.py +84 -0
- conclave_team-0.1.0/conclave/runners.py +98 -0
- conclave_team-0.1.0/conclave/templates/CONCLAVE.md +71 -0
- conclave_team-0.1.0/conclave/templates/COORD.md +17 -0
- conclave_team-0.1.0/conclave/templates/DEAN.md +74 -0
- conclave_team-0.1.0/conclave/templates/__init__.py +0 -0
- conclave_team-0.1.0/conclave/templates/devil-system.md +14 -0
- conclave_team-0.1.0/conclave/templates/lane.md +22 -0
- conclave_team-0.1.0/conclave/workspace.py +207 -0
- conclave_team-0.1.0/pyproject.toml +39 -0
- conclave_team-0.1.0/skills/conclave/SKILL.md +84 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Shivam Raj
|
|
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,258 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: conclave-team
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A managed agent team: one Dean orchestrates many Cardinals on any model, Devils argue back, and you're the Pope.
|
|
5
|
+
Project-URL: Homepage, https://github.com/tech-cosmos/conclave
|
|
6
|
+
Project-URL: Repository, https://github.com/tech-cosmos/conclave
|
|
7
|
+
Project-URL: Issues, https://github.com/tech-cosmos/conclave/issues
|
|
8
|
+
Author: Shivam Raj
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: agents,claude-code,codex,llm,multi-agent,orchestration,research
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Operating System :: MacOS
|
|
15
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Software Development
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
<p align="center">
|
|
25
|
+
<img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/hero.jpg" alt="The Conclave: a human on the balcony, an orchestrator at the round table, worker agents at their terminals, two devil's advocates in the alcoves" width="100%">
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
<h1 align="center">Conclave</h1>
|
|
29
|
+
|
|
30
|
+
<p align="center">
|
|
31
|
+
<b>A managed agent team for long, measurable goals.</b><br>
|
|
32
|
+
One <b>Dean</b> orchestrates many <b>Cardinals</b> on any model. <b>Devils</b> argue back. You're the <b>Pope</b>.
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
<p align="center">
|
|
36
|
+
<a href="#quickstart">Quickstart</a> ·
|
|
37
|
+
<a href="#wire-each-role-to-any-model">Any model</a> ·
|
|
38
|
+
<a href="#the-skills">Skills</a> ·
|
|
39
|
+
<a href="#how-it-works">How it works</a> ·
|
|
40
|
+
<a href="examples/">Examples</a>
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
You give it a goal with a number on it, like *"make search 2x faster"*, *"push this benchmark"* or
|
|
46
|
+
*"get this kernel under 50 µs"*. A team of coding agents then works on it for hours or days, each on
|
|
47
|
+
its own git branch. They measure before they build, write down every dead end, and check in with you
|
|
48
|
+
only for wins and real decisions.
|
|
49
|
+
|
|
50
|
+
It's not a swarm. A swarm is peers with no one in charge. A Conclave has a **hierarchy and a human
|
|
51
|
+
veto**, so it's an **agent team you manage**:
|
|
52
|
+
|
|
53
|
+
| | Role | Who plays it | What it does |
|
|
54
|
+
|---|---|---|---|
|
|
55
|
+
| <img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/role-pope.jpg" width="72"> | **Pope** | **you** | Sets the goal, the finish line, the budget and the rules. Says yes or no to the big stuff. Gets pinged only for wins, decisions and "done". |
|
|
56
|
+
| <img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/role-dean.jpg" width="72"> | **Dean** | your agent (Claude Code, Codex...) with the `conclave` skill | Splits the work into lanes, starts and pauses Cardinals, **verifies every claimed win**, merges, keeps the board, and calls the Devils when the team is stuck. |
|
|
57
|
+
| <img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/role-cardinal.jpg" width="72"> | **Cardinals** | headless agent CLIs: `claude`, `codex`, `gemini`, `opencode`, `aider`, or your own | One lane each, on their own branch. Fresh short sessions in a loop. **Test before building.** Commits state the measured numbers. |
|
|
58
|
+
| <img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/role-devil.jpg" width="72"> | **Devils** | *different* models, via any API | Devil's advocates. They get the team's real numbers and argue back: what's wrong with the plan, what nobody tried, what to stop doing. |
|
|
59
|
+
|
|
60
|
+
> **Born in a GPU kernel competition.** The Conclave ran three Cardinals for five nights on one shared
|
|
61
|
+
> H100 in the Open Kernel Challenge (2026). They built a full MoE decoder layer that measured
|
|
62
|
+
> **2.2x faster than SGLang** on the judge's H200. That setup ships as
|
|
63
|
+
> [`examples/gpu-kernel-race.toml`](https://github.com/tech-cosmos/conclave/blob/main/examples/gpu-kernel-race.toml).
|
|
64
|
+
|
|
65
|
+
<p align="center"><img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/architecture.svg" alt="Architecture: Pope above the Dean; the Dean talks to the shared board, the Devils and three Cardinals on different models" width="100%"></p>
|
|
66
|
+
|
|
67
|
+
## Quickstart
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# 1. Install the CLI (Python 3.11+, git, no other dependencies)
|
|
71
|
+
uv tool install conclave-team # or: pipx install conclave-team (the command is `conclave`)
|
|
72
|
+
|
|
73
|
+
# 2. In the repo you want to improve
|
|
74
|
+
conclave init # a short wizard: goal, finish line, budget, which model runs each role
|
|
75
|
+
conclave doctor --ping # checks CLIs, keys and git, and makes one tiny call to each Devil's API
|
|
76
|
+
conclave start # Cardinals start working, each in .conclave/worktrees/<name>
|
|
77
|
+
|
|
78
|
+
# 3. While it runs
|
|
79
|
+
conclave status # who's doing what, last commits, claims, pings
|
|
80
|
+
conclave devils "stuck at 61 ms; tried A and B; the profile says C. What are we missing?"
|
|
81
|
+
conclave pause # stop after the current sessions
|
|
82
|
+
conclave end --out ~/Obsidian/Vault # stop, check everything is pushed, write the report
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Or just talk to the Dean.** Install the skills (below), open Claude Code in your repo and say:
|
|
86
|
+
|
|
87
|
+
> *Start a Conclave on making our search API 2x faster. Budget: 2 days and $40. Done when p95 is under 50 ms.*
|
|
88
|
+
|
|
89
|
+
The Dean asks you once for anything missing, writes the lanes, runs `conclave start`, and gives you a short
|
|
90
|
+
status with real numbers when you ask *"How's the Conclave?"*
|
|
91
|
+
|
|
92
|
+
## Wire each role to any model
|
|
93
|
+
|
|
94
|
+
Every role is a few lines in `conclave.toml`. Two ideas:
|
|
95
|
+
|
|
96
|
+
- **runner**: the program that plays the role. Cardinals need tools, so they use an agent CLI
|
|
97
|
+
(`claude`, `codex`, `gemini`, `opencode`, `aider`, or `custom`). Devils can also be `api`: a plain
|
|
98
|
+
chat call with no tools, which is the cheapest way to get a different brain.
|
|
99
|
+
- **provider**: where the model lives, and which env var holds the key. `kind = "openai"` covers any
|
|
100
|
+
OpenAI-compatible URL (OpenAI, OpenRouter, Gemini, DeepSeek, Groq, Ollama, vLLM...). `kind = "anthropic"`
|
|
101
|
+
covers Anthropic and Anthropic-compatible gateways. Set `provider` on a Cardinal and Conclave points
|
|
102
|
+
its CLI at that API, so **Claude Code can drive Kimi, GLM or DeepSeek** and **Codex can drive any
|
|
103
|
+
OpenAI-compatible model**.
|
|
104
|
+
|
|
105
|
+
```toml
|
|
106
|
+
[providers.openrouter]
|
|
107
|
+
kind = "openai"
|
|
108
|
+
base_url = "https://openrouter.ai/api/v1"
|
|
109
|
+
api_key_env = "OPENROUTER_API_KEY"
|
|
110
|
+
|
|
111
|
+
[providers.kimi]
|
|
112
|
+
kind = "anthropic"
|
|
113
|
+
base_url = "https://api.moonshot.ai/anthropic"
|
|
114
|
+
api_key_env = "MOONSHOT_API_KEY"
|
|
115
|
+
|
|
116
|
+
[[cardinals]] # hardest lane: strongest model, your Claude login
|
|
117
|
+
name = "query"
|
|
118
|
+
lane = "Query planning and the index lookup"
|
|
119
|
+
runner = "claude"
|
|
120
|
+
model = "opus"
|
|
121
|
+
paths = ["src/search/"]
|
|
122
|
+
|
|
123
|
+
[[cardinals]] # Claude Code's harness, Kimi's brain
|
|
124
|
+
name = "db"
|
|
125
|
+
runner = "claude"
|
|
126
|
+
provider = "kimi"
|
|
127
|
+
model = "kimi-k2-thinking"
|
|
128
|
+
|
|
129
|
+
[[cardinals]] # mechanical lane: a cheap model through opencode
|
|
130
|
+
name = "serde"
|
|
131
|
+
runner = "opencode"
|
|
132
|
+
model = "openrouter/qwen/qwen3-coder"
|
|
133
|
+
|
|
134
|
+
[[devils]] # a plain API call
|
|
135
|
+
name = "r1"
|
|
136
|
+
provider = "openrouter"
|
|
137
|
+
model = "deepseek/deepseek-r1"
|
|
138
|
+
persona = "a database engineer who thinks every latency problem is a missing index"
|
|
139
|
+
|
|
140
|
+
[[devils]] # an agent CLI as a Devil, run read-only so it can look at the code
|
|
141
|
+
name = "codex-devil"
|
|
142
|
+
runner = "codex"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Rule of thumb: **put the strongest model on the hardest lane, cheap models on mechanical lanes, and make
|
|
146
|
+
the Devils different model families from the Cardinals** so they don't share the same blind spots.
|
|
147
|
+
Full reference: [`skills/conclave-setup/SKILL.md`](https://github.com/tech-cosmos/conclave/blob/main/skills/conclave-setup/SKILL.md). Complete configs:
|
|
148
|
+
[`examples/`](https://github.com/tech-cosmos/conclave/tree/main/examples).
|
|
149
|
+
|
|
150
|
+
## The skills
|
|
151
|
+
|
|
152
|
+
Two [Agent Skills](https://docs.claude.com/en/docs/claude-code/skills) ship with the repo:
|
|
153
|
+
|
|
154
|
+
| Skill | Use it for |
|
|
155
|
+
|---|---|
|
|
156
|
+
| [`conclave`](https://github.com/tech-cosmos/conclave/blob/main/skills/conclave/SKILL.md) | Makes your agent **the Dean**: understands "Start a Conclave...", "How's the Conclave?", "Call the Devils", "Pause/End the Conclave". |
|
|
157
|
+
| [`conclave-setup`](https://github.com/tech-cosmos/conclave/blob/main/skills/conclave-setup/SKILL.md) | Installing, wiring roles to models and keys, remote GPU boxes, fixing `conclave doctor`. |
|
|
158
|
+
|
|
159
|
+
**Claude Code** (plugin):
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
/plugin marketplace add tech-cosmos/conclave
|
|
163
|
+
/plugin install conclave@conclave
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
On Claude Code 2.1.275 or later, one line does both: `/plugin install conclave --marketplace tech-cosmos/conclave`
|
|
167
|
+
|
|
168
|
+
**Other agents**: copy `skills/conclave` and `skills/conclave-setup` into your agent's skills folder.
|
|
169
|
+
For Codex that's `~/.codex/skills/`. `conclave dean` also opens your configured Dean with its playbook
|
|
170
|
+
(`.conclave/DEAN.md`) already loaded.
|
|
171
|
+
|
|
172
|
+
## How it works
|
|
173
|
+
|
|
174
|
+
<p align="center"><img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/session-loop.svg" alt="Session loop: read, claim, measure first, build, commit with numbers, stop; the loop restarts with a fresh session" width="100%"></p>
|
|
175
|
+
|
|
176
|
+
**Memory lives in files and git, never in a chat context.** Each Cardinal session starts fresh, reads its
|
|
177
|
+
briefs, does one cycle (45-90 min), commits, writes notes and exits. The loop starts the next session, so
|
|
178
|
+
a Cardinal can run for days without its context filling up or drifting.
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
conclave.toml every role → runner / model / provider; compute; loop settings
|
|
182
|
+
.conclave/
|
|
183
|
+
CONCLAVE.md the rules every Cardinal reads first (yours to edit)
|
|
184
|
+
DEAN.md the Dean's playbook, filled in for this Conclave
|
|
185
|
+
COORD.md the shared board: Pope's decisions · Claims · Results · Handoffs · Requests · Pings
|
|
186
|
+
lanes/<name>.md one brief per Cardinal
|
|
187
|
+
worktrees/<name>/ each Cardinal's checkout on branch conclave/<name>, with STATE-<name>.md and NOTES-<name>.md
|
|
188
|
+
devils/<round>.md every Devils round, answers side by side
|
|
189
|
+
logs/ loop logs and full session transcripts
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
What's built in, so you don't have to ask:
|
|
193
|
+
|
|
194
|
+
- **Test before building.** Every idea gets a cheap measurement and a pass mark first. Most die there,
|
|
195
|
+
and get logged as dead ends so nobody tries them twice.
|
|
196
|
+
- **Every Cardinal keeps its own git trail**: its own branch, a one-page `STATE`, a long `NOTES` log,
|
|
197
|
+
commits that state the measured numbers, pushed after every session.
|
|
198
|
+
- **The board is safe for concurrent writers.** It uses a file lock and atomic replace, so ten Cardinals
|
|
199
|
+
writing at once lose nothing.
|
|
200
|
+
- **An idle Cardinal gets paused**, not handed busywork.
|
|
201
|
+
- **Back-off.** A session that dies in seconds without a commit (expired login, usage limit, outage)
|
|
202
|
+
backs off instead of burning the budget.
|
|
203
|
+
- **Shared hardware.** `conclave lock gpu -- python bench.py` serializes timing runs, so numbers from
|
|
204
|
+
Cardinals sharing one GPU stay clean.
|
|
205
|
+
- **The Pope's veto.** Rule changes, deletions, anything public, new logins and overspending all go to you first.
|
|
206
|
+
|
|
207
|
+
## Commands
|
|
208
|
+
|
|
209
|
+
| Command | What it does |
|
|
210
|
+
|---|---|
|
|
211
|
+
| `conclave init` | Wizard: writes `conclave.toml` and `.conclave/`. Detects installed CLIs and API keys. `--yes` for no questions. |
|
|
212
|
+
| `conclave doctor [--ping]` | Checks git, runners and keys; `--ping` makes one tiny call per Devil provider. |
|
|
213
|
+
| `conclave start [names]` / `resume` | Start (or restart) Cardinal loops in the background. |
|
|
214
|
+
| `conclave status [--json]` | Who's working, sessions, last commits, claims, requests, pings. |
|
|
215
|
+
| `conclave devils "<brief>" [-f file] [--only name]...` | One Devils round, in parallel. Answers land in `.conclave/devils/`. |
|
|
216
|
+
| `conclave pause [names] [--now]` | Stop after the current session (`--now` kills it). Warns about unpushed work. |
|
|
217
|
+
| `conclave end [--out path]` | Stop everything, check every branch is pushed, write the report (e.g. into your Obsidian vault). |
|
|
218
|
+
| `conclave ping "<msg>"` | Notify the Pope: desktop, phone (`ntfy:<topic>`) or any command. |
|
|
219
|
+
| `conclave board <Section> "<line>"` | Append a line to COORD.md (Cardinals use this). |
|
|
220
|
+
| `conclave lock <name> -- <cmd>` | Run a command holding a shared lock (one GPU, one judge). |
|
|
221
|
+
| `conclave logs <name>` | Tail a Cardinal's latest session transcript. |
|
|
222
|
+
| `conclave dean` | Open your Dean agent with the playbook loaded. |
|
|
223
|
+
|
|
224
|
+
## Remote compute (GPU boxes, sandboxes)
|
|
225
|
+
|
|
226
|
+
Clone the repo on the box, install `conclave` there, and log the agent CLIs in there (only you can do that
|
|
227
|
+
part). Then, locally:
|
|
228
|
+
|
|
229
|
+
```toml
|
|
230
|
+
[compute]
|
|
231
|
+
backend = "remote"
|
|
232
|
+
exec_prefix = ["ssh", "gpu-box"] # anything that runs a command on the box
|
|
233
|
+
remote_dir = "~/myrepo"
|
|
234
|
+
locks = ["gpu"]
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Every command except `init` and `dean` is forwarded to the box. Set `[pope] notify = "ntfy:<topic>"` so pings
|
|
238
|
+
reach your phone. **Cloud sandboxes are sometimes deleted when stopped**, so run `conclave end` first: it warns
|
|
239
|
+
about anything unpushed.
|
|
240
|
+
|
|
241
|
+
## Safety
|
|
242
|
+
|
|
243
|
+
Cardinals run unattended **with full permissions in their worktree** (`claude --dangerously-skip-permissions`,
|
|
244
|
+
`codex --dangerously-bypass-approvals-and-sandbox`, `gemini --yolo`). That's what makes overnight runs
|
|
245
|
+
possible, and it also means they can run any command your user can. **Run Conclaves in a container, VM or
|
|
246
|
+
cloud sandbox** unless you trust the repo and the lanes. Keep secrets out of the box, and set a budget
|
|
247
|
+
your provider dashboards enforce. Devils that run on an agent CLI are started read-only.
|
|
248
|
+
|
|
249
|
+
## Status
|
|
250
|
+
|
|
251
|
+
`v0.1`: the loop, the board, the Devils, the skills, and local and remote compute all work. They're covered by
|
|
252
|
+
tests that use a stand-in agent (`python -m unittest discover tests`), and were checked end to end with real
|
|
253
|
+
Claude Code Cardinals and OpenRouter Devils. Next up: a live web view of the board, cost tracking per
|
|
254
|
+
Cardinal, and first-class Daytona/Modal backends. Issues and PRs are welcome.
|
|
255
|
+
|
|
256
|
+
## License
|
|
257
|
+
|
|
258
|
+
MIT
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/hero.jpg" alt="The Conclave: a human on the balcony, an orchestrator at the round table, worker agents at their terminals, two devil's advocates in the alcoves" width="100%">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Conclave</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<b>A managed agent team for long, measurable goals.</b><br>
|
|
9
|
+
One <b>Dean</b> orchestrates many <b>Cardinals</b> on any model. <b>Devils</b> argue back. You're the <b>Pope</b>.
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<a href="#quickstart">Quickstart</a> ·
|
|
14
|
+
<a href="#wire-each-role-to-any-model">Any model</a> ·
|
|
15
|
+
<a href="#the-skills">Skills</a> ·
|
|
16
|
+
<a href="#how-it-works">How it works</a> ·
|
|
17
|
+
<a href="examples/">Examples</a>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
You give it a goal with a number on it, like *"make search 2x faster"*, *"push this benchmark"* or
|
|
23
|
+
*"get this kernel under 50 µs"*. A team of coding agents then works on it for hours or days, each on
|
|
24
|
+
its own git branch. They measure before they build, write down every dead end, and check in with you
|
|
25
|
+
only for wins and real decisions.
|
|
26
|
+
|
|
27
|
+
It's not a swarm. A swarm is peers with no one in charge. A Conclave has a **hierarchy and a human
|
|
28
|
+
veto**, so it's an **agent team you manage**:
|
|
29
|
+
|
|
30
|
+
| | Role | Who plays it | What it does |
|
|
31
|
+
|---|---|---|---|
|
|
32
|
+
| <img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/role-pope.jpg" width="72"> | **Pope** | **you** | Sets the goal, the finish line, the budget and the rules. Says yes or no to the big stuff. Gets pinged only for wins, decisions and "done". |
|
|
33
|
+
| <img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/role-dean.jpg" width="72"> | **Dean** | your agent (Claude Code, Codex...) with the `conclave` skill | Splits the work into lanes, starts and pauses Cardinals, **verifies every claimed win**, merges, keeps the board, and calls the Devils when the team is stuck. |
|
|
34
|
+
| <img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/role-cardinal.jpg" width="72"> | **Cardinals** | headless agent CLIs: `claude`, `codex`, `gemini`, `opencode`, `aider`, or your own | One lane each, on their own branch. Fresh short sessions in a loop. **Test before building.** Commits state the measured numbers. |
|
|
35
|
+
| <img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/role-devil.jpg" width="72"> | **Devils** | *different* models, via any API | Devil's advocates. They get the team's real numbers and argue back: what's wrong with the plan, what nobody tried, what to stop doing. |
|
|
36
|
+
|
|
37
|
+
> **Born in a GPU kernel competition.** The Conclave ran three Cardinals for five nights on one shared
|
|
38
|
+
> H100 in the Open Kernel Challenge (2026). They built a full MoE decoder layer that measured
|
|
39
|
+
> **2.2x faster than SGLang** on the judge's H200. That setup ships as
|
|
40
|
+
> [`examples/gpu-kernel-race.toml`](https://github.com/tech-cosmos/conclave/blob/main/examples/gpu-kernel-race.toml).
|
|
41
|
+
|
|
42
|
+
<p align="center"><img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/architecture.svg" alt="Architecture: Pope above the Dean; the Dean talks to the shared board, the Devils and three Cardinals on different models" width="100%"></p>
|
|
43
|
+
|
|
44
|
+
## Quickstart
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# 1. Install the CLI (Python 3.11+, git, no other dependencies)
|
|
48
|
+
uv tool install conclave-team # or: pipx install conclave-team (the command is `conclave`)
|
|
49
|
+
|
|
50
|
+
# 2. In the repo you want to improve
|
|
51
|
+
conclave init # a short wizard: goal, finish line, budget, which model runs each role
|
|
52
|
+
conclave doctor --ping # checks CLIs, keys and git, and makes one tiny call to each Devil's API
|
|
53
|
+
conclave start # Cardinals start working, each in .conclave/worktrees/<name>
|
|
54
|
+
|
|
55
|
+
# 3. While it runs
|
|
56
|
+
conclave status # who's doing what, last commits, claims, pings
|
|
57
|
+
conclave devils "stuck at 61 ms; tried A and B; the profile says C. What are we missing?"
|
|
58
|
+
conclave pause # stop after the current sessions
|
|
59
|
+
conclave end --out ~/Obsidian/Vault # stop, check everything is pushed, write the report
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Or just talk to the Dean.** Install the skills (below), open Claude Code in your repo and say:
|
|
63
|
+
|
|
64
|
+
> *Start a Conclave on making our search API 2x faster. Budget: 2 days and $40. Done when p95 is under 50 ms.*
|
|
65
|
+
|
|
66
|
+
The Dean asks you once for anything missing, writes the lanes, runs `conclave start`, and gives you a short
|
|
67
|
+
status with real numbers when you ask *"How's the Conclave?"*
|
|
68
|
+
|
|
69
|
+
## Wire each role to any model
|
|
70
|
+
|
|
71
|
+
Every role is a few lines in `conclave.toml`. Two ideas:
|
|
72
|
+
|
|
73
|
+
- **runner**: the program that plays the role. Cardinals need tools, so they use an agent CLI
|
|
74
|
+
(`claude`, `codex`, `gemini`, `opencode`, `aider`, or `custom`). Devils can also be `api`: a plain
|
|
75
|
+
chat call with no tools, which is the cheapest way to get a different brain.
|
|
76
|
+
- **provider**: where the model lives, and which env var holds the key. `kind = "openai"` covers any
|
|
77
|
+
OpenAI-compatible URL (OpenAI, OpenRouter, Gemini, DeepSeek, Groq, Ollama, vLLM...). `kind = "anthropic"`
|
|
78
|
+
covers Anthropic and Anthropic-compatible gateways. Set `provider` on a Cardinal and Conclave points
|
|
79
|
+
its CLI at that API, so **Claude Code can drive Kimi, GLM or DeepSeek** and **Codex can drive any
|
|
80
|
+
OpenAI-compatible model**.
|
|
81
|
+
|
|
82
|
+
```toml
|
|
83
|
+
[providers.openrouter]
|
|
84
|
+
kind = "openai"
|
|
85
|
+
base_url = "https://openrouter.ai/api/v1"
|
|
86
|
+
api_key_env = "OPENROUTER_API_KEY"
|
|
87
|
+
|
|
88
|
+
[providers.kimi]
|
|
89
|
+
kind = "anthropic"
|
|
90
|
+
base_url = "https://api.moonshot.ai/anthropic"
|
|
91
|
+
api_key_env = "MOONSHOT_API_KEY"
|
|
92
|
+
|
|
93
|
+
[[cardinals]] # hardest lane: strongest model, your Claude login
|
|
94
|
+
name = "query"
|
|
95
|
+
lane = "Query planning and the index lookup"
|
|
96
|
+
runner = "claude"
|
|
97
|
+
model = "opus"
|
|
98
|
+
paths = ["src/search/"]
|
|
99
|
+
|
|
100
|
+
[[cardinals]] # Claude Code's harness, Kimi's brain
|
|
101
|
+
name = "db"
|
|
102
|
+
runner = "claude"
|
|
103
|
+
provider = "kimi"
|
|
104
|
+
model = "kimi-k2-thinking"
|
|
105
|
+
|
|
106
|
+
[[cardinals]] # mechanical lane: a cheap model through opencode
|
|
107
|
+
name = "serde"
|
|
108
|
+
runner = "opencode"
|
|
109
|
+
model = "openrouter/qwen/qwen3-coder"
|
|
110
|
+
|
|
111
|
+
[[devils]] # a plain API call
|
|
112
|
+
name = "r1"
|
|
113
|
+
provider = "openrouter"
|
|
114
|
+
model = "deepseek/deepseek-r1"
|
|
115
|
+
persona = "a database engineer who thinks every latency problem is a missing index"
|
|
116
|
+
|
|
117
|
+
[[devils]] # an agent CLI as a Devil, run read-only so it can look at the code
|
|
118
|
+
name = "codex-devil"
|
|
119
|
+
runner = "codex"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Rule of thumb: **put the strongest model on the hardest lane, cheap models on mechanical lanes, and make
|
|
123
|
+
the Devils different model families from the Cardinals** so they don't share the same blind spots.
|
|
124
|
+
Full reference: [`skills/conclave-setup/SKILL.md`](https://github.com/tech-cosmos/conclave/blob/main/skills/conclave-setup/SKILL.md). Complete configs:
|
|
125
|
+
[`examples/`](https://github.com/tech-cosmos/conclave/tree/main/examples).
|
|
126
|
+
|
|
127
|
+
## The skills
|
|
128
|
+
|
|
129
|
+
Two [Agent Skills](https://docs.claude.com/en/docs/claude-code/skills) ship with the repo:
|
|
130
|
+
|
|
131
|
+
| Skill | Use it for |
|
|
132
|
+
|---|---|
|
|
133
|
+
| [`conclave`](https://github.com/tech-cosmos/conclave/blob/main/skills/conclave/SKILL.md) | Makes your agent **the Dean**: understands "Start a Conclave...", "How's the Conclave?", "Call the Devils", "Pause/End the Conclave". |
|
|
134
|
+
| [`conclave-setup`](https://github.com/tech-cosmos/conclave/blob/main/skills/conclave-setup/SKILL.md) | Installing, wiring roles to models and keys, remote GPU boxes, fixing `conclave doctor`. |
|
|
135
|
+
|
|
136
|
+
**Claude Code** (plugin):
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
/plugin marketplace add tech-cosmos/conclave
|
|
140
|
+
/plugin install conclave@conclave
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
On Claude Code 2.1.275 or later, one line does both: `/plugin install conclave --marketplace tech-cosmos/conclave`
|
|
144
|
+
|
|
145
|
+
**Other agents**: copy `skills/conclave` and `skills/conclave-setup` into your agent's skills folder.
|
|
146
|
+
For Codex that's `~/.codex/skills/`. `conclave dean` also opens your configured Dean with its playbook
|
|
147
|
+
(`.conclave/DEAN.md`) already loaded.
|
|
148
|
+
|
|
149
|
+
## How it works
|
|
150
|
+
|
|
151
|
+
<p align="center"><img src="https://raw.githubusercontent.com/tech-cosmos/conclave/main/docs/images/session-loop.svg" alt="Session loop: read, claim, measure first, build, commit with numbers, stop; the loop restarts with a fresh session" width="100%"></p>
|
|
152
|
+
|
|
153
|
+
**Memory lives in files and git, never in a chat context.** Each Cardinal session starts fresh, reads its
|
|
154
|
+
briefs, does one cycle (45-90 min), commits, writes notes and exits. The loop starts the next session, so
|
|
155
|
+
a Cardinal can run for days without its context filling up or drifting.
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
conclave.toml every role → runner / model / provider; compute; loop settings
|
|
159
|
+
.conclave/
|
|
160
|
+
CONCLAVE.md the rules every Cardinal reads first (yours to edit)
|
|
161
|
+
DEAN.md the Dean's playbook, filled in for this Conclave
|
|
162
|
+
COORD.md the shared board: Pope's decisions · Claims · Results · Handoffs · Requests · Pings
|
|
163
|
+
lanes/<name>.md one brief per Cardinal
|
|
164
|
+
worktrees/<name>/ each Cardinal's checkout on branch conclave/<name>, with STATE-<name>.md and NOTES-<name>.md
|
|
165
|
+
devils/<round>.md every Devils round, answers side by side
|
|
166
|
+
logs/ loop logs and full session transcripts
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
What's built in, so you don't have to ask:
|
|
170
|
+
|
|
171
|
+
- **Test before building.** Every idea gets a cheap measurement and a pass mark first. Most die there,
|
|
172
|
+
and get logged as dead ends so nobody tries them twice.
|
|
173
|
+
- **Every Cardinal keeps its own git trail**: its own branch, a one-page `STATE`, a long `NOTES` log,
|
|
174
|
+
commits that state the measured numbers, pushed after every session.
|
|
175
|
+
- **The board is safe for concurrent writers.** It uses a file lock and atomic replace, so ten Cardinals
|
|
176
|
+
writing at once lose nothing.
|
|
177
|
+
- **An idle Cardinal gets paused**, not handed busywork.
|
|
178
|
+
- **Back-off.** A session that dies in seconds without a commit (expired login, usage limit, outage)
|
|
179
|
+
backs off instead of burning the budget.
|
|
180
|
+
- **Shared hardware.** `conclave lock gpu -- python bench.py` serializes timing runs, so numbers from
|
|
181
|
+
Cardinals sharing one GPU stay clean.
|
|
182
|
+
- **The Pope's veto.** Rule changes, deletions, anything public, new logins and overspending all go to you first.
|
|
183
|
+
|
|
184
|
+
## Commands
|
|
185
|
+
|
|
186
|
+
| Command | What it does |
|
|
187
|
+
|---|---|
|
|
188
|
+
| `conclave init` | Wizard: writes `conclave.toml` and `.conclave/`. Detects installed CLIs and API keys. `--yes` for no questions. |
|
|
189
|
+
| `conclave doctor [--ping]` | Checks git, runners and keys; `--ping` makes one tiny call per Devil provider. |
|
|
190
|
+
| `conclave start [names]` / `resume` | Start (or restart) Cardinal loops in the background. |
|
|
191
|
+
| `conclave status [--json]` | Who's working, sessions, last commits, claims, requests, pings. |
|
|
192
|
+
| `conclave devils "<brief>" [-f file] [--only name]...` | One Devils round, in parallel. Answers land in `.conclave/devils/`. |
|
|
193
|
+
| `conclave pause [names] [--now]` | Stop after the current session (`--now` kills it). Warns about unpushed work. |
|
|
194
|
+
| `conclave end [--out path]` | Stop everything, check every branch is pushed, write the report (e.g. into your Obsidian vault). |
|
|
195
|
+
| `conclave ping "<msg>"` | Notify the Pope: desktop, phone (`ntfy:<topic>`) or any command. |
|
|
196
|
+
| `conclave board <Section> "<line>"` | Append a line to COORD.md (Cardinals use this). |
|
|
197
|
+
| `conclave lock <name> -- <cmd>` | Run a command holding a shared lock (one GPU, one judge). |
|
|
198
|
+
| `conclave logs <name>` | Tail a Cardinal's latest session transcript. |
|
|
199
|
+
| `conclave dean` | Open your Dean agent with the playbook loaded. |
|
|
200
|
+
|
|
201
|
+
## Remote compute (GPU boxes, sandboxes)
|
|
202
|
+
|
|
203
|
+
Clone the repo on the box, install `conclave` there, and log the agent CLIs in there (only you can do that
|
|
204
|
+
part). Then, locally:
|
|
205
|
+
|
|
206
|
+
```toml
|
|
207
|
+
[compute]
|
|
208
|
+
backend = "remote"
|
|
209
|
+
exec_prefix = ["ssh", "gpu-box"] # anything that runs a command on the box
|
|
210
|
+
remote_dir = "~/myrepo"
|
|
211
|
+
locks = ["gpu"]
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Every command except `init` and `dean` is forwarded to the box. Set `[pope] notify = "ntfy:<topic>"` so pings
|
|
215
|
+
reach your phone. **Cloud sandboxes are sometimes deleted when stopped**, so run `conclave end` first: it warns
|
|
216
|
+
about anything unpushed.
|
|
217
|
+
|
|
218
|
+
## Safety
|
|
219
|
+
|
|
220
|
+
Cardinals run unattended **with full permissions in their worktree** (`claude --dangerously-skip-permissions`,
|
|
221
|
+
`codex --dangerously-bypass-approvals-and-sandbox`, `gemini --yolo`). That's what makes overnight runs
|
|
222
|
+
possible, and it also means they can run any command your user can. **Run Conclaves in a container, VM or
|
|
223
|
+
cloud sandbox** unless you trust the repo and the lanes. Keep secrets out of the box, and set a budget
|
|
224
|
+
your provider dashboards enforce. Devils that run on an agent CLI are started read-only.
|
|
225
|
+
|
|
226
|
+
## Status
|
|
227
|
+
|
|
228
|
+
`v0.1`: the loop, the board, the Devils, the skills, and local and remote compute all work. They're covered by
|
|
229
|
+
tests that use a stand-in agent (`python -m unittest discover tests`), and were checked end to end with real
|
|
230
|
+
Claude Code Cardinals and OpenRouter Devils. Next up: a live web view of the board, cost tracking per
|
|
231
|
+
Cardinal, and first-class Daytona/Modal backends. Issues and PRs are welcome.
|
|
232
|
+
|
|
233
|
+
## License
|
|
234
|
+
|
|
235
|
+
MIT
|