duet-cli 0.2.8__tar.gz → 0.2.9__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: duet-cli
3
- Version: 0.2.8
3
+ Version: 0.2.9
4
4
  Summary: Two CLI agents in conversation. One Python file. Stdlib only.
5
5
  Author: Volkan Altan
6
6
  License-Expression: MIT
@@ -47,7 +47,9 @@ Plain `/duet` runs Claude Code's real `/review`, then loops Codex and Claude in
47
47
  a worktree until they converge. Pass any upstream command as the kickoff:
48
48
  `/duet 'npm test 2>&1' --turns 4`. The plugin shells out to the `duet` CLI, so
49
49
  install that first (see below) and make sure `command -v duet` passes in Claude
50
- Code's shell. Full guide:
50
+ Code's shell. Custom topology flags such as `--no-worktree` and
51
+ `--allow-worktree-fallback` replace the plugin defaults without emitting
52
+ conflicting CLI flags. Full guide:
51
53
  [docs/CLAUDE_CODE_PLUGIN.md](https://github.com/volkan/duet/blob/main/docs/CLAUDE_CODE_PLUGIN.md).
52
54
  If Claude Code disambiguates plugin commands with namespaces, `/duet:duet` is
53
55
  the same command.
@@ -109,7 +111,8 @@ non-interactively). Like the other plugins it shells out to the `duet` CLI, so
109
111
  install that first and make sure `command -v duet` passes in OpenCode's shell.
110
112
  The command runs on OpenCode's `build` agent; plain `/duet` runs the same
111
113
  `claude -p /review` kickoff, and `/duet 'npm test 2>&1' --turns 4` seeds from
