ai-consultants 3.2.0 → 3.4.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 +14 -2
- package/CLAUDE.md +29 -6
- package/README.md +9 -6
- package/SKILL.md +7 -2
- package/docs/COST_RATES.md +13 -13
- package/docs/JSON_SCHEMA.md +4 -0
- package/docs/RECIPES.md +17 -7
- package/docs/cost_rates.json +52 -23
- package/docs/releases/v3.3.0.md +80 -0
- package/docs/releases/v3.4.0.md +102 -0
- package/package.json +1 -1
- package/references/configuration.md +8 -3
- package/scripts/config.sh +9 -9
- package/scripts/configure.sh +9 -0
- package/scripts/doctor.sh +8 -2
- package/scripts/lib/api.sh +3 -3
- package/scripts/lib/common.sh +28 -3
- package/scripts/lib/schema.json +9 -0
- package/scripts/query_claude.sh +30 -9
- package/scripts/query_codex.sh +116 -18
- package/scripts/query_gemini.sh +32 -7
- package/scripts/query_grok.sh +161 -46
- package/scripts/query_kimi.sh +46 -0
- package/scripts/update_clis.sh +7 -1
package/.env.example
CHANGED
|
@@ -122,11 +122,19 @@ 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
|
+
# Reasoning effort for the agy CLI. Passed as --effort <value>. Accepts only
|
|
126
|
+
# low|medium|high; anything else is rejected by the provider and surfaces as a
|
|
127
|
+
# diagnosed error (provider owns the enum — same stance as QWEN3_REASONING_EFFORT).
|
|
128
|
+
# GEMINI_REASONING_EFFORT=
|
|
125
129
|
|
|
126
130
|
# Codex - The Pragmatist
|
|
127
|
-
CODEX_MODEL=gpt-5.
|
|
131
|
+
CODEX_MODEL=gpt-5.6-sol
|
|
128
132
|
CODEX_TIMEOUT=180
|
|
129
133
|
CODEX_CMD=codex
|
|
134
|
+
# Reasoning effort for the codex CLI (and API mode). Passed as
|
|
135
|
+
# -c model_reasoning_effort=<value>. The provider owns the accepted enum;
|
|
136
|
+
# an unsupported value is rejected rather than silently ignored.
|
|
137
|
+
# CODEX_REASONING_EFFORT=
|
|
130
138
|
|
|
131
139
|
# Mistral Vibe - The Devil's Advocate
|
|
132
140
|
MISTRAL_MODEL=mistral-large-3
|
|
@@ -148,6 +156,10 @@ CLAUDE_MODEL=claude-opus-5 # ai-consultants:default
|
|
|
148
156
|
CLAUDE_TIMEOUT=240
|
|
149
157
|
CLAUDE_CMD=claude
|
|
150
158
|
CLAUDE_API_MAX_TOKENS=16384
|
|
159
|
+
# Reasoning effort for the claude CLI (and API mode). Passed as --effort <value>.
|
|
160
|
+
# The provider owns the accepted enum; an unsupported value is rejected rather
|
|
161
|
+
# than silently ignored.
|
|
162
|
+
# CLAUDE_REASONING_EFFORT=
|
|
151
163
|
|
|
152
164
|
# Qwen3 - The Analyst (CLI/API switchable v2.7)
|
|
153
165
|
QWEN3_MODEL=qwen3.7-max
|
|
@@ -157,7 +169,7 @@ QWEN3_CMD=qwen
|
|
|
157
169
|
# mode this is ignored (with a warning); set model.reasoningEffort in
|
|
158
170
|
# ~/.qwen/settings.json instead. Accepted: none|minimal|low|medium|high|xhigh|max
|
|
159
171
|
# (the provider's own enum). The valid subset depends on the model:
|
|
160
|
-
# qwen3.8-max
|
|
172
|
+
# qwen3.8-max takes all of them EXCEPT 'none' - thinking cannot be
|
|
161
173
|
# disabled on it - and defaults to xhigh. An unsupported combination is
|
|
162
174
|
# rejected by the provider with a 400, not silently ignored.
|
|
163
175
|
# QWEN3_REASONING_EFFORT=
|
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.
|
|
9
|
+
**Version**: 3.4.0
|
|
10
10
|
|
|
11
11
|
## Distribution
|
|
12
12
|
|
|
@@ -368,9 +368,9 @@ Three tiers of models are available for each consultant, configurable via `apply
|
|
|
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.
|
|
372
|
-
| **standard** | Good quality at reasonable cost | claude-sonnet-
|
|
373
|
-
| **economy** | Optimized for speed and low cost | claude-haiku-4-5, Gemini 3.
|
|
371
|
+
| **premium** | Latest flagship models | claude-opus-5, Gemini 3.1 Pro (High), gpt-5.6-sol |
|
|
372
|
+
| **standard** | Good quality at reasonable cost | claude-sonnet-5, Gemini 3.6 Flash (High), gpt-5.6-terra |
|
|
373
|
+
| **economy** | Optimized for speed and low cost | claude-haiku-4-5, Gemini 3.6 Flash (Low), gpt-5.6-luna |
|
|
374
374
|
|
|
375
375
|
**Default models are now premium tier** for maximum quality.
|
|
376
376
|
|
|
@@ -407,7 +407,7 @@ All consultants now use premium models by default:
|
|
|
407
407
|
|------------|---------------|
|
|
408
408
|
| Claude | claude-opus-5 |
|
|
409
409
|
| Gemini | Gemini 3.1 Pro (High) (via agy CLI) |
|
|
410
|
-
| Codex | gpt-5.
|
|
410
|
+
| Codex | gpt-5.6-sol |
|
|
411
411
|
| Mistral | mistral-large-3 |
|
|
412
412
|
| Cursor | composer-2.5 |
|
|
413
413
|
| DeepSeek | deepseek-v4-pro |
|
|
@@ -617,7 +617,7 @@ for f in scripts/*.sh scripts/lib/*.sh; do bash -n "$f" && echo "OK: $f"; done
|
|
|
617
617
|
| `CLAUDE_API_MAX_TOKENS` | 16384 | Claude API thinking + visible-output budget |
|
|
618
618
|
| `GEMINI_MODEL` | Gemini 3.1 Pro (High) | Gemini agy CLI model (v2.15) |
|
|
619
619
|
| `GEMINI_API_MODEL` | gemini-3.1-pro-preview | Gemini API-mode model ID (v2.15) |
|
|
620
|
-
| `CODEX_MODEL` | gpt-5.
|
|
620
|
+
| `CODEX_MODEL` | gpt-5.6-sol | Codex model (v2.5) |
|
|
621
621
|
| `MISTRAL_MODEL` | mistral-large-3 | Mistral model (v2.5) |
|
|
622
622
|
| `SYNTHESIS_STRATEGY` | coverage | Synthesis strategy (coverage=union of distinct points) |
|
|
623
623
|
| `ENABLE_SEMANTIC_CACHE` | true | Semantic response caching (v2.3) |
|
|
@@ -787,6 +787,29 @@ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/s
|
|
|
787
787
|
|
|
788
788
|
## Changelog
|
|
789
789
|
|
|
790
|
+
### v3.4.0
|
|
791
|
+
- **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.
|
|
792
|
+
- **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.
|
|
793
|
+
- **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`).
|
|
794
|
+
- **`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.
|
|
795
|
+
- **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.
|
|
796
|
+
- **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.
|
|
797
|
+
- **`*_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.
|
|
798
|
+
- **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.
|
|
799
|
+
- **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`.
|
|
800
|
+
- **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.
|
|
801
|
+
- **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.
|
|
802
|
+
- **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.
|
|
803
|
+
- **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.
|
|
804
|
+
- **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.
|
|
805
|
+
- **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.
|
|
806
|
+
|
|
807
|
+
### v3.3.0
|
|
808
|
+
- **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.
|
|
809
|
+
- **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.
|
|
810
|
+
- **Optional capabilities remain optional.** Grok's `--no-auto-update` is used when the help surface advertises it, but its absence does not reject an otherwise compatible CLI. The capability probe itself uses `--help` and model/provider inventory commands; it does not send a consultation. Grok preserves its existing narrowly classified API fallback when the required CLI route is unavailable, while Kimi continues to fail closed because it has no API transport.
|
|
811
|
+
- **Regression coverage pins the compatibility contract rather than today's binaries.** Grok's suite accepts an alternate compatible version, rejects an incomplete interface before dispatch, checks requested-model availability, and preserves the post-launch/API-fallback boundary (32 checks). Kimi's suite covers an alternate compatible version, an incomplete interface, and a missing requested model (8 checks). Full release gate: 17/17 suites; core suite: 299/299; ShellCheck green. Installed Grok 0.2.114 and Kimi 0.27.0 also passed no-model-call probes.
|
|
812
|
+
|
|
790
813
|
### v3.2.0
|
|
791
814
|
- **Claude premium upgraded from Opus 4.8 to Opus 5.** The default `CLAUDE_MODEL`, premium/max/best tier, standalone adapter fallback, configuration examples, model table, and cost catalog now resolve to the canonical `claude-opus-5` ID (`scripts/config.sh:274`, `scripts/query_claude.sh:29`). Pricing remains $5/$25 per million tokens; `claude-opus-4-8` stays in the legacy catalog for historical responses and intentional pins.
|
|
792
815
|
- **Opus 5 adaptive thinking is accounted for end to end.** Claude CLI mode now requests the JSON result envelope, extracts visible `.result`, aggregates provider usage across `modelUsage`, and persists the provider's exact `costUSD` (`scripts/query_claude.sh:72-126`, `scripts/lib/common.sh:904-980`, `scripts/lib/costs.sh:307-354`). This fixes the review finding that pricing only the visible answer undercounted hidden thinking and cache charges. The implementation deliberately prefers provider cost over reconstructing cache pricing from token totals.
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# AI Consultants v3.
|
|
1
|
+
# AI Consultants v3.4.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
|
-
[](https://github.com/matteoscurati/ai-consultants)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](https://docs.anthropic.com/en/docs/claude-code/skills)
|
|
8
8
|
[](https://github.com/matteoscurati/ai-consultants)
|
|
@@ -388,7 +388,10 @@ 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.
|
|
391
|
+
CLI/API switchable. Grok and Kimi compatibility is capability-probed before
|
|
392
|
+
dispatch: the requested model, headless arguments, and structured-output
|
|
393
|
+
surface must be available. Any CLI version is accepted when those checks pass;
|
|
394
|
+
the observed version is response provenance only.
|
|
392
395
|
|
|
393
396
|
### API-Only Consultants
|
|
394
397
|
|
|
@@ -444,9 +447,9 @@ parallel and returns the coverage union.
|
|
|
444
447
|
|
|
445
448
|
| Consultant | Premium | Standard | Economy |
|
|
446
449
|
|------------|---------|----------|---------|
|
|
447
|
-
| Claude | claude-opus-5 | claude-sonnet-
|
|
448
|
-
| Gemini | Gemini 3.1 Pro (High) | Gemini 3.
|
|
449
|
-
| Codex | gpt-5.
|
|
450
|
+
| Claude | claude-opus-5 | claude-sonnet-5 | claude-haiku-4-5 |
|
|
451
|
+
| Gemini | Gemini 3.1 Pro (High) | Gemini 3.6 Flash (High) | Gemini 3.6 Flash (Low) |
|
|
452
|
+
| Codex | gpt-5.6-sol | gpt-5.6-terra | gpt-5.6-luna |
|
|
450
453
|
| Mistral | mistral-large-3 | mistral-medium-latest | devstral-small-2 |
|
|
451
454
|
| Cursor | composer-2.5 | composer-2 | gemini-3-flash |
|
|
452
455
|
| DeepSeek | deepseek-v4-pro | deepseek-v4-flash | deepseek-v4-flash |
|
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.
|
|
8
|
+
version: 3.4.0
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
# AI Consultants v3.
|
|
11
|
+
# AI Consultants v3.4.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
|
|
|
@@ -45,6 +45,11 @@ Configuration (presets, strategies, features, personas, API keys) can be managed
|
|
|
45
45
|
|
|
46
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.
|
|
47
47
|
|
|
48
|
+
Grok and Kimi are compatible by capability rather than by CLI version. Before
|
|
49
|
+
dispatch, their adapters verify the required headless arguments, requested
|
|
50
|
+
model, and structured-output surface. Compatible version changes are accepted;
|
|
51
|
+
the observed version is recorded only as response provenance.
|
|
52
|
+
|
|
48
53
|
**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.
|
|
49
54
|
|
|
50
55
|
## Requirements
|
package/docs/COST_RATES.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Cost Rates - AI Consultants v3.
|
|
1
|
+
# Cost Rates - AI Consultants v3.4.0
|
|
2
2
|
|
|
3
3
|
This page documents the per-token rates used by the cost tracking system.
|
|
4
4
|
|
|
@@ -21,13 +21,13 @@ Since v2.5, models are organized into three tiers. Use `apply_model_tier()` or `
|
|
|
21
21
|
| Model | Tier | Cost/1K | Consultant |
|
|
22
22
|
|-------|------|---------|------------|
|
|
23
23
|
| Gemini 3.1 Pro (High) | Premium | $0.002 | Gemini (agy CLI) |
|
|
24
|
-
| Gemini 3.
|
|
25
|
-
| Gemini 3.
|
|
26
|
-
| gpt-5.
|
|
27
|
-
| gpt-5.
|
|
28
|
-
| gpt-5.
|
|
24
|
+
| Gemini 3.6 Flash (High) | Standard | $0.0015 | Gemini (agy CLI) |
|
|
25
|
+
| Gemini 3.6 Flash (Low) | Economy | $0.0015 | Gemini (agy CLI) |
|
|
26
|
+
| gpt-5.6-sol | Premium | $0.005 | Codex |
|
|
27
|
+
| gpt-5.6-terra | Standard | $0.002 | Codex |
|
|
28
|
+
| gpt-5.6-luna | Economy | $0.0002 | Codex |
|
|
29
29
|
| claude-opus-5 | Premium | $0.005 | Claude |
|
|
30
|
-
| claude-sonnet-
|
|
30
|
+
| claude-sonnet-5 | Standard | $0.003 | Claude |
|
|
31
31
|
| claude-haiku-4-5 | Economy | $0.001 | Claude |
|
|
32
32
|
| mistral-large-3 | Premium | $0.002 | Mistral |
|
|
33
33
|
| mistral-medium-latest | Standard | $0.001 | Mistral |
|
|
@@ -54,13 +54,13 @@ Since v2.5, models are organized into three tiers. Use `apply_model_tier()` or `
|
|
|
54
54
|
| Model | Tier | Cost/1K | Consultant |
|
|
55
55
|
|-------|------|---------|------------|
|
|
56
56
|
| Gemini 3.1 Pro (High) | Premium | $0.012 | Gemini (agy CLI) |
|
|
57
|
-
| Gemini 3.
|
|
58
|
-
| Gemini 3.
|
|
59
|
-
| gpt-5.
|
|
60
|
-
| gpt-5.
|
|
61
|
-
| gpt-5.
|
|
57
|
+
| Gemini 3.6 Flash (High) | Standard | $0.0075 | Gemini (agy CLI) |
|
|
58
|
+
| Gemini 3.6 Flash (Low) | Economy | $0.0075 | Gemini (agy CLI) |
|
|
59
|
+
| gpt-5.6-sol | Premium | $0.030 | Codex |
|
|
60
|
+
| gpt-5.6-terra | Standard | $0.012 | Codex |
|
|
61
|
+
| gpt-5.6-luna | Economy | $0.0012 | Codex |
|
|
62
62
|
| claude-opus-5 | Premium | $0.025 | Claude |
|
|
63
|
-
| claude-sonnet-
|
|
63
|
+
| claude-sonnet-5 | Standard | $0.015 | Claude |
|
|
64
64
|
| claude-haiku-4-5 | Economy | $0.005 | Claude |
|
|
65
65
|
| mistral-large-3 | Premium | $0.006 | Mistral |
|
|
66
66
|
| mistral-medium-latest | Standard | $0.003 | Mistral |
|
package/docs/JSON_SCHEMA.md
CHANGED
|
@@ -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
|
+
"cli_version": "0.27.0",
|
|
41
|
+
"cli_compatibility": "capability-probed",
|
|
40
42
|
"timestamp": "2024-01-14T12:34:56Z"
|
|
41
43
|
}
|
|
42
44
|
}
|
|
@@ -209,6 +211,8 @@ Present only if Multi-Agent Debate is enabled (round >= 2):
|
|
|
209
211
|
| `tokens_output` | integer | Completion tokens, when the provider reported them (API mode only) |
|
|
210
212
|
| `latency_ms` | integer | Response time in ms |
|
|
211
213
|
| `model_version` | string | Exact model version |
|
|
214
|
+
| `cli_version` | string | Observed CLI version for provenance; never a compatibility gate |
|
|
215
|
+
| `cli_compatibility` | string | Capability-probe result: `capability-probed` or `incompatible` |
|
|
212
216
|
| `timestamp` | string | ISO 8601 timestamp |
|
|
213
217
|
|
|
214
218
|
## Enum Values
|
package/docs/RECIPES.md
CHANGED
|
@@ -190,28 +190,38 @@ For every available variable and its default, see
|
|
|
190
190
|
[`references/configuration.md`](../references/configuration.md). The executable
|
|
191
191
|
source of truth is [`scripts/config.sh`](../scripts/config.sh).
|
|
192
192
|
|
|
193
|
-
## Qwen via Qwen Cloud Token Plan (opt-in
|
|
193
|
+
## Qwen via Qwen Cloud Token Plan (opt-in)
|
|
194
194
|
|
|
195
|
-
`qwen3.8-max
|
|
195
|
+
`qwen3.8-max` is **not** served by DashScope/ModelStudio. It is reachable
|
|
196
196
|
only through a Qwen Cloud **Token Plan** subscription, which has its own base URL
|
|
197
197
|
and its own API key. This is opt-in: nothing below is a default, and the panel's
|
|
198
198
|
premium Qwen model remains `qwen3.7-max`.
|
|
199
199
|
|
|
200
200
|
Understand the tradeoffs before enabling it:
|
|
201
201
|
|
|
202
|
-
- **
|
|
203
|
-
|
|
202
|
+
- **Token Plan only.** No open weights, no published benchmarks, no stable
|
|
203
|
+
per-token price.
|
|
204
204
|
- **Billed in prepaid credits**, not per token — and credit consumption varies
|
|
205
205
|
with reasoning depth. Cost reports therefore exclude it and say so explicitly
|
|
206
206
|
rather than estimating a figure.
|
|
207
207
|
|
|
208
|
+
Both `qwen3.8-max` and `qwen3.8-max-preview` are served by Token Plan and are
|
|
209
|
+
**separate deployments**, not an alias or rename: each completion reports its
|
|
210
|
+
own requested id back in `.model`. Verified against the live endpoint on
|
|
211
|
+
2026-08-05. Prefer `qwen3.8-max`; `qwen3.8-max-preview` is the older
|
|
212
|
+
deployment and the natural candidate for eventual retirement. An existing
|
|
213
|
+
`qwen3.8-max-preview` pin keeps working and stays correctly catalogued — both
|
|
214
|
+
ids are listed in `unpriced_models`, so the session report continues to
|
|
215
|
+
disclose them as credit-billed and excluded from the total rather than falling
|
|
216
|
+
through to `default_rate`.
|
|
217
|
+
|
|
208
218
|
### API mode (the effort knob works here)
|
|
209
219
|
|
|
210
220
|
```bash
|
|
211
221
|
QWEN3_USE_API=true
|
|
212
222
|
QWEN3_FORMAT=openai # Token Plan is OpenAI-compatible; DashScope is not
|
|
213
223
|
QWEN3_API_URL=https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions
|
|
214
|
-
QWEN3_MODEL=qwen3.8-max
|
|
224
|
+
QWEN3_MODEL=qwen3.8-max
|
|
215
225
|
QWEN3_API_KEY=<your Token Plan key>
|
|
216
226
|
QWEN3_REASONING_EFFORT=high # none|minimal|low|medium|high|xhigh|max; default xhigh
|
|
217
227
|
```
|
|
@@ -240,8 +250,8 @@ ai-consultants cannot deliver it per call and warns if you set
|
|
|
240
250
|
"modelProviders": {
|
|
241
251
|
"openai": [
|
|
242
252
|
{
|
|
243
|
-
"id": "qwen3.8-max
|
|
244
|
-
"name": "[Token Plan] qwen3.8-max
|
|
253
|
+
"id": "qwen3.8-max",
|
|
254
|
+
"name": "[Token Plan] qwen3.8-max",
|
|
245
255
|
"baseUrl": "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
|
|
246
256
|
"envKey": "BAILIAN_TOKEN_PLAN_API_KEY",
|
|
247
257
|
"generationConfig": { "reasoning": { "effort": "high" } }
|
package/docs/cost_rates.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "3.
|
|
2
|
+
"version": "3.4.0",
|
|
3
3
|
"updated": "2026-07-25",
|
|
4
4
|
"models": {
|
|
5
5
|
"_comment_units": "All rates are USD per 1,000 tokens (per-1K). lib/costs.sh computes cost as (token_count / 1000) * rate, so every value here MUST be a per-1K rate = (provider $/1M price) / 1000. Do NOT paste $/MTok figures directly.",
|
|
@@ -17,18 +17,26 @@
|
|
|
17
17
|
"input": 0.002,
|
|
18
18
|
"output": 0.012
|
|
19
19
|
},
|
|
20
|
-
"Gemini 3.
|
|
20
|
+
"Gemini 3.6 Flash (High)": {
|
|
21
21
|
"input": 0.0015,
|
|
22
|
-
"output": 0.
|
|
22
|
+
"output": 0.0075
|
|
23
23
|
},
|
|
24
|
-
"Gemini 3.
|
|
24
|
+
"Gemini 3.6 Flash (Low)": {
|
|
25
25
|
"input": 0.0015,
|
|
26
|
-
"output": 0.
|
|
26
|
+
"output": 0.0075
|
|
27
27
|
},
|
|
28
|
-
"gpt-5.
|
|
28
|
+
"gpt-5.6-sol": {
|
|
29
29
|
"input": 0.005,
|
|
30
30
|
"output": 0.030
|
|
31
31
|
},
|
|
32
|
+
"gpt-5.6-terra": {
|
|
33
|
+
"input": 0.002,
|
|
34
|
+
"output": 0.012
|
|
35
|
+
},
|
|
36
|
+
"gpt-5.6-luna": {
|
|
37
|
+
"input": 0.0002,
|
|
38
|
+
"output": 0.0012
|
|
39
|
+
},
|
|
32
40
|
"mistral-large-3": {
|
|
33
41
|
"input": 0.002,
|
|
34
42
|
"output": 0.006
|
|
@@ -75,7 +83,7 @@
|
|
|
75
83
|
"output": 0.00
|
|
76
84
|
},
|
|
77
85
|
"_comment_standard": "Standard tier models",
|
|
78
|
-
"claude-sonnet-
|
|
86
|
+
"claude-sonnet-5": {
|
|
79
87
|
"input": 0.003,
|
|
80
88
|
"output": 0.015
|
|
81
89
|
},
|
|
@@ -137,6 +145,30 @@
|
|
|
137
145
|
"output": 0.001
|
|
138
146
|
},
|
|
139
147
|
"_comment_legacy": "Legacy models for backwards compatibility",
|
|
148
|
+
"Gemini 3.5 Flash (High)": {
|
|
149
|
+
"input": 0.0015,
|
|
150
|
+
"output": 0.009
|
|
151
|
+
},
|
|
152
|
+
"Gemini 3.5 Flash (Low)": {
|
|
153
|
+
"input": 0.0015,
|
|
154
|
+
"output": 0.009
|
|
155
|
+
},
|
|
156
|
+
"gpt-5.5": {
|
|
157
|
+
"input": 0.005,
|
|
158
|
+
"output": 0.030
|
|
159
|
+
},
|
|
160
|
+
"gpt-5.4": {
|
|
161
|
+
"input": 0.0025,
|
|
162
|
+
"output": 0.015
|
|
163
|
+
},
|
|
164
|
+
"gpt-5.4-nano": {
|
|
165
|
+
"input": 0.0002,
|
|
166
|
+
"output": 0.00125
|
|
167
|
+
},
|
|
168
|
+
"claude-sonnet-4-6": {
|
|
169
|
+
"input": 0.003,
|
|
170
|
+
"output": 0.015
|
|
171
|
+
},
|
|
140
172
|
"claude-opus-4-8": {
|
|
141
173
|
"input": 0.005,
|
|
142
174
|
"output": 0.025
|
|
@@ -289,14 +321,6 @@
|
|
|
289
321
|
"input": 0.0003,
|
|
290
322
|
"output": 0.0015
|
|
291
323
|
},
|
|
292
|
-
"gpt-5.4": {
|
|
293
|
-
"input": 0.0025,
|
|
294
|
-
"output": 0.015
|
|
295
|
-
},
|
|
296
|
-
"gpt-5.4-nano": {
|
|
297
|
-
"input": 0.0002,
|
|
298
|
-
"output": 0.00125
|
|
299
|
-
},
|
|
300
324
|
"composer-2.5": {
|
|
301
325
|
"input": 0.0005,
|
|
302
326
|
"output": 0.0025
|
|
@@ -326,19 +350,24 @@
|
|
|
326
350
|
"output": 0.0025
|
|
327
351
|
},
|
|
328
352
|
"_comment_unpriced": "Credit-billed models: drawn from a prepaid subscription pool, with no published per-token price. Rated 0 so the estimator does not fabricate a figure - an absent model would otherwise fall through to default_rate (0.005/0.015) and be reported as a confident, wrong number. Every entry here must also be listed in unpriced_models, which is what makes the session report disclose the exclusion instead of implying the model was free.",
|
|
353
|
+
"qwen3.8-max": {
|
|
354
|
+
"input": 0,
|
|
355
|
+
"output": 0
|
|
356
|
+
},
|
|
329
357
|
"qwen3.8-max-preview": {
|
|
330
358
|
"input": 0,
|
|
331
359
|
"output": 0
|
|
332
360
|
}
|
|
333
361
|
},
|
|
334
362
|
"unpriced_models": [
|
|
363
|
+
"qwen3.8-max",
|
|
335
364
|
"qwen3.8-max-preview"
|
|
336
365
|
],
|
|
337
366
|
"consultant_fallbacks": {
|
|
338
|
-
"_comment": "Premium defaults - Updated
|
|
367
|
+
"_comment": "Premium defaults - Updated Aug 2026",
|
|
339
368
|
"claude": "claude-opus-5",
|
|
340
369
|
"gemini": "Gemini 3.1 Pro (High)",
|
|
341
|
-
"codex": "gpt-5.
|
|
370
|
+
"codex": "gpt-5.6-sol",
|
|
342
371
|
"mistral": "mistral-large-3",
|
|
343
372
|
"deepseek": "deepseek-v4-pro",
|
|
344
373
|
"glm": "glm-5.2",
|
|
@@ -353,7 +382,7 @@
|
|
|
353
382
|
"premium": {
|
|
354
383
|
"claude": "claude-opus-5",
|
|
355
384
|
"gemini": "Gemini 3.1 Pro (High)",
|
|
356
|
-
"codex": "gpt-5.
|
|
385
|
+
"codex": "gpt-5.6-sol",
|
|
357
386
|
"mistral": "mistral-large-3",
|
|
358
387
|
"deepseek": "deepseek-v4-pro",
|
|
359
388
|
"glm": "glm-5.2",
|
|
@@ -364,9 +393,9 @@
|
|
|
364
393
|
"minimax": "minimax-m2.7"
|
|
365
394
|
},
|
|
366
395
|
"standard": {
|
|
367
|
-
"claude": "claude-sonnet-
|
|
368
|
-
"gemini": "Gemini 3.
|
|
369
|
-
"codex": "gpt-5.
|
|
396
|
+
"claude": "claude-sonnet-5",
|
|
397
|
+
"gemini": "Gemini 3.6 Flash (High)",
|
|
398
|
+
"codex": "gpt-5.6-terra",
|
|
370
399
|
"mistral": "mistral-medium-latest",
|
|
371
400
|
"deepseek": "deepseek-v4-flash",
|
|
372
401
|
"glm": "glm-5.2",
|
|
@@ -378,8 +407,8 @@
|
|
|
378
407
|
},
|
|
379
408
|
"economy": {
|
|
380
409
|
"claude": "claude-haiku-4-5",
|
|
381
|
-
"gemini": "Gemini 3.
|
|
382
|
-
"codex": "gpt-5.
|
|
410
|
+
"gemini": "Gemini 3.6 Flash (Low)",
|
|
411
|
+
"codex": "gpt-5.6-luna",
|
|
383
412
|
"mistral": "devstral-small-2",
|
|
384
413
|
"deepseek": "deepseek-v4-flash",
|
|
385
414
|
"glm": "glm-4-flash",
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Release v3.3.0
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-07-29
|
|
4
|
+
**Type:** Minor — capability-based Grok and Kimi CLI compatibility
|
|
5
|
+
**Previous:** v3.2.0
|
|
6
|
+
|
|
7
|
+
## Highlights
|
|
8
|
+
|
|
9
|
+
- Grok and Kimi now prove CLI compatibility from the interface they actually need, not from a version string.
|
|
10
|
+
- Compatible future and vendor-custom CLI versions are accepted without a release-specific allowlist.
|
|
11
|
+
- Incomplete interfaces and missing requested models are rejected before a model request begins.
|
|
12
|
+
- Responses expose the observed CLI version as provenance alongside the capability-probe result.
|
|
13
|
+
|
|
14
|
+
## What's New
|
|
15
|
+
|
|
16
|
+
### Capability-based CLI compatibility
|
|
17
|
+
|
|
18
|
+
Before dispatch, the Grok adapter validates its complete headless argument
|
|
19
|
+
surface, strict sandbox controls, structured output, authentication state, and
|
|
20
|
+
the requested model. The probe runs inside an isolated environment and does not
|
|
21
|
+
send a consultation.
|
|
22
|
+
|
|
23
|
+
Kimi now validates prompt mode, `stream-json`, provider inventory, and the exact
|
|
24
|
+
configured model before dispatch. A CLI with a different version number remains
|
|
25
|
+
compatible when these capabilities are present; a CLI that cannot satisfy the
|
|
26
|
+
contract fails before a model call.
|
|
27
|
+
|
|
28
|
+
Grok's `--no-auto-update` flag remains optional. It is enabled when the installed
|
|
29
|
+
CLI advertises it and omitted otherwise, so a useful automation control does not
|
|
30
|
+
become an accidental version constraint.
|
|
31
|
+
|
|
32
|
+
### Diagnostic provenance
|
|
33
|
+
|
|
34
|
+
Successful Grok and Kimi CLI responses now include:
|
|
35
|
+
|
|
36
|
+
| Field | Meaning |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `metadata.cli_version` | The version reported by the CLI, retained for diagnosis and provenance |
|
|
39
|
+
| `metadata.cli_compatibility` | `capability-probed` when the required interface passed |
|
|
40
|
+
|
|
41
|
+
These fields are additive. Existing response consumers and non-CLI transports
|
|
42
|
+
do not need to provide them.
|
|
43
|
+
|
|
44
|
+
### Verification
|
|
45
|
+
|
|
46
|
+
- Full repository gate: 17/17 suites
|
|
47
|
+
- Core suite: 299/299 checks
|
|
48
|
+
- Grok adapter suite: 32/32 checks
|
|
49
|
+
- Kimi adapter suite: 8/8 checks
|
|
50
|
+
- ShellCheck: green
|
|
51
|
+
- Installed Grok 0.2.114 and Kimi 0.27.0: no-model-call capability probes passed
|
|
52
|
+
|
|
53
|
+
## Breaking Changes
|
|
54
|
+
|
|
55
|
+
None — this release is backwards-compatible. No configuration changes are
|
|
56
|
+
required.
|
|
57
|
+
|
|
58
|
+
An installed Grok or Kimi CLI that lacks the adapter's required command,
|
|
59
|
+
structured-output, or requested-model surface will now be rejected before
|
|
60
|
+
dispatch instead of failing later during a consultation.
|
|
61
|
+
|
|
62
|
+
## Upgrade Guide
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# npx (no install)
|
|
66
|
+
npx ai-consultants@latest "your question"
|
|
67
|
+
|
|
68
|
+
# git clone install
|
|
69
|
+
cd ~/.claude/skills/ai-consultants && git pull
|
|
70
|
+
|
|
71
|
+
# curl | bash install
|
|
72
|
+
curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/scripts/install.sh | bash
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
No configuration changes are required. If an adapter reports an incompatible
|
|
76
|
+
CLI, update that CLI and run `ai-consultants doctor` before retrying.
|
|
77
|
+
|
|
78
|
+
## Commits
|
|
79
|
+
|
|
80
|
+
- `c7bad95` Harden CLI capability checks
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Release v3.4.0
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-08-05
|
|
4
|
+
**Type:** Minor — Gemini works over SSH again, the Codex consultant is isolated, and the model catalog moves to the current generation
|
|
5
|
+
**Previous:** v3.3.0
|
|
6
|
+
|
|
7
|
+
## Highlights
|
|
8
|
+
|
|
9
|
+
- **Gemini consultations from an SSH session were failing authentication, and re-signing-in could not fix it.** Now fixed at every `agy` call site.
|
|
10
|
+
- **The Codex consultant no longer inherits your local Codex environment** — no `config.toml`, no `AGENTS.md`, no hooks, no MCP servers, and a read-only sandbox.
|
|
11
|
+
- **Model catalog refreshed** to `gpt-5.6-sol/terra/luna`, `claude-sonnet-5`, and Gemini 3.6 Flash, every id verified against the installed CLIs rather than documentation.
|
|
12
|
+
- **`*_REASONING_EFFORT` actually works now.** It was honored in API mode only, which meant it did nothing in the default CLI-first configuration.
|
|
13
|
+
- **Existing installations receive the new Codex model.** Without the migration added here, they would have kept querying `gpt-5.5` indefinitely while every doc claimed otherwise.
|
|
14
|
+
|
|
15
|
+
## What's New
|
|
16
|
+
|
|
17
|
+
### Gemini authentication over SSH
|
|
18
|
+
|
|
19
|
+
The Antigravity CLI picks its credential store from the environment. When it sees any of `SSH_CLIENT`, `SSH_CONNECTION`, or `SSH_TTY`, it switches to a file-based token store and never consults the macOS Keychain. If you signed in locally — as almost everyone does — the credential lives in the Keychain, so every Gemini consultation over SSH failed to authenticate. Signing in again did not help: the new login also landed in the store the CLI had already decided to ignore.
|
|
20
|
+
|
|
21
|
+
Those three markers are now stripped for every `agy` invocation: consultations, `doctor`, `update-clis`, and synthesis. On a local session they are already unset, so this changes nothing there. It grants no additional tools and no filesystem access — only which credential store the CLI consults.
|
|
22
|
+
|
|
23
|
+
If you drive ai-consultants over SSH, this is the release that makes Gemini work.
|
|
24
|
+
|
|
25
|
+
### The Codex consultant runs isolated
|
|
26
|
+
|
|
27
|
+
Previously the Codex adapter ran `codex exec` in your ambient environment. That meant your `~/.codex/config.toml`, the repository's `AGENTS.md`, your hooks, your MCP servers, and your execpolicy rules all shaped what is supposed to be an independent second opinion — and the sandbox was unpinned.
|
|
28
|
+
|
|
29
|
+
CLI mode now runs under an ephemeral HOME and working directory with `--ephemeral`, `--ignore-user-config`, `--ignore-rules`, and `-s read-only`. **Authentication is unaffected**: `CODEX_HOME` still resolves to your real Codex auth store.
|
|
30
|
+
|
|
31
|
+
Two side effects worth knowing:
|
|
32
|
+
|
|
33
|
+
- **Large contexts no longer break it.** The prompt is delivered on stdin rather than argv, which removes both the `ARG_MAX` ceiling and the exposure of your prompt in the process list.
|
|
34
|
+
- **Failures are reported as failures.** A timeout, authentication error, or exhausted retry is never rewritten into a success, even when a partial answer reached disk.
|
|
35
|
+
|
|
36
|
+
### Reasoning effort works in CLI mode
|
|
37
|
+
|
|
38
|
+
`*_REASONING_EFFORT` was documented as API-mode only. Since CLI-first transport became mandatory in v2.21, that meant the setting did nothing at all in the default configuration — while three consultant CLIs did expose the control.
|
|
39
|
+
|
|
40
|
+
| Consultant | Variable | Passed as |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| Codex | `CODEX_REASONING_EFFORT` | `-c model_reasoning_effort=<value>` |
|
|
43
|
+
| Claude | `CLAUDE_REASONING_EFFORT` | `--effort <value>` |
|
|
44
|
+
| Gemini | `GEMINI_REASONING_EFFORT` | `--effort <value>` |
|
|
45
|
+
|
|
46
|
+
There is deliberately no local allowlist of accepted values. The enum belongs to the provider — `agy`, for instance, accepts only `low|medium|high` — and an unsupported value comes back as a diagnosed error rather than being silently pre-empted. Consultants whose CLI has no such flag still warn, as before.
|
|
47
|
+
|
|
48
|
+
All three are optional. Leave them unset and each CLI keeps its own default.
|
|
49
|
+
|
|
50
|
+
### Model catalog
|
|
51
|
+
|
|
52
|
+
Every replacement id was verified live against the installed CLIs:
|
|
53
|
+
|
|
54
|
+
| Consultant | Premium | Standard | Economy |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| Codex | `gpt-5.6-sol` | `gpt-5.6-terra` | `gpt-5.6-luna` |
|
|
57
|
+
| Claude | `claude-opus-5` *(unchanged)* | `claude-sonnet-5` | `claude-haiku-4-5` *(unchanged)* |
|
|
58
|
+
| Gemini | `Gemini 3.1 Pro (High)` *(unchanged)* | `Gemini 3.6 Flash (High)` | `Gemini 3.6 Flash (Low)` |
|
|
59
|
+
|
|
60
|
+
Gemini's premium tier stays on 3.1 Pro because the live model inventory has no 3.6 Pro. Cost rates ship alongside the new ids — a model missing from the catalog would otherwise be billed at the fallback rate and reported as a confident, wrong figure. Superseded ids remain catalogued so pinned configurations and historical responses still resolve.
|
|
61
|
+
|
|
62
|
+
The opt-in Qwen Token Plan model is referenced as `qwen3.8-max`. Both it and `qwen3.8-max-preview` are still served by Token Plan, and they are separate deployments rather than aliases — each reports its own id back. Both stay catalogued, so an existing `-preview` pin keeps working and keeps its credit-billed cost disclosure. The shipped premium Qwen model remains `qwen3.7-max`.
|
|
63
|
+
|
|
64
|
+
### Existing installations get the new Codex model
|
|
65
|
+
|
|
66
|
+
`init` copies `.env.example` verbatim, so the then-current Codex default was written into your config as an ordinary value — and `configure` reads any unmarked value as a deliberate pin. A catalog refresh alone would therefore never have reached you: your panel would have kept querying `gpt-5.5` while the docs, tier tables, and cost catalog all said `gpt-5.6-sol`.
|
|
67
|
+
|
|
68
|
+
`configure` now migrates that one exact historical value and marks it as managed, so future refreshes can reach it too. **An explicit pin is preserved** — if you deliberately want `gpt-5.5`, record it with `--set CODEX_MODEL=gpt-5.5` and it will survive.
|
|
69
|
+
|
|
70
|
+
## Breaking Changes
|
|
71
|
+
|
|
72
|
+
None. All new parameters are additive, existing configurations migrate, and no consultant is added or removed.
|
|
73
|
+
|
|
74
|
+
Two behavior changes are worth noting even though nothing breaks:
|
|
75
|
+
|
|
76
|
+
- **Codex answers may differ**, because it no longer sees your local Codex configuration. That is the intent — an advisory consultation shaped by your own hooks and project instructions is not an independent opinion.
|
|
77
|
+
- **Codex and Gemini tier models changed.** Pin `CODEX_MODEL` / `GEMINI_MODEL` explicitly if you need the previous ones.
|
|
78
|
+
|
|
79
|
+
## Upgrade Guide
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# If installed via npx, nothing to do — npx resolves the published version
|
|
83
|
+
npx ai-consultants "your question"
|
|
84
|
+
|
|
85
|
+
# If installed via git clone
|
|
86
|
+
cd ~/.claude/skills/ai-consultants && git pull
|
|
87
|
+
|
|
88
|
+
# If installed via curl | bash
|
|
89
|
+
curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/scripts/install.sh | bash
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Then, to pick up the new Codex default in an existing configuration:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
ai-consultants configure
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
No other configuration changes are required. Run `ai-consultants doctor --live` afterwards to confirm each consultant actually answers — the static check only verifies that CLIs are installed and keys are present.
|
|
99
|
+
|
|
100
|
+
## Contributors
|
|
101
|
+
|
|
102
|
+
- @matteoscurati
|