ai-consultants 3.3.0 → 3.5.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.
package/.env.example CHANGED
@@ -122,32 +122,54 @@ GEMINI_TIMEOUT=180
122
122
  GEMINI_CMD=agy
123
123
  # API-mode model ID (only used when GEMINI_USE_API=true)
124
124
  GEMINI_API_MODEL=gemini-3.1-pro-preview
125
+ # Authenticated opt-ins: use Gemini 3.7 Flash (High/Low) for GEMINI_MODEL or
126
+ # gemini-3.7-flash for GEMINI_API_MODEL.
127
+ # Reasoning effort for the agy CLI. Passed as --effort <value>. Accepts only
128
+ # low|medium|high; anything else is rejected by the provider and surfaces as a
129
+ # diagnosed error (provider owns the enum — same stance as QWEN3_REASONING_EFFORT).
130
+ # GEMINI_REASONING_EFFORT=
125
131
 
126
132
  # Codex - The Pragmatist
127
- CODEX_MODEL=gpt-5.5
133
+ CODEX_MODEL=gpt-5.6-sol
128
134
  CODEX_TIMEOUT=180
129
135
  CODEX_CMD=codex
136
+ # Reasoning effort for the codex CLI (and API mode). Passed as
137
+ # -c model_reasoning_effort=<value>. The provider owns the accepted enum;
138
+ # an unsupported value is rejected rather than silently ignored.
139
+ # CODEX_REASONING_EFFORT=
130
140
 
131
141
  # Mistral Vibe - The Devil's Advocate
142
+ # API model ID. Vibe uses the separate CLI alias below. Mistral Medium 3.5,
143
+ # Large 3, and Small 4 API IDs are documented opt-ins until an API smoke passes.
132
144
  MISTRAL_MODEL=mistral-large-3
145
+ MISTRAL_CLI_MODEL=mistral-medium-3.5
146
+ # Official API opt-ins: use mistral-medium-3-5, mistral-large-2512, or
147
+ # mistral-small-2603 for MISTRAL_MODEL after an authenticated API smoke.
133
148
  MISTRAL_TIMEOUT=180
134
149
  MISTRAL_CMD=vibe
135
150
 
136
151
  # Cursor - The Integrator
137
152
  CURSOR_MODEL=composer-2.5
138
153
  CURSOR_TIMEOUT=180
139
- CURSOR_CMD=agent
154
+ CURSOR_CMD=cursor-agent
140
155
 
141
156
  # Kimi - The Eastern Sage (K3 via Kimi Code CLI)
142
157
  KIMI_MODEL=kimi-code/k3
158
+ # max_quality selects the inventory-probed kimi-code/k3-256k target.
143
159
  KIMI_TIMEOUT=180
144
160
  KIMI_CMD=kimi
145
161
 
146
162
  # Claude - The Synthesizer
147
163
  CLAUDE_MODEL=claude-opus-5 # ai-consultants:default
164
+ # Fable 5 is catalogued and priced but remains an explicit CLAUDE_MODEL opt-in
165
+ # after its local smoke timed out.
148
166
  CLAUDE_TIMEOUT=240
149
167
  CLAUDE_CMD=claude
150
168
  CLAUDE_API_MAX_TOKENS=16384
169
+ # Reasoning effort for the claude CLI (and API mode). Passed as --effort <value>.
170
+ # The provider owns the accepted enum; an unsupported value is rejected rather
171
+ # than silently ignored.
172
+ # CLAUDE_REASONING_EFFORT=
151
173
 
152
174
  # Qwen3 - The Analyst (CLI/API switchable v2.7)
153
175
  QWEN3_MODEL=qwen3.7-max
@@ -157,7 +179,7 @@ QWEN3_CMD=qwen
157
179
  # mode this is ignored (with a warning); set model.reasoningEffort in
158
180
  # ~/.qwen/settings.json instead. Accepted: none|minimal|low|medium|high|xhigh|max
159
181
  # (the provider's own enum). The valid subset depends on the model:
160
- # qwen3.8-max-preview takes all of them EXCEPT 'none' - thinking cannot be
182
+ # qwen3.8-max takes all of them EXCEPT 'none' - thinking cannot be
161
183
  # disabled on it - and defaults to xhigh. An unsupported combination is
162
184
  # rejected by the provider with a 400, not silently ignored.
163
185
  # QWEN3_REASONING_EFFORT=
@@ -172,13 +194,13 @@ QWEN3_CMD=qwen
172
194
  # =============================================================================
173
195
 
174
196
  # GLM - The Methodologist
175
- GLM_MODEL=glm-5.2
197
+ GLM_MODEL=glm-5.3
176
198
  GLM_TIMEOUT=180
177
199
  GLM_API_URL=https://api.z.ai/api/coding/paas/v4/chat/completions
178
200
 
179
201
  # Grok Build CLI + xAI API fallback - The Provocateur
180
202
  GROK_CMD=grok
181
- GROK_MODEL=grok-4.5
203
+ GROK_MODEL=grok-4.6
182
204
  GROK_TIMEOUT=180
183
205
  GROK_API_URL=https://api.x.ai/v1/chat/completions
184
206
 
@@ -190,6 +212,7 @@ DEEPSEEK_API_URL=https://api.deepseek.com/v1/chat/completions
190
212
  # MiniMax - The Pragmatic Optimizer (CLI via mmx by default, v2.21; API opt-in)
191
213
  MINIMAX_CMD=mmx
192
214
  MINIMAX_MODEL=MiniMax-M2.7
215
+ # max_quality selects the smoke-tested MiniMax-M3 target.
193
216
  MINIMAX_TIMEOUT=180
194
217
  MINIMAX_API_URL=https://api.minimax.io/v1/chat/completions
195
218
 
package/CLAUDE.md CHANGED
@@ -6,7 +6,7 @@ AI Consultants is a multi-model coverage system that queries up to 11 AI consult
6
6
 
7
7
  **Self-Exclusion**: The invoking agent is automatically excluded from the panel to prevent self-consultation. Claude Code won't query Claude, Codex CLI won't query Codex, etc.
8
8
 
9
- **Version**: 3.3.0
9
+ **Version**: 3.5.0
10
10
 
11
11
  ## Distribution
12
12
 
@@ -180,7 +180,7 @@ Functions in `lib/common.sh`:
180
180
  ### Configuration Presets
