zwarm 3.4.0__tar.gz → 3.7.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.
- {zwarm-3.4.0 → zwarm-3.7.0}/PKG-INFO +70 -21
- {zwarm-3.4.0 → zwarm-3.7.0}/README.md +69 -20
- {zwarm-3.4.0 → zwarm-3.7.0}/pyproject.toml +12 -1
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/cli/interactive.py +420 -52
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/cli/main.py +127 -14
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/cli/pilot.py +52 -4
- zwarm-3.7.0/src/zwarm/core/costs.py +71 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/core/environment.py +55 -1
- zwarm-3.7.0/src/zwarm/core/registry.py +329 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/orchestrator.py +64 -12
- zwarm-3.7.0/src/zwarm/sessions/__init__.py +65 -0
- zwarm-3.7.0/src/zwarm/sessions/base.py +501 -0
- zwarm-3.7.0/src/zwarm/sessions/claude.py +481 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/sessions/manager.py +85 -458
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/tools/delegation.py +126 -61
- zwarm-3.4.0/src/zwarm/core/costs.py +0 -199
- zwarm-3.4.0/src/zwarm/sessions/__init__.py +0 -26
- {zwarm-3.4.0 → zwarm-3.7.0}/.gitignore +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/__init__.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/cli/__init__.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/core/__init__.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/core/checkpoints.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/core/compact.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/core/config.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/core/models.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/core/state.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/core/test_compact.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/core/test_config.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/core/test_models.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/prompts/__init__.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/prompts/orchestrator.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/prompts/pilot.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/test_orchestrator_watchers.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/tools/__init__.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/watchers/__init__.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/watchers/base.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/watchers/builtin.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/watchers/llm_watcher.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/watchers/manager.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/watchers/registry.py +0 -0
- {zwarm-3.4.0 → zwarm-3.7.0}/src/zwarm/watchers/test_watchers.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zwarm
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.7.0
|
|
4
4
|
Summary: Multi-Agent CLI Orchestration Research Platform
|
|
5
5
|
Requires-Python: <3.14,>=3.13
|
|
6
6
|
Requires-Dist: prompt-toolkit>=3.0.52
|
|
@@ -13,26 +13,30 @@ Description-Content-Type: text/markdown
|
|
|
13
13
|
|
|
14
14
|
# zwarm
|
|
15
15
|
|
|
16
|
-
Multi-agent CLI for orchestrating coding agents. Spawn, manage, and converse with multiple
|
|
16
|
+
Multi-agent CLI for orchestrating coding agents. Spawn, manage, and converse with multiple coding agent sessions in parallel.
|
|
17
|
+
|
|
18
|
+
**Supports both [Codex CLI](https://github.com/openai/codex) and [Claude Code CLI](https://claude.com/claude-code).**
|
|
17
19
|
|
|
18
20
|
## Installation
|
|
19
21
|
|
|
20
22
|
```bash
|
|
21
|
-
# From
|
|
22
|
-
|
|
23
|
-
uv sync
|
|
23
|
+
# From PyPI
|
|
24
|
+
pip install zwarm
|
|
24
25
|
|
|
25
|
-
# Or
|
|
26
|
-
uv pip install
|
|
26
|
+
# Or with uv
|
|
27
|
+
uv pip install zwarm
|
|
27
28
|
```
|
|
28
29
|
|
|
29
30
|
**Requirements:**
|
|
30
31
|
- Python 3.13+
|
|
31
|
-
-
|
|
32
|
+
- At least one of:
|
|
33
|
+
- `codex` CLI installed and authenticated (OpenAI)
|
|
34
|
+
- `claude` CLI installed and authenticated (Anthropic)
|
|
32
35
|
|
|
33
36
|
**Environment:**
|
|
34
37
|
```bash
|
|
35
38
|
export OPENAI_API_KEY="sk-..." # Required for Codex
|
|
39
|
+
export ANTHROPIC_API_KEY="sk-..." # Required for Claude
|
|
36
40
|
export WEAVE_PROJECT="entity/zwarm" # Optional: Weave tracing
|
|
37
41
|
```
|
|
38
42
|
|
|
@@ -78,6 +82,19 @@ zwarm interactive
|
|
|
78
82
|
|
|
79
83
|
---
|
|
80
84
|
|
|
85
|
+
## Multi-Adapter Support
|
|
86
|
+
|
|
87
|
+
zwarm supports multiple executor backends:
|
|
88
|
+
|
|
89
|
+
| Adapter | CLI | Models | Config |
|
|
90
|
+
|---------|-----|--------|--------|
|
|
91
|
+
| **Codex** | `codex` | gpt-5.1-codex-mini, etc. | `.zwarm/codex.toml` |
|
|
92
|
+
| **Claude** | `claude` | sonnet, opus, haiku | `.zwarm/claude.toml` |
|
|
93
|
+
|
|
94
|
+
You can mix adapters in the same session - for example, use Claude Opus for complex reasoning tasks and Codex Mini for quick edits.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
81
98
|
## Pilot Mode
|
|
82
99
|
|
|
83
100
|
**You chat with an LLM that delegates to coding agents.** Best of both worlds - LLM intelligence with human oversight.
|
|
@@ -85,12 +102,14 @@ zwarm interactive
|
|
|
85
102
|
```bash
|
|
86
103
|
zwarm pilot
|
|
87
104
|
zwarm pilot --task "Add user authentication"
|
|
105
|
+
zwarm pilot --resume # Resume previous session
|
|
88
106
|
```
|
|
89
107
|
|
|
90
108
|
### Features
|
|
91
109
|
|
|
92
110
|
- **Conversational**: Chat naturally, the LLM handles delegation
|
|
93
111
|
- **Checkpoints**: Every turn is saved, time-travel with `:goto`
|
|
112
|
+
- **Resume**: Continue where you left off with `--resume`
|
|
94
113
|
- **Multiline input**: Use `"""` for pasting large prompts
|
|
95
114
|
- **Status bar**: See token usage, cost estimates, context window
|
|
96
115
|
|
|
@@ -103,7 +122,8 @@ zwarm pilot --task "Add user authentication"
|
|
|
103
122
|
| `:history` | Show turn checkpoints |
|
|
104
123
|
| `:goto T3` | Jump back to turn 3 |
|
|
105
124
|
| `:sessions` | List executor sessions |
|
|
106
|
-
| `:
|
|
125
|
+
| `:save` | Save current state |
|
|
126
|
+
| `:quit` | Exit (auto-saves) |
|
|
107
127
|
|
|
108
128
|
### Example
|
|
109
129
|
|
|
@@ -162,7 +182,7 @@ zwarm interactive
|
|
|
162
182
|
| Command | Description |
|
|
163
183
|
|---------|-------------|
|
|
164
184
|
| `spawn "task" [--search]` | Start a new session (--search enables web) |
|
|
165
|
-
| `ls` | Dashboard of all sessions (with costs) |
|
|
185
|
+
| `ls` | Dashboard of all sessions (with costs, models) |
|
|
166
186
|
| `? ID` / `peek ID` | Quick status check |
|
|
167
187
|
| `show ID` | Full session details |
|
|
168
188
|
| `traj ID` | Show trajectory (steps taken) |
|
|
@@ -170,6 +190,7 @@ zwarm interactive
|
|
|
170
190
|
| `c ID "msg"` | Continue conversation |
|
|
171
191
|
| `kill ID \| all` | Stop session(s) |
|
|
172
192
|
| `rm ID \| all` | Delete session(s) |
|
|
193
|
+
| `!command` | Run shell command (e.g., `!git status`) |
|
|
173
194
|
| `help` | Show all commands |
|
|
174
195
|
| `quit` | Exit |
|
|
175
196
|
|
|
@@ -188,9 +209,9 @@ $ zwarm interactive
|
|
|
188
209
|
> ls
|
|
189
210
|
⟳ 2 running
|
|
190
211
|
|
|
191
|
-
ID │ │ Task │ Tokens │ Cost
|
|
192
|
-
abc123 │ ⟳ │ Add tests for the auth... │ 5,234 │ $0.052
|
|
193
|
-
def456 │ ⟳ │ Fix type errors in utils... │ 2,100 │ $0.021
|
|
212
|
+
ID │ │ Task │ Model │ Tokens │ Cost
|
|
213
|
+
abc123 │ ⟳ │ Add tests for the auth... │ codex-mini │ 5,234 │ $0.052
|
|
214
|
+
def456 │ ⟳ │ Fix type errors in utils... │ codex-mini │ 2,100 │ $0.021
|
|
194
215
|
|
|
195
216
|
> watch abc123
|
|
196
217
|
Watching abc123... (Ctrl+C to stop)
|
|
@@ -201,6 +222,11 @@ Watching abc123... (Ctrl+C to stop)
|
|
|
201
222
|
> c abc123 "Also add edge case tests"
|
|
202
223
|
✓ Injected message, session running
|
|
203
224
|
|
|
225
|
+
> !git status
|
|
226
|
+
On branch main
|
|
227
|
+
Changes not staged for commit:
|
|
228
|
+
...
|
|
229
|
+
|
|
204
230
|
> kill all
|
|
205
231
|
✓ Killed abc123
|
|
206
232
|
✓ Killed def456
|
|
@@ -225,7 +251,7 @@ The orchestrator LLM has access to:
|
|
|
225
251
|
|
|
226
252
|
| Tool | Description |
|
|
227
253
|
|------|-------------|
|
|
228
|
-
| `delegate(task,
|
|
254
|
+
| `delegate(task, adapter="codex")` | Start a new coding session |
|
|
229
255
|
| `converse(id, msg)` | Continue a session |
|
|
230
256
|
| `check_session(id)` | Get full session details |
|
|
231
257
|
| `peek_session(id)` | Quick status check |
|
|
@@ -235,7 +261,9 @@ The orchestrator LLM has access to:
|
|
|
235
261
|
|
|
236
262
|
**Async-first**: All sessions run in the background. The orchestrator uses `sleep()` to wait, then checks on progress.
|
|
237
263
|
|
|
238
|
-
**
|
|
264
|
+
**Multi-adapter**: Pass `adapter="claude"` or `adapter="codex"` to `delegate()` to choose the backend.
|
|
265
|
+
|
|
266
|
+
**Web Search**: Enable `web_search=True` in config for tasks needing current info (API docs, latest releases, etc.).
|
|
239
267
|
|
|
240
268
|
### Watchers
|
|
241
269
|
|
|
@@ -285,9 +313,9 @@ spawn → running → completed/failed/killed
|
|
|
285
313
|
|
|
286
314
|
```
|
|
287
315
|
.zwarm/sessions/<uuid>/
|
|
288
|
-
├── meta.json # Status, task, model, tokens, cost
|
|
316
|
+
├── meta.json # Status, task, model, adapter, tokens, cost
|
|
289
317
|
└── turns/
|
|
290
|
-
├── turn_1.jsonl # Raw
|
|
318
|
+
├── turn_1.jsonl # Raw executor output for turn 1
|
|
291
319
|
├── turn_2.jsonl # Output after continue
|
|
292
320
|
└── ...
|
|
293
321
|
```
|
|
@@ -305,6 +333,7 @@ zwarm init
|
|
|
305
333
|
This creates:
|
|
306
334
|
- `.zwarm/config.toml` - Runtime settings (Weave, watchers)
|
|
307
335
|
- `.zwarm/codex.toml` - Codex CLI settings (model, reasoning)
|
|
336
|
+
- `.zwarm/claude.toml` - Claude CLI settings (model, permissions)
|
|
308
337
|
- `zwarm.yaml` - Project context (optional, with `--with-project`)
|
|
309
338
|
|
|
310
339
|
### Config Files
|
|
@@ -318,9 +347,11 @@ project = "your-entity/zwarm"
|
|
|
318
347
|
max_steps = 50
|
|
319
348
|
|
|
320
349
|
[executor]
|
|
321
|
-
adapter = "codex_mcp"
|
|
322
350
|
web_search = false # Enable web search for all delegated sessions
|
|
323
351
|
|
|
352
|
+
[pilot]
|
|
353
|
+
max_steps_per_turn = 25
|
|
354
|
+
|
|
324
355
|
[watchers]
|
|
325
356
|
enabled = ["progress", "budget", "delegation", "delegation_reminder"]
|
|
326
357
|
```
|
|
@@ -329,6 +360,13 @@ enabled = ["progress", "budget", "delegation", "delegation_reminder"]
|
|
|
329
360
|
```toml
|
|
330
361
|
model = "gpt-5.1-codex-mini"
|
|
331
362
|
model_reasoning_effort = "high" # low | medium | high
|
|
363
|
+
full_auto = true
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
**`.zwarm/claude.toml`** - Controls the Claude Code CLI:
|
|
367
|
+
```toml
|
|
368
|
+
model = "sonnet" # sonnet | opus | haiku
|
|
369
|
+
full_danger = true # Skip permission prompts
|
|
332
370
|
```
|
|
333
371
|
|
|
334
372
|
**`zwarm.yaml`** - Project-specific context:
|
|
@@ -355,6 +393,7 @@ zwarm init --yes # Quick setup with defaults
|
|
|
355
393
|
|
|
356
394
|
# Interfaces
|
|
357
395
|
zwarm pilot # Conversational LLM guidance (recommended)
|
|
396
|
+
zwarm pilot --resume # Resume previous session
|
|
358
397
|
zwarm interactive # Direct session control REPL
|
|
359
398
|
zwarm orchestrate # Fully autonomous LLM
|
|
360
399
|
|
|
@@ -377,13 +416,15 @@ zwarm reset # Reset .zwarm/ state
|
|
|
377
416
|
zwarm/
|
|
378
417
|
├── src/zwarm/
|
|
379
418
|
│ ├── sessions/ # Session substrate
|
|
380
|
-
│ │
|
|
419
|
+
│ │ ├── base.py # BaseSessionManager (ABC)
|
|
420
|
+
│ │ ├── manager.py # CodexSessionManager
|
|
421
|
+
│ │ └── claude.py # ClaudeSessionManager
|
|
381
422
|
│ ├── cli/
|
|
382
423
|
│ │ ├── main.py # CLI commands
|
|
383
424
|
│ │ ├── pilot.py # Pilot REPL
|
|
384
425
|
│ │ └── interactive.py # Interactive REPL
|
|
385
426
|
│ ├── tools/
|
|
386
|
-
│ │ └── delegation.py # Orchestrator tools
|
|
427
|
+
│ │ └── delegation.py # Orchestrator tools (multi-adapter)
|
|
387
428
|
│ ├── core/
|
|
388
429
|
│ │ ├── config.py # Configuration
|
|
389
430
|
│ │ ├── checkpoints.py # Time-travel primitives
|
|
@@ -392,5 +433,13 @@ zwarm/
|
|
|
392
433
|
│ ├── watchers/ # Trajectory alignment
|
|
393
434
|
│ ├── prompts/ # System prompts
|
|
394
435
|
│ └── orchestrator.py # Orchestrator agent
|
|
395
|
-
└──
|
|
436
|
+
└── docs/
|
|
437
|
+
├── CONCEPTS.md # Architecture diagrams
|
|
438
|
+
└── INTERNALS.md # Developer documentation
|
|
396
439
|
```
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## License
|
|
444
|
+
|
|
445
|
+
MIT
|
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
# zwarm
|
|
2
2
|
|
|
3
|
-
Multi-agent CLI for orchestrating coding agents. Spawn, manage, and converse with multiple
|
|
3
|
+
Multi-agent CLI for orchestrating coding agents. Spawn, manage, and converse with multiple coding agent sessions in parallel.
|
|
4
|
+
|
|
5
|
+
**Supports both [Codex CLI](https://github.com/openai/codex) and [Claude Code CLI](https://claude.com/claude-code).**
|
|
4
6
|
|
|
5
7
|
## Installation
|
|
6
8
|
|
|
7
9
|
```bash
|
|
8
|
-
# From
|
|
9
|
-
|
|
10
|
-
uv sync
|
|
10
|
+
# From PyPI
|
|
11
|
+
pip install zwarm
|
|
11
12
|
|
|
12
|
-
# Or
|
|
13
|
-
uv pip install
|
|
13
|
+
# Or with uv
|
|
14
|
+
uv pip install zwarm
|
|
14
15
|
```
|
|
15
16
|
|
|
16
17
|
**Requirements:**
|
|
17
18
|
- Python 3.13+
|
|
18
|
-
-
|
|
19
|
+
- At least one of:
|
|
20
|
+
- `codex` CLI installed and authenticated (OpenAI)
|
|
21
|
+
- `claude` CLI installed and authenticated (Anthropic)
|
|
19
22
|
|
|
20
23
|
**Environment:**
|
|
21
24
|
```bash
|
|
22
25
|
export OPENAI_API_KEY="sk-..." # Required for Codex
|
|
26
|
+
export ANTHROPIC_API_KEY="sk-..." # Required for Claude
|
|
23
27
|
export WEAVE_PROJECT="entity/zwarm" # Optional: Weave tracing
|
|
24
28
|
```
|
|
25
29
|
|
|
@@ -65,6 +69,19 @@ zwarm interactive
|
|
|
65
69
|
|
|
66
70
|
---
|
|
67
71
|
|
|
72
|
+
## Multi-Adapter Support
|
|
73
|
+
|
|
74
|
+
zwarm supports multiple executor backends:
|
|
75
|
+
|
|
76
|
+
| Adapter | CLI | Models | Config |
|
|
77
|
+
|---------|-----|--------|--------|
|
|
78
|
+
| **Codex** | `codex` | gpt-5.1-codex-mini, etc. | `.zwarm/codex.toml` |
|
|
79
|
+
| **Claude** | `claude` | sonnet, opus, haiku | `.zwarm/claude.toml` |
|
|
80
|
+
|
|
81
|
+
You can mix adapters in the same session - for example, use Claude Opus for complex reasoning tasks and Codex Mini for quick edits.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
68
85
|
## Pilot Mode
|
|
69
86
|
|
|
70
87
|
**You chat with an LLM that delegates to coding agents.** Best of both worlds - LLM intelligence with human oversight.
|
|
@@ -72,12 +89,14 @@ zwarm interactive
|
|
|
72
89
|
```bash
|
|
73
90
|
zwarm pilot
|
|
74
91
|
zwarm pilot --task "Add user authentication"
|
|
92
|
+
zwarm pilot --resume # Resume previous session
|
|
75
93
|
```
|
|
76
94
|
|
|
77
95
|
### Features
|
|
78
96
|
|
|
79
97
|
- **Conversational**: Chat naturally, the LLM handles delegation
|
|
80
98
|
- **Checkpoints**: Every turn is saved, time-travel with `:goto`
|
|
99
|
+
- **Resume**: Continue where you left off with `--resume`
|
|
81
100
|
- **Multiline input**: Use `"""` for pasting large prompts
|
|
82
101
|
- **Status bar**: See token usage, cost estimates, context window
|
|
83
102
|
|
|
@@ -90,7 +109,8 @@ zwarm pilot --task "Add user authentication"
|
|
|
90
109
|
| `:history` | Show turn checkpoints |
|
|
91
110
|
| `:goto T3` | Jump back to turn 3 |
|
|
92
111
|
| `:sessions` | List executor sessions |
|
|
93
|
-
| `:
|
|
112
|
+
| `:save` | Save current state |
|
|
113
|
+
| `:quit` | Exit (auto-saves) |
|
|
94
114
|
|
|
95
115
|
### Example
|
|
96
116
|
|
|
@@ -149,7 +169,7 @@ zwarm interactive
|
|
|
149
169
|
| Command | Description |
|
|
150
170
|
|---------|-------------|
|
|
151
171
|
| `spawn "task" [--search]` | Start a new session (--search enables web) |
|
|
152
|
-
| `ls` | Dashboard of all sessions (with costs) |
|
|
172
|
+
| `ls` | Dashboard of all sessions (with costs, models) |
|
|
153
173
|
| `? ID` / `peek ID` | Quick status check |
|
|
154
174
|
| `show ID` | Full session details |
|
|
155
175
|
| `traj ID` | Show trajectory (steps taken) |
|
|
@@ -157,6 +177,7 @@ zwarm interactive
|
|
|
157
177
|
| `c ID "msg"` | Continue conversation |
|
|
158
178
|
| `kill ID \| all` | Stop session(s) |
|
|
159
179
|
| `rm ID \| all` | Delete session(s) |
|
|
180
|
+
| `!command` | Run shell command (e.g., `!git status`) |
|
|
160
181
|
| `help` | Show all commands |
|
|
161
182
|
| `quit` | Exit |
|
|
162
183
|
|
|
@@ -175,9 +196,9 @@ $ zwarm interactive
|
|
|
175
196
|
> ls
|
|
176
197
|
⟳ 2 running
|
|
177
198
|
|
|
178
|
-
ID │ │ Task │ Tokens │ Cost
|
|
179
|
-
abc123 │ ⟳ │ Add tests for the auth... │ 5,234 │ $0.052
|
|
180
|
-
def456 │ ⟳ │ Fix type errors in utils... │ 2,100 │ $0.021
|
|
199
|
+
ID │ │ Task │ Model │ Tokens │ Cost
|
|
200
|
+
abc123 │ ⟳ │ Add tests for the auth... │ codex-mini │ 5,234 │ $0.052
|
|
201
|
+
def456 │ ⟳ │ Fix type errors in utils... │ codex-mini │ 2,100 │ $0.021
|
|
181
202
|
|
|
182
203
|
> watch abc123
|
|
183
204
|
Watching abc123... (Ctrl+C to stop)
|
|
@@ -188,6 +209,11 @@ Watching abc123... (Ctrl+C to stop)
|
|
|
188
209
|
> c abc123 "Also add edge case tests"
|
|
189
210
|
✓ Injected message, session running
|
|
190
211
|
|
|
212
|
+
> !git status
|
|
213
|
+
On branch main
|
|
214
|
+
Changes not staged for commit:
|
|
215
|
+
...
|
|
216
|
+
|
|
191
217
|
> kill all
|
|
192
218
|
✓ Killed abc123
|
|
193
219
|
✓ Killed def456
|
|
@@ -212,7 +238,7 @@ The orchestrator LLM has access to:
|
|
|
212
238
|
|
|
213
239
|
| Tool | Description |
|
|
214
240
|
|------|-------------|
|
|
215
|
-
| `delegate(task,
|
|
241
|
+
| `delegate(task, adapter="codex")` | Start a new coding session |
|
|
216
242
|
| `converse(id, msg)` | Continue a session |
|
|
217
243
|
| `check_session(id)` | Get full session details |
|
|
218
244
|
| `peek_session(id)` | Quick status check |
|
|
@@ -222,7 +248,9 @@ The orchestrator LLM has access to:
|
|
|
222
248
|
|
|
223
249
|
**Async-first**: All sessions run in the background. The orchestrator uses `sleep()` to wait, then checks on progress.
|
|
224
250
|
|
|
225
|
-
**
|
|
251
|
+
**Multi-adapter**: Pass `adapter="claude"` or `adapter="codex"` to `delegate()` to choose the backend.
|
|
252
|
+
|
|
253
|
+
**Web Search**: Enable `web_search=True` in config for tasks needing current info (API docs, latest releases, etc.).
|
|
226
254
|
|
|
227
255
|
### Watchers
|
|
228
256
|
|
|
@@ -272,9 +300,9 @@ spawn → running → completed/failed/killed
|
|
|
272
300
|
|
|
273
301
|
```
|
|
274
302
|
.zwarm/sessions/<uuid>/
|
|
275
|
-
├── meta.json # Status, task, model, tokens, cost
|
|
303
|
+
├── meta.json # Status, task, model, adapter, tokens, cost
|
|
276
304
|
└── turns/
|
|
277
|
-
├── turn_1.jsonl # Raw
|
|
305
|
+
├── turn_1.jsonl # Raw executor output for turn 1
|
|
278
306
|
├── turn_2.jsonl # Output after continue
|
|
279
307
|
└── ...
|
|
280
308
|
```
|
|
@@ -292,6 +320,7 @@ zwarm init
|
|
|
292
320
|
This creates:
|
|
293
321
|
- `.zwarm/config.toml` - Runtime settings (Weave, watchers)
|
|
294
322
|
- `.zwarm/codex.toml` - Codex CLI settings (model, reasoning)
|
|
323
|
+
- `.zwarm/claude.toml` - Claude CLI settings (model, permissions)
|
|
295
324
|
- `zwarm.yaml` - Project context (optional, with `--with-project`)
|
|
296
325
|
|
|
297
326
|
### Config Files
|
|
@@ -305,9 +334,11 @@ project = "your-entity/zwarm"
|
|
|
305
334
|
max_steps = 50
|
|
306
335
|
|
|
307
336
|
[executor]
|
|
308
|
-
adapter = "codex_mcp"
|
|
309
337
|
web_search = false # Enable web search for all delegated sessions
|
|
310
338
|
|
|
339
|
+
[pilot]
|
|
340
|
+
max_steps_per_turn = 25
|
|
341
|
+
|
|
311
342
|
[watchers]
|
|
312
343
|
enabled = ["progress", "budget", "delegation", "delegation_reminder"]
|
|
313
344
|
```
|
|
@@ -316,6 +347,13 @@ enabled = ["progress", "budget", "delegation", "delegation_reminder"]
|
|
|
316
347
|
```toml
|
|
317
348
|
model = "gpt-5.1-codex-mini"
|
|
318
349
|
model_reasoning_effort = "high" # low | medium | high
|
|
350
|
+
full_auto = true
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
**`.zwarm/claude.toml`** - Controls the Claude Code CLI:
|
|
354
|
+
```toml
|
|
355
|
+
model = "sonnet" # sonnet | opus | haiku
|
|
356
|
+
full_danger = true # Skip permission prompts
|
|
319
357
|
```
|
|
320
358
|
|
|
321
359
|
**`zwarm.yaml`** - Project-specific context:
|
|
@@ -342,6 +380,7 @@ zwarm init --yes # Quick setup with defaults
|
|
|
342
380
|
|
|
343
381
|
# Interfaces
|
|
344
382
|
zwarm pilot # Conversational LLM guidance (recommended)
|
|
383
|
+
zwarm pilot --resume # Resume previous session
|
|
345
384
|
zwarm interactive # Direct session control REPL
|
|
346
385
|
zwarm orchestrate # Fully autonomous LLM
|
|
347
386
|
|
|
@@ -364,13 +403,15 @@ zwarm reset # Reset .zwarm/ state
|
|
|
364
403
|
zwarm/
|
|
365
404
|
├── src/zwarm/
|
|
366
405
|
│ ├── sessions/ # Session substrate
|
|
367
|
-
│ │
|
|
406
|
+
│ │ ├── base.py # BaseSessionManager (ABC)
|
|
407
|
+
│ │ ├── manager.py # CodexSessionManager
|
|
408
|
+
│ │ └── claude.py # ClaudeSessionManager
|
|
368
409
|
│ ├── cli/
|
|
369
410
|
│ │ ├── main.py # CLI commands
|
|
370
411
|
│ │ ├── pilot.py # Pilot REPL
|
|
371
412
|
│ │ └── interactive.py # Interactive REPL
|
|
372
413
|
│ ├── tools/
|
|
373
|
-
│ │ └── delegation.py # Orchestrator tools
|
|
414
|
+
│ │ └── delegation.py # Orchestrator tools (multi-adapter)
|
|
374
415
|
│ ├── core/
|
|
375
416
|
│ │ ├── config.py # Configuration
|
|
376
417
|
│ │ ├── checkpoints.py # Time-travel primitives
|
|
@@ -379,5 +420,13 @@ zwarm/
|
|
|
379
420
|
│ ├── watchers/ # Trajectory alignment
|
|
380
421
|
│ ├── prompts/ # System prompts
|
|
381
422
|
│ └── orchestrator.py # Orchestrator agent
|
|
382
|
-
└──
|
|
423
|
+
└── docs/
|
|
424
|
+
├── CONCEPTS.md # Architecture diagrams
|
|
425
|
+
└── INTERNALS.md # Developer documentation
|
|
383
426
|
```
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## License
|
|
431
|
+
|
|
432
|
+
MIT
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "zwarm"
|
|
3
|
-
version = "3.
|
|
3
|
+
version = "3.7.0"
|
|
4
4
|
description = "Multi-Agent CLI Orchestration Research Platform"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.13,<3.14"
|
|
@@ -41,3 +41,14 @@ dev = [
|
|
|
41
41
|
"pytest>=8.0.0",
|
|
42
42
|
"pytest-asyncio>=1.3.0",
|
|
43
43
|
]
|
|
44
|
+
|
|
45
|
+
[tool.coverage.run]
|
|
46
|
+
branch = true
|
|
47
|
+
source = ["zwarm"]
|
|
48
|
+
omit = [
|
|
49
|
+
"src/zwarm/__init__.py",
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
[tool.coverage.report]
|
|
53
|
+
show_missing = true
|
|
54
|
+
fail_under = 80
|