duet-cli 0.2.5__tar.gz → 0.2.7__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.5
3
+ Version: 0.2.7
4
4
  Summary: Two CLI agents in conversation. One Python file. Stdlib only.
5
5
  Author: Volkan Altan
6
6
  License-Expression: MIT
@@ -24,12 +24,12 @@ Dynamic: license-file
24
24
  **Two CLI agents in conversation. One Python file. Stdlib only.**
25
25
 
26
26
  `duet` runs two command-line coding agents in alternating turns until they
27
- agree. By default that is Claude and Codex; Gemini and Copilot are also
28
- supported, and you can pair two agents from the same backend. One agent plans
29
- or reviews while the other implements; each keeps its own session memory across
30
- turns, and every run leaves a transcript you can inspect.
27
+ agree. By default that is Claude and Codex; Gemini, Copilot, and OpenCode are
28
+ also supported, and you can pair two agents from the same backend. One agent
29
+ plans or reviews while the other implements; each keeps its own session memory
30
+ across turns, and every run leaves a transcript you can inspect.
31
31
 
32
- ## Use it three ways
32
+ ## Use it four ways
33
33
 
34
34
  ### 1. Inside Claude Code — `/duet`
35
35
 
@@ -93,7 +93,26 @@ CLI, so install that first (see below) and make sure `command -v duet` passes in
93
93
  Codex's shell. Full guide:
94
94
  [docs/CODEX_PLUGIN.md](https://github.com/volkan/duet/blob/main/docs/CODEX_PLUGIN.md).
95
95
 
96
- ### 3. From the terminal `duet`
96
+ ### 3. Inside OpenCode`/duet`
97
+
98
+ OpenCode custom commands are drop-in files — no marketplace step:
99
+
100
+ ```bash
101
+ mkdir -p ~/.config/opencode/command
102
+ cp plugins/duet-opencode/command/duet.md ~/.config/opencode/command/duet.md
103
+ ```
104
+
105
+ Then invoke `/duet` in the OpenCode TUI (or `opencode run --command duet "..."`
106
+ non-interactively). Like the other plugins it shells out to the `duet` CLI, so
107
+ install that first and make sure `command -v duet` passes in OpenCode's shell.
108
+ The command runs on OpenCode's `build` agent; plain `/duet` runs the same
109
+ `claude -p /review` kickoff, and `/duet 'npm test 2>&1' --turns 4` seeds from
110
+ any command. Full guide:
111
+ [docs/OPENCODE_PLUGIN.md](https://github.com/volkan/duet/blob/main/docs/OPENCODE_PLUGIN.md).
112
+ (duet can also drive OpenCode as a backend — `--partner opencode:coder` — so
113
+ OpenCode can be one of the two looped agents too.)
114
+
115
+ ### 4. From the terminal — `duet`
97
116
 
98
117
  ```bash
99
118
  pipx install duet-cli # recommended; the command it installs is `duet`
@@ -147,6 +166,8 @@ duet --reasoning high --codex-fast \
147
166
  --task "Fix the issue" --cwd ~/workspace/project
148
167
  ```
149
168
 
169
+ Use `--no-codex-fast` to override a config or continued run that enabled it.
170
+
150
171
  **Verify gate** — a convergence proposal only counts if `make test` exits 0;
151
172
  any failure feeds back into the next turn:
152
173
 
@@ -172,8 +193,9 @@ coder fixes them). Run one with `duet --config examples/pr-review.yaml`.
172
193
  ## How it works
173
194
 
174
195
  Each agent keeps its own conversation memory across turns (Claude via
175
- `--resume`, Codex via `codex exec resume`, Gemini and Copilot via their JSON
176
- session ids). On each turn duet sends one agent's latest reply to the other.
196
+ `--resume`, Codex via `codex exec resume`, Gemini, Copilot, and OpenCode via
197
+ their JSON session ids). On each turn duet sends one agent's latest reply to the
198
+ other.
177
199
 
178
200
  To converge, an agent must include an `LGTM rationale:` explaining why the work
179
201
  is done, followed by the sentinel `<<<LGTM>>>` on its own line — a bare
@@ -186,7 +208,7 @@ stderr logs, and the `wt/` worktree when `--worktree` is on. Inspect a run with
186
208
  `duet --status <run-id>`, list runs with `duet --list`, and start a fresh run
187
209
  from saved state with `duet --continue <run> --task "next thing"`.
188
210
 
189
- - **Backends:** `claude`, `codex`, `gemini`, `copilot`
211
+ - **Backends:** `claude`, `codex`, `gemini`, `copilot`, `opencode`
190
212
  - **Roles:** `planner`, `coder`, `reviewer`, `triage-reviewer`, or a custom one