181
181
  ```bash
182
182
  # Quality Tier Presets (v2.5)
183
- ./scripts/consult_all.sh --preset max_quality "question" # 8 of 11 consultants + premium models + peer review
183
+ ./scripts/consult_all.sh --preset max_quality "question" # 8 of 11 consultants + maximum tier + peer review
184
184
  ./scripts/consult_all.sh --preset medium "question" # 4 consultants + standard models
185
185
  ./scripts/consult_all.sh --preset fast "question" # 2 consultants + economy models
186
186
 
@@ -364,13 +364,14 @@ The `doctor.sh` script now shows CLI/API mode status:
364
364
  ## v2.5 Features
365
365
 
366
366
  ### Model Quality Tiers
367
- Three tiers of models are available for each consultant, configurable via `apply_model_tier()`:
367
+ Three normal tiers plus a `maximum` tier are configurable via `apply_model_tier()`:
368
368
 
369
369
  | Tier | Description | Example Models |
370
370
  |------|-------------|----------------|
371
- | **premium** | Latest flagship models | claude-opus-5, Gemini 3.1 Pro (High), gpt-5.5 |
372
- | **standard** | Good quality at reasonable cost | claude-sonnet-4-6, Gemini 3.5 Flash (High), gpt-5.4 |
373
- | **economy** | Optimized for speed and low cost | claude-haiku-4-5, Gemini 3.5 Flash (Low), gpt-5.4-nano |
371
+ | **premium** | Latest flagship models | claude-opus-5, Gemini 3.1 Pro (High), gpt-5.6-sol |
372
+ | **maximum** | Smoke-tested separate-plan targets used by max_quality | K3-256k, Qwen3.8-Max, MiniMax M3 |
373
+ | **standard** | Good quality at reasonable cost | claude-sonnet-5, Gemini 3.6 Flash (High), gpt-5.6-terra |
374
+ | **economy** | Optimized for speed and low cost | claude-haiku-4-5, Gemini 3.6 Flash (Low), gpt-5.6-luna |
374
375
 
375
376
  **Default models are now premium tier** for maximum quality.
376
377
 
@@ -378,6 +379,7 @@ Three tiers of models are available for each consultant, configurable via `apply
378
379
  # Programmatic usage
379
380
  source scripts/config.sh
380
381
  apply_model_tier "premium" # Set all consultants to premium models
382
+ apply_model_tier "maximum" # max_quality-only / separate-plan models
381
383
  apply_model_tier "standard" # Set all consultants to standard models
382
384
  apply_model_tier "economy" # Set all consultants to economy models
383
385
 
@@ -390,7 +392,7 @@ get_model_for_tier "claude" "economy" # → claude-haiku-4-5
390
392
  Three new presets leverage the model tiers:
391
393
 
