@kontextmind/kxm 0.7.183 → 0.7.185

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.
@@ -11,7 +11,7 @@
11
11
  "name": "kxm",
12
12
  "source": "./plugins/kxm",
13
13
  "description": "Durable workflows, peer agents, and kxm tui",
14
- "version": "0.7.183",
14
+ "version": "0.7.185",
15
15
  "category": "development",
16
16
  "tags": ["kxm", "multi-agent", "workflows", "mcp"]
17
17
  }
@@ -3,9 +3,12 @@ id: reviewer-cli
3
3
  purpose: reviewer-cli
4
4
  permission: read-only
5
5
  description: Independent CLI and docs critic.
6
- # codex-gpt-5-6-sol is the required cli critic. The Pi fallback is a different vendor.
6
+ # codex-gpt-6-1-sol is the required cli critic. The Pi fallback is a different vendor.
7
+ # codex-gpt-5-6-sol stays admitted as the last fallback.
7
8
  roster:
8
- - route: codex-gpt-5-6-sol
9
+ - route: codex-gpt-6-1-sol
9
10
  effort: low
10
11
  - route: pi-qwen3-8-flash-openrouter
11
12
  effort: low
13
+ - route: codex-gpt-5-6-sol
14
+ effort: low
@@ -4,12 +4,19 @@ purpose: writer
4
4
  permission: edit
5
5
  description: Primary implementation agent.
6
6
  # Rotation priority = order. Effort default: medium for implementation.
7
+ # Argon needs a paid Google AI Pro, Ultra, or Enterprise plan. agy -p exits
8
+ # when a pinned model is unavailable, so Flash medium stays as the safety net.
9
+ # Flash high stays last so that admitted model file remains on a roster.
7
10
  roster:
8
11
  - route: grok-grok-4-7
9
12
  effort: medium
10
13
  - route: pi-qwen3-coder-plus-openrouter
11
14
  effort: medium
12
- - route: agy-gemini-3-8-flash-high
15
+ - route: agy-gemini-4-argon-high
16
+ effort: medium
17
+ - route: agy-gemini-4-argon-medium
13
18
  effort: medium
14
19
  - route: agy-gemini-3-8-flash-medium
15
20
  effort: medium