191
213
  - **Reasoning:** `--reasoning minimal|low|medium|high|xhigh|max`
192
214
 
@@ -3,12 +3,12 @@
3
3
  **Two CLI agents in conversation. One Python file. Stdlib only.**
4
4
 
5
5
  `duet` runs two command-line coding agents in alternating turns until they
6
- agree. By default that is Claude and Codex; Gemini and Copilot are also
7
- supported, and you can pair two agents from the same backend. One agent plans
8
- or reviews while the other implements; each keeps its own session memory across
9
- turns, and every run leaves a transcript you can inspect.
6
+ agree. By default that is Claude and Codex; Gemini, Copilot, and OpenCode are
7
+ also supported, and you can pair two agents from the same backend. One agent
8
+ plans or reviews while the other implements; each keeps its own session memory
9
+ across turns, and every run leaves a transcript you can inspect.
10
10
 
11
- ## Use it three ways
11
+ ## Use it four ways
12
12
 
13
13
  ### 1. Inside Claude Code — `/duet`
14
14
 
@@ -72,7 +72,26 @@ CLI, so install that first (see below) and make sure `command -v duet` passes in
72
72
  Codex's shell. Full guide:
73
73
  [docs/CODEX_PLUGIN.md](https://github.com/volkan/duet/blob/main/docs/CODEX_PLUGIN.md).
74
74
 
75
- ### 3. From the terminal `duet`
75
+ ### 3. Inside OpenCode`/duet`
76
+
77
+ OpenCode custom commands are drop-in files — no marketplace step:
78
+
79
+ ```bash
80
+ mkdir -p ~/.config/opencode/command
81
+ cp plugins/duet-opencode/command/duet.md ~/.config/opencode/command/duet.md
82
+ ```
83
+
84
+ Then invoke `/duet` in the OpenCode TUI (or `opencode run --command duet "..."`
85
+ non-interactively). Like the other plugins it shells out to the `duet` CLI, so
86
+ install that first and make sure `command -v duet` passes in OpenCode's shell.
87
+ The command runs on OpenCode's `build` agent; plain `/duet` runs the same
88
+ `claude -p /review` kickoff, and `/duet 'npm test 2>&1' --turns 4` seeds from
89
+ any command. Full guide:
90
+ [docs/OPENCODE_PLUGIN.md](https://github.com/volkan/duet/blob/main/docs/OPENCODE_PLUGIN.md).
91
+ (duet can also drive OpenCode as a backend — `--partner opencode:coder` — so
92
+ OpenCode can be one of the two looped agents too.)
93
+
94
+ ### 4. From the terminal — `duet`
76
95
 
77
96
  ```bash
78
97
  pipx install duet-cli # recommended; the command it installs is `duet`
@@ -126,6 +145,8 @@ duet --reasoning high --codex-fast \
126
145
  --task "Fix the issue" --cwd ~/workspace/project
127
146
  ```
128
147
 
148
+ Use `--no-codex-fast` to override a config or continued run that enabled it.
149
+
129
150
  **Verify gate** — a convergence proposal only counts if `make test` exits 0;
130
151
  any failure feeds back into the next turn:
131
152
 
@@ -151,8 +172,9 @@ coder fixes them). Run one with `duet --config examples/pr-review.yaml`.
151
172
  ## How it works
152
173
 
153
174
  Each agent keeps its own conversation memory across turns (Claude via
154
- `--resume`, Codex via `codex exec resume`, Gemini and Copilot via their JSON
155
- session ids). On each turn duet sends one agent's latest reply to the other.
175
+ `--resume`, Codex via `codex exec resume`, Gemini, Copilot, and OpenCode via
176
+ their JSON session ids). On each turn duet sends one agent's latest reply to the
177
+ other.
156
178
 
157
179
  To converge, an agent must include an `LGTM rationale:` explaining why the work
158
180
  is done, followed by the sentinel `<<<LGTM>>>` on its own line — a bare
@@ -165,7 +187,7 @@ stderr logs, and the `wt/` worktree when `--worktree` is on. Inspect a run with
165
187
  `duet --status <run-id>`, list runs with `duet --list`, and start a fresh run
166
188
  from saved state with `duet --continue <run> --task "next thing"`.
167
189
 
168
- - **Backends:** `claude`, `codex`, `gemini`, `copilot`
190
+ - **Backends:** `claude`, `codex`, `gemini`, `copilot`, `opencode`
169
191
  - **Roles:** `planner`, `coder`, `reviewer`, `triage-reviewer`, or a custom one
170
192
  - **Reasoning:** `--reasoning minimal|low|medium|high|xhigh|max`
171
193