392
394
  ```bash
393
- # Maximum quality - all premium models + debate + peer review
395
+ # Maximum quality - maximum tier + debate + peer review
394
396
  ./scripts/consult_all.sh --preset max_quality "critical architecture decision"
395
397
 
396
398
  # Balanced quality - standard models, 4 consultants, light debate
@@ -407,12 +409,12 @@ All consultants now use premium models by default:
407
409
  |------------|---------------|
408
410
  | Claude | claude-opus-5 |
409
411
  | Gemini | Gemini 3.1 Pro (High) (via agy CLI) |
410
- | Codex | gpt-5.5 |
411
- | Mistral | mistral-large-3 |
412
+ | Codex | gpt-5.6-sol |
413
+ | Mistral | CLI: mistral-medium-3.5; API: mistral-large-3 |
412
414
  | Cursor | composer-2.5 |
413
415
  | DeepSeek | deepseek-v4-pro |
414
- | GLM | glm-5.2 |
415
- | Grok | grok-4.5 |
416
+ | GLM | glm-5.3 |
417
+ | Grok | grok-4.6 |
416
418
  | Qwen3 | qwen3.7-max |
417
419
  | Kimi | kimi-code/k3 |
418
420
  | MiniMax | MiniMax-M2.7 |
@@ -420,7 +422,7 @@ All consultants now use premium models by default:
420
422
  Override with environment variables: `CLAUDE_MODEL`, `GEMINI_MODEL`, `CODEX_MODEL`, `KIMI_MODEL`, etc.
421
423
 
422
424
  Grok is CLI-first through the official Grok Build `grok` command, with
423
- `grok-4.5` passed explicitly in headless mode. The prompt is delivered with
425
+ `grok-4.6` passed explicitly in headless mode. The prompt is delivered with
424
426
  `--prompt-file`; HOME and CWD are isolated, built-in/MCP tools are denied, and
425
427
  the strict sandbox prevents user or project extensions from joining the
426
428
  consultation. The xAI Chat Completions path is retained only when the CLI is
@@ -617,8 +619,9 @@ for f in scripts/*.sh scripts/lib/*.sh; do bash -n "$f" && echo "OK: $f"; done
617
619
  | `CLAUDE_API_MAX_TOKENS` | 16384 | Claude API thinking + visible-output budget |
618
620
  | `GEMINI_MODEL` | Gemini 3.1 Pro (High) | Gemini agy CLI model (v2.15) |
619
621
  | `GEMINI_API_MODEL` | gemini-3.1-pro-preview | Gemini API-mode model ID (v2.15) |
620
- | `CODEX_MODEL` | gpt-5.5 | Codex model (v2.5) |
622
+ | `CODEX_MODEL` | gpt-5.6-sol | Codex model (v2.5) |
621
623
  | `MISTRAL_MODEL` | mistral-large-3 | Mistral model (v2.5) |
624
+ | `MISTRAL_CLI_MODEL` | mistral-medium-3.5 | Vibe CLI model alias |
622
625
  | `SYNTHESIS_STRATEGY` | coverage | Synthesis strategy (coverage=union of distinct points) |
623
626
  | `ENABLE_SEMANTIC_CACHE` | true | Semantic response caching (v2.3) |
624
627
  | `CACHE_TTL_HOURS` | 24 | Cache expiration in hours (v2.3) |
@@ -643,7 +646,7 @@ for f in scripts/*.sh scripts/lib/*.sh; do bash -n "$f" && echo "OK: $f"; done
643
646
  - `agy` CLI - Antigravity CLI (Gemini consultant; successor to the deprecated Gemini CLI, v2.15)
644
647
  - `codex` CLI - OpenAI Codex
645
648
  - `vibe` CLI - Mistral Vibe
646
- - `agent` CLI - Cursor
649
+ - `cursor-agent` CLI - Cursor (validated by capability, read-only ask mode)
647
650
  - `kimi` CLI - Kimi Code (v2.9)
648
651
  - `claude` CLI - Claude (v2.2, also used for synthesis)
649
652
  - `qwen` CLI - Qwen via qwen-code (v2.7, optional)
@@ -787,6 +790,35 @@ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/s
787
790
 
788
791
  ## Changelog
789
792
 
793
+ ### v3.5.0
794
+
795
+ - **The catalog now distinguishes an advisory panel's normal premium tier from subscription-only maximum targets.** `get_model_for_tier()` accepts an explicit transport, while `apply_model_tier maximum` selects K3-256k and MiniMax M3 and promotes Qwen3.8-Max only when `QWEN3_USE_API=true`, the wire is OpenAI-compatible, the endpoint is a Token Plan `/chat/completions` URL, and a key is present (`scripts/config.sh:581-737`). The Qwen effort is marked tier-managed, cleared when leaving maximum, and never overwrites a user pin. Gemini 3.7, Fable 5, and the new Mistral API IDs remain catalogued opt-ins after their exact transports failed authentication or timed out; normal runs do not inherit delegation-kit's routing gates.
796
+ - **Mistral CLI and API names are no longer conflated.** `MISTRAL_CLI_MODEL=mistral-medium-3.5` reaches Vibe through `VIBE_ACTIVE_MODEL`; `MISTRAL_MODEL` remains API-only. Vibe verifies its bounded read-only interface, runs `plan` for one turn in a mode-700 temporary workspace, and treats empty or post-launch failures as failures (`scripts/query_mistral.sh:47-143`). The current machine passed the exact Vibe smoke; no Mistral API key was available, so the new API IDs were not promoted.
797
+ - **Cursor now means Cursor.** The old `CURSOR_CMD=agent` resolved to Grok on this machine. Runtime, configure, and doctor now default to `cursor-agent`, validate the Cursor help surface, bound model-inventory calls, require Composer 2.5, and invoke `--mode ask --trust` only against an ephemeral workspace (`scripts/query_cursor.sh:33-132`, `scripts/configure.sh:322-363`). The local Cursor account is not logged in, so runtime authentication remains a user gate rather than something this release works around.
798
+ - **Model identity evidence is additive and honest.** Every envelope carries the requested ID and one of `provider-reported`, `capability-probed`, or `requested-only`; API model strings are syntax-validated before adoption (`scripts/lib/common.sh:935-1068`, `scripts/lib/api_query.sh:162-194`). `modelUsage` remains billing participation, not content identity. The shared billing resolver prefers a known effective ID, then the explicit requested ID, and uses consultant fallback only for legacy responses that lack the new metadata (`scripts/lib/costs.sh:311-430`).
799
+ - **The reliability boundary is finite.** Cursor/Gemini/Mistral capability probes and Cursor configure/doctor probes have explicit time limits. An HTTP 200 with an empty body increments the retry counter, including at the shipped `MAX_RETRIES=2`, instead of spinning indefinitely (`scripts/lib/api.sh`, `scripts/test_api_transport.sh`). Google `thinkingConfig` is emitted only for Gemini 3.7; the proven 3.1 API body remains byte-compatible.
800
+ - **Managed migrations are exact and pins survive.** `configure` upgrades only the historical managed Cursor command, GLM 5.2, and Grok 4.5 values. Environment/`--set` model values and any `# ai-consultants:pin` entry remain user-owned. The new catalog-parity gate checks all 44 consultant/tier cells and all 16 Gemini/Mistral transport cells against `docs/cost_rates.json`, requiring every automatic target to be priced or explicitly unpriced.
801
+ - **Promotion evidence is recorded without overstating it.** Exact ai-consultants smokes passed for Mistral Vibe Medium 3.5, GLM 5.3, Grok 4.6, K3-256k, Qwen3.8-Max Token Plan, and MiniMax M3. Gemini 3.7 lacked agy/API auth, Mistral API lacked a key, Fable 5 timed out, and Cursor lacked login; those stay opt-in/unverified. Cross-family Opus 5/max review first returned `NO-SHIP` with four blockers, then `SHIP` after the hermeticity, trust, probe, thinking, billing, retry, and parity findings were fixed. Final gate: 22/22 suites, 443/443 core checks, ShellCheck and npm tarball green.
802
+
803
+ Deliberate residuals: Cursor and Vibe isolate the workspace but retain ambient HOME for their authenticated CLI state; unpriced credit/subscription models are disclosed but cannot be enforced by a dollar budget; provider/requested model substitutions are available in raw JSON but not yet summarized in the human report.
804
+
805
+ ### v3.4.0
806
+ - **Gemini was unreachable from an SSH session, and no amount of re-authenticating helped.** `agy` picks its credential store from the environment: seeing `SSH_CLIENT`, `SSH_CONNECTION`, or `SSH_TTY` it switches to a file-based token store and never consults the macOS Keychain. A user who signed in locally therefore lost Gemini entirely over SSH, and signing in again landed the new credential in the Keychain the CLI had already decided to ignore. Reproduced live before fixing (`agy models` → "Please sign in"; the same command under `env -u SSH_CLIENT -u SSH_CONNECTION -u SSH_TTY` → full inventory), and confirmed again end to end after. Found by reading delegation-kit's 0.13.1 fix and checking whether the same failure applied here — it did, in the very session doing the work.
807
+ - **The fix ships in two shapes on purpose** (`lib/common.sh:163-164`). `AGY_ENV_PREFIX` is an array of `env -u …` for anything that reaches `agy` through `run_with_timeout`, because GNU `timeout` execs a binary and **cannot invoke a shell function**; `agy_env` is the same-shell wrapper, defined *from* that array so the two cannot drift. Applied at every executing call site — `query_gemini.sh`, `doctor.sh`, `update_clis.sh`, and `build_synthesis_args` (which is executed directly by `synthesize.sh:304`, not through timeout, so either shape would work there — it uses the array for consistency). The remaining `${GEMINI_CMD:-agy}` hits are `command -v` probes and config-dump strings, which execute nothing.
808
+ - **The Codex adapter was the least isolated in the panel, contradicting our own v3.1.0 policy.** That release isolated Grok specifically so "local plugins, hooks, skills, memories, and project instructions stay outside the consultation", then left Codex running `codex exec --skip-git-repo-check -m … "$FULL_QUERY"` in the ambient environment: the user's `~/.codex/config.toml`, the repo's `AGENTS.md`, their hooks, MCP servers, and execpolicy rules all reached an advisory consultation, the sandbox was unpinned, and the prompt rode in argv — the same `ARG_MAX` and process-list exposure v3.1.0 had already fixed once. CLI mode now uses an ephemeral mode-700 HOME/CWD with `--ephemeral --ignore-user-config --ignore-rules -s read-only`, prompt on stdin, answer from a private `-o` payload (`query_codex.sh:86-160`).
809
+ - **`CODEX_HOME` is resolved before HOME is overridden** (`query_codex.sh:89`) and passed through unchanged: `--ignore-user-config` skips `config.toml` but auth still resolves through `CODEX_HOME`, so repointing it at the isolated home would break authentication outright. Note the coupling recorded at `query_codex.sh:123`: `--ignore-user-config` is safe **only** because `-m` pins the model — it also makes Codex ignore any `-p <profile>`, so a profile must never be added here.
810
+ - **Review caught the `-o` payload rewriting real failures into successes.** The first implementation adopted the payload whenever it was non-empty, *regardless of how `run_query` finished* — so a timeout (124), an auth error, or exhausted retries that left a partial answer on disk all became `exit_code=0` and entered synthesis as a healthy consultation. That is strictly worse than the bug it replaced and defeats the v2.18/v2.19 diagnosed-failure machinery. Adoption is now gated on success; exit 0 with an empty payload remains a failure. Both directions are regression-tested, and both tests were confirmed non-vacuous by reintroducing the defect and watching them fail.
811
+ - **Correction, on the record: the justification for that override was measured and found false.** It was defended as avoiding "false empty-stdout failures", since `run_query` treats an empty stdout as a failure *and retries* — which would have meant every Codex consultation making `MAX_RETRIES` billable calls. Measured against the real CLI, stdout carries the answer (11 bytes), the `-o` file mirrors it, and only token telemetry goes to stderr. There was never a retry storm. `-o` is kept as defence in depth — and the isolation is what makes stdout clean in the first place, since `--ignore-user-config` plus an ephemeral HOME leaves no hooks to emit chatter.
812
+ - **`*_REASONING_EFFORT` had been a documented no-op on the default path.** `warn_effort_ignored_in_cli` announced the setting as API-mode only, but CLI-first transport has been mandatory since v2.21 — so in the shipped configuration the knob did nothing at all, while three CLIs did expose the control. Now wired: Codex `-c model_reasoning_effort=` (`query_codex.sh:148`), Claude `--effort` (`query_claude.sh:78-86`), Gemini `--effort` (`query_gemini.sh:97-105`). This is not cosmetic — cheap models do not degrade gracefully, so a consultant silently inheriting an unknown effort is not a controlled panel member.
813
+ - **Deliberately no per-CLI effort allowlist.** `agy` accepts only `low|medium|high`, but the accepted enum is a provider fact, not ours; an unsupported value comes back as a diagnosed 400 rather than being pre-empted by a table in shell. Same stance v2.25.0 took for Qwen, and for the same reason: hardcoding per-model facts is what produced the stale `MODEL_USED` bugs.
814
+ - **The parameter-contract test did its job on code it knew nothing about.** `test_configure.sh:91-121` scans every non-test `*.sh` for `${VAR:-}` and requires each name to be accepted by `configure --set`; the three new effort reads and then `CODEX_HOME` each failed it in turn. The effort variables are now declared in `.env.example` (commented out, matching the `QWEN3_REASONING_EFFORT` convention). `CODEX_HOME` went to the **exclusion list** instead (`test_configure.sh:105-107`), because it is owned by the Codex CLI: we read it to locate the user's auth store and must never persist it — declaring it would advertise `configure --set CODEX_HOME=…`, writing another tool's private auth path into our config. It joins `HOME`, `TMPDIR`, `XDG_CONFIG_HOME`, and `XAI_API_KEY`, and the distinction is now stated inline so nobody "fixes" it by moving it into `.env.example`.
815
+ - **The model catalog refresh would have been invisible to every existing installation — and only a live smoke test caught it.** The full gate was green (19/19, shellcheck clean, both new regression tests proven non-vacuous) and a real consultation still reported `model=gpt-5.5`. `init` copies `.env.example` verbatim, so the then-current Codex default was persisted as an ordinary unmarked value, and `configure` reads any unmarked value as a deliberate user pin. The proof sits side by side in an installed config: `CODEX_MODEL=gpt-5.5` beside `CLAUDE_MODEL=claude-opus-5 # ai-consultants:default`, where only the marked line can migrate. Fixed with the direct analogue of v3.2.0's Claude migration (`configure.sh:288-295`) — one exact historical value, one target, skipped on the pin marker, rewritten with the default marker. Verified against real config files: unmarked `gpt-5.5` migrates, a pin recorded via `--set` survives, an unrelated `gpt-5.4` is untouched.
816
+ - **Deliberately not generalised.** A table-driven "upgrade anything that looks old" rule would silently rewrite genuine user pins. Two adjacent narrow blocks is the intended shape; a third model needs a third block.
817
+ - **Model ids were verified by querying the installed binaries, never from documentation.** `agy models` (with the SSH markers cleared) returns slugs — `gemini-3.6-flash-high`, `gemini-3.1-pro-high` — but the display names we ship still resolve, checked by round-tripping both forms. Gemini premium stays `Gemini 3.1 Pro (High)` because the inventory has **no 3.6 Pro**; only standard/economy move to 3.6 Flash. Codex `gpt-5.6-sol|terra|luna` and `claude-sonnet-5` each answered a live probe.
818
+ - **Cost rates ship with the ids, not after them.** `calculate_session_cost` never calls `resolve_model_for_cost`, so a model absent from the catalog falls to the `*)` arm of `get_input_cost_per_1k` at 0.005/0.015 and is reported as a confident, wrong number — the trap documented at v2.25.0. Sonnet 5 is entered at its standard $3/$15 rate rather than the introductory $2/$10, which expires 2026-08-31; that slightly overstates for a few weeks and is exactly right afterwards.
819
+ - **Qwen: two ids, two deployments, not a rename.** delegation-kit's snapshot said `GET /models` lists both `qwen3.8-max` and `qwen3.8-max-preview`. Verified live against a real Token Plan account: both are served **and each completion reports its own requested id back in `.model`**, so `-preview` is not an alias and is not silently served by `qwen3.8-max`. Both stay catalogued and both stay in `unpriced_models` — removing the preview entry is precisely what would drop an existing pin onto `default_rate`. Recorded in `docs/RECIPES.md`; the shipped premium Qwen model remains `qwen3.7-max` and the negative assertion in `test_suite.sh` keeps that contract self-documenting.
820
+ - **Process note for the next stacked release.** `ci.yml` triggers on `pull_request: branches: [main]` with the default activity types, and a base-branch change fires `edited`, which is not among them — so a PR stacked on another branch never gets a server-side check until it is retargeted *and* reopened. Separately, `gh pr merge --delete-branch` on a stack base **closes** the child PR rather than retargeting it, and GitHub will neither retarget a closed PR nor reopen one whose base is gone; recovery meant pushing the base ref back from a commit still reachable in `main`. Adding `edited` to the workflow's activity types would close the first hole.
821
+
790
822
  ### v3.3.0