21
+ - route: agy-gemini-3-8-flash-high
22
+ effort: medium
package/CHANGELOG.md CHANGED
@@ -216,6 +216,28 @@ All notable user-facing changes are documented here. The project follows [Semant
216
216
 
217
217
  ### Changed
218
218
 
219
+ - **The CLI critic is Codex GPT-6.1 Sol.** `codex-gpt-6-1-sol` is the
220
+ `reviewer-cli` primary (`codex` / `gpt-6.1-sol`, effort `low`).
221
+ `pi-qwen3-8-flash-openrouter` stays the other-vendor fallback, and
222
+ `codex-gpt-5-6-sol` stays admitted as the last fallback. Architecture
223
+ review stays `claude-fable`, then `pi-glm-5-3-flash-openrouter`. Pro is
224
+ the same model with reasoning mode `pro`, not a separate route. List
225
+ price is $2 / $10 per 1M tokens through 272,000 prompt tokens ($0.10
226
+ cached input, $2.50 cache write), then $4 / $15.
227
+
228
+ - **The writer rotation's agy routes are Gemini 4 Argon.** `agy-gemini-4-argon-high`
229
+ (alias `gemini-agy`) and `agy-gemini-4-argon-medium` are writer #3 and #4.
230
+ `agy-gemini-3-8-flash-medium` stays #5 because Argon needs a paid Google AI
231
+ Pro, Ultra, or Enterprise plan and `agy -p` exits when the pinned model is
232
+ missing. `agy-gemini-3-8-flash-high` stays #6 so that admitted model file
233
+ remains on a roster. `.kxm/routes.yaml` admits `google/gemini-4-argon-high`
234
+ and `google/gemini-4-argon-medium`. `.kxm/prices.yaml` is dated 2026-10-17
235
+ and follows the live OpenRouter list, including Argon at $2 / $10 per 1M
236
+ tokens through 2026-11-30 ($4 / $20 after that). `.kxm/models/inventory.yaml`
237
+ was refreshed from OpenRouter and Nous. Pi, Grok, and agy were not installed,
238
+ so CLI-only rows stay, and the new agy Argon and Claude 5.5 rows were added
239
+ by hand.
240
+
219
241
  - **`kxm update --kxm` defaults to npm.** Missing or source-less `update.yaml` now
220
242
  uses the public `@kontextmind/kxm` package instead of the GitHub release tarball.
221
243
  `source: github` still selects the digest-checked tarball. When the working
@@ -34,10 +34,10 @@ admits each route for specific roles and permissions:
34
34
 
35
35
  | Role | Admitted route (harness / model) | Vendor | Permission |
36
36
  |---|---|---|---|
37
- | `writer` | `grok` / `grok-4.7`; relief: `pi` / `openrouter/qwen/qwen3-coder-plus`; `agy` / `gemini-3.8-flash-high` | `xai`; `alibaba`; `google` | `edit` |
37
+ | `writer` | `grok` / `grok-4.7`; relief: `pi` / `openrouter/qwen/qwen3-coder-plus`; `agy` / `gemini-4-argon-high`, then `gemini-4-argon-medium`, then `gemini-3.8-flash-medium`, then `gemini-3.8-flash-high` | `xai`; `alibaba`; `google` | `edit` |
38
38
  | `planner` | `claude` / `fable` | `anthropic` | `read-only` |
39
39
  | `reviewer-arch` | `claude` / `fable` | `anthropic` | `read-only` |
40
- | `reviewer-cli` | `codex` / `gpt-5.6-sol` | `openai` | `read-only` |
40
+ | `reviewer-cli` | `codex` / `gpt-6.1-sol`; fallback `pi` / `openrouter/qwen/qwen3.8-flash`, then `codex` / `gpt-5.6-sol` | `openai`; `alibaba`; `openai` | `read-only` |
41
41
 
42
42
  The policy itself enforces three rules. Critics are read-only. The two
43
43
  designated critics have different vendors. No admitted writer shares a vendor
@@ -1,6 +1,6 @@
1
1
  # Harness routing internals
2
2
 
3
- This page records how the KXM repository applies [harness routing](../reference/harness-routing.md) to its own work: the routes this checkout admits, its writer roster, its price catalog, and the developer roster policy that `just assign` and the dev helper enforce. It is maintainer material. The route and roster transcripts below were regenerated on 2026-09-28 from this checkout, where `node scripts/kxm.mjs` is the same program as `kxm`. Readiness notes that name a capture machine are from 2026-09-23 and were not re-probed. The transcripts change whenever an admission changes.
3
+ This page records how the KXM repository applies [harness routing](../reference/harness-routing.md) to its own work: the routes this checkout admits, its writer roster, its price catalog, and the developer roster policy that `just assign` and the dev helper enforce. It is maintainer material. The route and roster transcripts below were regenerated on 2026-10-17 from this checkout, where `node scripts/kxm.mjs` is the same program as `kxm`. Readiness notes that name a capture machine are from 2026-09-23 and were not re-probed. The transcripts change whenever an admission changes.
4
4
 
5
5
  > [!IMPORTANT]
6
6
  > The files are the authority, not this page: `.kxm/routes.yaml`, `.kxm/roles/*.yaml`, `.kxm/models/*.yaml`, and `.kxm/prices.yaml`. Product routing decisions are recorded under Tracking → Decided in `plans/implementation-plan.md`.
@@ -9,7 +9,7 @@ This page records how the KXM repository applies [harness routing](../reference/
9
9
 
10
10
  The files use one id shape per kind. A route id is `<harness>-<model-slug>[-<provider>]`, with `.` written as `-`. An agent id equals its role. A workflow id is `default`, `land`, or `<role>-only`. An agent step id equals that role.
11
11
 
12
- This checkout's routes are `grok-grok-4-7`, `pi-qwen3-coder-plus-openrouter`, `agy-gemini-3-8-flash-high`, `agy-gemini-3-8-flash-medium`, `claude-fable`, `codex-gpt-5-6-sol`, `pi-qwen3-8-flash-openrouter`, and `pi-glm-5-3-flash-openrouter`. Agents are `planner`, `writer`, `reviewer-arch`, and `reviewer-cli`. `opus-claude` was removed because `opus` is not an admitted selector. `qwen-token-plan/*` and `zai-coding-cn/*` left the admitted list because those harnesses are not allowlisted; their `prices.yaml` rows stay. Old ids resolve as aliases. Every roster entry names an effort. `reviewer-arch` dispatches `claude-fable`. #343's architecture critic ran on opus because the justfile recipe review-arch hardcoded that model; the role file on that commit listed only `fable-claude`. The helper now refuses `opus`.
12
+ This checkout's routes are `grok-grok-4-7`, `pi-qwen3-coder-plus-openrouter`, `agy-gemini-4-argon-high`, `agy-gemini-4-argon-medium`, `agy-gemini-3-8-flash-medium`, `agy-gemini-3-8-flash-high`, `claude-fable`, `codex-gpt-6-1-sol`, `codex-gpt-5-6-sol`, `pi-qwen3-8-flash-openrouter`, and `pi-glm-5-3-flash-openrouter`. Agents are `planner`, `writer`, `reviewer-arch`, and `reviewer-cli`. `opus-claude` was removed because `opus` is not an admitted selector. `qwen-token-plan/*` and `zai-coding-cn/*` left the admitted list because those harnesses are not allowlisted; their `prices.yaml` rows stay. Old ids resolve as aliases. Every roster entry names an effort. `reviewer-arch` dispatches `claude-fable`. #343's architecture critic ran on opus because the justfile recipe review-arch hardcoded that model; the role file on that commit listed only `fable-claude`. The helper now refuses `opus`.
13
13
 
14
14
  ## This checkout's routes and roster
15
15
 
@@ -27,13 +27,17 @@ roster:
27
27
  effort: medium
28
28
  - route: pi-qwen3-coder-plus-openrouter
29
29
  effort: medium
30
- - route: agy-gemini-3-8-flash-high
30
+ - route: agy-gemini-4-argon-high
31
+ effort: medium
32
+ - route: agy-gemini-4-argon-medium
31
33
  effort: medium
32
34
  - route: agy-gemini-3-8-flash-medium
33
35
  effort: medium
36
+ - route: agy-gemini-3-8-flash-high
37
+ effort: medium
34
38
  ```
35
39
 
36
- The writer role lists route ids, in order: `grok-grok-4-7`, then `pi-qwen3-coder-plus-openrouter`, then `agy-gemini-3-8-flash-high` and `agy-gemini-3-8-flash-medium`. `grok-grok-4-7` is harness `grok`, model `grok-4.7`, vendor `xai`. An agent file does not declare `harness:`.
40
+ The writer role lists route ids, in order: `grok-grok-4-7`, then `pi-qwen3-coder-plus-openrouter`, then `agy-gemini-4-argon-high`, `agy-gemini-4-argon-medium`, `agy-gemini-3-8-flash-medium`, and `agy-gemini-3-8-flash-high`. `grok-grok-4-7` is harness `grok`, model `grok-4.7`, vendor `xai`. An agent file does not declare `harness:`. Argon is writer #3 and #4. Flash medium is the safety net because Argon needs a paid Google AI Pro, Ultra, or Enterprise plan and `agy -p` exits when the pinned model is missing. Flash high stays on the roster so that admitted model file is still used. The planner primary stays `claude-fable`. The CLI critic primary is `codex-gpt-6-1-sol`, then `pi-qwen3-8-flash-openrouter`, then `codex-gpt-5-6-sol`. The architecture critic primary stays `claude-fable`, then `pi-glm-5-3-flash-openrouter`. Argon can serve as a planner or architecture-review fallback; it is not on those rosters. GPT-6.1 Sol Pro is the same model with reasoning mode `pro`. The route id does not carry a reasoning mode, role effort has no `pro` value, and codex is limited to `reviewer-cli`, so that mode is not an architecture fallback.
37
41
 
38
42
  `node scripts/kxm.mjs routes list`:
39
43
 
@@ -41,7 +45,10 @@ The writer role lists route ids, in order: `grok-grok-4-7`, then `pi-qwen3-coder
41
45
  admitted anthropic/fable
42
46
  admitted google/gemini-3.8-flash-high
43
47
  admitted google/gemini-3.8-flash-medium
48
+ admitted google/gemini-4-argon-high
49
+ admitted google/gemini-4-argon-medium
44
50
  admitted openai/gpt-5.6-sol
51
+ admitted openai/gpt-6.1-sol
45
52
  admitted openrouter/qwen/qwen3-coder-plus
46
53
  admitted openrouter/qwen/qwen3.8-flash
47
54
  admitted openrouter/z-ai/glm-5.3-flash
@@ -50,12 +57,15 @@ planner claude-fable
50
57
  planner pi-qwen3-8-flash-openrouter
51
58
  reviewer-arch claude-fable
52
59
  reviewer-arch pi-glm-5-3-flash-openrouter
53
- reviewer-cli codex-gpt-5-6-sol
60
+ reviewer-cli codex-gpt-6-1-sol
54
61
  reviewer-cli pi-qwen3-8-flash-openrouter
62
+ reviewer-cli codex-gpt-5-6-sol
55
63
  writer grok-grok-4-7
56
64
  writer pi-qwen3-coder-plus-openrouter
57
- writer agy-gemini-3-8-flash-high
65
+ writer agy-gemini-4-argon-high
66
+ writer agy-gemini-4-argon-medium
58
67
  writer agy-gemini-3-8-flash-medium
68
+ writer agy-gemini-3-8-flash-high
59
69
  ```
60
70
 
61
71
  `routes admit --model openrouter/qwen/qwen3-coder-plus --dry-run` exits 2 with `select a model from the refreshed inventory` even though that selector is already admitted, because the inventory never carries `openrouter/…` selectors. Selectors like these are admitted by a Git-reviewed edit of `.kxm/routes.yaml`.
@@ -64,7 +74,7 @@ On the capture machine, `kxm harness list` showed `claude` detected but logged o
64
74
 
65
75
  ### Price catalog and inventory
66
76
 
67
- `.kxm/prices.yaml` is dated `2026-09-28`. A run on that date can record a list estimate. Any other day records `providerMetadata.priceCatalogStale: true` and no list estimate. The list prices below come from `.kxm/models/inventory.yaml`. OpenRouter and Nous were fetched at `2026-09-28T14:02:09.052Z`. `pi`, `grok`, and `agy` were not installed for that refresh, so models that exist only in those CLIs are still the 2026-09-16 rows. Prices are USD per 1M tokens. The checkout has no routing records yet, so none of the examples has recorded latency; for latency, run a bounded side-by-side experiment and compare p50 and p95 in `kxm routing report`.
77
+ `.kxm/prices.yaml` is dated `2026-10-17`. A run on that date can record a list estimate. Any other day records `providerMetadata.priceCatalogStale: true` and no list estimate. The list prices below come from `.kxm/models/inventory.yaml`. OpenRouter and Nous were fetched at `2026-10-17T13:45:00.000Z`. `pi`, `grok`, and `agy` were not installed for that refresh, so models that exist only in those CLIs stay, including the previous `agy` rows, and the Gemini 4 Argon and Claude 5.5 `agy` rows were added by hand from `agy models`. Prices are USD per 1M tokens. The checkout has no routing records yet, so none of the examples has recorded latency; for latency, run a bounded side-by-side experiment and compare p50 and p95 in `kxm routing report`.
68
78
 
69
79
  ## The developer roster
70
80
 
@@ -116,21 +126,21 @@ These extend the generic examples on the reference page with this checkout's adm
116
126
  | Selector | `xai/grok-4.7`: admitted, and first in the writer roster | `openrouter/x-ai/grok-4.7`: not admitted |
117
127
  | Developer roster | `grok-grok-4-7`, the writer route with `edit` | Refused: `native vendor cannot use Pi` |
118
128
  | Readiness | `grok` showed auth `yes` on the 2026-09-23 capture machine | `pi auth check --provider openrouter` returned `not_ready` on that capture |
119
- | Billing | grok.com subscription (OAuth) | $1.60 input, $4.80 output, $0.40 cached input |
129
+ | Billing | grok.com subscription (OAuth) | $2.00 input, $6.00 output, $0.50 cached input |
120
130
  | Context | 500,000 (`x-ai/grok-4.7` in the refreshed inventory) | 500,000 |
121
131
 
122
132
  Pi's own `xai` provider reported `ready` (OAuth) on the capture machine. When the grok quota runs out, the next writer in the lineup is `pi-qwen3-coder-plus-openrouter`, a different vendor.
123
133
 
124
- ### GPT-5.6 Sol
134
+ ### GPT-6.1 Sol
125
135
 
126
136
  | | Native `codex` | Pi + OpenRouter |
127
137
  |---|---|---|
128
- | Selector | `openai/gpt-5.6-sol`: admitted, the CLI critic | `openrouter/openai/gpt-5.6-sol`: not admitted |
129
- | Developer roster | `codex-gpt-5-6-sol`: `reviewer-cli`, `read-only` | Refused |
130
- | Billing | ChatGPT subscription | $2.00 input, $10.00 output, $0.20 cached input |
131
- | Context | Pi's `openai-codex` row, the same ChatGPT backend, lists 272K | 1,050,000 |
138
+ | Selector | `openai/gpt-6.1-sol`: admitted, the CLI critic | `openrouter/openai/gpt-6.1-sol`: not admitted |
139
+ | Developer roster | `codex-gpt-6-1-sol`: `reviewer-cli` primary, `read-only`, effort `low` | Refused |
140
+ | Billing | ChatGPT subscription. List price $2.00 input, $10.00 output, $0.10 cached input, $2.50 cache write through 272,000 prompt tokens, then $4.00 / $15.00 | Same per-token list price. OpenRouter's `openai/gpt-6.1-sol-pro` row is reasoning mode `pro`, not a second model |
141
+ | Context | 1,050,000 (922,000 max input, 128,000 max output). Reasoning is mandatory | 1,050,000 |
132
142
 
133
- In the inventory, `openai/gpt-5.6-sol` has sources `openrouter+nous` and carries OpenRouter prices. `pi auth check --provider openai-codex` reported `ready` on the capture machine.
143
+ `codex-gpt-5-6-sol` stays on the `reviewer-cli` roster after the Qwen fallback. Its selector `openai/gpt-5.6-sol` stays admitted. OpenRouter lists that model at $4.00 input, $20.00 output, and $0.40 cached input. `pi auth check --provider openai-codex` reported `ready` on the capture machine. That readiness is not permission to bill OpenAI through Pi.
134
144
 
135
145
  ### Claude Fable
136
146
 
@@ -148,8 +158,8 @@ In the inventory, `openai/gpt-5.6-sol` has sources `openrouter+nous` and carries
148
158
 
149
159
  | | Native `agy` | `antigravity` Pi provider | Pi + OpenRouter |
150
160
  |---|---|---|---|
151
- | Selector | `google/gemini-3.8-flash-high` and `google/gemini-3.8-flash-medium`: admitted, the last two writer routes | `antigravity/gemini-3.8-flash`: not admitted | `openrouter/google/gemini-3.8-flash`: not admitted |
152
- | Billing | Google subscription | Google subscription | $0.75 input, $3.75 output, $0.075 cached input |
161
+ | Selector | `google/gemini-3.8-flash-medium` and `google/gemini-3.8-flash-high`: admitted, writer #5 and #6. Writer #3 and #4 are `google/gemini-4-argon-high` and `google/gemini-4-argon-medium` | `antigravity/gemini-3.8-flash`: not admitted | `openrouter/google/gemini-3.8-flash`: not admitted |
162
+ | Billing | Google subscription | Google subscription | $0.825 input, $4.125 output, $0.0825 cached input |
153
163
  | Context | `agy` does not print it; the vendored catalog lists 1,048,576 | 1,048,576 | 1,048,576 |
154
164
 
155
165
  The admitted runtime route today is the `agy` selector.
@@ -1153,7 +1153,10 @@ kxm routes list
1153
1153
  admitted anthropic/fable
1154
1154
  admitted google/gemini-3.8-flash-high
1155
1155
  admitted google/gemini-3.8-flash-medium
1156
+ admitted google/gemini-4-argon-high
1157
+ admitted google/gemini-4-argon-medium
1156
1158
  admitted openai/gpt-5.6-sol
1159
+ admitted openai/gpt-6.1-sol
1157
1160
  admitted openrouter/qwen/qwen3-coder-plus
1158
1161
  admitted openrouter/qwen/qwen3.8-flash
1159
1162
  admitted openrouter/z-ai/glm-5.3-flash
@@ -1162,12 +1165,15 @@ planner claude-fable
1162
1165
  planner pi-qwen3-8-flash-openrouter
1163
1166
  reviewer-arch claude-fable
1164
1167
  reviewer-arch pi-glm-5-3-flash-openrouter
1165
- reviewer-cli codex-gpt-5-6-sol
1168
+ reviewer-cli codex-gpt-6-1-sol
1166
1169
  reviewer-cli pi-qwen3-8-flash-openrouter
1170
+ reviewer-cli codex-gpt-5-6-sol
1167
1171
  writer grok-grok-4-7
1168
1172
  writer pi-qwen3-coder-plus-openrouter
1169
- writer agy-gemini-3-8-flash-high
1173
+ writer agy-gemini-4-argon-high
1174
+ writer agy-gemini-4-argon-medium
1170
1175
  writer agy-gemini-3-8-flash-medium
1176
+ writer agy-gemini-3-8-flash-high
1171
1177
  ```
1172
1178
 
1173
1179
  ```bash
@@ -1175,7 +1181,7 @@ kxm routes list --json
1175
1181
  ```
1176
1182
 
1177
1183
  ```text
1178
- {"schema":"kxm.cli-result.v1","ok":true,"command":"routes list","policy":{"schema":"kxm.routes.v2","updatedAt":"2026-09-27T00:00:00.000Z","admitted":["anthropic/fable","google/gemini-3.8-flash-high","google/gemini-3.8-flash-medium","openai/gpt-5.6-sol","openrouter/qwen/qwen3-coder-plus","openrouter/qwen/qwen3.8-flash","openrouter/z-ai/glm-5.3-flash","xai/grok-4.7"],"disabled":[]},"membership":["planner claude-fable","planner pi-qwen3-8-flash-openrouter","reviewer-arch claude-fable","reviewer-arch pi-glm-5-3-flash-openrouter","reviewer-cli codex-gpt-5-6-sol","reviewer-cli pi-qwen3-8-flash-openrouter","writer grok-grok-4-7","writer pi-qwen3-coder-plus-openrouter","writer agy-gemini-3-8-flash-high","writer agy-gemini-3-8-flash-medium"]}
1184
+ {"schema":"kxm.cli-result.v1","ok":true,"command":"routes list","policy":{"schema":"kxm.routes.v2","updatedAt":"2026-10-17T14:30:00.000Z","admitted":["anthropic/fable","google/gemini-3.8-flash-high","google/gemini-3.8-flash-medium","google/gemini-4-argon-high","google/gemini-4-argon-medium","openai/gpt-5.6-sol","openai/gpt-6.1-sol","openrouter/qwen/qwen3-coder-plus","openrouter/qwen/qwen3.8-flash","openrouter/z-ai/glm-5.3-flash","xai/grok-4.7"],"disabled":[]},"membership":["planner claude-fable","planner pi-qwen3-8-flash-openrouter","reviewer-arch claude-fable","reviewer-arch pi-glm-5-3-flash-openrouter","reviewer-cli codex-gpt-6-1-sol","reviewer-cli pi-qwen3-8-flash-openrouter","reviewer-cli codex-gpt-5-6-sol","writer grok-grok-4-7","writer pi-qwen3-coder-plus-openrouter","writer agy-gemini-4-argon-high","writer agy-gemini-4-argon-medium","writer agy-gemini-3-8-flash-medium","writer agy-gemini-3-8-flash-high"]}
1179
1185
  ```
1180
1186
 
1181
1187
  ### `kxm routes count`
@@ -1380,7 +1386,7 @@ kxm role get writer --json
1380
1386
  ```
1381
1387
 
1382
1388
  ```text
1383
- {"schema":"kxm.cli-result.v1","ok":true,"command":"role get","roleId":"writer","scope":"local","filePath":"/work/kxm/.kxm/roles/writer.yaml","role":{"schema":"kxm.role.v2","id":"writer","purpose":"writer","permission":"edit","description":"Primary implementation agent.","skills":[],"roster":[{"route":"grok-grok-4-7","effort":"medium"},{"route":"pi-qwen3-coder-plus-openrouter","effort":"medium"},{"route":"agy-gemini-3-8-flash-high"},{"route":"agy-gemini-3-8-flash-medium"}]}}
1389
+ {"schema":"kxm.cli-result.v1","ok":true,"command":"role get","roleId":"writer","scope":"local","filePath":"/work/kxm/.kxm/roles/writer.yaml","role":{"schema":"kxm.role.v2","id":"writer","purpose":"writer","permission":"edit","description":"Primary implementation agent.","skills":[],"roster":[{"route":"grok-grok-4-7","effort":"medium"},{"route":"pi-qwen3-coder-plus-openrouter","effort":"medium"},{"route":"agy-gemini-4-argon-high","effort":"medium"},{"route":"agy-gemini-4-argon-medium","effort":"medium"},{"route":"agy-gemini-3-8-flash-medium","effort":"medium"},{"route":"agy-gemini-3-8-flash-high","effort":"medium"}]}}
1384
1390
  ```
1385
1391
 
1386
1392
  Captured from this checkout with `node scripts/kxm.mjs role get writer --json`. The path is shortened to `/work/kxm`.
@@ -1390,7 +1396,7 @@ kxm role modify writer --add-skill kxm --dry-run --json
1390
1396
  ```
1391
1397
 
1392
1398
  ```text
1393
- {"schema":"kxm.cli-result.v1","ok":true,"command":"role modify","roleId":"writer","id":"writer","role":{"schema":"kxm.role.v2","id":"writer","purpose":"writer","permission":"edit","description":"Primary implementation agent.","skills":["kxm"],"roster":[{"route":"grok-grok-4-7","effort":"medium"},{"route":"pi-qwen3-coder-plus-openrouter","effort":"medium"},{"route":"agy-gemini-3-8-flash-high"},{"route":"agy-gemini-3-8-flash-medium"}]},"filePath":"/work/kxm/.kxm/roles/writer.yaml","scope":"local","dryRun":true,"planned":[{"action":"write","target":"/work/kxm/.kxm/roles/writer.yaml"}]}
1399
+ {"schema":"kxm.cli-result.v1","ok":true,"command":"role modify","roleId":"writer","id":"writer","role":{"schema":"kxm.role.v2","id":"writer","purpose":"writer","permission":"edit","description":"Primary implementation agent.","skills":["kxm"],"roster":[{"route":"grok-grok-4-7","effort":"medium"},{"route":"pi-qwen3-coder-plus-openrouter","effort":"medium"},{"route":"agy-gemini-4-argon-high","effort":"medium"},{"route":"agy-gemini-4-argon-medium","effort":"medium"},{"route":"agy-gemini-3-8-flash-medium","effort":"medium"},{"route":"agy-gemini-3-8-flash-high","effort":"medium"}]},"filePath":"/work/kxm/.kxm/roles/writer.yaml","scope":"local","dryRun":true,"planned":[{"action":"write","target":"/work/kxm/.kxm/roles/writer.yaml"}]}
1394
1400
  ```
1395
1401
 
1396
1402
  Add an existing route to a role's roster (Not run):
@@ -686,7 +686,7 @@ Example (validated with `kxm init --json` and compiled with
686
686
  the `critic-claude` profile shown above, it needs a `planner` agent (the
687
687
  workflow coordinator; `coordinator` still resolves as an alias), a
688
688
  `reviewer-cli` agent, and a second profile tagged `critic`, `critic-sol`
689
- (`openai/gpt-5.6-sol`). Routes, not agent files, name the harness and model.
689
+ (`openai/gpt-6.1-sol`). Routes, not agent files, name the harness and model.
690
690
  The two providers among the `critic` candidates satisfy
691
691
  `distinctBy: [provider]` with `target: 2`.
692
692
 
@@ -1011,6 +1011,7 @@ updatedAt: '2026-09-23T00:00:00.000Z'
1011
1011
  admitted:
1012
1012
  - anthropic/fable
1013
1013
  - openai/gpt-5.6-sol
1014
+ - openai/gpt-6.1-sol
1014
1015
  - xai/grok-4.6
1015
1016
  - openrouter/qwen/qwen3-coder-plus
1016
1017
  disabled: []
@@ -1081,6 +1082,13 @@ routes:
1081
1082
  roles: [planner, reviewer-arch]
1082
1083
  permissions: [read-only]
1083
1084
  status: admitted
1085
+ codex-gpt-6-1-sol:
1086
+ harness: codex
1087
+ model: gpt-6.1-sol
1088
+ vendor: openai
1089
+ roles: [reviewer-cli]
1090
+ permissions: [read-only]
1091
+ status: admitted
1084
1092
  codex-gpt-5-6-sol:
1085
1093
  harness: codex
1086
1094
  model: gpt-5.6-sol
@@ -1089,13 +1097,13 @@ routes:
1089
1097
  permissions: [read-only]
1090
1098
  status: admitted
1091
1099
  lineup: # routes admitted for each role, preference order
1092
- writer: [grok-grok-4-7, pi-qwen3-coder-plus-openrouter, agy-gemini-3-8-flash-high, agy-gemini-3-8-flash-medium]
1100
+ writer: [grok-grok-4-7, pi-qwen3-coder-plus-openrouter, agy-gemini-4-argon-high, agy-gemini-4-argon-medium, agy-gemini-3-8-flash-medium, agy-gemini-3-8-flash-high]
1093
1101
  planner: [claude-fable, pi-qwen3-8-flash-openrouter]
1094
1102
  reviewer-arch: [claude-fable, pi-glm-5-3-flash-openrouter]
1095
- reviewer-cli: [codex-gpt-5-6-sol, pi-qwen3-8-flash-openrouter]
1103
+ reviewer-cli: [codex-gpt-6-1-sol, pi-qwen3-8-flash-openrouter, codex-gpt-5-6-sol]
1096
1104
  required_critics:
1097
1105
  review-arch: claude-fable
1098
- review-cli: codex-gpt-5-6-sol
1106
+ review-cli: codex-gpt-6-1-sol
1099
1107
  model_origins: # required for every Pi route model
1100
1108
  openrouter/qwen/qwen3-coder-plus:
1101
1109
  vendor: alibaba
@@ -155,13 +155,17 @@ roster:
155
155
  effort: medium
156
156
  - route: pi-qwen3-coder-plus-openrouter
157
157
  effort: medium
158
- - route: agy-gemini-3-8-flash-high
158
+ - route: agy-gemini-4-argon-high
159
+ effort: medium
160
+ - route: agy-gemini-4-argon-medium
159
161
  effort: medium
160
162
  - route: agy-gemini-3-8-flash-medium
161
163
  effort: medium
164
+ - route: agy-gemini-3-8-flash-high
165
+ effort: medium
162
166
  ```
163
167
 
164
- `grok-grok-4-7` resolves to `.kxm/models/grok-grok-4-7.yaml`: harness `grok`, model `grok-4.7`, vendor `xai`, status `admitted`, permission `edit`. `pi-qwen3-coder-plus-openrouter` is harness `pi`, model `openrouter/qwen/qwen3-coder-plus`, vendor `alibaba`. `agy-gemini-3-8-flash-high` is harness `agy`, model `gemini-3.8-flash-high`, vendor `google`. `kxm role list` prints the first route id as the primary, for example `(grok-grok-4-7)`. The previous ids (`grok-native`, `qwen-openrouter-pi`, `gemini-agy`) are aliases.
168
+ `grok-grok-4-7` resolves to `.kxm/models/grok-grok-4-7.yaml`: harness `grok`, model `grok-4.7`, vendor `xai`, status `admitted`, permission `edit`. `pi-qwen3-coder-plus-openrouter` is harness `pi`, model `openrouter/qwen/qwen3-coder-plus`, vendor `alibaba`. `agy-gemini-4-argon-high` is harness `agy`, model `gemini-4-argon-high`, vendor `google`. `kxm role list` prints the first route id as the primary, for example `(grok-grok-4-7)`. The previous ids (`grok-native`, `qwen-openrouter-pi`, `gemini-agy`) are aliases. `gemini-agy` resolves to `agy-gemini-4-argon-high`.
165
169
 
166
170
  Dispatch resolves a step from the agent `role`, then `.kxm/roles/<role>.yaml`, then the selected `.kxm/models/<route>.yaml`. That model file carries `harness`, `model`, `vendor`, `status`, and `permissions`. The engine walks the roster in order and uses the first admitted route whose model file is readable. A missing or unreadable model file is a refusal (`roster_model_unreadable` at load, `producer_route_unsupported` at dispatch), not a skip to the next entry. A route file that names a harness the model cannot run on still fails closed with `harness_unhosted_model`.
167
171
 
@@ -228,7 +232,7 @@ The same model shows up under different ids depending on the file:
228
232
  | `.kxm/models/inventory.yaml`, source `openrouter` | `x-ai/grok-4.7` | The OpenRouter catalog slug. The inventory stores OpenRouter ids without an `openrouter/` prefix. |
229
233
  | `.kxm/prices.yaml` | `id: xai/grok-4.7`, `provider: xai`, alias `x-ai/grok-4.7` | A list price that applies only to provider `xai`, because price lookup filters by provider. `xai/grok-4.6` remains a separate row. |
230
234
 
231
- An inventory id can also mean something else in `.kxm/routes.yaml`. For example, the inventory can list `openai/gpt-5.6-sol` from the OpenRouter feed with OpenRouter prices, while in `.kxm/routes.yaml` the same string means provider `openai` through native `codex`.
235
+ An inventory id can also mean something else in `.kxm/routes.yaml`. For example, the inventory can list `openai/gpt-6.1-sol` from the OpenRouter feed with OpenRouter prices, while in `.kxm/routes.yaml` the same string means provider `openai` through native `codex`. `openai/gpt-5.6-sol` is the same kind of selector and stays admitted.
232
236
 
233
237
  ### What the brake refuses
234
238
 
@@ -245,7 +249,7 @@ The brake runs wherever KXM starts Pi on a model: in the dispatch probe that eac
245
249
  | How the id names the vendor | Refused examples | Message |
246
250
  |---|---|---|
247
251
  | The provider is the vendor | `anthropic/…`, `openai/…`, `xai/…`, `moonshot/…`, `google/…`, `deepseek/…` | `pi must not impersonate native provider xai; use the native harness` |
248
- | A Pi provider that belongs to the vendor | `openai-codex/…`, `moonshotai/…`, `moonshotai-cn/…`, `kimi-coding/…`, `google-vertex/…`, `claude-bridge/…`, and `antigravity/…` except Gemini ids | `pi provider openai-codex bills native vendor openai for gpt-5.6-sol; use the native harness` |
252
+ | A Pi provider that belongs to the vendor | `openai-codex/…`, `moonshotai/…`, `moonshotai-cn/…`, `kimi-coding/…`, `google-vertex/…`, `claude-bridge/…`, and `antigravity/…` except Gemini ids | `pi provider openai-codex bills native vendor openai for gpt-6.1-sol; use the native harness` |
249
253
  | The vendor segment of an aggregator id, including the aliases `x-ai`, `moonshotai` and `google-ai` | `openrouter/x-ai/grok-4.6`, `openrouter/anthropic/claude-fable-5.1`, `nous-portal/google/…` | `pi must not bill native vendor xai through openrouter; use the native harness` |
250
254
 
251
255
  The brake accepts `antigravity/gemini-…` and any id whose vendor has no native harness, such as `openrouter/qwen/qwen3-coder-plus`, `zai-coding-cn/glm-5.3` or `qwen-token-plan/qwen3.8-flash`. Passing the brake is not admission: the route must still be admitted. The hosting refusal at dispatch reads `grok_not_authenticated: grok harness not detected (harness_unhosted_model)`.
@@ -363,18 +367,22 @@ pi auth check --provider xai --json --no-refresh
363
367
  {"status":"ready","provider":"xai","authType":"oauth"}
364
368
  ```
365
369
 
366
- ### GPT-5.6 Sol
370
+ ### GPT-6.1 Sol
367
371
 
368
372
  | | Native `codex` | Pi + OpenRouter |
369
373
  |---|---|---|
370
- | Model file | `harness: codex`, `model: gpt-5.6-sol`, `vendor: openai` | `harness: pi`, `model: openrouter/openai/gpt-5.6-sol`, `vendor: openai` |
371
- | Selector | `openai/gpt-5.6-sol` | `openrouter/openai/gpt-5.6-sol` |
374
+ | Model file | `harness: codex`, `model: gpt-6.1-sol`, `vendor: openai` | `harness: pi`, `model: openrouter/openai/gpt-6.1-sol`, `vendor: openai` |
375
+ | Selector | `openai/gpt-6.1-sol`: admitted, the CLI critic | `openrouter/openai/gpt-6.1-sol` |
372
376
  | Readiness | Needs `codex` auth `yes` with `authMethod: ChatGPT` | Never reached: the brake refuses it first |
373
- | Billing | ChatGPT subscription | OpenRouter credit |
377
+ | Billing | ChatGPT subscription. List price $2 / $10 per 1M tokens through 272,000 prompt tokens ($0.10 cached input, $2.50 cache write), then $4 / $15 | OpenRouter credit, same per-token list price |
374
378
  | Recorded `costBasis` | `unmetered`, `priceRef: subscription:codex` | None: refused before dispatch |
375
- | Mode | One-shot `codex exec --json -` | Refused |
379
+ | Mode | One-shot `codex exec --json -`. Reasoning is mandatory (`low`, `medium`, `high`, `xhigh`, `max`) | Refused |
376
380
 
377
- **KXM picks the native route.** Two traps apply here. The first is `openai-codex/gpt-5.6-sol`, which is the same ChatGPT subscription driven through Pi. `pi auth check --provider openai-codex` can report `ready`, but readiness is not permission: the brake refuses `openai-codex` as OpenAI's own Pi provider. The second is a codex login made with an API key: the row shows `API key`, and the run records `unknown`.
381
+ `codex-gpt-6-1-sol` is the `reviewer-cli` primary at effort `low`. `pi-qwen3-8-flash-openrouter` is the other-vendor fallback. `codex-gpt-5-6-sol` stays admitted as the last fallback. Architecture review stays `claude-fable`, then `pi-glm-5-3-flash-openrouter`.
382
+
383
+ Pro is not a separate model. It is `gpt-6.1-sol` with reasoning mode `pro`. OpenRouter lists that mode as `openai/gpt-6.1-sol-pro` at the same per-token price. A route id is `<harness>-<model-slug>`, role `effort` has no `pro` value, and the codex harness ceiling is `reviewer-cli` only. There is no pro architecture-review fallback.
384
+
385
+ **KXM picks the native route.** Two traps apply here. The first is `openai-codex/gpt-6.1-sol`, which is the same ChatGPT subscription driven through Pi. `pi auth check --provider openai-codex` can report `ready`, but readiness is not permission: the brake refuses `openai-codex` as OpenAI's own Pi provider. The second is a codex login made with an API key: the row shows `API key`, and the run records `unknown`. `openai/gpt-5.6-sol` is the same shape of selector and stays admitted. On OpenRouter it now lists at $4 / $20 per 1M tokens.
378
386
 
379
387
  ```bash
380
388
  pi auth check --provider openai-codex --json --no-refresh
@@ -411,6 +419,8 @@ A larger context window on the OpenRouter route does not make OpenRouter an allo
411
419
 
412
420
  **Never OpenRouter for Gemini**, and the brake refuses it. The Runtime can run the `agy` selector today; section 4 explains why it cannot reach `antigravity/…`.
413
421
 
422
+ The writer rotation's `agy` routes are `agy-gemini-4-argon-high` (alias `gemini-agy`), `agy-gemini-4-argon-medium`, then `agy-gemini-3-8-flash-medium` as the safety net, then `agy-gemini-3-8-flash-high`. Argon is the only Gemini 4 model. `agy` pins it as `gemini-4-argon-high`, `-medium`, or `-low` (base `gemini-4-argon` with `--effort low|medium|high`). `agy -p` exits when a pinned model is not available. It does not fall through on its own, so Flash stays on the roster: Argon requires a paid Google AI Pro, Ultra, or Enterprise plan. The list price is $2 input and $10 output per 1M tokens through 2026-11-30, then $4 and $20. Batch is $1 and $5. Context is 1,048,576. Argon can also stand in as a planner or architecture-review fallback; those primaries stay `claude-fable`.
423
+
414
424
  ```bash
415
425
  pi auth check --provider antigravity --json --no-refresh
416
426
  ```
@@ -26,7 +26,7 @@ details:
26
26
  - kind: "review-cli"
27
27
  role: "reviewer-cli"
28
28
  harness: "codex"
29
- model: "gpt-5.6-sol"
29
+ model: "gpt-6.1-sol"
30
30
  verdict: "PASS" # PASS | BLOCK
31
31
  ---
32
32
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kontextmind/kxm",
3
- "version": "0.7.183",
3
+ "version": "0.7.185",
4
4
  "description": "KXM local-first multi-agent orchestration and operator dashboard",
5
5
  "type": "module",
6
6
  "author": "KontextMind",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "kxm",
4
4
  "displayName": "KXM",
5
- "version": "0.7.183",
5
+ "version": "0.7.185",
6
6
  "description": "Headless multi-agent orchestration, durable workflows, and a live operator dashboard for Pi and Claude Code",
7
7
  "author": {
8
8
  "name": "KontextMind",
@@ -18615,8 +18615,9 @@ var init_workforce_names = __esm({
18615
18615
  ROUTE_RENAMES = Object.freeze([
18616
18616
  ["grok-native", "grok-grok-4-7"],
18617
18617
  ["qwen-openrouter-pi", "pi-qwen3-coder-plus-openrouter"],
18618
- ["gemini-agy", "agy-gemini-3-8-flash-high"],
18618
+ ["gemini-agy", "agy-gemini-4-argon-high"],
18619
18619
  ["fable-claude", "claude-fable"],
18620
+ // sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
18620
18621
  ["sol-codex", "codex-gpt-5-6-sol"],
18621
18622
  ["grok-default", "grok-grok-4-6"],
18622
18623
  ["fable-default", "claude-fable"]
@@ -28834,7 +28835,7 @@ async function refreshModelInventory(options) {
28834
28835
  const parts = line.trim().split(/\s+/);
28835
28836
  const id = source === "pi" && parts.length >= 2 && parts[0] !== "provider" ? `${parts[0]}/${parts[1]}` : parts[0];
28836
28837
  if (id && /^[a-z0-9][a-z0-9._/-]+$/i.test(id) && id !== "Available") {
28837
- const effortMatch = source === "agy" ? id.match(/-(low|medium|high)$/i) : null;
28838
+ const effortMatch = source === "agy" ? id.match(/-(low|medium|high|max)$/i) : null;
28838
28839
  add({ id, ...effortMatch?.[1] ? { thinkingLevels: [effortMatch[1].toLowerCase()] } : {} }, source, "standard");
28839
28840
  }
28840
28841
  }
@@ -25462,7 +25462,7 @@ function sessionTokenFixHint(policy) {
25462
25462
  }
25463
25463
 
25464
25464
  // plugins/kxm/src/mcp-server.ts
25465
- var VERSION = "0.7.183";
25465
+ var VERSION = "0.7.185";
25466
25466
  var CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
25467
25467
  var inbox = /* @__PURE__ */ new Map();
25468
25468
  var notifiedInbox = /* @__PURE__ */ new Set();
@@ -15544,8 +15544,9 @@ var ROLE_IDS = Object.freeze([
15544
15544
  var ROUTE_RENAMES = Object.freeze([
15545
15545
  ["grok-native", "grok-grok-4-7"],
15546
15546
  ["qwen-openrouter-pi", "pi-qwen3-coder-plus-openrouter"],
15547
- ["gemini-agy", "agy-gemini-3-8-flash-high"],
15547
+ ["gemini-agy", "agy-gemini-4-argon-high"],
15548
15548
  ["fable-claude", "claude-fable"],
15549
+ // sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
15549
15550
  ["sol-codex", "codex-gpt-5-6-sol"],
15550
15551
  ["grok-default", "grok-grok-4-6"],
15551
15552
  ["fable-default", "claude-fable"]
@@ -15517,8 +15517,9 @@ var ROLE_IDS = Object.freeze([
15517
15517
  var ROUTE_RENAMES = Object.freeze([
15518
15518
  ["grok-native", "grok-grok-4-7"],
15519
15519
  ["qwen-openrouter-pi", "pi-qwen3-coder-plus-openrouter"],
15520
- ["gemini-agy", "agy-gemini-3-8-flash-high"],
15520
+ ["gemini-agy", "agy-gemini-4-argon-high"],
15521
15521
  ["fable-claude", "claude-fable"],
15522
+ // sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
15522
15523
  ["sol-codex", "codex-gpt-5-6-sol"],
15523
15524
  ["grok-default", "grok-grok-4-6"],
15524
15525
  ["fable-default", "claude-fable"]
@@ -15009,8 +15009,9 @@ var ROLE_IDS = Object.freeze([
15009
15009
  var ROUTE_RENAMES = Object.freeze([
15010
15010
  ["grok-native", "grok-grok-4-7"],
15011
15011
  ["qwen-openrouter-pi", "pi-qwen3-coder-plus-openrouter"],
15012
- ["gemini-agy", "agy-gemini-3-8-flash-high"],
15012
+ ["gemini-agy", "agy-gemini-4-argon-high"],
15013
15013
  ["fable-claude", "claude-fable"],
15014
+ // sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
15014
15015
  ["sol-codex", "codex-gpt-5-6-sol"],
15015
15016
  ["grok-default", "grok-grok-4-6"],
15016
15017
  ["fable-default", "claude-fable"]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-plugin",
3
- "version": "0.7.183",
3
+ "version": "0.7.185",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "engines": {
@@ -11,7 +11,7 @@ import { deliverInboxNotification } from "./inbox.ts";
11
11
  import type { HubEvent, MessageRecord } from "./protocol.ts";
12
12
  import { sessionTokenFixHint } from "./session-token-hint.ts";
13
13
 
14
- const VERSION = "0.7.183";
14
+ const VERSION = "0.7.185";
15
15
  const CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
16
16
  const inbox = new Map<string, MessageRecord>();
17
17
  const notifiedInbox = new Set<string>();
@@ -104,7 +104,7 @@ export async function refreshModelInventory(options: { outputRoot: string; env?:
104
104
  const parts = line.trim().split(/\s+/);
105
105
  const id = source === "pi" && parts.length >= 2 && parts[0] !== "provider" ? `${parts[0]}/${parts[1]}` : parts[0];
106
106
  if (id && /^[a-z0-9][a-z0-9._/-]+$/i.test(id) && id !== "Available") {
107
- const effortMatch = source === "agy" ? id.match(/-(low|medium|high)$/i) : null;
107
+ const effortMatch = source === "agy" ? id.match(/-(low|medium|high|max)$/i) : null;
108
108
  add({ id, ...(effortMatch?.[1] ? { thinkingLevels: [effortMatch[1].toLowerCase()] } : {}) }, source, "standard");
109
109
  }
110
110
  }
@@ -33,8 +33,9 @@ export const ROLE_IDS = Object.freeze([
33
33
  export const ROUTE_RENAMES = Object.freeze([
34
34
  ["grok-native", "grok-grok-4-7"],
35
35
  ["qwen-openrouter-pi", "pi-qwen3-coder-plus-openrouter"],
36
- ["gemini-agy", "agy-gemini-3-8-flash-high"],
36
+ ["gemini-agy", "agy-gemini-4-argon-high"],
37
37
  ["fable-claude", "claude-fable"],
38
+ // sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
38
39
  ["sol-codex", "codex-gpt-5-6-sol"],
39
40
  ["grok-default", "grok-grok-4-6"],
40
41
  ["fable-default", "claude-fable"],
@@ -141,7 +141,7 @@ export const ATTRIBUTION_CLASSES = Object.freeze(["orchestration", "model", "env
141
141
  export const ACCEPTED_NOTE = "developer record; not human approval, hub peer evidence, CI success, or merged/released status";
142
142
  export const REQUIRED_ACCEPT_CRITICS = Object.freeze({
143
143
  "review-arch": Object.freeze({ harness: "claude", model: "fable", role: "reviewer-arch" }),
144
- "review-cli": Object.freeze({ harness: "codex", model: "gpt-5.6-sol", role: "reviewer-cli" }),
144
+ "review-cli": Object.freeze({ harness: "codex", model: "gpt-6.1-sol", role: "reviewer-cli" }),
145
145
  });
146
146
  export const ASSIGNMENT_KINDS = Object.freeze([
147
147
  "plan",
@@ -111,6 +111,9 @@ const REQUEST_KEYS = Object.freeze([
111
111
  const UNSUPPORTED_LAUNCHER = /\.(cmd|bat|ps1)$/i;
112
112
 
113
113
  const AGY_MODELS = Object.freeze([
114
+ "gemini-4-argon-high",
115
+ "gemini-4-argon-medium",
116
+ "gemini-4-argon-low",
114
117
  "gemini-3.8-flash-high",
115
118
  "gemini-3.8-flash-medium",
116
119
  "gemini-3.8-flash-low",
@@ -161,7 +164,7 @@ export const ROUTES = Object.freeze({
161
164
  provider: "openai",
162
165
  roles: Object.freeze(["reviewer-cli"]),
163
166
  permissions: Object.freeze(["read-only"]),
164
- models: Object.freeze(["gpt-5.6-sol"]),
167
+ models: Object.freeze(["gpt-6.1-sol", "gpt-5.6-sol"]),
165
168
  efforts: Object.freeze(["low", "medium", "high"]),
166
169
  auth: Object.freeze({ args: ["login", "status"], loginHint: "codex login" }),
167
170
  },