@ask-llm/plugin 0.16.3 → 0.18.0

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
  {
2
2
  "name": "ask-llm",
3
- "version": "0.16.3",
3
+ "version": "0.18.0",
4
4
  "description": "AI-to-AI collaboration — review code and debate plans across Codex, Grok, Antigravity, Ollama, and Gemini",
5
5
  "author": {
6
6
  "name": "Anton Lykhoyda",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ask-llm",
3
3
  "displayName": "Ask LLM",
4
- "version": "0.16.3",
4
+ "version": "0.18.0",
5
5
  "description": "Portable AI-to-AI review and pairing workflows for Cursor Agent with explicit provider transports.",
6
6
  "author": {
7
7
  "name": "Anton Lykhoyda"
package/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # @ask-llm/plugin
2
2
 
3
+ ## 0.18.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#336](https://github.com/Lykhoyda/ask-llm/pull/336) [`8d7ff9f`](https://github.com/Lykhoyda/ask-llm/commit/8d7ff9fdbd7ee76aa40a45a500d67910662c2002) Thanks [@Lykhoyda](https://github.com/Lykhoyda)! - Adopt Codex's bundled `gpt-6-astra` as the factory default, keep Terra as the quota fallback, and fail closed when Astra is selected on Codex CLI older than 0.153.0. `/sol-review` and the Cursor brainstorm Sol catalog IDs stay explicit Sol pins.
8
+
9
+ - [#334](https://github.com/Lykhoyda/ask-llm/pull/334) [`51d2c32`](https://github.com/Lykhoyda/ask-llm/commit/51d2c32b658cf356f61ed02986680525b95f810e) Thanks [@Lykhoyda](https://github.com/Lykhoyda)! - Accept Codex's catalog-backed `ultra` reasoning effort as explicit opt-in. Keep ordinary defaults at `medium` and `/codex-review`/`/brainstorm` at `high`. Unified Grok still rejects `max` and `ultra`.
10
+
11
+ - [#337](https://github.com/Lykhoyda/ask-llm/pull/337) [`3a9a8e5`](https://github.com/Lykhoyda/ask-llm/commit/3a9a8e5f773d2d6aab8ea7c4c42d8e5b4c473e0a) Thanks [@Lykhoyda](https://github.com/Lykhoyda)! - Pin codex-pair, /sol-review, and the Cursor brainstorm participant to GPT-6 Sol (`gpt-6-sol`, Cursor `gpt-6-sol-high`). Pair effort is medium. Grok defaults are grok-4.7 on both harnesses, and current Opus pins are Claude Opus 5.5. Astra stays the ask-codex default.
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [[`8d7ff9f`](https://github.com/Lykhoyda/ask-llm/commit/8d7ff9fdbd7ee76aa40a45a500d67910662c2002), [`51d2c32`](https://github.com/Lykhoyda/ask-llm/commit/51d2c32b658cf356f61ed02986680525b95f810e), [`3a9a8e5`](https://github.com/Lykhoyda/ask-llm/commit/3a9a8e5f773d2d6aab8ea7c4c42d8e5b4c473e0a)]:
16
+ - @ask-llm/codex-mcp@0.8.0
17
+ - @ask-llm/mcp@0.11.0
18
+ - @ask-llm/grok-mcp@0.2.0
19
+ - @ask-llm/gemini-mcp@1.9.2
20
+ - @ask-llm/ollama-mcp@0.6.3
21
+ - @ask-llm/antigravity-mcp@0.7.7
22
+
23
+ ## 0.17.0
24
+
25
+ ### Minor Changes
26
+
27
+ - [#327](https://github.com/Lykhoyda/ask-llm/pull/327) [`4e0e436`](https://github.com/Lykhoyda/ask-llm/commit/4e0e436b43f7a1bff897bd690c71765420ff32ae) Thanks [@Lykhoyda](https://github.com/Lykhoyda)! - Add Codex `preferred` and `sandbox` to unified `ask-llm` (fail closed on other providers) and let plugin Codex workflows use fully pinned unified MCP when no `ask-codex` leaf is present, without stripping provider options ([#266](https://github.com/Lykhoyda/ask-llm/issues/266)).
28
+
29
+ ### Patch Changes
30
+
31
+ - Updated dependencies [[`124d93d`](https://github.com/Lykhoyda/ask-llm/commit/124d93dd6dae941ffac37d6583be7cbf0eb0c30f), [`4e0e436`](https://github.com/Lykhoyda/ask-llm/commit/4e0e436b43f7a1bff897bd690c71765420ff32ae)]:
32
+ - @ask-llm/antigravity-mcp@0.7.6
33
+ - @ask-llm/mcp@0.10.0
34
+
3
35
  ## 0.16.3
4
36
 
5
37
  ### Patch Changes
package/README.md CHANGED
@@ -23,16 +23,20 @@ Part of the [Ask LLM](https://github.com/Lykhoyda/ask-llm) monorepo.
23
23
 
24
24
  ### MCP Servers
25
25
 
26
- The plugin bundles only the Codex MCP registration under Claude Code's plugin namespace. After installation or upgrade, fully restart Claude Code and run `/mcp`; `plugin:ask-llm:codex` should be connected. `/sol-review` selects `ask-codex`.
26
+ The recommended cross-provider server is `@ask-llm/mcp`. Keep `npx -y @ask-llm/mcp` as the primary registration; `npm install -g @ask-llm/mcp` is a first-class alternative when you want a pinned global binary. Split provider packages (`@ask-llm/codex-mcp`, `@ask-llm/grok-mcp`, and the others) remain an advanced optimization for a richer per-provider tool surface.
27
+
28
+ The plugin bundles only the Codex MCP registration under Claude Code's plugin namespace. After installation or upgrade, fully restart Claude Code and run `/mcp`; `plugin:ask-llm:codex` should be connected. Codex-facing workflows prefer that bundled `ask-codex` leaf (or a user-scoped `ask-codex`), then a fully pinned unified `ask-llm` call (`provider: "codex"` plus model and Codex options), then the disclosed `codex exec` fallback. An older unified schema that cannot honor those options is reported rather than stripped.
27
29
 
28
30
  `/grok-pair` does not add servers to the plugin. Register the unified Ask LLM server at user scope (the recommended install: it exposes `ask-cursor-agent` for the Cursor Agent route plus the unified `ask-llm` tool, which pair skills call only fully pinned) and, optionally, the split Grok server for the `ask-grok` leaf:
29
31
 
30
32
  ```bash
31
33
  claude mcp add --scope user ask-llm -- npx -y @ask-llm/mcp
34
+ # first-class alternative after `npm install -g @ask-llm/mcp`:
35
+ # claude mcp add --scope user ask-llm -- ask-llm-mcp
32
36
  claude mcp add --scope user grok -- npx -y @ask-llm/grok-mcp
33
37
  ```
34
38
 
35
- Existing user-scoped Codex registrations remain compatible and keep their shorter names. Other providers are registered explicitly at user scope:
39
+ Existing user-scoped Codex registrations remain compatible and keep their shorter names. Other providers are registered explicitly at user scope only when you want their split leaves:
36
40
 
37
41
  ```bash
38
42
  claude mcp add --scope user gemini -- npx -y @ask-llm/gemini-mcp
@@ -40,6 +44,8 @@ claude mcp add --scope user ollama -- npx -y @ask-llm/ollama-mcp
40
44
  claude mcp add --scope user antigravity -- npx -y @ask-llm/antigravity-mcp
41
45
  ```
42
46
 
47
+ If Codex is missing entirely, provision the unified server first (`claude mcp add --scope user ask-llm -- npx -y @ask-llm/mcp`) or the split Codex leaf with `claude mcp add --scope user codex -- npx -y @ask-llm/codex-mcp`. If `/mcp` shows the bundled registration but it is disconnected, run `npx -y @ask-llm/mcp doctor` and restart Claude Code. `/sol-review` preserves source-plugin and session-local MCP/settings context when reading the active `claude mcp list` inventory, reports missing, unavailable, and unsupported-schema states separately, and discloses the explicit `codex exec` fallback after failed health, an incomplete unified schema, or MCP transport failure.
48
+
43
49
  ### Cursor Agent
44
50
 
45
51
  Cursor's supported Agent Skills surface exposes exactly `/codex-pair` and `/grok-pair` (the manifest sets `agents: []`, `commands: []`, and `hooks: {}` so Claude agents and the Claude-format hooks file are never auto-discovered, and the other skills stay Claude/Pi-only until they get Cursor adapters); its MCP surface is `mcp.json`, which bundles only the unified `ask-llm` server. For a source checkout:
@@ -48,9 +54,7 @@ Cursor's supported Agent Skills surface exposes exactly `/codex-pair` and `/grok
48
54
  agent --plugin-dir ./packages/claude-plugin
49
55
  ```
50
56
 
51
- `/codex-pair` requires explicit `model=` and `effort=` values before consent, then uses a separately user-installed `ask-codex` leaf when exposed, otherwise the bundled unified `ask-llm` fully pinned (`provider: "codex"`, model, effort, include directories, session), with resumable Thread ID, cancellation, and result relay. It never guesses MCP-process environment defaults and does not pretend Claude-only hooks are active. `/grok-pair` gives Cursor-native `.cursor/mcp.json` and Tools & MCP reload guidance; it never sends Cursor users to `claude mcp add`. If installing only MCP configuration, the recommended minimal entry is `ask-llm` → `npx -y @ask-llm/mcp` in project `.cursor/mcp.json` or user `~/.cursor/mcp.json` (keep one registration per server — do not duplicate it when the plugin is loaded); add `codex` → `@ask-llm/codex-mcp` or `grok` → `@ask-llm/grok-mcp` only when you specifically want their `ask-codex`/`ask-grok` leaves, then reload MCP/restart Cursor Agent. When Cursor hosts `/grok-pair`, it never recursively invokes Cursor Agent.
52
-
53
- If Codex is missing entirely, register it explicitly with `claude mcp add --scope user codex -- npx -y @ask-llm/codex-mcp`. If `/mcp` shows the bundled registration but it is disconnected, run `npx -y @ask-llm/mcp doctor` and restart Claude Code. `/sol-review` preserves source-plugin and session-local MCP/settings context when reading the active `claude mcp list` inventory, reports missing and unavailable states separately, and discloses the explicit `codex exec` fallback after failed health or MCP transport failure.
57
+ `/codex-pair` requires explicit `model=` and `effort=` values before consent, then uses a separately user-installed `ask-codex` leaf when exposed, otherwise the bundled unified `ask-llm` fully pinned (`provider: "codex"`, model, effort, include directories, sandbox, session), with resumable Thread ID, cancellation, and result relay. It never guesses MCP-process environment defaults and does not pretend Claude-only hooks are active. `/grok-pair` gives Cursor-native `.cursor/mcp.json` and Tools & MCP reload guidance; it never sends Cursor users to `claude mcp add`. If installing only MCP configuration, the recommended minimal entry is `ask-llm` → `npx -y @ask-llm/mcp` in project `.cursor/mcp.json` or user `~/.cursor/mcp.json` (keep one registration per server — do not duplicate it when the plugin is loaded); add `codex` → `@ask-llm/codex-mcp` or `grok` → `@ask-llm/grok-mcp` only when you specifically want their `ask-codex`/`ask-grok` leaves, then reload MCP/restart Cursor Agent. When Cursor hosts `/grok-pair`, it never recursively invokes Cursor Agent.
54
58
 
55
59
  ### Pi
56
60
 
@@ -80,29 +84,29 @@ See the [Pi host guide](https://lykhoyda.github.io/ask-llm/plugin/pi) for securi
80
84
  | `/gemini-review` | Gemini-only code review with confidence filtering |
81
85
  | `/codex-review` | Codex-only code review (precision-first, ≥80 confidence — default for routine PR review) |
82
86
  | `/fable-review` | Isolated, read-only review requesting native Fable, with runtime verification limits disclosed |
83
- | `/sol-review` | Model-pinned GPT-5.6 Sol review through the bundled `ask-codex` MCP tool; missing registration and service unavailability are diagnosed separately before the explicit CLI fallback |
87
+ | `/sol-review` | Model-pinned GPT-6 Sol review: prefer bundled or user-scoped `ask-codex`, then fully pinned unified `ask-llm`, then the disclosed CLI fallback |
84
88
  | `/ollama-review` | Local review — no data leaves your machine |
85
- | `/brainstorm` | Explicit multi-model brainstorm (default external: Antigravity + Codex); supports an exact no-Gemini Grok + GPT-5.6 Sol panel through Cursor Agent |
89
+ | `/brainstorm` | Explicit multi-model brainstorm (default external: Antigravity + Codex); supports an exact no-Gemini Grok + GPT-6 Sol panel through Cursor Agent |
86
90
  | `/grok-review` | Grok review through explicit xAI API or Grok CLI harness; no fallback |
87
91
  | `/grok-pair` | Consent-gated iterative Grok reviewer through exact Cursor Agent, xAI API, or Grok CLI route; no fallback |
88
92
  | `/codex-pair` | Claude/Pi per-edit pairing dashboard; Cursor on-demand session adapter with explicit Thread ID continuity |
89
93
  | `/brainstorm-all` | Brainstorm with all five external providers (Gemini, Codex, Grok, Ollama, Antigravity) + Claude Opus research |
90
94
  | `/compare` | Side-by-side raw responses from multiple providers (no synthesis, no consensus extraction) |
91
95
 
92
- ### Exact Grok + GPT-5.6 Sol brainstorm
96
+ ### Exact Grok + GPT-6 Sol brainstorm
93
97
 
94
98
  The preferred architect panel routes both models through the model-neutral Cursor Agent harness with provider and exact account-catalog ID kept separate:
95
99
 
96
100
  ```text
97
- /brainstorm grok@cursor-agent:cursor-grok-4.6-high,codex@cursor-agent:gpt-5.6-sol-high "review this architecture"
101
+ /brainstorm grok@cursor-agent:grok-4.7-high,codex@cursor-agent:gpt-6-sol-high "review this architecture"
98
102
  ```
99
103
 
100
- This panel calls exactly Grok and GPT-5.6 Sol—never Gemini. Cursor `Auto`, model rewriting, and harness/provider fallback are forbidden. If one participant fails, the result is partial and cannot be presented as two-model consensus. Catalogs are account-specific; confirm these exact IDs with `agent --list-models` and replace an unavailable ID explicitly.
104
+ This panel calls exactly Grok and GPT-6 Sol—never Gemini. Cursor `Auto`, model rewriting, and harness/provider fallback are forbidden. If one participant fails, the result is partial and cannot be presented as two-model consensus. Catalogs are account-specific; confirm these exact IDs with `agent --list-models` and replace an unavailable ID explicitly.
101
105
 
102
106
  Official Grok Build remains an explicit alternative when its installed headless contract is supported:
103
107
 
104
108
  ```text
105
- /brainstorm grok@grok-cli:grok-build,codex@cursor-agent:gpt-5.6-sol-high "review this architecture"
109
+ /brainstorm grok@grok-cli:grok-4.7,codex@cursor-agent:gpt-6-sol-high "review this architecture"
106
110
  ```
107
111
 
108
112
  A Grok CLI failure remains a Grok CLI failure; the workflow does not pivot to Cursor or xAI.
@@ -114,7 +118,7 @@ A Grok CLI failure remains a Grok CLI failure; the workflow does not pivot to Cu
114
118
  | gemini-reviewer | cyan | 4-phase: context, prompt, synthesis, validation |
115
119
  | codex-reviewer | green | 4-phase: context, prompt, synthesis, validation |
116
120
  | fable-reviewer | purple | Fable-requested review with source-verified findings |
117
- | sol-reviewer | blue | GPT-5.6 Sol review through Codex with source validation |
121
+ | sol-reviewer | blue | GPT-6 Sol review through Codex with source validation |
118
122
  | ollama-reviewer | yellow | 4-phase: context, prompt, synthesis, validation (local) |
119
123
  | brainstorm-coordinator | magenta | Source-grounded research + parallel multi-model consultation; exact two-model mode keeps the host non-voting and partial failures out of consensus |
120
124
 
@@ -160,7 +164,7 @@ To disable:
160
164
  | Just this session | `/plugin disable ask-llm` |
161
165
  | Just this command | `CODEX_PAIR_DISABLED=1 <command>` |
162
166
 
163
- **Usage characteristics**: GPT-5.6 Sol by default with Terra quota fallback; ~13–50s per file. Files >20KB skipped (override with `CODEX_PAIR_MAX_FILE_BYTES`). node_modules/dist/lockfiles/images skipped automatically.
167
+ **Usage characteristics**: GPT-6 Sol at medium effort by default, with Terra quota fallback; ~13–50s per file. Files >20KB skipped (override with `CODEX_PAIR_MAX_FILE_BYTES`). node_modules/dist/lockfiles/images skipped automatically.
164
168
 
165
169
  **When to enable**: any project where missed correctness issues cost more than the per-edit review (~$0.04–0.07). The decision is about *code characteristics*, not domain — codex-pair catches bugs earlier wherever a project has implicit invariants the model can't infer from one file in isolation (which most projects do, somewhere). **When NOT to enable**: routine refactors, glue code, simple CRUD where `/codex-review` at PR time is sufficient (~1/4 the cost). The four-task benchmark in ADR-077 has the full task-agnostic evidence trail; ADR-095 is the lived-experience replication on this very repo.
166
170
 
@@ -32,7 +32,7 @@ The frontmatter and detailed implementation below define Claude Code subagent ex
32
32
 
33
33
  You are a brainstorming coordinator powered by Claude Opus. You have two jobs:
34
34
 
35
- 1. **Research independently before dispatch.** Perform deep analysis of the topic — read the actual files, trace real code paths, and factor in framework-specific semantics. In standard mode this is a peer participant. In the exact Grok + GPT-5.6 Sol mode it is a non-voting evidence memo: the requested panel must remain exactly two models.
35
+ 1. **Research independently before dispatch.** Perform deep analysis of the topic — read the actual files, trace real code paths, and factor in framework-specific semantics. In standard mode this is a peer participant. In the exact Grok + GPT-6 Sol mode it is a non-voting evidence memo: the requested panel must remain exactly two models.
36
36
  2. **Orchestrate explicit consultations.** Dispatch only the selected external participants (Antigravity, Codex, Grok, Ollama, Gemini — default: antigravity,codex) via a **single blocking foreground Bash call**, collect responses, and synthesize with provider, harness, requested model, independently observed served model (direct xAI API / Grok CLI only), and Cursor display label kept separate; a harness-echoed requested ID is selected-only and is never presented as the actual model.
37
37
 
38
38
  You run on Opus and have filesystem access. Never skip the independent research phase, but never count it as a third panel vote in exact two-model mode.
@@ -126,14 +126,14 @@ The user specifies which external providers to use. Default is `antigravity,code
126
126
 
127
127
  Participant specs use `provider@harness:exact-model-id`. The preferred Grok route is Cursor Agent. The supported exact architect panel is:
128
128
 
129
- - `grok@cursor-agent:cursor-grok-4.6-high`
130
- - `codex@cursor-agent:gpt-5.6-sol-high`
129
+ - `grok@cursor-agent:grok-4.7-high`
130
+ - `codex@cursor-agent:gpt-6-sol-high`
131
131
 
132
- Account catalogs can change; an unavailable exact ID is a clear failure, not permission to choose Auto or another ID. Grok Build remains explicit as `grok@grok-cli:grok-build` when the installed CLI supports the canonical contract. The exact panel contains no Gemini and must never launch a Gemini process/tool.
132
+ Account catalogs can change; an unavailable exact ID is a clear failure, not permission to choose Auto or another ID. Grok Build remains explicit as `grok@grok-cli:grok-4.7` when the installed CLI supports the canonical contract. The exact panel contains no Gemini and must never launch a Gemini process/tool.
133
133
 
134
- A list that mixes routed specs with bare provider names (for example `grok@cursor-agent:cursor-grok-4.6-high,antigravity`) is unsupported: stop before Phase 3A, report `Mixed brainstorm participant lists are not supported: routed "<spec>" cannot be combined with bare "<provider>". Use either an all-bare provider list or the exact routed Grok + GPT-5.6 Sol panel. No participant was substituted, rerouted, or dispatched.`, and dispatch nothing. Never downgrade a routed spec to `grok-run.js`/`codex-run.js` or promote a bare name into a routed spec; `brainstorm-run.js` refuses such lists with the same error. Generalized mixed panels are deferred to a future ADR.
134
+ A list that mixes routed specs with bare provider names (for example `grok@cursor-agent:grok-4.7-high,antigravity`) is unsupported: stop before Phase 3A, report `Mixed brainstorm participant lists are not supported: routed "<spec>" cannot be combined with bare "<provider>". Use either an all-bare provider list or the exact routed Grok + GPT-6 Sol panel. No participant was substituted, rerouted, or dispatched.`, and dispatch nothing. Never downgrade a routed spec to `grok-run.js`/`codex-run.js` or promote a bare name into a routed spec; `brainstorm-run.js` refuses such lists with the same error. Generalized mixed panels are deferred to a future ADR.
135
135
 
136
- **Exact Grok + GPT-5.6 Sol branch (preferred architect workflow):**
136
+ **Exact Grok + GPT-6 Sol branch (preferred architect workflow):**
137
137
 
138
138
  Use this branch instead of the generic template whenever the selected providers are exactly Grok and Codex with explicit route specs. Validate both specs first, then make one foreground call:
139
139
 
@@ -146,8 +146,8 @@ cat > "$workdir/prompt.md" <<'PROMPT_EOF'
146
146
  PROMPT_EOF
147
147
 
148
148
  node "${CLAUDE_PLUGIN_ROOT}/dist/brainstorm-run.js" \
149
- --participant 'grok@cursor-agent:cursor-grok-4.6-high' \
150
- --participant 'codex@cursor-agent:gpt-5.6-sol-high' \
149
+ --participant 'grok@cursor-agent:grok-4.7-high' \
150
+ --participant 'codex@cursor-agent:gpt-6-sol-high' \
151
151
  < "$workdir/prompt.md" > "$workdir/panel.json" 2> "$workdir/panel.err"
152
152
  rc_panel=$?
153
153
  echo "===== GROK + GPT-5.6 SOL PANEL (rc=$rc_panel) ====="
@@ -156,7 +156,7 @@ echo "===== PANEL STDERR ====="
156
156
  cat "$workdir/panel.err"
157
157
  ```
158
158
 
159
- Substitute only user-supplied, grammar-validated exact specs. For the explicit Grok Build alternative, substitute only the Grok spec with `grok@grok-cli:grok-build`; do not change the Sol route. `brainstorm-run.js` starts both participants concurrently, preserves input order and identity, returns `complete | partial | failed`, and exits 2 for partial/failed participant execution. Parse its JSON even when rc=2. It does not know or support Gemini, and it does not pivot routes.
159
+ Substitute only user-supplied, grammar-validated exact specs. For the explicit Grok Build alternative, substitute only the Grok spec with `grok@grok-cli:grok-4.7`; do not change the Sol route. `brainstorm-run.js` starts both participants concurrently, preserves input order and identity, returns `complete | partial | failed`, and exits 2 for partial/failed participant execution. Parse its JSON even when rc=2. It does not know or support Gemini, and it does not pivot routes.
160
160
 
161
161
  **Required Bash tool call parameters:**
162
162
  - `timeout: 600000` — 10 minutes, the Bash tool maximum. The default 2 minutes will kill Codex at high reasoning effort mid-response, recreating the same silent-failure class this phase is designed to avoid.
@@ -205,18 +205,19 @@ gemini -p "@$workdir/prompt.md" > "$workdir/gemini.out" 2> "$workdir/gemini.err"
205
205
  pid_gemini=$!
206
206
 
207
207
  # Only include this block if codex was requested (in the default set).
208
- # GPT-5.6 Sol at high effort is the quality-first default for brainstorming;
209
- # Terra preserves the lower-cost fallback role. ASK_CODEX_PREFERRED_MODEL and
208
+ # GPT-6 Astra at high effort is the quality-first default for unpinned
209
+ # brainstorming; Terra preserves the lower-cost fallback role. The exact Cursor
210
+ # architect panel stays gpt-6-sol-high (ADR-148). ASK_CODEX_PREFERRED_MODEL and
210
211
  # ASK_CODEX_REASONING_EFFORT remain escape hatches. prompt.md is a FILE (not a
211
212
  # pipe), so both attempts can re-read it. The whole `{ ...; }` group is
212
213
  # backgrounded as one job so pid_codex/`wait` capture the final code.
213
- codex_model="${ASK_CODEX_PREFERRED_MODEL:-${ASK_CODEX_MODEL:-gpt-5.6-sol}}"
214
+ codex_model="${ASK_CODEX_PREFERRED_MODEL:-${ASK_CODEX_MODEL:-gpt-6-astra}}"
214
215
  codex_fallback="${ASK_CODEX_FALLBACK_MODEL:-gpt-5.6-terra}"
215
216
  codex_effort="${ASK_CODEX_REASONING_EFFORT:-high}"
216
217
  # Keep the raw env override aligned with ask-codex's public enum so malformed
217
218
  # config fragments never reach the Codex CLI.
218
219
  case "$codex_effort" in
219
- low|medium|high|xhigh|max) ;;
220
+ low|medium|high|xhigh|max|ultra) ;;
220
221
  *) codex_effort="high" ;;
221
222
  esac
222
223
  { codex exec --sandbox read-only -c "model_reasoning_effort=\"$codex_effort\"" -m "$codex_model" - < "$workdir/prompt.md" \
@@ -312,9 +313,9 @@ Surface this grade as the first line of the synthesis output (see Output Format
312
313
 
313
314
  ### Participants Consulted
314
315
  - ℹ️ Claude Opus: non-voting evidence verifier (exact two-model mode; verified against real files: path/to/a, path/to/b)
315
- - ✅ Grok via Cursor Agent — requested `cursor-grok-4.6-high` (selected-unverified: Cursor echoes the requested ID); reported display label `Cursor Grok 4.6` (label, not a catalog ID)
316
- - ✅ Codex via Cursor Agent — requested `gpt-5.6-sol-high` (selected-unverified); reported display label `GPT-5.6 Sol 1M High`
317
- - (direct route example) ✅ Grok via xAI API — requested `grok-4.6`; observed served `grok-4.6-<snapshot>` (observed-alias, disclosed same-product resolution)
316
+ - ✅ Grok via Cursor Agent — requested `grok-4.7-high` (selected-unverified: Cursor echoes the requested ID); reported display label `Grok 4.7` (label, not a catalog ID)
317
+ - ✅ Codex via Cursor Agent — requested `gpt-6-sol-high` (selected-unverified); reported display label `GPT-6 Sol 1M High`
318
+ - (direct route example) ✅ Grok via xAI API — requested `grok-4.7`; observed served `grok-4.7-<snapshot>` (observed-alias, disclosed same-product resolution)
318
319
  - 🚫 Gemini: explicitly excluded (not called)
319
320
 
320
321
  ### Consensus (high confidence; omit for a partial exact panel)
@@ -10,6 +10,7 @@ tools:
10
10
  - Read
11
11
  - mcp__codex__ask-codex
12
12
  - mcp__plugin_ask-llm_codex__ask-codex
13
+ - mcp__ask-llm__ask-llm
13
14
  ---
14
15
 
15
16
  <!-- PORTABLE-CONTRACT:START -->
@@ -62,7 +63,11 @@ You are a code review coordinator that leverages OpenAI Codex for independent an
62
63
 
63
64
  ### Phase 2: Review Prompt Construction
64
65
 
65
- When calling `ask-codex`, leave `model` and `preferred` unset and set `reasoningEffort: "high"`. This uses GPT-5.6 Sol at high effort and transparently falls back to GPT-5.6 Terra on quota. Structure the prompt to request confidence scoring AND severity classification:
66
+ When calling Codex, leave `model` and `preferred` unset and set `reasoningEffort: "high"` plus `sandbox: "read-only"`. This uses GPT-6 Astra at high effort and transparently falls back to GPT-5.6 Terra on quota.
67
+
68
+ Prefer an exact `ask-codex` leaf (`mcp__codex__ask-codex` or `mcp__plugin_ask-llm_codex__ask-codex`). If none is exposed, call `mcp__ask-llm__ask-llm` with `provider: "codex"` and the same options. Inspect the unified input schema first: if it lacks `reasoningEffort`, `includeDirs`, `preferred`, or `sandbox`, stop and tell the user to upgrade `@ask-llm/mcp` (`npx -y @ask-llm/mcp@latest` or `npm install -g @ask-llm/mcp`); do not omit those fields to make the call succeed. Never make an unpinned generic `ask-llm` call.
69
+
70
+ Structure the prompt to request confidence scoring AND severity classification:
66
71
 
67
72
  ```
68
73
  Review the following code changes. For each issue found, rate:
@@ -9,6 +9,8 @@ tools:
9
9
  - Grep
10
10
  - Read
11
11
  - mcp__codex__ask-codex
12
+ - mcp__plugin_ask-llm_codex__ask-codex
13
+ - mcp__ask-llm__ask-llm
12
14
  ---
13
15
 
14
16
  <!-- PORTABLE-CONTRACT:START -->
@@ -35,7 +37,7 @@ If the assistant said "I added retry logic to the executor," `codex-reviewer` lo
35
37
 
36
38
  ## Tool surface (read-only by contract)
37
39
 
38
- Allowed: `Read`, `Grep`, `Glob`, `Bash` (read-only commands only — `cat`, `head`, `tail`, `wc`, `diff`, `git diff|log|show|status|blame`, `jq`, language-native test runners in dry-run/list mode), `mcp__codex__ask-codex`.
40
+ Allowed: `Read`, `Grep`, `Glob`, `Bash` (read-only commands only — `cat`, `head`, `tail`, `wc`, `diff`, `git diff|log|show|status|blame`, `jq`, language-native test runners in dry-run/list mode), `mcp__codex__ask-codex`, `mcp__plugin_ask-llm_codex__ask-codex`, `mcp__ask-llm__ask-llm`.
39
41
 
40
42
  Forbidden: anything that mutates state. Never run `rm`, `mv`, `chmod`, redirections (`>`, `>>`, `tee`), package installs (`npm install`, `pip install`), or DB writes (`INSERT`, `UPDATE`, `DELETE`, `DROP`). No `Write`, no `Edit`, no `NotebookEdit`.
41
43
 
@@ -77,9 +79,9 @@ Evidence sources, in order of cost:
77
79
  - `Bash`: `git log --diff-filter=A -- <path>` — confirm a file was added in this branch.
78
80
  - `Bash`: `git diff <ref> -- <path>` — confirm what specifically changed.
79
81
  - `Bash`: `node -e "..."` (dry-run only, no side effects) — evaluate a small expression to confirm a constant value.
80
- - `mcp__codex__ask-codex` — when the verification needs Codex's broader code-tracing (e.g., "does function X actually call function Y in the new path?"), send a focused single-claim prompt.
82
+ - `mcp__codex__ask-codex` or `mcp__plugin_ask-llm_codex__ask-codex` — when the verification needs Codex's broader code-tracing (e.g., "does function X actually call function Y in the new path?"), send a focused single-claim prompt. Prefer any exact `ask-codex` leaf; if only unified `mcp__ask-llm__ask-llm` is exposed, call it with `provider: "codex"`, `reasoningEffort: "high"`, `sandbox: "read-only"`, and `preferred` unset. If the unified schema lacks those Codex options, stop and report that `@ask-llm/mcp` must be upgraded; do not omit the fields.
81
83
 
82
- When you call `mcp__codex__ask-codex` for verification, scope the prompt narrowly:
84
+ When you call an exact `ask-codex` leaf or the fully pinned unified `ask-llm` equivalent for verification, scope the prompt narrowly:
83
85
 
84
86
  ```
85
87
  Verify this single claim against actual source: <claim>.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: sol-reviewer
3
- description: Coordinates an isolated, read-only code review explicitly pinned to OpenAI GPT-5.6 Sol and reports only source-verified, high-confidence correctness findings.
3
+ description: Coordinates an isolated, read-only code review explicitly pinned to OpenAI GPT-6 Sol and reports only source-verified, high-confidence correctness findings.
4
4
  model: opus
5
5
  effort: high
6
6
  color: blue
@@ -13,7 +13,7 @@ disallowedTools:
13
13
  <!-- PORTABLE-CONTRACT:START -->
14
14
  ## Portable contract
15
15
 
16
- Review only the supplied changes with Codex explicitly pinned to GPT-5.6 Sol, high effort, and read-only sandbox. Verify every candidate against source, report only high-confidence correctness findings, and disclose any model or transport fallback.
16
+ Review only the supplied changes with Codex explicitly pinned to GPT-6 Sol, high effort, and read-only sandbox. Verify every candidate against source, report only high-confidence correctness findings, and disclose any model or transport fallback.
17
17
  <!-- PORTABLE-CONTRACT:END -->
18
18
 
19
19
  <!-- HOST-ADAPTER:CLAUDE-CODE:START -->
@@ -23,25 +23,29 @@ The frontmatter and detailed implementation below define Claude Code subagent ex
23
23
 
24
24
 
25
25
 
26
- You are a code review coordinator for a model-pinned OpenAI GPT-5.6 Sol review. Send the changes to Codex, then independently validate every candidate against the current source.
26
+ You are a code review coordinator for a model-pinned OpenAI GPT-6 Sol review. Send the changes to Codex, then independently validate every candidate against the current source.
27
27
 
28
28
  ## Workflow
29
29
 
30
30
  1. Inspect `git diff` and `git diff --cached`. Read each affected file around the changed lines.
31
31
  2. Apply the nearest `CLAUDE.md` instructions and inspect any ADR explicitly cited by changed code.
32
- 3. Call `mcp__codex__ask-codex` with:
33
- - `model: "gpt-5.6-sol"`
32
+ 3. Call an available Ask LLM Codex transport with:
33
+ - `model: "gpt-6-sol"`
34
34
  - `reasoningEffort: "high"`
35
+ - `sandbox: "read-only"`
35
36
  - `preferred` unset
36
37
  - a prompt containing the scoped conventions, relevant ADR summaries, and the diff
37
38
 
38
- The tool name may be plugin-namespaced in some sessions (for example `mcp__plugin_ask-llm_codex__ask-codex`). Treat a tool as authoritative only when its server identity maps to an active `@ask-llm/codex-mcp` registration. If no authoritative `ask-codex` tool is available in this subagent context, pass the same prompt on stdin to the shipped fallback runner:
39
+ Transport ladder (do not skip rungs, and never strip an option to make a call succeed):
40
+ 1. Prefer any exact `ask-codex` leaf whose server identity maps to an active `@ask-llm/codex-mcp` registration (`mcp__codex__ask-codex` or plugin-namespaced `mcp__plugin_ask-llm_codex__ask-codex`).
41
+ 2. Otherwise call `mcp__ask-llm__ask-llm` (or another namespaced `__ask-llm` leaf whose server maps to `@ask-llm/mcp`) with `provider: "codex"` plus the same model, reasoningEffort, sandbox, preferred, and any `includeDirs`. Inspect the advertised input schema first. If it lacks `reasoningEffort`, `includeDirs`, `preferred`, or `sandbox`, stop: the installed `@ask-llm/mcp` is too old to honor Codex options. Upgrade with `npx -y @ask-llm/mcp@latest` or `npm install -g @ask-llm/mcp`; do not omit those fields.
42
+ 3. If no authoritative MCP tool is available in this subagent context, pass the same prompt on stdin to the shipped fallback runner:
39
43
 
40
44
  ```bash
41
45
  node "${CLAUDE_PLUGIN_ROOT}/scripts/sol-review-transport.mjs" --fallback --plugin-dir "${CLAUDE_PLUGIN_ROOT}" --cli-path "$(command -v codex || true)"
42
46
  ```
43
47
 
44
- Before executing Codex, the runner queries the active Claude MCP inventory again with the active plugin preserved; mirror any session-local `--mcp-config`, `--settings`, `--setting-sources`, and `--strict-mcp-config` flags on the runner command. This makes a parent `preferred` result followed by an absent or disconnected subagent tool a registered-but-unavailable state with the corresponding remediation. If the MCP call itself fails at the transport/service boundary, rerun the same fallback command with `--mcp-failed`; do not use that flag for a provider/model response. The runner then executes `codex exec -m gpt-5.6-sol -c model_reasoning_effort="high" -s read-only --ignore-user-config --ignore-rules --skip-git-repo-check`. The model pin, reasoning-effort override, read-only sandbox, and isolation flags are load-bearing; never drop or substitute them. On a quota or rate-limit failure only, the runner retries once with `${ASK_CODEX_FALLBACK_MODEL:-gpt-5.6-terra}` and identical flags, matching the MCP executor's configurable quota ladder. It writes the review result to stdout unchanged so the validated findings can be relayed without loss. If the `codex` CLI is also unavailable, stop and report that the Sol review could not run. Do not review on another transport, on any model outside the Sol-to-fallback ladder, or in another sandbox mode.
48
+ Before executing Codex, the runner queries the active Claude MCP inventory again with the active plugin preserved; mirror any session-local `--mcp-config`, `--settings`, `--setting-sources`, and `--strict-mcp-config` flags on the runner command. When the resolved tool is unified `ask-llm`, pass `--tool "<resolved tool name>" --tool-schema "<advertised input JSON schema>"` so an older schema is classified as `unsupported-schema` rather than being called. This makes a parent `preferred` or `unified` result followed by an absent or disconnected subagent tool a registered-but-unavailable state with the corresponding remediation. If the MCP call itself fails at the transport/service boundary, rerun the same fallback command with `--mcp-failed`; do not use that flag for a provider/model response. The runner then executes `codex exec -m gpt-6-sol -c model_reasoning_effort="high" -s read-only --ignore-user-config --ignore-rules --skip-git-repo-check`. The model pin, reasoning-effort override, read-only sandbox, and isolation flags are load-bearing; never drop or substitute them. On a quota or rate-limit failure only, the runner retries once with `${ASK_CODEX_FALLBACK_MODEL:-gpt-5.6-terra}` and identical flags, matching the MCP executor's configurable quota ladder. It writes the review result to stdout unchanged so the validated findings can be relayed without loss. If the `codex` CLI is also unavailable, stop and report that the Sol review could not run. Do not review on another transport, on any model outside the Sol-to-fallback ladder, or in another sandbox mode.
45
49
  4. Ask Sol for concrete correctness, security, data-loss, concurrency, resource-lifecycle, and compatibility failures with confidence scores and reproduction conditions.
46
50
  5. Read the reported source locations and trace each reproduction path. Drop style preferences, speculative improvements, pre-existing issues, linter/type-checker findings, and behavior documented as intentional.
47
51
  6. Report only validated findings with confidence of at least 80/100. Never invent findings to fill a report.
@@ -1,4 +1,4 @@
1
1
  {
2
- "model": "gpt-5.6-sol",
2
+ "model": "gpt-6-sol",
3
3
  "fallbackModel": "gpt-5.6-terra"
4
4
  }
@@ -27,7 +27,7 @@ export interface BrainstormParticipantResult extends BrainstormParticipant {
27
27
  error?: string;
28
28
  }
29
29
  export interface BrainstormPanelReport {
30
- panel: "grok+gpt-5.6-sol";
30
+ panel: "grok+gpt-6-sol";
31
31
  status: "complete" | "partial" | "failed";
32
32
  consensusEligible: boolean;
33
33
  synthesisRule: string;
@@ -1 +1 @@
1
- {"version":3,"file":"brainstorm-panel.d.ts","sourceRoot":"","sources":["../src/brainstorm-panel.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,0BAA0B,YAAI,MAAM,EAAE,OAAO,CAAU,CAAC;AACrE,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAClF,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAC3F,eAAO,MAAM,yBAAyB,YAAI,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAU,CAAC;AACvG,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF,MAAM,MAAM,yBAAyB,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,sBAAsB,EAAE,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,2BAA2B,GACnC,gBAAgB,GAChB,gBAAgB,GAChB,qBAAqB,GACrB,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,OAAO,EAAE,sBAAsB,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB;IACxE,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,2BAA2B,CAAC;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,2BAA2B,EAAE,CAAC;CAC7C;AAYD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAqB9E;AAMD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,yBAAyB,CAoBzF;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,IAAI,CA4BnF;AAID,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CASpF;AAuLD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAiBjC"}
1
+ {"version":3,"file":"brainstorm-panel.d.ts","sourceRoot":"","sources":["../src/brainstorm-panel.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,0BAA0B,YAAI,MAAM,EAAE,OAAO,CAAU,CAAC;AACrE,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAClF,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAC3F,eAAO,MAAM,yBAAyB,YAAI,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAU,CAAC;AACvG,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF,MAAM,MAAM,yBAAyB,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,sBAAsB,EAAE,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,2BAA2B,GACnC,gBAAgB,GAChB,gBAAgB,GAChB,qBAAqB,GACrB,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,OAAO,EAAE,sBAAsB,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB;IACxE,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,2BAA2B,CAAC;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,2BAA2B,EAAE,CAAC;CAC7C;AAYD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAqB9E;AAMD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,yBAAyB,CAoBzF;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,IAAI,CA4BnF;AAID,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CASpF;AAuLD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAiBjC"}
@@ -13,7 +13,7 @@ function routeAllowed(participant) {
13
13
  export function parseBrainstormParticipant(spec) {
14
14
  const match = spec.match(/^(grok|codex)@(cursor-agent|grok-cli|xai-api|codex-cli):(.+)$/);
15
15
  if (!match) {
16
- throw new Error(`Invalid brainstorm participant "${spec}". Use provider@harness:exact-model-id (for example grok@cursor-agent:cursor-grok-4.6-high).`);
16
+ throw new Error(`Invalid brainstorm participant "${spec}". Use provider@harness:exact-model-id (for example grok@cursor-agent:grok-4.7-high).`);
17
17
  }
18
18
  const participant = {
19
19
  provider: match[1],
@@ -38,7 +38,7 @@ export function parseBrainstormParticipantList(specs) {
38
38
  const bare = trimmed.filter((spec) => !spec.includes("@"));
39
39
  const routed = trimmed.filter((spec) => spec.includes("@"));
40
40
  if (bare.length > 0 && routed.length > 0) {
41
- throw new Error(`Mixed brainstorm participant lists are not supported: routed ${routed.map((spec) => `"${spec}"`).join(", ")} cannot be combined with bare ${bare.map((spec) => `"${spec}"`).join(", ")}. Use either an all-bare provider list or the exact routed Grok + GPT-5.6 Sol panel. No participant was substituted, rerouted, or dispatched.`);
41
+ throw new Error(`Mixed brainstorm participant lists are not supported: routed ${routed.map((spec) => `"${spec}"`).join(", ")} cannot be combined with bare ${bare.map((spec) => `"${spec}"`).join(", ")}. Use either an all-bare provider list or the exact routed Grok + GPT-6 Sol panel. No participant was substituted, rerouted, or dispatched.`);
42
42
  }
43
43
  if (routed.length > 0) {
44
44
  return { mode: "exact", participants: routed.map(parseBrainstormParticipant) };
@@ -51,15 +51,15 @@ export function parseBrainstormParticipantList(specs) {
51
51
  }
52
52
  export function validateBrainstormPanel(participants) {
53
53
  if (participants.length !== 2) {
54
- throw new Error("The Grok + GPT-5.6 Sol panel requires exactly two participants.");
54
+ throw new Error("The Grok + GPT-6 Sol panel requires exactly two participants.");
55
55
  }
56
56
  const providers = participants.map(({ provider }) => provider);
57
57
  if (new Set(providers).size !== providers.length) {
58
- throw new Error("The Grok + GPT-5.6 Sol panel requires one Grok participant and one Codex participant.");
58
+ throw new Error("The Grok + GPT-6 Sol panel requires one Grok participant and one Codex participant.");
59
59
  }
60
60
  for (const required of BRAINSTORM_PANEL_PROVIDERS) {
61
61
  if (!providers.includes(required)) {
62
- throw new Error(`The Grok + GPT-5.6 Sol panel is missing provider "${required}".`);
62
+ throw new Error(`The Grok + GPT-6 Sol panel is missing provider "${required}".`);
63
63
  }
64
64
  }
65
65
  for (const participant of participants) {
@@ -69,8 +69,8 @@ export function validateBrainstormPanel(participants) {
69
69
  if (!routeAllowed(participant)) {
70
70
  throw new Error(`Unsupported brainstorm route ${participant.provider}@${participant.harness}. No provider or harness fallback was attempted.`);
71
71
  }
72
- if (participant.provider === "codex" && !participant.model.toLowerCase().includes("gpt-5.6-sol")) {
73
- throw new Error(`The Codex participant must request an exact GPT-5.6 Sol model ID; received "${participant.model}". No model substitution was attempted.`);
72
+ if (participant.provider === "codex" && !participant.model.toLowerCase().includes("gpt-6-sol")) {
73
+ throw new Error(`The Codex participant must request an exact GPT-6 Sol model ID; received "${participant.model}". No model substitution was attempted.`);
74
74
  }
75
75
  }
76
76
  }
@@ -237,7 +237,7 @@ export async function runBrainstormPanel(options) {
237
237
  const participants = await Promise.all(options.participants.map((participant) => invokeParticipant(participant, options.prompt, options.signal, options.onProgress)));
238
238
  const successCount = participants.filter(({ status }) => status === "fulfilled").length;
239
239
  return {
240
- panel: "grok+gpt-5.6-sol",
240
+ panel: "grok+gpt-6-sol",
241
241
  status: successCount === 2 ? "complete" : successCount === 1 ? "partial" : "failed",
242
242
  consensusEligible: successCount === 2,
243
243
  synthesisRule: SYNTHESIS_RULE,
@@ -1 +1 @@
1
- {"version":3,"file":"brainstorm-panel.js","sourceRoot":"","sources":["../src/brainstorm-panel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brainstorm-panel.js","sourceRoot":"","sources":["../src/brainstorm-panel.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,7 @@ async function main() {
29
29
  const specs = parseArgs(process.argv.slice(2));
30
30
  const list = parseBrainstormParticipantList(specs);
31
31
  if (list.mode !== "exact") {
32
- throw new Error(`ask-brainstorm-run executes only the exact routed Grok + GPT-5.6 Sol panel; bare providers (${list.providers.join(", ")}) use the standard coordinator dispatch. No participant was dispatched.`);
32
+ throw new Error(`ask-brainstorm-run executes only the exact routed Grok + GPT-6 Sol panel; bare providers (${list.providers.join(", ")}) use the standard coordinator dispatch. No participant was dispatched.`);
33
33
  }
34
34
  const prompt = await readStdin();
35
35
  const report = await runBrainstormPanel({
@@ -1 +1 @@
1
- {"version":3,"file":"brainstorm-run.js","sourceRoot":"","sources":["../src/brainstorm-run.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3F,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACtF,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,yDAAyD,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,+FAA+F,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,yEAAyE,CAClM,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,MAAM;YACN,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;SAChD,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"brainstorm-run.js","sourceRoot":"","sources":["../src/brainstorm-run.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3F,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACtF,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,yDAAyD,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,6FAA6F,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,yEAAyE,CAChM,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,MAAM;YACN,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;SAChD,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ask-llm/plugin",
3
- "version": "0.16.3",
3
+ "version": "0.18.0",
4
4
  "description": "Ask LLM review, comparison, brainstorming, image, verification, and pairing workflows for Claude Code, Cursor Agent, and Pi",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -83,12 +83,12 @@
83
83
  ]
84
84
  },
85
85
  "dependencies": {
86
- "@ask-llm/antigravity-mcp": "^0.7.5",
87
- "@ask-llm/codex-mcp": "^0.7.8",
88
- "@ask-llm/gemini-mcp": "^1.9.1",
89
- "@ask-llm/grok-mcp": "^0.1.5",
90
- "@ask-llm/mcp": "^0.9.3",
91
- "@ask-llm/ollama-mcp": "^0.6.2"
86
+ "@ask-llm/antigravity-mcp": "^0.7.7",
87
+ "@ask-llm/codex-mcp": "^0.8.0",
88
+ "@ask-llm/gemini-mcp": "^1.9.2",
89
+ "@ask-llm/grok-mcp": "^0.2.0",
90
+ "@ask-llm/mcp": "^0.11.0",
91
+ "@ask-llm/ollama-mcp": "^0.6.3"
92
92
  },
93
93
  "peerDependencies": {
94
94
  "@earendil-works/pi-ai": "*",
@@ -280,7 +280,7 @@ function parseNumberFrontmatter(content: string, key: string, fallback: number):
280
280
  async function readConfig(markerDir: string): Promise<{ config: PairConfig; context: string }> {
281
281
  const context = await readFile(join(markerDir, ".codex-pair", "context.md"), "utf8");
282
282
  const threshold = context.match(/^surfaceThreshold:\s*(high|med|low)\s*$/m)?.[1];
283
- const model = context.match(/^model:\s*([^\n]+)$/m)?.[1]?.trim() || "gpt-5.6-sol";
283
+ const model = context.match(/^model:\s*([^\n]+)$/m)?.[1]?.trim() || "gpt-6-sol";
284
284
  return {
285
285
  context,
286
286
  config: {
@@ -693,6 +693,7 @@ export function registerCodexPair(pi: ExtensionAPI): void {
693
693
  const result = await executeCodexCLI({
694
694
  prompt,
695
695
  model: config.model,
696
+ reasoningEffort: "medium",
696
697
  sandbox: "read-only",
697
698
  signal: controller.signal,
698
699
  });
@@ -41,7 +41,7 @@ const prompt = Type.String({ minLength: 1, maxLength: 100000, description: "Prom
41
41
  const codexSchema = Type.Object({
42
42
  prompt,
43
43
  model: Type.Optional(Type.String({ minLength: 1 })),
44
- reasoningEffort: Type.Optional(StringEnum(["low", "medium", "high", "xhigh", "max"] as const)),
44
+ reasoningEffort: Type.Optional(StringEnum(["low", "medium", "high", "xhigh", "max", "ultra"] as const)),
45
45
  sessionId: Type.Optional(Type.String()),
46
46
  includeDirs: Type.Optional(relativeDirs),
47
47
  preferred: Type.Optional(Type.Boolean()),
@@ -84,7 +84,7 @@ const DEFAULTS_PATH = join(SCRIPT_DIR, "..", "codex-pair-defaults.json");
84
84
  // without duplicating literals across files. A structural test links the
85
85
  // JSON values to constants.ts so drift fails CI. If the file is missing or
86
86
  // malformed, fall through to env vars and hardcoded literals.
87
- let CODEX_PAIR_DEFAULTS = { model: "gpt-5.6-sol", fallbackModel: "gpt-5.6-terra" };
87
+ let CODEX_PAIR_DEFAULTS = { model: "gpt-6-sol", fallbackModel: "gpt-5.6-terra" };
88
88
  try {
89
89
  CODEX_PAIR_DEFAULTS = JSON.parse(readFileSync(DEFAULTS_PATH, "utf8"));
90
90
  } catch {
@@ -98,7 +98,7 @@ const MARKER_FILE = join(PAIR_ROOT_DIR, CONTEXT_FILENAME);
98
98
  const WATCHED_TOOLS = new Set(["Edit", "Write", "MultiEdit"]);
99
99
  const DEFAULT_MODEL = process.env.ASK_CODEX_MODEL ?? CODEX_PAIR_DEFAULTS.model;
100
100
  const FALLBACK_MODEL = process.env.ASK_CODEX_FALLBACK_MODEL ?? CODEX_PAIR_DEFAULTS.fallbackModel;
101
- const CODEX_REASONING_EFFORTS = new Set(["low", "medium", "high", "xhigh", "max"]);
101
+ const CODEX_REASONING_EFFORTS = new Set(["low", "medium", "high", "xhigh", "max", "ultra"]);
102
102
  const configuredReasoningEffort = process.env.ASK_CODEX_REASONING_EFFORT;
103
103
  const DEFAULT_REASONING_EFFORT = CODEX_REASONING_EFFORTS.has(configuredReasoningEffort)
104
104
  ? configuredReasoningEffort
@@ -833,6 +833,7 @@ async function runWithBroker({ prompt, timeoutMs, model, markerDir }) {
833
833
  baseInstructions: "",
834
834
  prompt,
835
835
  model,
836
+ effort: DEFAULT_REASONING_EFFORT,
836
837
  timeoutMs,
837
838
  });
838
839
  } finally {
@@ -7,9 +7,18 @@ import { prepareCommandInvocation } from "./lib/process.mjs";
7
7
 
8
8
  export const ASK_CODEX_PACKAGE = "@ask-llm/codex-mcp";
9
9
  export const ASK_CODEX_TOOL = "ask-codex";
10
- export const SOL_MODEL = "gpt-5.6-sol";
10
+ export const ASK_LLM_PACKAGE = "@ask-llm/mcp";
11
+ export const ASK_LLM_TOOL = "ask-llm";
12
+ export const UNIFIED_CODEX_OPTION_KEYS = ["reasoningEffort", "includeDirs", "preferred", "sandbox"];
13
+ export const SOL_MODEL = "gpt-6-sol";
11
14
  export const TERRA_MODEL = "gpt-5.6-terra";
12
15
 
16
+ const MISSING_REGISTRATION_REMEDIATION =
17
+ "Run `claude mcp add --scope user ask-llm -- npx -y @ask-llm/mcp`, fully restart Claude Code, then verify with `/mcp`. Split Codex remains an advanced optimization: `claude mcp add --scope user codex -- npx -y @ask-llm/codex-mcp`.";
18
+ const SERVICE_REMEDIATION = "Run `npx -y @ask-llm/mcp doctor`, inspect `/mcp`, then fully restart Claude Code.";
19
+ const UPGRADE_UNIFIED_REMEDIATION =
20
+ "Upgrade `@ask-llm/mcp` with `npx -y @ask-llm/mcp@latest` or `npm install -g @ask-llm/mcp`, fully restart Claude Code, then verify with `/mcp`.";
21
+
13
22
  const scriptPath = fileURLToPath(import.meta.url);
14
23
  const quotaSignals = [
15
24
  "rate_limit_exceeded",
@@ -38,6 +47,29 @@ export function isAskCodexRegistration(server) {
38
47
  );
39
48
  }
40
49
 
50
+ export function isAskLlmToolName(name) {
51
+ return name === ASK_LLM_TOOL || /^mcp__.+__ask-llm$/.test(name);
52
+ }
53
+
54
+ export function isAskLlmRegistration(server) {
55
+ if (!server || typeof server !== "object") return false;
56
+ const command = typeof server.command === "string" ? server.command : "";
57
+ const args = Array.isArray(server.args) ? server.args.filter((arg) => typeof arg === "string") : [];
58
+ const commandLine = typeof server.commandLine === "string" ? server.commandLine : "";
59
+ return (
60
+ /(?:^|[/\\])ask-llm-mcp(?:\.cmd|\.exe)?$/.test(command) ||
61
+ args.includes(ASK_LLM_PACKAGE) ||
62
+ /(?:^|\s)@ask-llm\/mcp(?:@[^\s]+)?(?:\s|$)/.test(commandLine) ||
63
+ /(?:^|[/\\])ask-llm-mcp(?:\.cmd|\.exe)?(?:\s|$)/.test(commandLine)
64
+ );
65
+ }
66
+
67
+ export function unifiedSchemaHonorsCodexOptions(schema) {
68
+ const properties = schema?.properties;
69
+ if (!properties || typeof properties !== "object") return false;
70
+ return UNIFIED_CODEX_OPTION_KEYS.every((key) => Object.hasOwn(properties, key));
71
+ }
72
+
41
73
  export function parseClaudeMcpList(output) {
42
74
  const servers = {};
43
75
  for (const line of output.split(/\r?\n/)) {
@@ -77,8 +109,8 @@ export function readActiveMcpServers({
77
109
  return parseClaudeMcpList(result.stdout || "");
78
110
  }
79
111
 
80
- function expectedToolName(serverName) {
81
- return `mcp__${serverName.replaceAll(":", "_")}__${ASK_CODEX_TOOL}`;
112
+ function expectedToolName(serverName, tool = ASK_CODEX_TOOL) {
113
+ return `mcp__${serverName.replaceAll(":", "_")}__${tool}`;
82
114
  }
83
115
 
84
116
  function isAvailableMcpServer(server) {
@@ -86,12 +118,34 @@ function isAvailableMcpServer(server) {
86
118
  return !status || /^✔\s*Connected\b/i.test(status) || /^cached\b.*\bconnects on first use\b/i.test(status);
87
119
  }
88
120
 
121
+ function withCliFallback({ state, reason, remediation, cliPath }) {
122
+ if (!cliPath) {
123
+ return {
124
+ state,
125
+ transport: null,
126
+ toolName: null,
127
+ diagnostic: `${reason} The explicit CLI fallback is also unavailable.`,
128
+ remediation: `${remediation} Install the fallback with \`npm install -g @openai/codex\` if needed.`,
129
+ fallbackDisclosure: null,
130
+ };
131
+ }
132
+ return {
133
+ state,
134
+ transport: "cli",
135
+ toolName: null,
136
+ diagnostic: reason,
137
+ remediation,
138
+ fallbackDisclosure: `Transport disclosure: ${reason} Running the review through the explicit \`codex exec\` CLI fallback; validated findings will be relayed unchanged.`,
139
+ };
140
+ }
141
+
89
142
  export function classifySolReviewTransport({
90
143
  availableTools = [],
91
144
  mcpServers = {},
92
145
  cliPath = "",
93
146
  inventoryError = null,
94
147
  mcpFailed = false,
148
+ toolSchemas = {},
95
149
  }) {
96
150
  if (inventoryError) {
97
151
  const reason = `Ask LLM Codex MCP availability could not be determined because the active Claude MCP inventory could not be inspected: ${inventoryError}`;
@@ -116,28 +170,60 @@ export function classifySolReviewTransport({
116
170
  };
117
171
  }
118
172
 
119
- const registrations = Object.entries(mcpServers).filter(([, server]) => isAskCodexRegistration(server));
120
- const availableRegistrations = registrations.filter(([, server]) => isAvailableMcpServer(server));
121
- const registeredToolNames = new Set(availableRegistrations.map(([name]) => expectedToolName(name)));
122
- const toolName = availableTools.find((name) => isAskCodexToolName(name) && registeredToolNames.has(name));
123
- if (toolName && !mcpFailed) {
173
+ const codexRegistrations = Object.entries(mcpServers).filter(([, server]) => isAskCodexRegistration(server));
174
+ const availableCodexRegistrations = codexRegistrations.filter(([, server]) => isAvailableMcpServer(server));
175
+ const registeredCodexToolNames = new Set(
176
+ availableCodexRegistrations.map(([name]) => expectedToolName(name, ASK_CODEX_TOOL)),
177
+ );
178
+ const askCodexToolName = availableTools.find(
179
+ (name) => isAskCodexToolName(name) && registeredCodexToolNames.has(name),
180
+ );
181
+ if (askCodexToolName && !mcpFailed) {
124
182
  return {
125
183
  state: "preferred",
126
184
  transport: "mcp",
127
- toolName,
128
- diagnostic: `Ask LLM Codex transport available as ${toolName}.`,
185
+ toolName: askCodexToolName,
186
+ diagnostic: `Ask LLM Codex transport available as ${askCodexToolName}.`,
187
+ remediation: null,
188
+ fallbackDisclosure: null,
189
+ };
190
+ }
191
+
192
+ const unifiedRegistrations = Object.entries(mcpServers).filter(([, server]) => isAskLlmRegistration(server));
193
+ const availableUnifiedRegistrations = unifiedRegistrations.filter(([, server]) => isAvailableMcpServer(server));
194
+ const registeredUnifiedToolNames = new Set(
195
+ availableUnifiedRegistrations.map(([name]) => expectedToolName(name, ASK_LLM_TOOL)),
196
+ );
197
+ const askLlmToolName = availableTools.find((name) => isAskLlmToolName(name) && registeredUnifiedToolNames.has(name));
198
+ if (askLlmToolName && !mcpFailed) {
199
+ const schema = toolSchemas[askLlmToolName];
200
+ if (!unifiedSchemaHonorsCodexOptions(schema)) {
201
+ const schemaMissing = !schema;
202
+ return withCliFallback({
203
+ state: "unsupported-schema",
204
+ reason: schemaMissing
205
+ ? "Ask LLM unified MCP is registered, but its `ask-llm` schema was not provided so Codex options (reasoningEffort, includeDirs, preferred, sandbox) cannot be verified. Pass `--tool-schema` with the advertised input JSON schema; never omit those fields to make the call succeed."
206
+ : "Ask LLM unified MCP is registered, but its `ask-llm` schema cannot honor Codex options (reasoningEffort, includeDirs, preferred, sandbox). Upgrade `@ask-llm/mcp`; never omit those fields to make the call succeed.",
207
+ remediation: UPGRADE_UNIFIED_REMEDIATION,
208
+ cliPath,
209
+ });
210
+ }
211
+ return {
212
+ state: "unified",
213
+ transport: "mcp",
214
+ toolName: askLlmToolName,
215
+ diagnostic: `Ask LLM unified transport available as ${askLlmToolName}. Call it with provider "codex" and pass reasoningEffort, includeDirs, preferred, and sandbox; do not strip unsupported fields.`,
129
216
  remediation: null,
130
217
  fallbackDisclosure: null,
131
218
  };
132
219
  }
133
220
 
134
- const registered = registrations.length > 0;
221
+ const registered = codexRegistrations.length > 0 || unifiedRegistrations.length > 0;
135
222
  const state = registered || mcpFailed ? "unavailable" : "missing-registration";
136
- const remediation =
137
- registered || mcpFailed
138
- ? "Run `npx -y @ask-llm/mcp doctor`, inspect `/mcp`, then fully restart Claude Code."
139
- : "Run `claude mcp add --scope user codex -- npx -y @ask-llm/codex-mcp`, fully restart Claude Code, then verify with `/mcp`.";
140
- const unavailableRegistration = registrations.find(([, server]) => !isAvailableMcpServer(server));
223
+ const remediation = registered || mcpFailed ? SERVICE_REMEDIATION : MISSING_REGISTRATION_REMEDIATION;
224
+ const unavailableRegistration =
225
+ codexRegistrations.find(([, server]) => !isAvailableMcpServer(server)) ||
226
+ unifiedRegistrations.find(([, server]) => !isAvailableMcpServer(server));
141
227
  const reason = mcpFailed
142
228
  ? "Ask LLM Codex MCP invocation failed in this session, so the preferred transport is unavailable."
143
229
  : unavailableRegistration
@@ -146,25 +232,7 @@ export function classifySolReviewTransport({
146
232
  ? "Ask LLM Codex MCP is registered, but its `ask-codex` tool is unavailable in this session."
147
233
  : "Ask LLM Codex MCP registration is missing from this Claude Code installation.";
148
234
 
149
- if (!cliPath) {
150
- return {
151
- state,
152
- transport: null,
153
- toolName: null,
154
- diagnostic: `${reason} The explicit CLI fallback is also unavailable.`,
155
- remediation: `${remediation} Install the fallback with \`npm install -g @openai/codex\` if needed.`,
156
- fallbackDisclosure: null,
157
- };
158
- }
159
-
160
- return {
161
- state,
162
- transport: "cli",
163
- toolName: null,
164
- diagnostic: reason,
165
- remediation,
166
- fallbackDisclosure: `Transport disclosure: ${reason} Running the review through the explicit \`codex exec\` CLI fallback; validated findings will be relayed unchanged.`,
167
- };
235
+ return withCliFallback({ state, reason, remediation, cliPath });
168
236
  }
169
237
 
170
238
  export function codexFallbackArgs(model) {
@@ -255,6 +323,7 @@ function parseArgs(args) {
255
323
  mcpList: null,
256
324
  fallback: false,
257
325
  mcpFailed: false,
326
+ toolSchema: null,
258
327
  claudeContextArgs: [],
259
328
  };
260
329
  const claudeContextValueFlags = new Set(["--plugin-dir", "--mcp-config", "--settings", "--setting-sources"]);
@@ -265,7 +334,14 @@ function parseArgs(args) {
265
334
  else if (arg === "--tool") parsed.tools.push(args[++index] ?? "");
266
335
  else if (arg === "--cli-path") parsed.cliPath = args[++index] ?? "";
267
336
  else if (arg === "--mcp-list") parsed.mcpList = args[++index] ?? "";
268
- else if (arg === "--strict-mcp-config") parsed.claudeContextArgs.push(arg);
337
+ else if (arg === "--tool-schema") {
338
+ const raw = args[++index] ?? "";
339
+ try {
340
+ parsed.toolSchema = JSON.parse(raw);
341
+ } catch {
342
+ throw new Error("Invalid --tool-schema JSON");
343
+ }
344
+ } else if (arg === "--strict-mcp-config") parsed.claudeContextArgs.push(arg);
269
345
  else if (claudeContextValueFlags.has(arg)) {
270
346
  const value = args[++index];
271
347
  if (value === undefined) throw new Error(`Missing value for ${arg}`);
@@ -295,12 +371,17 @@ function readMcpServers(parsed) {
295
371
  async function main() {
296
372
  const parsed = parseArgs(process.argv.slice(2));
297
373
  const { mcpServers, inventoryError } = readMcpServers(parsed);
374
+ const toolSchemas = {};
375
+ if (parsed.toolSchema) {
376
+ for (const name of parsed.tools) toolSchemas[name] = parsed.toolSchema;
377
+ }
298
378
  const decision = classifySolReviewTransport({
299
379
  availableTools: parsed.tools,
300
380
  mcpServers,
301
381
  cliPath: parsed.cliPath,
302
382
  inventoryError,
303
383
  mcpFailed: parsed.mcpFailed,
384
+ toolSchemas,
304
385
  });
305
386
 
306
387
  if (parsed.fallback) {
@@ -6,7 +6,7 @@ description: Send a topic to an explicit multi-model panel, then synthesize find
6
6
  <!-- PORTABLE-CONTRACT:START -->
7
7
  ## Portable contract
8
8
 
9
- For the standard workflow, the current host model records an independent analysis before seeing external answers, then sends the same bounded topic and Context Brief concurrently to the selected providers. For the exact Grok + GPT-5.6 Sol workflow, the host is a non-voting evidence verifier/synthesizer: the brainstorming panel has exactly those two requested participants. Cross-check source where possible and synthesize consensus, unique insights, contradictions, rejected false positives, failures, and confidence. Keep provider, harness, requested model ID, independently observed served model ID, and Cursor's reported display label separate. Only direct xAI API / Grok CLI routes can report a served ID, and only when the provider/CLI payload actually carries one; a disclosed same-product alias/snapshot resolution (for example `grok-4.6` or `grok-4-latest` served as a dated `grok-4-<snapshot>`) stays eligible, while a different model is a mismatch and ineligible. A direct route whose payload omits the model stays selected-only. Cursor Agent and Codex CLI echo the requested ID, so that attribution is selected-only and unverifiable—never call a requested or selected ID the actual model. Never select Cursor Auto, infer a requested ID from a display label, silently change a model, or pivot to another harness/provider.
9
+ For the standard workflow, the current host model records an independent analysis before seeing external answers, then sends the same bounded topic and Context Brief concurrently to the selected providers. For the exact Grok + GPT-6 Sol workflow, the host is a non-voting evidence verifier/synthesizer: the brainstorming panel has exactly those two requested participants. Cross-check source where possible and synthesize consensus, unique insights, contradictions, rejected false positives, failures, and confidence. Keep provider, harness, requested model ID, independently observed served model ID, and Cursor's reported display label separate. Only direct xAI API / Grok CLI routes can report a served ID, and only when the provider/CLI payload actually carries one; a disclosed same-product alias/snapshot resolution (for example `grok-4.7` served as a dated `grok-4.7-<snapshot>`, or `grok-4-latest` served as `grok-4-<snapshot>`) stays eligible, while a different model is a mismatch and ineligible. A direct route whose payload omits the model stays selected-only. Cursor Agent and Codex CLI echo the requested ID, so that attribution is selected-only and unverifiable—never call a requested or selected ID the actual model. Never select Cursor Auto, infer a requested ID from a display label, silently change a model, or pivot to another harness/provider.
10
10
  <!-- PORTABLE-CONTRACT:END -->
11
11
 
12
12
  ## Host adapters
@@ -15,8 +15,8 @@ For the standard workflow, the current host model records an independent analysi
15
15
 
16
16
  The current Pi host model completes its independent evidence memo first. Standard provider lists use native `ask-multi`. A routed participant uses the matching native tool instead: `provider@cursor-agent:model` calls `ask-cursor-agent` with separate `provider` and exact `model`; direct Grok calls `ask-grok` with the explicit `harness` and exact model. A participant list mixing routed `provider@harness:exact-model-id` entries with bare provider names is refused before any tool call; nothing is dispatched or substituted. For the exact Grok + Sol panel, issue only these two consultations (concurrently when the host supports it):
17
17
 
18
- - `ask-cursor-agent({ provider: "grok", model: "cursor-grok-4.6-high", prompt })`
19
- - `ask-cursor-agent({ provider: "codex", model: "gpt-5.6-sol-high", prompt })`
18
+ - `ask-cursor-agent({ provider: "grok", model: "grok-4.7-high", prompt })`
19
+ - `ask-cursor-agent({ provider: "codex", model: "gpt-6-sol-high", prompt })`
20
20
 
21
21
  Do not call `ask-multi` for that panel because it cannot express Cursor harness identity, and do not call Gemini. Treat the host memo as non-voting verification evidence, not a third panel answer. If either participant fails, label the run partial and do not claim two-model consensus.
22
22
 
@@ -38,19 +38,19 @@ Consult an explicitly selected panel on a topic, then synthesize the responses a
38
38
  - Bare `grok` retains the existing direct canonical runner and its explicit `ASK_GROK_HARNESS` selection (`xai-api` default or `grok-cli`) for compatibility. That direct route never falls back.
39
39
  - Preferred explicit syntax is `provider@harness:exact-model-id`. Supported routed participants are:
40
40
  - `grok@cursor-agent:<exact ID from agent --list-models>` (preferred Grok route)
41
- - `codex@cursor-agent:<exact GPT-5.6 Sol ID from agent --list-models>`
41
+ - `codex@cursor-agent:<exact GPT-6 Sol ID from agent --list-models>`
42
42
  - `grok@grok-cli:<exact ID from grok models>` (explicit Grok Build alternative)
43
43
  - `grok@xai-api:<exact ID from GET /v1/models>`
44
- - `codex@codex-cli:gpt-5.6-sol` (explicit direct Codex alternative; any reported fallback makes the exact panel partial)
44
+ - `codex@codex-cli:gpt-6-sol` (explicit direct Codex alternative; any reported fallback makes the exact panel partial)
45
45
  - Never accept `Auto`, map a display label to an ID, or substitute a route. A missing registration/harness, unavailable model, auth failure, or unsupported provider/harness pair is a participant failure with its actionable error preserved.
46
- - A participant list must be either all bare provider names or all routed `provider@harness:exact-model-id` specs. A mixed list (for example `grok@cursor-agent:cursor-grok-4.6-high,antigravity`) is refused before any dispatch with the "Mixed brainstorm participant lists are not supported" error; no participant is rerouted to a bare runner, substituted, or dispatched. Generalized mixed panels are deferred to a future ADR.
46
+ - A participant list must be either all bare provider names or all routed `provider@harness:exact-model-id` specs. A mixed list (for example `grok@cursor-agent:grok-4.7-high,antigravity`) is refused before any dispatch with the "Mixed brainstorm participant lists are not supported" error; no participant is rerouted to a bare runner, substituted, or dispatched. Generalized mixed panels are deferred to a future ADR.
47
47
  - Everything after the participant list is the topic.
48
48
  - In standard mode, Claude Opus remains a participant. In the exact Grok + Sol mode below, Claude is only the non-voting evidence verifier/synthesizer so the panel has exactly two participants.
49
49
 
50
- **Architect workflow — exactly Grok + GPT-5.6 Sol, no Gemini:**
50
+ **Architect workflow — exactly Grok + GPT-6 Sol, no Gemini:**
51
51
 
52
52
  ```text
53
- /brainstorm grok@cursor-agent:cursor-grok-4.6-high,codex@cursor-agent:gpt-5.6-sol-high "review this architecture"
53
+ /brainstorm grok@cursor-agent:grok-4.7-high,codex@cursor-agent:gpt-6-sol-high "review this architecture"
54
54
  ```
55
55
 
56
56
  These IDs are exact catalog examples verified for this workflow; account catalogs can change, so use `agent --list-models` and replace an unavailable ID explicitly. The coordinator must not call Gemini, the direct Grok runner, xAI API, Grok Build, or Codex CLI for this invocation.
@@ -58,7 +58,7 @@ These IDs are exact catalog examples verified for this workflow; account catalog
58
58
  **Explicit Grok Build alternative (still no Gemini):**
59
59
 
60
60
  ```text
61
- /brainstorm grok@grok-cli:grok-build,codex@cursor-agent:gpt-5.6-sol-high "review this architecture"
61
+ /brainstorm grok@grok-cli:grok-4.7,codex@cursor-agent:gpt-6-sol-high "review this architecture"
62
62
  ```
63
63
 
64
64
  This route is valid only when the installed Grok Build contract supports Ask LLM's headless JSON/read-only flags. Failure is terminal for the Grok participant; do not pivot to Cursor or xAI.
@@ -38,7 +38,7 @@ Codex's `image_generation` tool selects the image model server-side; as of 2026-
38
38
 
39
39
  - `codex-cli` >= 0.125.0 installed and authenticated
40
40
  - `image_generation` feature flag enabled (default: stable + true). Verify with `codex features list | grep image_generation`
41
- - The `ask-codex` MCP tool available (from `@ask-llm/codex-mcp` or the `@ask-llm/mcp` orchestrator)
41
+ - The `ask-codex` MCP tool available (from `@ask-llm/codex-mcp`) or the unified `mcp__ask-llm__ask-llm` tool (from `@ask-llm/mcp`) whose schema includes `sandbox`
42
42
 
43
43
  ## Instructions
44
44
 
@@ -65,9 +65,9 @@ Example slug derivation:
65
65
  - "Generate an image of a dark terminal with two reviewers" → `dark-terminal-with-two-reviewers.png`
66
66
  - "Make me a cat picture" → `cat-picture.png`
67
67
 
68
- ### Phase 3: Dispatch to ask-codex
68
+ ### Phase 3: Dispatch to Codex
69
69
 
70
- Call the `ask-codex` MCP tool (NOT raw `codex exec` — that bypasses ADR-044 quota fallback, ADR-042 stdin handling, and ADR-047 PATH resolution). Use this prompt template:
70
+ Call an exact `ask-codex` leaf when exposed (NOT raw `codex exec` — that bypasses ADR-044 quota fallback, ADR-042 stdin handling, and ADR-047 PATH resolution). If only unified `mcp__ask-llm__ask-llm` is exposed, use that instead with `provider: "codex"`. If the unified schema lacks `sandbox`, stop and tell the user to upgrade `@ask-llm/mcp` (`npx -y @ask-llm/mcp@latest` or `npm install -g @ask-llm/mcp`); do not omit `sandbox` to make the call succeed. Use this prompt template:
71
71
 
72
72
  ```
73
73
  Use your image_generation tool to create the following image and save it as a PNG file.
@@ -80,9 +80,9 @@ Save the file to this absolute path: <path from Phase 2>
80
80
  After saving, confirm the absolute path of the created file and its byte size in your reply. If image_generation fails or the file cannot be written, explain what went wrong and do not invent a fake path.
81
81
  ```
82
82
 
83
- **Sandbox:** pass `sandbox: "workspace-write"` on this `ask-codex` call. `ask-codex` defaults to the read-only review sandbox (ADR-136), under which Codex cannot write the PNG to disk; image generation is the sanctioned exception that needs Codex to write the output file itself.
83
+ **Sandbox:** pass `sandbox: "workspace-write"` on this `ask-codex` or fully pinned `ask-llm({ provider: "codex", ... })` call. Codex defaults to the read-only review sandbox (ADR-136), under which it cannot write the PNG to disk; image generation is the sanctioned exception that needs Codex to write the output file itself. The unified server will not silently strip `sandbox`; an older `@ask-llm/mcp` that cannot honor it must fail closed.
84
84
 
85
- **Default model:** let `ask-codex` use its default (`gpt-5.6-sol`). The image_generation tool is invoked by the model regardless of which Codex chat model is selected — model selection here is about the orchestrating agent, not the image model itself.
85
+ **Default model:** let `ask-codex` use its default (`gpt-6-astra`). The image_generation tool is invoked by the model regardless of which Codex chat model is selected — model selection here is about the orchestrating agent, not the image model itself.
86
86
 
87
87
  **Wall time expectation:** with gpt-image-2, simple images typically render in **under a minute** end-to-end; complex prompts or high-resolution (up to 4K) renders can take a **few minutes** because gpt-image-2's thinking mode plans layout and self-checks before generating. This is normal; do not retry assuming a hang. The first call in a session is slowest because the image_generation tool definitions aren't cached yet; subsequent calls in the same session are faster (Codex CLI prompt-caches aggressively).
88
88
 
@@ -113,7 +113,7 @@ Phase 3 — `ask-codex` is called with the prompt template above.
113
113
 
114
114
  Phase 4 — `ls -la /tmp/codex-images/2026-04-24/cat-reading-a-book.png` shows a 248KB file. Skill returns:
115
115
 
116
- > Generated **/tmp/codex-images/2026-04-24/cat-reading-a-book.png** (248 KB) via gpt-image-2. Used Codex (gpt-5.6-sol) as orchestrator. Refined prompt: *minimalist illustration of a cat reading a book, flat vector style, two-tone palette, no human figures, square framing, transparent background*. Reading inline below.
116
+ > Generated **/tmp/codex-images/2026-04-24/cat-reading-a-book.png** (248 KB) via gpt-image-2. Used Codex (gpt-6-sol) as orchestrator. Refined prompt: *minimalist illustration of a cat reading a book, flat vector style, two-tone palette, no human figures, square framing, transparent background*. Reading inline below.
117
117
 
118
118
  [image renders]
119
119
 
@@ -19,12 +19,12 @@ Pi requires project trust, this repository marker, and explicit user-owned allow
19
19
 
20
20
  Cursor discovers this `SKILL.md` through its supported Agent Skills surface; `/codex-pair` attaches it as an explicit command. Do **not** use Claude Code's `PostToolUse`, `Stop`, `SessionStart`, `SessionEnd`, `CLAUDE_PLUGIN_ROOT`, `AskUserQuestion`, or plugin tool namespaces. This adapter is an on-demand iterative pairing session, not a claim that Claude hooks were registered in Cursor.
21
21
 
22
- 1. Read `../pairing-contract.md`. The Cursor plugin bundle registers only the unified `ask-llm` server; if the user separately installed `@ask-llm/codex-mcp`, prefer that deterministic `ask-codex` leaf. Resolve an exposed MCP tool whose exact leaf is `ask-codex`; do not assume its server prefix. When only the unified `ask-llm` leaf is registered, it may serve as the transport with `provider: "codex"` and every option (model, reasoning effort, include directories, session) pinned explicitly; its schema rejects unsupported combinations instead of stripping them and Codex runs read-only by default. Never make an unpinned generic call. If neither tool is exposed, stop with the recommended user-installed unified server:
22
+ 1. Read `../pairing-contract.md`. The Cursor plugin bundle registers only the unified `ask-llm` server; if the user separately installed `@ask-llm/codex-mcp`, prefer that deterministic `ask-codex` leaf. Resolve an exposed MCP tool whose exact leaf is `ask-codex`; do not assume its server prefix. When only the unified `ask-llm` leaf is registered, it may serve as the transport with `provider: "codex"` and every option (model, reasoning effort, include directories, sandbox, session) pinned explicitly; its schema rejects unsupported combinations instead of stripping them. Inspect the advertised schema before the first call: if `sandbox` or another required Codex option is missing, stop and upgrade `@ask-llm/mcp` rather than omitting the field. Never make an unpinned generic call. If neither tool is exposed, stop with the recommended user-installed unified server:
23
23
  ```json
24
24
  {"mcpServers":{"ask-llm":{"command":"npx","args":["-y","@ask-llm/mcp"]}}}
25
25
  ```
26
26
  Save that as project `.cursor/mcp.json` or user `~/.cursor/mcp.json`, ensure `codex` is authenticated, reload the server from Cursor Settings → Tools & MCP or restart Cursor Agent, and invoke `/codex-pair` again. A split `codex` entry using `@ask-llm/codex-mcp` is an explicit user-installed alternative when only the `ask-codex` leaf is desired; keep one registration per server (the plugin already provides `ask-llm`, so do not add a second `ask-llm` entry merely to duplicate it).
27
- 2. Require both `model=<exact ID>` and `effort=low|medium|high|xhigh|max`; parse optional `include=dir1,dir2`. If model or effort is omitted, ask the user to choose it and stop before reading extra context, requesting consent, or calling a provider. Do not infer either value from the Cursor host environment: the MCP server may resolve different `ASK_CODEX_MODEL` or `ASK_CODEX_REASONING_EFFORT` values. Reject absolute, `..`, and `~` include paths; cap at 32. Build a bounded context manifest (20 KB/file, 100 KB/request) from task requirements, relevant project instructions, changed files, and tests. Do not send secrets or unrelated files.
27
+ 2. Require both `model=<exact ID>` and `effort=low|medium|high|xhigh|max|ultra`; parse optional `include=dir1,dir2`. If model or effort is omitted, ask the user to confirm the pair defaults `model=gpt-6-sol` and `effort=medium`, then stop before reading extra context, requesting consent, or calling a provider. Do not infer either value from the Cursor host environment: the MCP server may resolve different `ASK_CODEX_MODEL` or `ASK_CODEX_REASONING_EFFORT` values. Reject absolute, `..`, and `~` include paths; cap at 32. Build a bounded context manifest (20 KB/file, 100 KB/request) from task requirements, relevant project instructions, changed files, and tests. Do not send secrets or unrelated files.
28
28
  3. Before the first provider call, show host=`Cursor Agent`, reviewer provider=`codex`, selected transport=`ask-codex` or unified `ask-llm`, exact user-supplied model, exact user-supplied reasoning effort, include directories, read-only behavior, data/quota boundary, and fresh persisted-session intent. Ask for explicit confirmation using Cursor's normal conversational approval surface. Refusal ends `cancelled` with no provider call.
29
29
  4. First call exactly one of these protocol shapes, substituting the already disclosed explicit choices:
30
30
  ```json
@@ -48,13 +48,14 @@ Cursor discovers this `SKILL.md` through its supported Agent Skills surface; `/c
48
48
  "model": "<required exact ID>",
49
49
  "reasoningEffort": "<required effort>",
50
50
  "includeDirs": ["<validated relative directory>"],
51
- "sessionId": ""
51
+ "sessionId": "",
52
+ "sandbox": "read-only"
52
53
  }
53
54
  }
54
55
  ]
55
56
  ```
56
57
  The prompt assigns Codex the independent reviewer role and requests actionable severity/file/line evidence. Capture the returned structured `sessionId`/Thread ID and actual model. Relay feedback before changing code; verify every finding against source and label it accepted, rejected, or deferred.
57
- 5. At meaningful checkpoints, call the same tool with the captured `sessionId`, same model/effort, and bounded delta. On `ask-codex`, keep `sandbox: "read-only"`; unified `ask-llm` has no sandbox input and is read-only by default, so do not send an unsupported sandbox field. Omit `includeDirs` on resumed calls because `codex exec resume` does not support them (every Codex transport — split `ask-codex`, unified `ask-llm`, and Pi — rejects that combination at the shared executor instead of dropping the directories); never silently strip them from the first call. If no session ID was returned, stop with a session diagnostic instead of pretending continuity.
58
+ 5. At meaningful checkpoints, call the same tool with the captured `sessionId`, same model/effort, and bounded delta. Keep `sandbox: "read-only"` on both `ask-codex` and unified `ask-llm`. If the unified schema lacks `sandbox`, stop and upgrade `@ask-llm/mcp` rather than omitting it. Omit `includeDirs` on resumed calls because `codex exec resume` does not support them (every Codex transport — split `ask-codex`, unified `ask-llm`, and Pi — rejects that combination at the shared executor instead of dropping the directories); never silently strip them from the first call. If no session ID was returned, stop with a session diagnostic instead of pretending continuity.
58
59
  6. A Cursor interrupt cancels the MCP request. Report `cancelled` and never retry another tool/model/provider. Preserve earlier feedback on later failure and report `failed (partial)`. On success report `completed` with host, provider, requested/actual model, effort, session reuse count, context/include directories, accepted/rejected/deferred actions, and any reported Codex quota fallback. Never conceal fallback or rewrite a model.
59
60
 
60
61
  <!-- HOST-ADAPTER:CLAUDE-CODE:START -->
@@ -195,7 +196,8 @@ Render a status table:
195
196
  codex-pair status — <MARKER_DIR>
196
197
 
197
198
  State: ACTIVE ✓
198
- Marker model: <model from frontmatter of context.md, or "default (gpt-5.6-sol)">
199
+ Marker model: <model from frontmatter of context.md, or "default (gpt-6-sol)">
200
+ Reasoning effort: medium (override with ASK_CODEX_REASONING_EFFORT)
199
201
  Surface threshold: <surfaceThreshold from frontmatter, or "med">
200
202
  Cost/review: varies by Codex plan and workload / ~13–50s wall-clock
201
203
 
@@ -302,7 +304,7 @@ Claude edits src/billing/charge.ts
302
304
 
303
305
  ## Cost characteristics
304
306
 
305
- - Usage varies by Codex plan and workload (`gpt-5.6-sol` with reasoning tokens)
307
+ - Usage varies by Codex plan and workload (`gpt-6-sol` with reasoning tokens)
306
308
  - ~13–50s per file wall-clock
307
309
  - Files >20 KB skipped (override with `CODEX_PAIR_MAX_FILE_BYTES`)
308
310
  - node_modules, dist, lockfiles, images skipped automatically
@@ -47,6 +47,6 @@ For **recall-first** review on hot-path code (money handling, security paths, sp
47
47
 
48
48
  2. If the diff is empty, inform the user there are no changes to review.
49
49
 
50
- 3. Launch the `codex-reviewer` agent with the diff content. The agent handles the Codex prompt structure and output formatting, using GPT-5.6 Sol at `high` reasoning effort with automatic Terra fallback.
50
+ 3. Launch the `codex-reviewer` agent with the diff content. The agent handles the Codex prompt structure and output formatting, using GPT-6 Astra at `high` reasoning effort with automatic Terra fallback.
51
51
 
52
52
  <!-- HOST-ADAPTER:CLAUDE-CODE:END -->
@@ -35,9 +35,9 @@ Run an iterative pair-programming session in which Claude remains the sole edito
35
35
  Accept optional command text in this form (ask for any missing choice):
36
36
 
37
37
  ```text
38
- /grok-pair route=cursor-agent model=cursor-grok-4.6-high include=packages/api,packages/shared <task>
39
- /grok-pair route=xai-api model=grok-4.6 effort=xhigh <task>
40
- /grok-pair route=grok-cli model=grok-build effort=high <task>
38
+ /grok-pair route=cursor-agent model=grok-4.7-high include=packages/api,packages/shared <task>
39
+ /grok-pair route=xai-api model=grok-4.7 effort=xhigh <task>
40
+ /grok-pair route=grok-cli model=grok-4.7 effort=high <task>
41
41
  ```
42
42
 
43
43
  Supported routes:
@@ -20,7 +20,7 @@ Additional directories must be explicit relative workspace paths: no absolute pa
20
20
 
21
21
  ## Transport, options, and attribution
22
22
 
23
- Select one route before the first call and keep it immutable for the run. Resolve tools by their exact leaf capability (`ask-codex`, `ask-grok`, or `ask-cursor-agent`), not by assuming a Claude plugin namespace. The unified `ask-llm` tool is an acceptable transport only when the call pins provider, harness where applicable, exact model, reasoning effort, include directories, and session explicitly and its schema rejects unsupported combinations rather than stripping them; it is never an unpinned generic call and never a fallback for a failed split tool. A missing tool is a setup failure, never permission to use a generic call.
23
+ Select one route before the first call and keep it immutable for the run. Resolve tools by their exact leaf capability (`ask-codex`, `ask-grok`, or `ask-cursor-agent`), not by assuming a Claude plugin namespace. The unified `ask-llm` tool is an acceptable transport only when the call pins provider, harness where applicable, exact model, reasoning effort, include directories, sandbox where the route supports it, and session explicitly and its schema rejects unsupported combinations rather than stripping them; it is never an unpinned generic call and never a fallback for a failed split tool. If the advertised schema lacks a required Codex option (`reasoningEffort`, `includeDirs`, `preferred`, `sandbox`), stop and upgrade `@ask-llm/mcp` rather than omitting the field. A missing tool is a setup failure, never permission to use a generic call.
24
24
 
25
25
  Every call and final report must keep these separate:
26
26
 
@@ -1,19 +1,19 @@
1
1
  ---
2
2
  name: sol-review
3
- description: Review the current code changes specifically with OpenAI GPT-5.6 Sol. Use when the user asks for a Sol review, says "review with Sol", wants a model-pinned Codex review, or invokes /sol-review.
3
+ description: Review the current code changes specifically with OpenAI GPT-6 Sol. Use when the user asks for a Sol review, says "review with Sol", wants a model-pinned Codex review, or invokes /sol-review.
4
4
  ---
5
5
 
6
6
  <!-- PORTABLE-CONTRACT:START -->
7
7
  ## Portable contract
8
8
 
9
- Gather a bounded diff and context brief, request a read-only Codex review explicitly pinned to `gpt-5.6-sol` with `reasoningEffort: "high"`, verify findings against source, and disclose any model or transport fallback. Do not silently substitute another provider.
9
+ Gather a bounded diff and context brief, request a read-only Codex review explicitly pinned to `gpt-6-sol` with `reasoningEffort: "high"`, verify findings against source, and disclose any model or transport fallback. Do not silently substitute another provider.
10
10
  <!-- PORTABLE-CONTRACT:END -->
11
11
 
12
12
  ## Host adapters
13
13
 
14
14
  ### Pi adapter
15
15
 
16
- Call `ask-codex` with `model: "gpt-5.6-sol"`, `reasoningEffort: "high"`, and `sandbox: "read-only"`; apply only the portable contract in `../../agents/sol-reviewer.md` and disclose fallback metadata.
16
+ Call `ask-codex` with `model: "gpt-6-sol"`, `reasoningEffort: "high"`, and `sandbox: "read-only"`; apply only the portable contract in `../../agents/sol-reviewer.md` and disclose fallback metadata.
17
17
 
18
18
  <!-- HOST-ADAPTER:CLAUDE-CODE:START -->
19
19
  ### Claude Code adapter
@@ -24,7 +24,7 @@ The existing detailed workflow below is the Claude Code adapter. Its Agent, MCP,
24
24
 
25
25
  # Sol Code Review
26
26
 
27
- Run a read-only, precision-first review explicitly pinned to GPT-5.6 Sol at high reasoning effort.
27
+ Run a read-only, precision-first review explicitly pinned to GPT-6 Sol at high reasoning effort.
28
28
 
29
29
  ## Workflow
30
30
 
@@ -33,13 +33,13 @@ Run a read-only, precision-first review explicitly pinned to GPT-5.6 Sol at high
33
33
  3. If the combined diff is empty, report that there are no changes to review.
34
34
  4. Read the root and file-scoped `CLAUDE.md` files plus any ADRs cited by changed code.
35
35
  5. Preflight the transport through the shipped executable contract:
36
- - Search the current tool surface for the exact `ask-codex` leaf tool. The executable correlates its client-assigned server prefix with an active `@ask-llm/codex-mcp` registration; similarly named tools and tools from unrelated servers are not authoritative.
37
- - Run `node "${CLAUDE_PLUGIN_ROOT}/scripts/sol-review-transport.mjs" --plugin-dir "${CLAUDE_PLUGIN_ROOT}" --cli-path "$(command -v codex || true)"`, adding `--tool "<resolved tool name>"` only when the exact `ask-codex` tool resolved. Mirror any session-local `--mcp-config`, `--settings`, `--setting-sources`, and `--strict-mcp-config` flags so the nested inventory sees the same configuration as the active session.
38
- - Preserve the returned `state`, `diagnostic`, `remediation`, and `fallbackDisclosure`. The executable reads `claude mcp list` with that session context: `missing-registration` means that active inventory has no supported registration; `unavailable` means it contains the registration but the current tool surface does not expose a usable tool, reports failed health, or the MCP invocation failed; `inventory-unavailable` means the active inventory could not be inspected, so registration and service health are unknown. Do not collapse those states into a generic "no MCP" message. If `transport` is null, stop and show the executable remediation instead of launching the agent.
36
+ - Search the current tool surface for an exact `ask-codex` leaf first, then an `ask-llm` leaf. The executable correlates each client-assigned server prefix with an active `@ask-llm/codex-mcp` or `@ask-llm/mcp` registration; similarly named tools and tools from unrelated servers are not authoritative.
37
+ - Run `node "${CLAUDE_PLUGIN_ROOT}/scripts/sol-review-transport.mjs" --plugin-dir "${CLAUDE_PLUGIN_ROOT}" --cli-path "$(command -v codex || true)"`, adding `--tool "<resolved tool name>"` when an exact `ask-codex` or `ask-llm` tool resolved. For unified `ask-llm`, also pass `--tool-schema "<advertised input JSON schema>"` so a missing `reasoningEffort`/`includeDirs`/`preferred`/`sandbox` property is `unsupported-schema`, not a silent strip. Mirror any session-local `--mcp-config`, `--settings`, `--setting-sources`, and `--strict-mcp-config` flags so the nested inventory sees the same configuration as the active session.
38
+ - Preserve the returned `state`, `diagnostic`, `remediation`, and `fallbackDisclosure`. The executable reads `claude mcp list` with that session context: `preferred` is a usable `ask-codex` leaf; `unified` is a usable `mcp__ask-llm__ask-llm` (or namespaced) leaf whose advertised schema honors Codex options and that must be called with `provider: "codex"` and the complete Codex option set; `missing-registration` means that active inventory has no supported registration; `unavailable` means it contains the registration but the current tool surface does not expose a usable tool, reports failed health, or the MCP invocation failed; `unsupported-schema` means unified MCP is present but its schema was not supplied or cannot honor Codex options — pass `--tool-schema` or upgrade `@ask-llm/mcp` rather than omitting fields; `inventory-unavailable` means the active inventory could not be inspected, so registration and service health are unknown. Do not collapse those states into a generic "no MCP" message. If `transport` is null, stop and show the executable remediation instead of launching the agent.
39
39
  - Parent availability remains advisory because subagents do not always inherit the session's MCP servers. The reviewer's fallback runner re-reads the active inventory and reclassifies the absent subagent tool before executing the CLI fallback.
40
40
  6. Launch the `sol-reviewer` agent with the diff and a compact context brief containing the changed files, applicable conventions, referenced ADRs, the user's requested review focus, and the complete preflight result.
41
41
  7. Return the agent's validated findings without adding unverified issues.
42
42
 
43
- The reviewer must call `ask-codex` with `model: "gpt-5.6-sol"` and `reasoningEffort: "high"`, or use the shipped CLI fallback runner when no usable `ask-codex` MCP tool is available or its invocation fails at the transport/service boundary. That runner executes the sanctioned `codex exec -m gpt-5.6-sol -c model_reasoning_effort="high" -s read-only --ignore-user-config --ignore-rules --skip-git-repo-check` contract and relays its result unchanged. This explicit pin distinguishes `/sol-review` from `/codex-review`, which follows the configured Codex default. Both fallback kinds must be disclosed in the report: a Terra quota fallback means the requested Sol review did not complete on Sol, and a CLI transport fallback must report missing registration, registered-service unavailability, or an unreadable inventory without claiming a state that could not be determined.
43
+ The reviewer must call `ask-codex` with `model: "gpt-6-sol"`, `reasoningEffort: "high"`, and `sandbox: "read-only"`, or the unified `ask-llm` equivalent with `provider: "codex"` and those same fields, or use the shipped CLI fallback runner when no usable MCP tool is available, its schema cannot honor those options, or its invocation fails at the transport/service boundary. That runner executes the sanctioned `codex exec -m gpt-6-sol -c model_reasoning_effort="high" -s read-only --ignore-user-config --ignore-rules --skip-git-repo-check` contract and relays its result unchanged. This explicit pin distinguishes `/sol-review` from `/codex-review`, which follows the configured Codex default. Both fallback kinds must be disclosed in the report: a Terra quota fallback means the requested Sol review did not complete on Sol, and a CLI transport fallback must report missing registration, registered-service unavailability, an unsupported unified schema, or an unreadable inventory without claiming a state that could not be determined.
44
44
 
45
45
  <!-- HOST-ADAPTER:CLAUDE-CODE:END -->