791
823
  - **Grok and Kimi compatibility is now established from capabilities, not inferred from an installed binary or its version string.** `grok_cli_supports_required_interface` validates the complete headless parser surface inside the same isolated HOME/CWD boundary used for dispatch, while `grok_cli_exposes_requested_model` verifies both usable authentication and the exact `GROK_MODEL` in the CLI inventory (`scripts/query_grok.sh:85-154`). Kimi similarly checks prompt mode, `stream-json`, the provider inventory, and `KIMI_MODEL` before any request (`scripts/query_kimi.sh:45-79`). Compatible future and vendor-custom versions therefore continue to work without a release-specific allowlist; an interface that cannot enforce the adapter's contract fails before a model call.
792
824
  - **The observed CLI version is provenance only.** Successful Grok and Kimi responses add `metadata.cli_version` and `metadata.cli_compatibility="capability-probed"`; the shared schema documents both fields without making either required for other transports (`scripts/query_grok.sh:319-336`, `scripts/query_kimi.sh:126-138`, `scripts/lib/schema.json:169-180`). This deliberately does not introduce a blessed-version range: the version is useful for diagnosis, while compatibility is decided by the exercised command, output, and model surfaces.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # AI Consultants v3.3.0
1
+ # AI Consultants v3.5.0
2
2
 
3
3
  > **Coverage, not a single guess.** A panel of up to 11 frontier models from different vendors fans out on your question in parallel and hands you the *union* of what they collectively see — the risks, edge cases, and approaches a single model misses.
4
4
 