112
- any command. Full guide:
114
+ any command. Custom worktree overrides are constructed conditionally, matching
115
+ the Claude and Codex entry points. Full guide:
113
116
  [docs/OPENCODE_PLUGIN.md](https://github.com/volkan/duet/blob/main/docs/OPENCODE_PLUGIN.md).
114
117
  (duet can also drive OpenCode as a backend — `--partner opencode:coder` — so
115
118
  OpenCode can be one of the two looped agents too.)
@@ -155,9 +158,24 @@ duet --task "Review the latest commit; fix only what the reviewer requests." \
155
158
  `/review`, a test run, or any command:
156
159
 
157
160
  ```bash
158
- duet --task-from-cmd 'claude -p /review' \
159
- --lead claude:reviewer --partner codex:coder \
160
- --worktree --recap --cwd ~/workspace/project --turns 6
161
+ duet --recipe review --cwd ~/workspace/project
162
+ ```
163
+
164
+ The review recipe uses recap mode, `claude:reviewer` + `codex:coder`, six
165
+ turns, `claude -p /review`, and strict worktree isolation. Explicit flags
166
+ override recipe values.
167
+
168
+ **Deterministic automation** — discover the run without parsing terminal prose,
169
+ then poll the curated status schema:
170
+
171
+ ```bash
172
+ control_dir=$(mktemp -d)
173
+ duet --recipe review --run-info-file "$control_dir/run.json" &
174
+ duet_pid=$!
175
+ while [ ! -s "$control_dir/run.json" ]; do sleep 0.1; done
176
+ run_dir=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["run_dir"])' "$control_dir/run.json")
177
+ duet --status "$run_dir" --json
178
+ wait "$duet_pid"
161
179
  ```
162
180
 
163
181
  **Deep planner, fast coder** — Claude plans at high effort while Codex coder
@@ -207,7 +225,8 @@ stop, duet opens a `force>` prompt so you can push another round.
207
225
 
208
226
  Every run writes a directory with `transcript.md`, `state.json`, per-turn
209
227
  stderr logs, and the `wt/` worktree when `--worktree` is on. Inspect a run with
210
- `duet --status <run-id>`, list runs with `duet --list`, and start a fresh run
228
+ `duet --status <run-id> --json` (or omit `--json` for the human view), list runs
229
+ with `duet --list`, and start a fresh run
211
230
  from saved state with `duet --continue <run> --task "next thing"`.
212
231
 
213
232
  - **Backends:** `claude`, `codex`, `gemini`, `copilot`, `opencode`
@@ -26,7 +26,9 @@ Plain `/duet` runs Claude Code's real `/review`, then loops Codex and Claude in
26
26
  a worktree until they converge. Pass any upstream command as the kickoff:
27
27
  `/duet 'npm test 2>&1' --turns 4`. The plugin shells out to the `duet` CLI, so
28
28
  install that first (see below) and make sure `command -v duet` passes in Claude
29
- Code's shell. Full guide:
29
+ Code's shell. Custom topology flags such as `--no-worktree` and
30
+ `--allow-worktree-fallback` replace the plugin defaults without emitting
31
+ conflicting CLI flags. Full guide:
30
32
  [docs/CLAUDE_CODE_PLUGIN.md](https://github.com/volkan/duet/blob/main/docs/CLAUDE_CODE_PLUGIN.md).
31
33
  If Claude Code disambiguates plugin commands with namespaces, `/duet:duet` is
32
34
  the same command.
@@ -88,7 +90,8 @@ non-interactively). Like the other plugins it shells out to the `duet` CLI, so
88
90
  install that first and make sure `command -v duet` passes in OpenCode's shell.
89
91
  The command runs on OpenCode's `build` agent; plain `/duet` runs the same
90
92
  `claude -p /review` kickoff, and `/duet 'npm test 2>&1' --turns 4` seeds from
91
- any command. Full guide:
93
+ any command. Custom worktree overrides are constructed conditionally, matching
94
+ the Claude and Codex entry points. Full guide:
92
95
  [docs/OPENCODE_PLUGIN.md](https://github.com/volkan/duet/blob/main/docs/OPENCODE_PLUGIN.md).
93
96
  (duet can also drive OpenCode as a backend — `--partner opencode:coder` — so
94
97
  OpenCode can be one of the two looped agents too.)
@@ -134,9 +137,24 @@ duet --task "Review the latest commit; fix only what the reviewer requests." \
134
137
  `/review`, a test run, or any command:
135
138
 
136
139
  ```bash
137
- duet --task-from-cmd 'claude -p /review' \
138
- --lead claude:reviewer --partner codex:coder \
139
- --worktree --recap --cwd ~/workspace/project --turns 6
140
+ duet --recipe review --cwd ~/workspace/project
141
+ ```
142
+
143
+ The review recipe uses recap mode, `claude:reviewer` + `codex:coder`, six
144
+ turns, `claude -p /review`, and strict worktree isolation. Explicit flags
145
+ override recipe values.
146
+
147
+ **Deterministic automation** — discover the run without parsing terminal prose,
148
+ then poll the curated status schema:
149
+
150
+ ```bash
151
+ control_dir=$(mktemp -d)
152
+ duet --recipe review --run-info-file "$control_dir/run.json" &
153
+ duet_pid=$!
154
+ while [ ! -s "$control_dir/run.json" ]; do sleep 0.1; done
155
+ run_dir=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["run_dir"])' "$control_dir/run.json")
156
+ duet --status "$run_dir" --json
157
+ wait "$duet_pid"
140
158
  ```
141
159
 
142
160
  **Deep planner, fast coder** — Claude plans at high effort while Codex coder
@@ -186,7 +204,8 @@ stop, duet opens a `force>` prompt so you can push another round.
186
204
 
187
205
  Every run writes a directory with `transcript.md`, `state.json`, per-turn
188
206
  stderr logs, and the `wt/` worktree when `--worktree` is on. Inspect a run with
189
- `duet --status <run-id>`, list runs with `duet --list`, and start a fresh run
207
+ `duet --status <run-id> --json` (or omit `--json` for the human view), list runs
208
+ with `duet --list`, and start a fresh run
190
209
  from saved state with `duet --continue <run> --task "next thing"`.
191
210
 
192
211
  - **Backends:** `claude`, `codex`, `gemini`, `copilot`, `opencode`