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.
@@ -0,0 +1,8 @@
1
+ __pycache__/
2
+ *.pyc
3
+ *.egg-info/
4
+ dist/
5
+ build/
6
+ .venv/
7
+ .conclave/
8
+ .DS_Store
@@ -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
@@ -0,0 +1,3 @@
1
+ """Conclave: a managed agent team. One Dean, many Cardinals, a few Devils, and you (the Pope)."""
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,3 @@
1
+ from conclave.cli import main
2
+
3
+ raise SystemExit(main())