duet-cli 0.2.9__tar.gz → 0.2.10__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.9
3
+ Version: 0.2.10
4
4
  Summary: Two CLI agents in conversation. One Python file. Stdlib only.
5
5
  Author: Volkan Altan
6
6
  License-Expression: MIT
@@ -110,9 +110,10 @@ Then invoke `/duet` in the OpenCode TUI (or `opencode run --command duet "..."`
110
110
  non-interactively). Like the other plugins it shells out to the `duet` CLI, so
111
111
  install that first and make sure `command -v duet` passes in OpenCode's shell.
112
112
  The command runs on OpenCode's `build` agent; plain `/duet` runs the same
113
- `claude -p /review` kickoff, and `/duet 'npm test 2>&1' --turns 4` seeds from
114
- any command. Custom worktree overrides are constructed conditionally, matching
115
- the Claude and Codex entry points. Full guide:
113
+ `claude -p /review --model sonnet` kickoff, and
114
+ `/duet 'npm test 2>&1' --turns 4` seeds from any command. Custom worktree
115
+ overrides are constructed conditionally, matching the Claude and Codex entry
116
+ points. Full guide:
116
117
  [docs/OPENCODE_PLUGIN.md](https://github.com/volkan/duet/blob/main/docs/OPENCODE_PLUGIN.md).
117
118
  (duet can also drive OpenCode as a backend — `--partner opencode:coder` — so
118
119
  OpenCode can be one of the two looped agents too.)
@@ -162,8 +163,12 @@ duet --recipe review --cwd ~/workspace/project
162
163
  ```
163
164
 
164
165
  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.
166
+ turns, `claude -p /review --model sonnet`, and strict worktree isolation.
167
+ Claude agents use the stable `sonnet` alias unless an explicit slot model
168
+ overrides it. The recipe also sets
169
+ `--on-turn-timeout continue`, so when the coder turn times out the reviewer
170
+ still gets the timeout block plus the worktree diff to review instead of the
171
+ run dying reviewless. Explicit flags override recipe values.
167
172
 
168
173
  **Deterministic automation** — discover the run without parsing terminal prose,
169
174
  then poll the curated status schema:
@@ -220,7 +225,11 @@ other.
220
225
  To converge, an agent must include an `LGTM rationale:` explaining why the work
221
226
  is done, followed by the sentinel `<<<LGTM>>>` on its own line — a bare
222
227
  sentinel is ignored, and **both** agents must agree in back-to-back turns. The
223
- loop also stops on `--turns`, a per-turn timeout, or Ctrl-C. After a normal
228
+ loop also stops on `--turns`, a per-turn timeout, or Ctrl-C. With
229
+ `--on-turn-timeout continue` (the review recipe's default) a single turn
230
+ timeout is handed to the partner instead of ending the run; two consecutive
231
+ timeouts still stop. Without `--timeout`, the per-turn budget scales with the
232
+ reasoning level (900s → 1800s at `xhigh`/`max`). After a normal
224
233
  stop, duet opens a `force>` prompt so you can push another round.
225
234
 
226
235
  Every run writes a directory with `transcript.md`, `state.json`, per-turn
@@ -233,6 +242,14 @@ from saved state with `duet --continue <run> --task "next thing"`.
233
242
  - **Roles:** `planner`, `coder`, `reviewer`, `triage-reviewer`, or a custom one
234
243
  - **Reasoning:** `--reasoning minimal|low|medium|high|xhigh|max`
235
244
 
245
+ ## Limits / future
246
+
247
+ Timeout continuation applies only to automatic loop turns. Seed extraction
248
+ and forced turns still stop on timeout. A final-turn timeout also stops because
249
+ no partner turn remains, and two consecutive timeouts stop the run. Poll
250
+ `duet --status <run-id> --json` to watch the current budget instead of assuming
251
+ a deep-reasoning turn is stuck.
252
+
236
253
  ## Documentation
237
254
 
238
255
  [docs/USAGE.md](https://github.com/volkan/duet/blob/main/docs/USAGE.md) is the
@@ -89,9 +89,10 @@ Then invoke `/duet` in the OpenCode TUI (or `opencode run --command duet "..."`
89
89
  non-interactively). Like the other plugins it shells out to the `duet` CLI, so
90
90
  install that first and make sure `command -v duet` passes in OpenCode's shell.
91
91
  The command runs on OpenCode's `build` agent; plain `/duet` runs the same
92
- `claude -p /review` kickoff, and `/duet 'npm test 2>&1' --turns 4` seeds from
93
- any command. Custom worktree overrides are constructed conditionally, matching
94
- the Claude and Codex entry points. Full guide:
92
+ `claude -p /review --model sonnet` kickoff, and
93
+ `/duet 'npm test 2>&1' --turns 4` seeds from any command. Custom worktree
94
+ overrides are constructed conditionally, matching the Claude and Codex entry
95
+ points. Full guide:
95
96
  [docs/OPENCODE_PLUGIN.md](https://github.com/volkan/duet/blob/main/docs/OPENCODE_PLUGIN.md).
96
97
  (duet can also drive OpenCode as a backend — `--partner opencode:coder` — so
97
98
  OpenCode can be one of the two looped agents too.)
@@ -141,8 +142,12 @@ duet --recipe review --cwd ~/workspace/project
141
142
  ```
142
143
 
143
144
  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.
145
+ turns, `claude -p /review --model sonnet`, and strict worktree isolation.
146
+ Claude agents use the stable `sonnet` alias unless an explicit slot model
147
+ overrides it. The recipe also sets
148
+ `--on-turn-timeout continue`, so when the coder turn times out the reviewer
149
+ still gets the timeout block plus the worktree diff to review instead of the
150
+ run dying reviewless. Explicit flags override recipe values.
146
151
 
147
152
  **Deterministic automation** — discover the run without parsing terminal prose,
148
153
  then poll the curated status schema:
@@ -199,7 +204,11 @@ other.
199
204
  To converge, an agent must include an `LGTM rationale:` explaining why the work
200
205
  is done, followed by the sentinel `<<<LGTM>>>` on its own line — a bare
201
206
  sentinel is ignored, and **both** agents must agree in back-to-back turns. The
202
- loop also stops on `--turns`, a per-turn timeout, or Ctrl-C. After a normal
207
+ loop also stops on `--turns`, a per-turn timeout, or Ctrl-C. With
208
+ `--on-turn-timeout continue` (the review recipe's default) a single turn
209
+ timeout is handed to the partner instead of ending the run; two consecutive
210
+ timeouts still stop. Without `--timeout`, the per-turn budget scales with the
211
+ reasoning level (900s → 1800s at `xhigh`/`max`). After a normal
203
212
  stop, duet opens a `force>` prompt so you can push another round.
204
213
 
205
214
  Every run writes a directory with `transcript.md`, `state.json`, per-turn
@@ -212,6 +221,14 @@ from saved state with `duet --continue <run> --task "next thing"`.
212
221
  - **Roles:** `planner`, `coder`, `reviewer`, `triage-reviewer`, or a custom one
213
222
  - **Reasoning:** `--reasoning minimal|low|medium|high|xhigh|max`
214
223
 
224
+ ## Limits / future
225
+
226
+ Timeout continuation applies only to automatic loop turns. Seed extraction
227
+ and forced turns still stop on timeout. A final-turn timeout also stops because
228
+ no partner turn remains, and two consecutive timeouts stop the run. Poll
229
+ `duet --status <run-id> --json` to watch the current budget instead of assuming
230
+ a deep-reasoning turn is stuck.
231
+
215
232
  ## Documentation
216
233
 
217
234
  [docs/USAGE.md](https://github.com/volkan/duet/blob/main/docs/USAGE.md) is the