5
- [![Version](https://img.shields.io/badge/version-3.3.0-blue.svg)](https://github.com/matteoscurati/ai-consultants)
5
+ [![Version](https://img.shields.io/badge/version-3.5.0-blue.svg)](https://github.com/matteoscurati/ai-consultants)
6
6
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
  [![Claude Code Skill](https://img.shields.io/badge/Claude%20Code-Skill-orange.svg)](https://docs.anthropic.com/en/docs/claude-code/skills)
8
8
  [![GitHub stars](https://img.shields.io/github/stars/matteoscurati/ai-consultants?style=social)](https://github.com/matteoscurati/ai-consultants)
@@ -375,20 +375,22 @@ INVOKING_AGENT=codex ./scripts/consult_all.sh "Question" # Codex excluded
375
375
  | **Google Gemini** | `agy` | The Architect | Design patterns, scalability, enterprise |
376
376
  | **OpenAI Codex** | `codex` | The Pragmatist | Simplicity, quick wins, proven solutions |
377
377
  | **Mistral Vibe** | `vibe` | The Devil's Advocate | Problems, edge cases, vulnerabilities |
378
- | **Cursor** | `agent` | The Integrator | Full-stack perspective |
378
+ | **Cursor** | `cursor-agent` | The Integrator | Full-stack perspective |
379
379
  | **Kimi K3** | `kimi` | The Eastern Sage | Holistic, balanced perspectives |
380
380
  | **Claude** | `claude` | The Synthesizer | Big picture, synthesis, connecting ideas |
381
381
  | **Qwen3** | `qwen` | The Analyst | Data-driven analysis |
382
382
  | **Grok** | `grok` | The Provocateur | Challenge conventions |
383
383
  | **MiniMax** | `mmx` | The Pragmatic Optimizer | Performance, efficiency, pragmatism |
384
384
 
385
- Grok uses Grok Build with `grok-4.5` in an isolated, tool-free sandbox. Prompts
385
+ Grok uses Grok Build with `grok-4.6` in an isolated, tool-free sandbox. Prompts
386
386
  are passed through a private file rather than process arguments. It falls back
387
387
  to the xAI API only when the CLI is missing, cannot launch, or has no usable
388
388
  authentication and `GROK_API_KEY` is configured; post-launch request failures
389
389
  are surfaced without a silent API charge. Qwen3 and MiniMax can also switch
390
390
  from their CLI to API transport. Gemini, Codex, Claude, and Mistral are
391
- CLI/API switchable. Grok and Kimi compatibility is capability-probed before
391
+ CLI/API switchable. Gemini, Cursor, Grok, and Kimi verify the requested model
392
+ against the CLI inventory before dispatch when that inventory exists. Grok and
393
+ Kimi compatibility is capability-probed before
392
394
  dispatch: the requested model, headless arguments, and structured-output
393
395
  surface must be available. Any CLI version is accepted when those checks pass;
394
396
  the observed version is response provenance only.
@@ -397,7 +399,7 @@ the observed version is response provenance only.
397
399
 
398
400
  | Consultant | Default Model | Persona | Focus |
399
401
  |------------|---------------|---------|-------|
400
- | **GLM** | glm-5.2 | The Methodologist | Structured approaches |
402
+ | **GLM** | glm-5.3 | The Methodologist | Structured approaches |
401
403
  | **DeepSeek** | deepseek-v4-pro | The Code Specialist | Algorithms, code generation |
402
404
 
403
405
  ### Installing Consultant CLIs
@@ -413,7 +415,7 @@ curl https://cursor.com/install -fsS | bash # Cursor
413
415
  # Optional CLI-based consultants
414
416
  curl -L code.kimi.com/install.sh | bash # Kimi K3
415
417
  npm install -g @qwen-code/qwen-code@latest # Qwen (alternative to API)
416
- curl -fsSL https://x.ai/cli/install.sh | bash # Grok Build (grok-4.5)
418
+ curl -fsSL https://x.ai/cli/install.sh | bash # Grok Build (grok-4.6)
417
419
  npm install -g mmx-cli # MiniMax
418
420
 
419
421
  ```
@@ -436,7 +438,7 @@ Choose the right balance of quality, speed, and cost with model quality tiers.
436
438
 
437
439
  | Preset | Tier | Agents | Use Case |
438
440
  |--------|------|--------|----------|
439
- | `max_quality` | Premium | 8 of 11 | Critical decisions |
441
+ | `max_quality` | Maximum | 8 of 11 | Critical decisions |
440
442
  | `medium` | Standard | 4 | General questions |
441
443
  | `fast` | Economy | 2 | Quick checks |
442
444
 
@@ -445,19 +447,31 @@ parallel and returns the coverage union.
445
447
 
446
448
  ### Models by Tier
447
449
 
448
- | Consultant | Premium | Standard | Economy |
449
- |------------|---------|----------|---------|
450
- | Claude | claude-opus-5 | claude-sonnet-4-6 | claude-haiku-4-5 |
451
- | Gemini | Gemini 3.1 Pro (High) | Gemini 3.5 Flash (High) | Gemini 3.5 Flash (Low) |
452
- | Codex | gpt-5.5 | gpt-5.4 | gpt-5.4-nano |
453
- | Mistral | mistral-large-3 | mistral-medium-latest | devstral-small-2 |
454
- | Cursor | composer-2.5 | composer-2 | gemini-3-flash |
455
- | DeepSeek | deepseek-v4-pro | deepseek-v4-flash | deepseek-v4-flash |
456
- | GLM | glm-5.2 | glm-5.2 | glm-4-flash |
457
- | Grok | grok-4.5 | grok-4.1-fast | grok-4.1-fast |
458
- | Qwen3 | qwen3.7-max | qwen3.6-35b-a3b | qwen3-32b |
459
- | Kimi | kimi-code/k3 | kimi-code/k3 | kimi-code/k3 |
460
- | MiniMax | MiniMax-M2.7 | MiniMax-M2.7 | MiniMax-M2.5 |
450
+ | Consultant | `max_quality` | Premium | Standard | Economy |
451
+ |------------|---------------|---------|----------|---------|
452
+ | Claude | claude-opus-5 | claude-opus-5 | claude-sonnet-5 | claude-haiku-4-5 |
453
+ | Gemini | Gemini 3.1 Pro (High) | Gemini 3.1 Pro (High) | Gemini 3.6 Flash (High) | Gemini 3.6 Flash (Low) |
454
+ | Codex | gpt-5.6-sol | gpt-5.6-sol | gpt-5.6-terra | gpt-5.6-luna |
455
+ | Mistral CLI | mistral-medium-3.5 | mistral-medium-3.5 | mistral-medium-3.5 | devstral-small-2 |
456
+ | Mistral API | mistral-large-3 | mistral-large-3 | mistral-large-3 | mistral-large-3 |
457
+ | Cursor | composer-2.5 | composer-2.5 | composer-2.5 | composer-2.5 |
458
+ | DeepSeek | deepseek-v4-pro | deepseek-v4-pro | deepseek-v4-flash | deepseek-v4-flash |
459
+ | GLM | glm-5.3 | glm-5.3 | glm-5.3 | glm-4-flash |
460
+ | Grok | grok-4.6 | grok-4.6 | grok-4.5 | grok-4.5 |
461
+ | Qwen3 | qwen3.8-max when Token Plan is configured; otherwise qwen3.7-max | qwen3.7-max | qwen3.6-35b-a3b | qwen3-32b |
462
+ | Kimi | kimi-code/k3-256k | kimi-code/k3 | kimi-code/k3 | kimi-code/k3 |
463
+ | MiniMax | MiniMax-M3 | MiniMax-M2.7 | MiniMax-M2.7 | MiniMax-M2.5 |
464
+
465
+ Promotion is transport-specific. Gemini 3.7 Flash, the new Mistral API IDs
466
+ (`mistral-medium-3-5`, `mistral-large-2512`, `mistral-small-2603`), and Claude
467
+ Fable 5 are catalogued opt-ins because this release could not complete an exact
468
+ authenticated smoke for those transports. Select them explicitly only after
469
+ your own `doctor --live`/adapter check. They are never promoted automatically;
470
+ selecting a preset later intentionally reapplies that preset's tier and can
471
+ replace an explicit model override for the run.
472
+ Qwen3.8-Max is likewise selected by `max_quality` only when API mode already
473
+ points at an authenticated OpenAI-compatible Token Plan `/chat/completions`
474
+ endpoint; the preset never repoints a DashScope key or CLI installation.
461
475
 
462
476
  ### Usage
463
477
 
@@ -475,6 +489,7 @@ parallel and returns the coverage union.
475
489
  # Programmatic tier selection
476
490
  source scripts/config.sh
477
491
  apply_model_tier "premium" # Set all to premium models
492
+ apply_model_tier "maximum" # max_quality-only / separate-plan models
478
493
  apply_model_tier "economy" # Set all to economy models
479
494
  ```
480
495
 
@@ -488,7 +503,7 @@ Choose how many consultants to use:
488
503
 
489
504
  | Preset | Consultants | Tier | Use Case |
490
505
  |--------|-------------|------|----------|
491
- | `max_quality` | 8 of 11 | Premium | Critical decisions |
506
+ | `max_quality` | 8 of 11 | Maximum | Critical decisions |
492
507
  | `medium` | 4 | Standard | General questions |
493
508
  | `fast` | 2 | Economy | Quick checks |
494
509
  | `minimal` | 2 (Gemini + Codex) | Default | Quick questions, low cost |
@@ -552,7 +567,8 @@ later run to adapt when a CLI or credential changes. Environment variables,
552
567
  `--set`, and unmarked values remain explicit user choices, except for the exact
553
568
  historical generated Claude default described below.
554
569
  Managed model defaults use `# ai-consultants:default`; `configure` upgrades the
555
- historical unmarked `CLAUDE_MODEL=claude-opus-4-8` default to Opus 5. To keep
570
+ historical unmarked `CLAUDE_MODEL=claude-opus-4-8` default to Opus 5 and upgrades
571
+ the exact managed Cursor, GLM, and Grok defaults. To keep
556
572
  4.8 intentionally, run
557
573
  `ai-consultants configure --set CLAUDE_MODEL=claude-opus-4-8`; explicit model
558
574
  overrides are stored with `# ai-consultants:pin`.
@@ -573,6 +589,7 @@ ENABLE_SMART_ROUTING=true # Auto-select consultants by question category
573
589
  MAX_SESSION_COST=1.00 # USD budget cap (paired with ENABLE_BUDGET_LIMIT=true to enforce)
574
590
  KIMI_MODEL=kimi-code/k3 # Pin the Kimi consultant to K3
575
591
  CLAUDE_API_MAX_TOKENS=16384 # Shared thinking + visible-output budget in API mode
592
+ MISTRAL_CLI_MODEL=mistral-medium-3.5 # Vibe alias; MISTRAL_MODEL remains API-only
576
593
  ```
577
594
 
578
595
  Full reference: [`references/configuration.md`](references/configuration.md). Copy-paste workflows: [`docs/RECIPES.md`](docs/RECIPES.md). For category-aware preset suggestions: `ai-consultants doctor --suggest-preset --question "..."`.
package/SKILL.md CHANGED
@@ -5,10 +5,10 @@ license: MIT
5
5
  compatibility: Requires bash, jq, and at least 2 AI CLI tools (agy, codex, vibe, etc.). macOS and Linux.
6
6
  metadata:
7
7
  author: matteoscurati
8
- version: 3.3.0
8
+ version: 3.5.0
9
9
  ---
10
10
 
11
- # AI Consultants v3.3.0 - AI Expert Panel
11
+ # AI Consultants v3.5.0 - AI Expert Panel
12
12
 
13
13
  **Coverage, not a single guess.** Convene a panel of AI "consultants" from different vendors for coding questions: they fan out in parallel and you get the *union* of what they collectively see — the risks, edge cases, and approaches a single model misses. Each consultant has a **configurable persona** that decorrelates its analysis.
14
14
 
@@ -34,7 +34,7 @@ Configuration (presets, strategies, features, personas, API keys) can be managed
34
34
  | **Google Gemini** | `agy` | The Architect | Design patterns, scalability |
35
35
  | **OpenAI Codex** | `codex` | The Pragmatist | Simplicity, proven solutions |
36
36
  | **Mistral Vibe** | `vibe` | The Devil's Advocate | Edge cases, vulnerabilities |
37
- | **Cursor** | `agent` | The Integrator | Full-stack perspective |
37
+ | **Cursor** | `cursor-agent` | The Integrator | Full-stack perspective |
38
38
  | **Kimi K3** | `kimi` | The Eastern Sage | Holistic, balanced perspectives |
39
39
  | **Claude** | `claude` | The Synthesizer | Big picture, synthesis |
40
40
  | **Qwen** | `qwen` | The Analyst | Data-driven, metrics |
@@ -43,13 +43,19 @@ Configuration (presets, strategies, features, personas, API keys) can be managed
43
43
 
44
44
  **API-only consultants**: GLM (The Methodologist), DeepSeek (The Code Specialist)
45
45
 
46
- **CLI/API Mode**: Gemini, Codex, Claude, Mistral, Qwen, Grok, and MiniMax can switch between CLI and API mode via `*_USE_API` environment variables. Grok is CLI-first on Grok Build with `grok-4.5` and falls back to the xAI API when the CLI cannot run. Gemini auto-selects API mode when `GEMINI_API_KEY` is set (no `agy` install needed) and the CLI otherwise.
46
+ **CLI/API Mode**: Gemini, Codex, Claude, Mistral, Qwen, Grok, and MiniMax can switch between CLI and API mode via `*_USE_API` environment variables. Grok is CLI-first on Grok Build with `grok-4.6` and falls back to the xAI API when the CLI cannot run. Gemini auto-selects API mode when `GEMINI_API_KEY` is set (no `agy` install needed) and the CLI otherwise. Mistral keeps separate API (`MISTRAL_MODEL`) and Vibe (`MISTRAL_CLI_MODEL`) identifiers; Cursor uses `cursor-agent --mode ask` in an isolated workspace.
47
47
 
48
48
  Grok and Kimi are compatible by capability rather than by CLI version. Before
49
49
  dispatch, their adapters verify the required headless arguments, requested
50
50
  model, and structured-output surface. Compatible version changes are accepted;
51
51
  the observed version is recorded only as response provenance.
52
52
 
53
+ The `max_quality` preset uses the separately smoke-tested K3-256k and MiniMax
54
+ M3 targets, plus Qwen3.8-Max when an authenticated Token Plan transport is
55
+ already configured. Gemini 3.7 Flash, Claude Fable 5, and the
56
+ new Mistral API IDs remain explicit opt-ins until their exact local transports
57
+ can authenticate and complete a smoke; no failed target is silently replaced.
58
+
53
59
  **Self-Exclusion**: The invoking agent is automatically excluded from the panel. When invoked from Claude Code, Claude is excluded; when invoked from Codex CLI, Codex is excluded, etc.
54
60
 
55
61
  ## Requirements
@@ -1,4 +1,4 @@
1
- # Cost Rates - AI Consultants v3.3.0
1
+ # Cost Rates - AI Consultants v3.5.0
2
2
 
3
3
  This page documents the per-token rates used by the cost tracking system.
4
4
 
@@ -6,11 +6,14 @@ This page documents the per-token rates used by the cost tracking system.
6
6
 
7
7
  ## Model Quality Tiers (v2.5+)
8
8
 
9
- Since v2.5, models are organized into three tiers. Use `apply_model_tier()` or `get_model_for_tier()` to select models programmatically.
9
+ Automatic selection has three normal tiers plus the `maximum` tier used by
10
+ `max_quality`. Use `apply_model_tier()` or `get_model_for_tier()` to select
11
+ models programmatically.
10
12
 
11
13
  | Tier | Description | Cost Level |
12
14
  |------|-------------|------------|
13
15
  | **Premium** | Latest flagship models (default) | Highest |
16
+ | **Maximum** | Smoke-tested separate-plan or highest-cost targets | Varies / may be unpriced |
14
17
  | **Standard** | Good quality at reasonable cost | Medium |
15
18
  | **Economy** | Optimized for speed and low cost | Lowest |
16
19
 
@@ -21,32 +24,39 @@ Since v2.5, models are organized into three tiers. Use `apply_model_tier()` or `
21
24
  | Model | Tier | Cost/1K | Consultant |
22
25
  |-------|------|---------|------------|
23
26
  | Gemini 3.1 Pro (High) | Premium | $0.002 | Gemini (agy CLI) |
24
- | Gemini 3.5 Flash (High) | Standard | $0.0015 | Gemini (agy CLI) |
25
- | Gemini 3.5 Flash (Low) | Economy | $0.0015 | Gemini (agy CLI) |
26
- | gpt-5.5 | Premium | $0.005 | Codex |
27
- | gpt-5.4 | Standard | $0.0025 | Codex |
28
- | gpt-5.4-nano | Economy | $0.0002 | Codex |
27
+ | Gemini 3.6 Flash (High) | Standard | $0.0015 | Gemini (agy CLI) |
28
+ | Gemini 3.6 Flash (Low) | Economy | $0.0015 | Gemini (agy CLI) |
29
+ | Gemini 3.7 Flash (High/Low) | Opt-in | $0.00075 | Gemini (CLI/API; promotional through 2026-12-31) |
30
+ | gpt-5.6-sol | Premium | $0.005 | Codex |
31
+ | gpt-5.6-terra | Standard | $0.002 | Codex |
32
+ | gpt-5.6-luna | Economy | $0.0002 | Codex |
29
33
  | claude-opus-5 | Premium | $0.005 | Claude |
30
- | claude-sonnet-4-6 | Standard | $0.003 | Claude |
34
+ | claude-fable-5 | Opt-in | $0.010 | Claude |
35
+ | claude-sonnet-5 | Standard | $0.003 | Claude |
31
36
  | claude-haiku-4-5 | Economy | $0.001 | Claude |
32
37
  | mistral-large-3 | Premium | $0.002 | Mistral |
33
- | mistral-medium-latest | Standard | $0.001 | Mistral |
38
+ | mistral-medium-3.5 / mistral-medium-3-5 | Premium CLI / API opt-in | $0.0015 | Mistral |
39
+ | mistral-large-2512 | API opt-in | $0.0005 | Mistral |
40
+ | mistral-small-2603 | API opt-in | $0.00015 | Mistral |
34
41
  | devstral-small-2 | Economy | $0.00 | Mistral |
35
- | composer-2.5 | Premium | $0.0005 | Cursor |
36
- | composer-2 | Standard | $0.0005 | Cursor |
37
- | gemini-3-flash | Economy | $0.0005 | Cursor |
42
+ | composer-2.5 | Maximum/Premium/Standard/Economy | $0.0005 | Cursor |
43
+ | composer-2 | Legacy | $0.0005 | Cursor |
44
+ | gemini-3-flash | Legacy | $0.0005 | Cursor |
38
45
  | deepseek-v4-pro | Premium | $0.000435 | DeepSeek |
39
46
  | deepseek-v4-flash | Standard/Economy | $0.00014 | DeepSeek |
40
- | glm-5.2 | Premium/Standard | $0.00098 | GLM |
47
+ | glm-5.3 | Maximum/Premium/Standard | Unpriced | GLM coding-plan endpoint |
41
48
  | glm-4-flash | Economy | $0.001 | GLM |
42
- | grok-4.5 | Premium | $0.002 | Grok |
43
- | grok-4.1-fast | Standard/Economy | $0.0002 | Grok |
49
+ | grok-4.6 | Maximum/Premium | $0.002 | Grok |
50
+ | grok-4.5 | Standard/Economy | $0.002 | Grok |
44
51
  | qwen3.7-max | Premium | $0.0012 | Qwen3 |
45
52
  | qwen3.6-35b-a3b | Standard | $0.000163 | Qwen3 |
46
53
  | qwen3-32b | Economy | $0.0004 | Qwen3 |
47
- | MiniMax-M2.7 | Premium/Standard | $0.00025 | MiniMax |
48
- | MiniMax-M2.5 | Economy | $0.000255 | MiniMax |
54
+ | qwen3.8-max | Maximum | Unpriced | Qwen3 Token Plan |
55
+ | MiniMax-M3 | Maximum | $0.0003 | MiniMax (≤512k standard input) |
56
+ | MiniMax-M2.7 | Premium/Standard | $0.0003 | MiniMax |
57
+ | MiniMax-M2.5 | Economy | $0.0003 | MiniMax |
49
58
  | kimi-code/k3 | Premium/Standard/Economy | $0.0005 | Kimi |
59
+ | kimi-code/k3-256k | Maximum | Unpriced | Kimi subscription |
50
60
  | default | - | $0.005 | Fallback |
51
61
 
52
62
  ### Output Tokens
@@ -54,32 +64,39 @@ Since v2.5, models are organized into three tiers. Use `apply_model_tier()` or `
54
64
  | Model | Tier | Cost/1K | Consultant |
55
65
  |-------|------|---------|------------|
56
66
  | Gemini 3.1 Pro (High) | Premium | $0.012 | Gemini (agy CLI) |
57
- | Gemini 3.5 Flash (High) | Standard | $0.009 | Gemini (agy CLI) |
58
- | Gemini 3.5 Flash (Low) | Economy | $0.009 | Gemini (agy CLI) |
59
- | gpt-5.5 | Premium | $0.030 | Codex |
60
- | gpt-5.4 | Standard | $0.015 | Codex |
61
- | gpt-5.4-nano | Economy | $0.00125 | Codex |
67
+ | Gemini 3.6 Flash (High) | Standard | $0.0075 | Gemini (agy CLI) |
68
+ | Gemini 3.6 Flash (Low) | Economy | $0.0075 | Gemini (agy CLI) |
69
+ | Gemini 3.7 Flash (High/Low) | Opt-in | $0.00375 | Gemini (CLI/API; promotional through 2026-12-31) |
70
+ | gpt-5.6-sol | Premium | $0.030 | Codex |
71
+ | gpt-5.6-terra | Standard | $0.012 | Codex |
72
+ | gpt-5.6-luna | Economy | $0.0012 | Codex |
62
73
  | claude-opus-5 | Premium | $0.025 | Claude |
63
- | claude-sonnet-4-6 | Standard | $0.015 | Claude |
74
+ | claude-fable-5 | Opt-in | $0.050 | Claude |
75
+ | claude-sonnet-5 | Standard | $0.015 | Claude |
64
76
  | claude-haiku-4-5 | Economy | $0.005 | Claude |
65
77
  | mistral-large-3 | Premium | $0.006 | Mistral |
66
- | mistral-medium-latest | Standard | $0.003 | Mistral |
78
+ | mistral-medium-3.5 / mistral-medium-3-5 | Premium CLI / API opt-in | $0.0075 | Mistral |
79
+ | mistral-large-2512 | API opt-in | $0.0015 | Mistral |
80
+ | mistral-small-2603 | API opt-in | $0.0006 | Mistral |
67
81
  | devstral-small-2 | Economy | $0.00 | Mistral |
68
- | composer-2.5 | Premium | $0.0025 | Cursor |
69
- | composer-2 | Standard | $0.0025 | Cursor |
70
- | gemini-3-flash | Economy | $0.003 | Cursor |
82
+ | composer-2.5 | Maximum/Premium/Standard/Economy | $0.0025 | Cursor |
83
+ | composer-2 | Legacy | $0.0025 | Cursor |
84
+ | gemini-3-flash | Legacy | $0.003 | Cursor |
71
85
  | deepseek-v4-pro | Premium | $0.00087 | DeepSeek |
72
86
  | deepseek-v4-flash | Standard/Economy | $0.00028 | DeepSeek |
73
- | glm-5.2 | Premium/Standard | $0.00308 | GLM |
87
+ | glm-5.3 | Maximum/Premium/Standard | Unpriced | GLM coding-plan endpoint |
74
88
  | glm-4-flash | Economy | $0.003 | GLM |
75
- | grok-4.5 | Premium | $0.006 | Grok |
76
- | grok-4.1-fast | Standard/Economy | $0.0005 | Grok |
89
+ | grok-4.6 | Maximum/Premium | $0.006 | Grok |
90
+ | grok-4.5 | Standard/Economy | $0.006 | Grok |
77
91
  | qwen3.7-max | Premium | $0.006 | Qwen3 |
78
92
  | qwen3.6-35b-a3b | Standard | $0.0009 | Qwen3 |
79
93
  | qwen3-32b | Economy | $0.0016 | Qwen3 |
80
- | MiniMax-M2.7 | Premium/Standard | $0.001 | MiniMax |
81
- | MiniMax-M2.5 | Economy | $0.001 | MiniMax |
94
+ | qwen3.8-max | Maximum | Unpriced | Qwen3 Token Plan |
95
+ | MiniMax-M3 | Maximum | $0.0012 | MiniMax (≤512k standard input) |
96
+ | MiniMax-M2.7 | Premium/Standard | $0.0012 | MiniMax |
97
+ | MiniMax-M2.5 | Economy | $0.0012 | MiniMax |
82
98
  | kimi-code/k3 | Premium/Standard/Economy | $0.002 | Kimi |
99
+ | kimi-code/k3-256k | Maximum | Unpriced | Kimi subscription |
83
100
  | default | - | $0.015 | Fallback |
84
101
 
85
102
  ## Cost Estimation per Session
@@ -155,7 +172,18 @@ This is a conservative estimate. Actual costs may vary.
155
172
 
156
173
  ### Data Source
157
174
 
158
- Rates are defined in `scripts/lib/costs.sh` and are periodically updated to reflect official provider pricing.
175
+ Rates are defined in `docs/cost_rates.json` and are periodically updated from
176
+ the providers' official pricing pages: [Anthropic](https://platform.claude.com/docs/en/about-claude/models/choosing-a-model),
177
+ [Google](https://ai.google.dev/gemini-api/docs/pricing),
178
+ [Mistral](https://docs.mistral.ai/getting-started/models/models_overview/),
179
+ [xAI](https://docs.x.ai/developers/models), and
180
+ [MiniMax](https://platform.minimax.io/docs/guides/pricing-paygo). Gemini 3.7's
181
+ listed rate is the promotion effective through December 31, 2026.
182
+
183
+ `glm-5.3`, `qwen3.8-max`, and `kimi-code/k3-256k` are explicitly unpriced on
184
+ the transports used here. Their zero catalog entries prevent the estimator from
185
+ inventing a dollar figure; session reports disclose their exclusion rather than
186
+ presenting them as free.
159
187
 
160
188
  ### Dependencies
161
189
 
@@ -37,6 +37,8 @@ The schema is defined in `scripts/lib/schema.json` following JSON Schema Draft-0
37
37
  "tokens_output": 300,
38
38
  "latency_ms": 2345,
39
39
  "model_version": "gemini-3.1-pro-preview",
40
+ "requested_model": "gemini-3.1-pro-preview",
41
+ "model_identity_source": "provider-reported",
40
42
  "cli_version": "0.27.0",
41
43
  "cli_compatibility": "capability-probed",
42
44
  "timestamp": "2024-01-14T12:34:56Z"
@@ -198,6 +200,8 @@ Present only if Multi-Agent Debate is enabled (round >= 2):
198
200
  "tokens_output": 300,
199
201
  "latency_ms": 2345,
200
202
  "model_version": "gemini-3.1-pro-preview",
203
+ "requested_model": "gemini-3.1-pro-preview",
204
+ "model_identity_source": "provider-reported",
201
205
  "timestamp": "2024-01-14T12:34:56Z"
202
206
  }
203
207
  }
@@ -210,7 +214,9 @@ Present only if Multi-Agent Debate is enabled (round >= 2):
210
214
  | `tokens_input` | integer | Prompt tokens, when the provider reported them (API mode only) |
211
215
  | `tokens_output` | integer | Completion tokens, when the provider reported them (API mode only) |
212
216
  | `latency_ms` | integer | Response time in ms |
213
- | `model_version` | string | Exact model version |
217
+ | `model_version` | string | Best effective model identifier available to the transport |
218
+ | `requested_model` | string | Model identifier requested before provider resolution |
219
+ | `model_identity_source` | string | `provider-reported` \| `capability-probed` \| `requested-only` |
214
220
  | `cli_version` | string | Observed CLI version for provenance; never a compatibility gate |
215
221
  | `cli_compatibility` | string | Capability-probe result: `capability-probed` or `incompatible` |
216
222
  | `timestamp` | string | ISO 8601 timestamp |
@@ -335,6 +341,8 @@ jq 'has("consultant") and has("response") and has("confidence")' output.json
335
341
  "tokens_source": "estimated",
336
342
  "latency_ms": 1850,
337
343
  "model_version": "gemini-3.1-pro-preview",
344
+ "requested_model": "gemini-3.1-pro-preview",
345
+ "model_identity_source": "requested-only",
338
346
  "timestamp": "2024-01-14T12:34:56Z"
339
347
  }
340
348
  }