ai-consultants 5.0.0 → 5.1.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 +5 -5
- package/CLAUDE.md +18 -9
- package/README.md +12 -11
- package/SKILL.md +4 -3
- package/docs/COST_RATES.md +13 -9
- package/docs/JSON_SCHEMA.md +20 -0
- package/docs/SETUP.md +55 -2
- package/docs/cost_rates.json +23 -13
- package/package.json +2 -1
- package/references/configuration.md +8 -6
- package/scripts/config.sh +10 -10
- package/scripts/configure.sh +33 -20
- package/scripts/doctor.sh +12 -0
- package/scripts/lib/api.sh +21 -0
- package/scripts/lib/api_query.sh +3 -1
- package/scripts/lib/claude_stream.jq +36 -0
- package/scripts/lib/common.sh +10 -0
- package/scripts/lib/costs.sh +14 -1
- package/scripts/lib/grok_oauth.sh +11 -3
- package/scripts/lib/grok_sandbox.sh +53 -0
- package/scripts/lib/schema.json +17 -4
- package/scripts/query_claude.sh +60 -34
- package/scripts/query_codex.sh +46 -12
- package/scripts/query_grok.sh +65 -14
package/.env.example
CHANGED
|
@@ -130,8 +130,8 @@ GEMINI_API_MODEL=gemini-3.1-pro-preview
|
|
|
130
130
|
# GEMINI_REASONING_EFFORT=
|
|
131
131
|
|
|
132
132
|
# Codex - The Pragmatist
|
|
133
|
-
CODEX_MODEL=gpt-
|
|
134
|
-
CODEX_API_MAX_TOKENS=
|
|
133
|
+
CODEX_MODEL=gpt-6-astra
|
|
134
|
+
CODEX_API_MAX_TOKENS=16384
|
|
135
135
|
CODEX_TIMEOUT=180
|
|
136
136
|
CODEX_CMD=codex
|
|
137
137
|
# Reasoning effort for the codex CLI (and API mode). Passed as
|
|
@@ -158,9 +158,9 @@ KIMI_TIMEOUT=180
|
|
|
158
158
|
KIMI_CMD=kimi
|
|
159
159
|
|
|
160
160
|
# Claude - The Synthesizer
|
|
161
|
-
CLAUDE_MODEL=claude-
|
|
162
|
-
#
|
|
163
|
-
#
|
|
161
|
+
CLAUDE_MODEL=claude-fable-5-1 # ai-consultants:default
|
|
162
|
+
# For the lower-cost standard/medium Claude tier, set CLAUDE_MODEL to
|
|
163
|
+
# claude-opus-5 (or apply_model_tier standard for a single run).
|
|
164
164
|
CLAUDE_TIMEOUT=240
|
|
165
165
|
CLAUDE_CMD=claude
|
|
166
166
|
CLAUDE_API_MAX_TOKENS=16384
|
package/CLAUDE.md
CHANGED
|
@@ -6,7 +6,7 @@ AI Consultants is a multi-model coverage system that queries up to 10 AI consult
|
|
|
6
6
|
|
|
7
7
|
**Self-Exclusion**: The invoking agent is automatically excluded from both the panel and synthesis. Claude Code won't query or synthesize with Claude, Codex CLI won't query or synthesize with Codex, etc.
|
|
8
8
|
|
|
9
|
-
**Version**: 5.
|
|
9
|
+
**Version**: 5.1.0
|
|
10
10
|
|
|
11
11
|
## Distribution
|
|
12
12
|
|
|
@@ -349,9 +349,9 @@ Three normal tiers plus a `maximum` tier are configurable via `apply_model_tier(
|
|
|
349
349
|
|
|
350
350
|
| Tier | Description | Example Models |
|
|
351
351
|
|------|-------------|----------------|
|
|
352
|
-
| **premium** | Latest flagship models | claude-
|
|
353
|
-
| **maximum** | All 10 consultants; maximum targets and highest provider effort | K3-256k, Qwen3.8-Max, MiniMax M3; Grok xhigh, GLM/DeepSeek max |
|
|
354
|
-
| **standard** | Good quality at reasonable cost | claude-
|
|
352
|
+
| **premium** | Latest flagship models | claude-fable-5-1, Gemini 3.7 Flash (High), gpt-6-astra |
|
|
353
|
+
| **maximum** | All 10 consultants; maximum targets and highest provider effort | claude-fable-5-1, K3-256k, Qwen3.8-Max, MiniMax M3; Grok xhigh, GLM/DeepSeek max |
|
|
354
|
+
| **standard** | Good quality at reasonable cost | claude-opus-5, Gemini 3.7 Flash (High), gpt-5.6-terra |
|
|
355
355
|
| **economy** | Optimized for speed and low cost | claude-haiku-4-5, Gemini 3.7 Flash (Low), gpt-5.6-luna |
|
|
356
356
|
|
|
357
357
|
**Default models are now premium tier** for maximum quality.
|
|
@@ -383,14 +383,14 @@ Three new presets leverage the model tiers:
|
|
|
383
383
|
./scripts/consult_all.sh --preset fast "quick syntax question"
|
|
384
384
|
```
|
|
385
385
|
|
|
386
|
-
### Premium Model Defaults (
|
|
386
|
+
### Premium Model Defaults (September 2026)
|
|
387
387
|
All consultants now use premium models by default:
|
|
388
388
|
|
|
389
389
|
| Consultant | Default Model |
|
|
390
390
|
|------------|---------------|
|
|
391
|
-
| Claude | claude-
|
|
391
|
+
| Claude | claude-fable-5-1 |
|
|
392
392
|
| Gemini | Gemini 3.7 Flash (High) (via agy CLI); API: gemini-3.1-pro-preview |
|
|
393
|
-
| Codex | gpt-
|
|
393
|
+
| Codex | gpt-6-astra |
|
|
394
394
|
| Mistral | CLI: mistral-medium-3.5; API: mistral-large-3 |
|
|
395
395
|
| DeepSeek | deepseek-v4-pro |
|
|
396
396
|
| GLM | glm-5.3-flash |
|
|
@@ -586,11 +586,11 @@ for f in scripts/*.sh scripts/lib/*.sh; do bash -n "$f" && echo "OK: $f"; done
|
|
|
586
586
|
| `ENABLE_SMART_ROUTING` | false | Intelligent routing by category |
|
|
587
587
|
| `ENABLE_COST_TRACKING` | true | Track costs |
|
|
588
588
|
| `MAX_SESSION_COST` | 1.00 | Max budget ($) |
|
|
589
|
-
| `CLAUDE_MODEL` | claude-
|
|
589
|
+
| `CLAUDE_MODEL` | claude-fable-5-1 | Claude model (use claude-opus-5 for lower-cost standard) |
|
|
590
590
|
| `CLAUDE_API_MAX_TOKENS` | 16384 | Claude API thinking + visible-output budget |
|
|
591
591
|
| `GEMINI_MODEL` | Gemini 3.7 Flash (High) | Gemini agy CLI model |
|
|
592
592
|
| `GEMINI_API_MODEL` | gemini-3.1-pro-preview | Gemini API-mode model ID (v2.15) |
|
|
593
|
-
| `CODEX_MODEL` | gpt-
|
|
593
|
+
| `CODEX_MODEL` | gpt-6-astra | Codex model (v2.5) |
|
|
594
594
|
| `MISTRAL_MODEL` | mistral-large-3 | Mistral model (v2.5) |
|
|
595
595
|
| `MISTRAL_CLI_MODEL` | mistral-medium-3.5 | Vibe CLI model alias |
|
|
596
596
|
| `SYNTHESIS_STRATEGY` | coverage | Synthesis strategy (coverage=union of distinct points) |
|
|
@@ -760,6 +760,15 @@ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/s
|
|
|
760
760
|
|
|
761
761
|
## Changelog
|
|
762
762
|
|
|
763
|
+
### v5.1.0 (2026-09-09)
|
|
764
|
+
|
|
765
|
+
- **Fable and Astra model policy.** `scripts/config.sh` and `scripts/configure.sh` align default/premium/maximum with Fable 5.1 and Astra, retain Opus 5/Terra for standard and Haiku/Luna for economy, and migrate exact historical unpinned Codex defaults while recording their origin. `resolve_codex_effort` applies implicit high per request so a later tier cannot inherit an automatically exported value.
|
|
766
|
+
- **Completion and identity are independent checks.** `scripts/lib/claude_stream.jq` derives content identity from assistant text events, keeps billing participants separate, rejects incomplete/error/max-token streams and preserves available accounting. `query_codex.sh` reads usage from JSON events while keeping the final-message file as the answer. Requested-only Codex identity remains truthful and is not an invented promotion blocker.
|
|
767
|
+
- **Grok sandbox checks precede fallback decisions.** `scripts/lib/grok_sandbox.sh` supplies passive socket and diagnostic checks shared with doctor/OAuth. Hidden `--no-memory` is supported by the installed parser even though omitted from help: the earlier diagnosis of an unsupported flag was incorrect. It remains mandatory in dispatch. Metadata annotation cannot replace the adapter's status when its same-directory temporary file fails.
|
|
768
|
+
- **Accounting and configuration.** Fable and Astra both have catalog-independent rate fallbacks. Astra estimates disclose long-context multipliers and excluded cache/service adjustments; no estimate is called a provider invoice. Explicit `AI_CONSULTANTS_CONFIG_DIR` selects private configuration; project dotenv discovery and credential import are not added.
|
|
769
|
+
- **Validation scope.** CLI-only acceptance was selected explicitly. The three provider smoke results retain their actual commit and identity provenance; API paths retain automated tests without a live-promotion claim. The maintainer Breadth v1 harness is included in the repository but excluded from npm, and its frozen inputs are unchanged. No completed P1 benchmark or coverage-gain claim is made.
|
|
770
|
+
|
|
771
|
+
|
|
763
772
|
### v5.0.0
|
|
764
773
|
|
|
765
774
|
- **Coverage claims are now locally auditable instead of resting on synthesis prose.** `scripts/lib/coverage_integrity.sh` normalizes successful structured envelopes into deterministic `<consultant-slug>:<index>` findings, overwriting any provider-supplied IDs. `scripts/synthesize.sh` asks the synthesizer to cite those IDs, then independently compares expected and represented IDs. Missing/duplicate/non-normalizable sources produce `DEGRADED`; unknown IDs and structural failures produce `FAILED`; invented IDs are removed from published coverage. The legacy `coverage`, `weighted_recommendation`, risk, action, and individual-response fields remain present.
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# AI Consultants v5.
|
|
1
|
+
# AI Consultants v5.1.0
|
|
2
2
|
|
|
3
3
|
> **Coverage, not a single guess.** A panel of up to 10 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)
|
|
@@ -483,10 +483,10 @@ and cannot support a comprehensive coverage claim.
|
|
|
483
483
|
|
|
484
484
|
| Consultant | `max_quality` | Premium | Standard | Economy |
|
|
485
485
|
|------------|---------------|---------|----------|---------|
|
|
486
|
-
| Claude | claude-
|
|
486
|
+
| Claude | claude-fable-5-1 | claude-fable-5-1 | claude-opus-5 | claude-haiku-4-5 |
|
|
487
487
|
| Gemini CLI | Gemini 3.7 Flash (High) | Gemini 3.7 Flash (High) | Gemini 3.7 Flash (High) | Gemini 3.7 Flash (Low) |
|
|
488
488
|
| Gemini API | gemini-3.1-pro-preview | gemini-3.1-pro-preview | gemini-3.1-pro-preview | gemini-3.1-pro-preview |
|
|
489
|
-
| Codex | gpt-
|
|
489
|
+
| Codex | gpt-6-astra | gpt-6-astra | gpt-5.6-terra | gpt-5.6-luna |
|
|
490
490
|
| Mistral CLI | mistral-medium-3.5 | mistral-medium-3.5 | mistral-medium-3.5 | devstral-small-2 |
|
|
491
491
|
| Mistral API | mistral-large-3 | mistral-large-3 | mistral-large-3 | mistral-large-3 |
|
|
492
492
|
| DeepSeek | deepseek-v4-pro | deepseek-v4-pro | deepseek-v4-flash | deepseek-v4-flash |
|
|
@@ -501,8 +501,9 @@ smoke through the `agy` adapter and is now the CLI default; Low is the CLI
|
|
|
501
501
|
economy target. The Google API model remains `gemini-3.1-pro-preview`, while
|
|
502
502
|
`gemini-3.7-flash` stays an API-only opt-in until that separate transport is
|
|
503
503
|
verified. The new Mistral API IDs (`mistral-medium-3-5`,
|
|
504
|
-
`mistral-large-2512`, `mistral-small-2603`)
|
|
505
|
-
|
|
504
|
+
`mistral-large-2512`, `mistral-small-2603`) remain catalogued opt-ins. Claude
|
|
505
|
+
Fable 5.1 is the default/premium/maximum target; use
|
|
506
|
+
`CLAUDE_MODEL=claude-opus-5` for the lower-cost standard override. Selecting a preset later intentionally reapplies that
|
|
506
507
|
preset's tier and can replace an explicit model override for the run.
|
|
507
508
|
Qwen3.8-Max is likewise selected by `max_quality` only when API mode already
|
|
508
509
|
points at an authenticated OpenAI-compatible Token Plan `/chat/completions`
|
|
@@ -609,11 +610,11 @@ Auto-selected `*_USE_API` values are marked `# ai-consultants:auto`, allowing a
|
|
|
609
610
|
later run to adapt when a CLI or credential changes. Environment variables,
|
|
610
611
|
`--set`, and unmarked values remain explicit user choices, except for the exact
|
|
611
612
|
historical generated Claude default described below.
|
|
612
|
-
Managed model defaults use `# ai-consultants:default`; `configure` upgrades
|
|
613
|
-
historical
|
|
614
|
-
the exact managed Gemini CLI, GLM, and Grok defaults.
|
|
615
|
-
|
|
616
|
-
`ai-consultants configure --set CLAUDE_MODEL=claude-opus-
|
|
613
|
+
Managed model defaults use `# ai-consultants:default`; `configure` upgrades
|
|
614
|
+
un-pinned historical `CLAUDE_MODEL=claude-opus-4-8` and `claude-opus-5` defaults
|
|
615
|
+
to Fable 5.1, along with the exact managed Gemini CLI, GLM, and Grok defaults.
|
|
616
|
+
To keep the lower-cost Opus 5 choice, run
|
|
617
|
+
`ai-consultants configure --set CLAUDE_MODEL=claude-opus-5`; explicit model
|
|
617
618
|
overrides are stored with `# ai-consultants:pin`.
|
|
618
619
|
|
|
619
620
|
Enter credentials through `--interactive`/`--advanced` or export them before the
|
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: 5.
|
|
8
|
+
version: 5.1.0
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
# AI Consultants v5.
|
|
11
|
+
# AI Consultants v5.1.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
|
|
|
@@ -106,7 +106,8 @@ smoke-tested K3-256k and MiniMax M3 targets, plus Qwen3.8-Max when an authentica
|
|
|
106
106
|
already configured. Gemini 3.7 Flash High is the exact-transport-smoked `agy`
|
|
107
107
|
default for maximum, premium, and standard CLI tiers; Low serves economy. The
|
|
108
108
|
Gemini API target remains 3.1 Pro until `gemini-3.7-flash` completes a separate
|
|
109
|
-
API smoke. Claude Fable 5
|
|
109
|
+
API smoke. Claude Fable 5.1 is the default/premium/maximum target; the new
|
|
110
|
+
Mistral API IDs remain explicit opt-ins.
|
|
110
111
|
Grok, GLM, and DeepSeek receive their
|
|
111
112
|
highest accepted reasoning effort in this preset (`xhigh`, `max`, and `max`
|
|
112
113
|
respectively); no failed target is silently replaced.
|
package/docs/COST_RATES.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Cost Rates - AI Consultants v5.
|
|
1
|
+
# Cost Rates - AI Consultants v5.1.0
|
|
2
2
|
|
|
3
3
|
This page documents the per-token rates used by the cost tracking system.
|
|
4
4
|
|
|
@@ -28,12 +28,14 @@ models programmatically.
|
|
|
28
28
|
| Gemini 3.1 Pro (High) | CLI opt-in | $0.002 | Gemini (agy CLI) |
|
|
29
29
|
| gemini-3.1-pro-preview | API default | $0.00125 | Gemini API |
|
|
30
30
|
| Gemini 3.6 Flash (High/Low) | Legacy CLI pins | $0.0015 | Gemini |
|
|
31
|
-
| gpt-
|
|
31
|
+
| gpt-6-astra | Maximum/Premium | $0.010 | Codex |
|
|
32
|
+
| gpt-5.6-sol | Explicit override | $0.004 | Codex |
|
|
32
33
|
| gpt-5.6-terra | Standard | $0.002 | Codex |
|
|
33
34
|
| gpt-5.6-luna | Economy | $0.0002 | Codex |
|
|
34
|
-
| claude-
|
|
35
|
-
| claude-
|
|
36
|
-
| claude-
|
|
35
|
+
| claude-fable-5-1 | Maximum/Premium | $0.010 | Claude |
|
|
36
|
+
| claude-opus-5 | Standard | $0.005 | Claude |
|
|
37
|
+
| claude-fable-5 | Legacy pins | $0.010 | Claude |
|
|
38
|
+
| claude-sonnet-5 | Legacy pins | $0.003 | Claude |
|
|
37
39
|
| claude-haiku-4-5 | Economy | $0.001 | Claude |
|
|
38
40
|
| mistral-large-3 | Premium | $0.002 | Mistral |
|
|
39
41
|
| mistral-medium-3.5 / mistral-medium-3-5 | Premium CLI / API opt-in | $0.0015 | Mistral |
|
|
@@ -70,12 +72,14 @@ models programmatically.
|
|
|
70
72
|
| Gemini 3.1 Pro (High) | CLI opt-in | $0.012 | Gemini (agy CLI) |
|
|
71
73
|
| gemini-3.1-pro-preview | API default | $0.005 | Gemini API |
|
|
72
74
|
| Gemini 3.6 Flash (High/Low) | Legacy CLI pins | $0.0075 | Gemini |
|
|
73
|
-
| gpt-
|
|
75
|
+
| gpt-6-astra | Maximum/Premium | $0.050 | Codex |
|
|
76
|
+
| gpt-5.6-sol | Explicit override | $0.020 | Codex |
|
|
74
77
|
| gpt-5.6-terra | Standard | $0.012 | Codex |
|
|
75
78
|
| gpt-5.6-luna | Economy | $0.0012 | Codex |
|
|
76
|
-
| claude-
|
|
77
|
-
| claude-
|
|
78
|
-
| claude-
|
|
79
|
+
| claude-fable-5-1 | Maximum/Premium | $0.050 | Claude |
|
|
80
|
+
| claude-opus-5 | Standard | $0.025 | Claude |
|
|
81
|
+
| claude-fable-5 | Legacy pins | $0.050 | Claude |
|
|
82
|
+
| claude-sonnet-5 | Legacy pins | $0.015 | Claude |
|
|
79
83
|
| claude-haiku-4-5 | Economy | $0.005 | Claude |
|
|
80
84
|
| mistral-large-3 | Premium | $0.006 | Mistral |
|
|
81
85
|
| mistral-medium-3.5 / mistral-medium-3-5 | Premium CLI / API opt-in | $0.0075 | Mistral |
|
package/docs/JSON_SCHEMA.md
CHANGED
|
@@ -369,3 +369,23 @@ jq 'has("consultant") and has("response") and has("confidence")' output.json
|
|
|
369
369
|
}
|
|
370
370
|
}
|
|
371
371
|
```
|
|
372
|
+
|
|
373
|
+
### Codex cost and cached-input metadata
|
|
374
|
+
|
|
375
|
+
When present, `metadata.cost_source` is `unavailable` without token data, otherwise
|
|
376
|
+
`estimated-standard-rates` or `estimated-long-context-standard-rates`.
|
|
377
|
+
`metadata.cost_note` discloses excluded cache/service adjustments; an estimate
|
|
378
|
+
is not a provider invoice. `metadata.tokens_cached_input`, when supplied by
|
|
379
|
+
CLI telemetry, is the cached subset of `tokens_input` and is not added again.
|
|
380
|
+
Unknown splits use the documented estimation heuristic; they cannot establish
|
|
381
|
+
an exact long-context bill. Astra maximum/premium uses `high` by default,
|
|
382
|
+
including in max_quality; valid explicit Codex effort always takes precedence.
|
|
383
|
+
|
|
384
|
+
### Claude streaming billing metadata
|
|
385
|
+
|
|
386
|
+
`metadata.billing_models` is an optional array of provider billing model IDs.
|
|
387
|
+
It does not attest the content model. Claude content identity comes only from
|
|
388
|
+
response-bearing assistant events; successful terminal completion is a separate
|
|
389
|
+
requirement. `provider_cost_usd`, when present, is the provider's terminal cost.
|
|
390
|
+
Token accounting prefers a supplied per-model billing aggregate over terminal
|
|
391
|
+
usage, without adding those two summaries together; absent usage is estimated.
|
package/docs/SETUP.md
CHANGED
|
@@ -592,10 +592,16 @@ shell history or observed by other local processes. Use `--interactive`,
|
|
|
592
592
|
### Using .env file
|
|
593
593
|
|
|
594
594
|
```bash
|
|
595
|
-
|
|
595
|
+
mkdir -p "${XDG_CONFIG_HOME:-$HOME/.config}/ai-consultants"
|
|
596
|
+
# For a new configuration only; keep existing credentials/settings if present.
|
|
597
|
+
cp -n .env.example "${XDG_CONFIG_HOME:-$HOME/.config}/ai-consultants/.env"
|
|
598
|
+
chmod 600 "${XDG_CONFIG_HOME:-$HOME/.config}/ai-consultants/.env"
|
|
596
599
|
```
|
|
597
600
|
|
|
598
|
-
Edit `.env
|
|
601
|
+
Edit that user configuration `.env`. A different existing private directory must
|
|
602
|
+
be selected explicitly with `AI_CONSULTANTS_CONFIG_DIR`; project `.env` files
|
|
603
|
+
are not discovered automatically:
|
|
604
|
+
|
|
599
605
|
|
|
600
606
|
```bash
|
|
601
607
|
# Enable/disable consultants (10 available)
|
|
@@ -797,3 +803,50 @@ less "$output_dir/report.md"
|
|
|
797
803
|
```
|
|
798
804
|
|
|
799
805
|
See [README.md](../README.md) for usage examples and full documentation.
|
|
806
|
+
|
|
807
|
+
For a configuration outside the standard user config directory, set
|
|
808
|
+
`AI_CONSULTANTS_CONFIG_DIR=/absolute/private/config-directory` explicitly.
|
|
809
|
+
The loader does not discover project `.env` files. Keep credentials in your
|
|
810
|
+
existing private configuration; do not copy them into this repository.
|
|
811
|
+
|
|
812
|
+
Claude CLI uses `stream-json --verbose`. Only response-bearing assistant
|
|
813
|
+
messages attest the content model; terminal `modelUsage` records billing
|
|
814
|
+
participants separately. A missing or conflicting content model remains
|
|
815
|
+
`requested-only` and cannot pass a model-promotion gate. Successful terminal
|
|
816
|
+
completion is required even when partial response text or billing is available.
|
|
817
|
+
|
|
818
|
+
Codex defaults to `gpt-6-astra`; premium and maximum select Astra, standard
|
|
819
|
+
selects `gpt-5.6-terra`, economy selects `gpt-5.6-luna`. Sol remains an explicit
|
|
820
|
+
`CODEX_MODEL=gpt-5.6-sol` override. Configure migrates exact unpinned persisted
|
|
821
|
+
`gpt-5.5` and `gpt-5.6-sol` values to Astra and records `migrated-from` provenance.
|
|
822
|
+
Use `# ai-consultants:pin`, an environment override or `--set` to keep a model.
|
|
823
|
+
|
|
824
|
+
Astra uses `high` effort when no effort is configured. Explicit `low`, `medium`,
|
|
825
|
+
`high`, `xhigh`, and `max` prevail; `none`/`minimal` fail before dispatch.
|
|
826
|
+
The default completion budget is 16384 tokens, including reasoning; override
|
|
827
|
+
`CODEX_API_MAX_TOKENS` explicitly as needed. The text-only Chat Completions
|
|
828
|
+
request uses `max_completion_tokens` and `reasoning_effort`, without tools.
|
|
829
|
+
See the [official migration guide](https://developers.openai.com/api/docs/guides/latest-model).
|
|
830
|
+
CLI JSON events supply token telemetry; the final message file supplies content.
|
|
831
|
+
A CLI `-m` selection remains `requested-only`, not provider attestation.
|
|
832
|
+
|
|
833
|
+
[Astra Standard pricing](https://developers.openai.com/api/docs/models/gpt-6-astra)
|
|
834
|
+
is $10/M input and $50/M output. More than 272K input tokens doubles input
|
|
835
|
+
and multiplies output by 1.5 for the whole request. Reported cost is an estimate
|
|
836
|
+
unless a provider cost is supplied: cache writes, cached-input discounts and
|
|
837
|
+
service processing rates can change the invoice.
|
|
838
|
+
|
|
839
|
+
Grok CLI and doctor passively inspect the container-runtime socket deny paths,
|
|
840
|
+
including Docker Desktop locations. Symlink endpoints (including dangling links)
|
|
841
|
+
block CLI dispatch because the sandbox cannot safely resolve those deny rules.
|
|
842
|
+
Absent paths and ordinary socket files pass this check. Nothing is removed and
|
|
843
|
+
Docker configuration is never changed. Runtime `sandbox_profile_refused` and
|
|
844
|
+
`sandbox_not_applied` diagnostics fail even with exit zero; they cannot trigger
|
|
845
|
+
retry or API fallback. OAuth synchronization and per-run isolation remain active.
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
Grok compatibility includes a provider-free parser probe of the complete advisory
|
|
849
|
+
argument list. Hidden flags such as `--no-memory` are still required in the
|
|
850
|
+
actual request even when omitted from public help. Unsupported mandatory flags
|
|
851
|
+
block dispatch; the optional `--no-auto-update` guard is used when its parser
|
|
852
|
+
probe succeeds, including on CLIs that hide it from help.
|
package/docs/cost_rates.json
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "5.
|
|
2
|
+
"version": "5.1.0",
|
|
3
3
|
"updated": "2026-08-23",
|
|
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.",
|
|
6
|
-
"_comment_premium": "Premium tier models -
|
|
6
|
+
"_comment_premium": "Premium tier models - Sep 2026",
|
|
7
|
+
"claude-fable-5-1": {
|
|
8
|
+
"input": 0.01,
|
|
9
|
+
"output": 0.05
|
|
10
|
+
},
|
|
7
11
|
"claude-opus-5": {
|
|
8
12
|
"input": 0.005,
|
|
9
13
|
"output": 0.025
|
|
@@ -41,9 +45,15 @@
|
|
|
41
45
|
"input": 0.00075,
|
|
42
46
|
"output": 0.00375
|
|
43
47
|
},
|
|
48
|
+
"gpt-6-astra": {
|
|
49
|
+
"input": 0.01,
|
|
50
|
+
"output": 0.05,
|
|
51
|
+
"provider": "OpenAI",
|
|
52
|
+
"notes": "Standard estimate; >272K input: 2x input, 1.5x output for full request. Cache/service adjustments excluded."
|
|
53
|
+
},
|
|
44
54
|
"gpt-5.6-sol": {
|
|
45
|
-
"input": 0.
|
|
46
|
-
"output": 0.
|
|
55
|
+
"input": 0.004,
|
|
56
|
+
"output": 0.020
|
|
47
57
|
},
|
|
48
58
|
"gpt-5.6-terra": {
|
|
49
59
|
"input": 0.002,
|
|
@@ -419,10 +429,10 @@
|
|
|
419
429
|
"kimi-code/k3-256k"
|
|
420
430
|
],
|
|
421
431
|
"consultant_fallbacks": {
|
|
422
|
-
"_comment": "Premium defaults - Updated
|
|
423
|
-
"claude": "claude-
|
|
432
|
+
"_comment": "Premium defaults - Updated Sep 2026",
|
|
433
|
+
"claude": "claude-fable-5-1",
|
|
424
434
|
"gemini": "Gemini 3.7 Flash (High)",
|
|
425
|
-
"codex": "gpt-
|
|
435
|
+
"codex": "gpt-6-astra",
|
|
426
436
|
"mistral": "mistral-large-3",
|
|
427
437
|
"deepseek": "deepseek-v4-pro",
|
|
428
438
|
"glm": "glm-5.3-flash",
|
|
@@ -434,9 +444,9 @@
|
|
|
434
444
|
"model_tiers": {
|
|
435
445
|
"_comment": "Model tiers for apply_model_tier() function",
|
|
436
446
|
"maximum": {
|
|
437
|
-
"claude": "claude-
|
|
447
|
+
"claude": "claude-fable-5-1",
|
|
438
448
|
"gemini": "Gemini 3.7 Flash (High)",
|
|
439
|
-
"codex": "gpt-
|
|
449
|
+
"codex": "gpt-6-astra",
|
|
440
450
|
"mistral": "mistral-medium-3.5",
|
|
441
451
|
"deepseek": "deepseek-v4-pro",
|
|
442
452
|
"glm": "glm-5.3-flash",
|
|
@@ -446,9 +456,9 @@
|
|
|
446
456
|
"minimax": "MiniMax-M3"
|
|
447
457
|
},
|
|
448
458
|
"premium": {
|
|
449
|
-
"claude": "claude-
|
|
459
|
+
"claude": "claude-fable-5-1",
|
|
450
460
|
"gemini": "Gemini 3.7 Flash (High)",
|
|
451
|
-
"codex": "gpt-
|
|
461
|
+
"codex": "gpt-6-astra",
|
|
452
462
|
"mistral": "mistral-medium-3.5",
|
|
453
463
|
"deepseek": "deepseek-v4-pro",
|
|
454
464
|
"glm": "glm-5.3-flash",
|
|
@@ -458,7 +468,7 @@
|
|
|
458
468
|
"minimax": "MiniMax-M2.7"
|
|
459
469
|
},
|
|
460
470
|
"standard": {
|
|
461
|
-
"claude": "claude-
|
|
471
|
+
"claude": "claude-opus-5",
|
|
462
472
|
"gemini": "Gemini 3.7 Flash (High)",
|
|
463
473
|
"codex": "gpt-5.6-terra",
|
|
464
474
|
"mistral": "mistral-medium-3.5",
|
|
@@ -501,7 +511,7 @@
|
|
|
501
511
|
"gemini_cli": ["Gemini 3.1 Pro (High)", "Gemini 3.6 Flash (High)", "Gemini 3.6 Flash (Low)"],
|
|
502
512
|
"gemini_api": ["gemini-3.7-flash"],
|
|
503
513
|
"mistral_api": ["mistral-medium-3-5", "mistral-large-2512", "mistral-small-2603"],
|
|
504
|
-
"claude": [
|
|
514
|
+
"claude": []
|
|
505
515
|
},
|
|
506
516
|
"default_rate": {
|
|
507
517
|
"input": 0.005,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-consultants",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.1.0",
|
|
4
4
|
"description": "A cross-vendor panel of up to 10 AI models that returns the coverage union of their distinct perspectives",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ai-consultants": "bin/ai-consultants"
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"!scripts/lib/test_helpers.sh",
|
|
14
14
|
"!scripts/release.sh",
|
|
15
15
|
"!scripts/experiment/",
|
|
16
|
+
"!benchmarks/",
|
|
16
17
|
"templates/",
|
|
17
18
|
".env.example",
|
|
18
19
|
".claude/commands/",
|
|
@@ -56,9 +56,10 @@ for API keys; command-line arguments may be visible in shell history and process
|
|
|
56
56
|
inspection.
|
|
57
57
|
Model defaults carry an `# ai-consultants:default` marker. On rewrite,
|
|
58
58
|
`configure` upgrades the historical unmarked
|
|
59
|
-
`CLAUDE_MODEL=claude-opus-4-8`
|
|
60
|
-
override supplied with `--set` is stored with
|
|
61
|
-
`--set CLAUDE_MODEL=claude-opus-
|
|
59
|
+
`CLAUDE_MODEL=claude-opus-4-8` and `claude-opus-5` generated defaults to
|
|
60
|
+
Fable 5.1. An explicit model override supplied with `--set` is stored with
|
|
61
|
+
`# ai-consultants:pin`, so `--set CLAUDE_MODEL=claude-opus-5` keeps the
|
|
62
|
+
lower-cost standard model intentionally.
|
|
62
63
|
The exhaustive parameter contract is [`.env.example`](../.env.example); the
|
|
63
64
|
configurator derives its accepted keys from that template, while
|
|
64
65
|
[`scripts/config.sh`](../scripts/config.sh) remains the runtime source of truth.
|
|
@@ -240,9 +241,10 @@ ENABLE_DEEPSEEK=false
|
|
|
240
241
|
|
|
241
242
|
```bash
|
|
242
243
|
GEMINI_MODEL=Gemini 3.7 Flash (High) # verified agy CLI default; API mode uses GEMINI_API_MODEL
|
|
243
|
-
CODEX_MODEL=gpt-
|
|
244
|
-
CODEX_API_MAX_TOKENS=
|
|
245
|
-
CLAUDE_MODEL=claude-
|
|
244
|
+
CODEX_MODEL=gpt-6-astra
|
|
245
|
+
CODEX_API_MAX_TOKENS=16384
|
|
246
|
+
CLAUDE_MODEL=claude-fable-5-1
|
|
247
|
+
# Lower-cost standard override: CLAUDE_MODEL=claude-opus-5
|
|
246
248
|
CLAUDE_API_MAX_TOKENS=16384 # API only: adaptive thinking + visible output
|
|
247
249
|
MISTRAL_MODEL=mistral-large-3
|
|
248
250
|
MISTRAL_CLI_MODEL=mistral-medium-3.5
|
package/scripts/config.sh
CHANGED
|
@@ -159,10 +159,10 @@ export GEMINI_USE_API
|
|
|
159
159
|
# CODEX CONFIGURATION - The Pragmatist
|
|
160
160
|
# =============================================================================
|
|
161
161
|
|
|
162
|
-
# Model: "gpt-
|
|
163
|
-
CODEX_MODEL="${CODEX_MODEL:-gpt-
|
|
162
|
+
# Model: "gpt-6-astra" (default), "gpt-5.6-terra", "gpt-5.6-luna", etc.
|
|
163
|
+
CODEX_MODEL="${CODEX_MODEL:-gpt-6-astra}"
|
|
164
164
|
CODEX_TIMEOUT_SECONDS="${CODEX_TIMEOUT:-180}"
|
|
165
|
-
CODEX_API_MAX_TOKENS="${CODEX_API_MAX_TOKENS:-
|
|
165
|
+
CODEX_API_MAX_TOKENS="${CODEX_API_MAX_TOKENS:-16384}"
|
|
166
166
|
CODEX_CMD="${CODEX_CMD:-codex}"
|
|
167
167
|
|
|
168
168
|
# =============================================================================
|
|
@@ -305,7 +305,7 @@ KIMI_CMD="${KIMI_CMD:-kimi}"
|
|
|
305
305
|
# CLAUDE CONFIGURATION - The Synthesizer (v2.2)
|
|
306
306
|
# =============================================================================
|
|
307
307
|
|
|
308
|
-
CLAUDE_MODEL="${CLAUDE_MODEL:-claude-
|
|
308
|
+
CLAUDE_MODEL="${CLAUDE_MODEL:-claude-fable-5-1}"
|
|
309
309
|
CLAUDE_API_MAX_TOKENS="${CLAUDE_API_MAX_TOKENS:-16384}"
|
|
310
310
|
CLAUDE_TIMEOUT_SECONDS="${CLAUDE_TIMEOUT:-240}"
|
|
311
311
|
CLAUDE_CMD="${CLAUDE_CMD:-claude}"
|
|
@@ -618,9 +618,9 @@ get_model_for_tier() {
|
|
|
618
618
|
case "$tier" in
|
|
619
619
|
maximum|max_quality|max-quality)
|
|
620
620
|
case "$consultant" in
|
|
621
|
-
claude) echo "claude-
|
|
621
|
+
claude) echo "claude-fable-5-1" ;;
|
|
622
622
|
gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.7 Flash (High)" ;;
|
|
623
|
-
codex) echo "gpt-
|
|
623
|
+
codex) echo "gpt-6-astra" ;;
|
|
624
624
|
mistral) [[ "$transport" == "api" ]] && echo "mistral-large-3" || echo "mistral-medium-3.5" ;;
|
|
625
625
|
deepseek) echo "deepseek-v4-pro" ;;
|
|
626
626
|
glm) echo "glm-5.3-flash" ;;
|
|
@@ -633,9 +633,9 @@ get_model_for_tier() {
|
|
|
633
633
|
;;
|
|
634
634
|
premium|max|best)
|
|
635
635
|
case "$consultant" in
|
|
636
|
-
claude) echo "claude-
|
|
636
|
+
claude) echo "claude-fable-5-1" ;;
|
|
637
637
|
gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.7 Flash (High)" ;;
|
|
638
|
-
codex) echo "gpt-
|
|
638
|
+
codex) echo "gpt-6-astra" ;;
|
|
639
639
|
mistral) [[ "$transport" == "api" ]] && echo "mistral-large-3" || echo "mistral-medium-3.5" ;;
|
|
640
640
|
deepseek) echo "deepseek-v4-pro" ;;
|
|
641
641
|
glm) echo "glm-5.3-flash" ;;
|
|
@@ -648,7 +648,7 @@ get_model_for_tier() {
|
|
|
648
648
|
;;
|
|
649
649
|
standard|medium|balanced)
|
|
650
650
|
case "$consultant" in
|
|
651
|
-
claude) echo "claude-
|
|
651
|
+
claude) echo "claude-opus-5" ;;
|
|
652
652
|
gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.7 Flash (High)" ;;
|
|
653
653
|
codex) echo "gpt-5.6-terra" ;;
|
|
654
654
|
mistral) [[ "$transport" == "api" ]] && echo "mistral-large-3" || echo "mistral-medium-3.5" ;;
|
|
@@ -1035,4 +1035,4 @@ list_presets() {
|
|
|
1035
1035
|
# VERSION
|
|
1036
1036
|
# =============================================================================
|
|
1037
1037
|
|
|
1038
|
-
AI_CONSULTANTS_VERSION="5.
|
|
1038
|
+
AI_CONSULTANTS_VERSION="5.1.0"
|
package/scripts/configure.sh
CHANGED
|
@@ -259,13 +259,22 @@ is_pin_managed_key() {
|
|
|
259
259
|
[[ "$1" == *_MODEL ]]
|
|
260
260
|
}
|
|
261
261
|
|
|
262
|
+
# Pin wins over default, including hand-edited lines carrying both markers.
|
|
262
263
|
# Merge existing persistent values first, then current environment overrides.
|
|
263
264
|
while IFS= read -r key; do
|
|
264
265
|
if [[ -f "$OUTPUT_FILE" ]] && value=$(read_value "$OUTPUT_FILE" "$key"); then
|
|
265
|
-
if has_value_marker "$OUTPUT_FILE" "$key" "$
|
|
266
|
-
set_value "$key" "$value $DEFAULT_MARKER"
|
|
267
|
-
elif has_value_marker "$OUTPUT_FILE" "$key" "$PIN_MARKER"; then
|
|
266
|
+
if has_value_marker "$OUTPUT_FILE" "$key" "$PIN_MARKER"; then
|
|
268
267
|
set_value "$key" "$value $PIN_MARKER"
|
|
268
|
+
elif has_value_marker "$OUTPUT_FILE" "$key" "$DEFAULT_MARKER"; then
|
|
269
|
+
provenance=$(awk -v key="$key" '
|
|
270
|
+
{ sub(/\r$/, ""); sub(/^[[:space:]]*(export[[:space:]]+)?/, "") }
|
|
271
|
+
index($0, key "=") == 1 {
|
|
272
|
+
origin=""
|
|
273
|
+
if (match($0, /migrated-from=gpt-5[.]5|migrated-from=gpt-5[.]6-sol/))
|
|
274
|
+
origin=substr($0, RSTART+14, RLENGTH-14)
|
|
275
|
+
}
|
|
276
|
+
END { printf "%s", origin }' "$OUTPUT_FILE")
|
|
277
|
+
set_value "$key" "$value $DEFAULT_MARKER${provenance:+ migrated-from=$provenance}"
|
|
269
278
|
else
|
|
270
279
|
set_value "$key" "$value"
|
|
271
280
|
fi
|
|
@@ -279,24 +288,28 @@ while IFS= read -r key; do
|
|
|
279
288
|
fi
|
|
280
289
|
done < <(list_parameters)
|
|
281
290
|
|
|
282
|
-
#
|
|
283
|
-
#
|
|
284
|
-
#
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
fi
|
|
291
|
+
# Promote only the historical generated Claude defaults. Both the old unmarked
|
|
292
|
+
# Opus 4.8 scaffold and every unpinned Opus 5 value are managed defaults;
|
|
293
|
+
# explicit # ai-consultants:pin overrides always remain user-owned.
|
|
294
|
+
case "$(read_value "$WORK_FILE" CLAUDE_MODEL 2>/dev/null || true)" in
|
|
295
|
+
claude-opus-4-8|claude-opus-5)
|
|
296
|
+
if ! has_value_marker "$WORK_FILE" CLAUDE_MODEL "$PIN_MARKER"; then
|
|
297
|
+
set_value CLAUDE_MODEL "claude-fable-5-1 $DEFAULT_MARKER"
|
|
298
|
+
echo "Migrated managed Claude default to claude-fable-5-1" >&2
|
|
299
|
+
fi
|
|
300
|
+
;;
|
|
301
|
+
esac
|
|
291
302
|
|
|
292
|
-
#
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
fi
|
|
303
|
+
# Migrate exact unpinned persisted defaults; environment and --set remain pins.
|
|
304
|
+
old_codex_model=$(read_value "$WORK_FILE" CODEX_MODEL 2>/dev/null || true)
|
|
305
|
+
case "$old_codex_model" in
|
|
306
|
+
gpt-5.5|gpt-5.6-sol)
|
|
307
|
+
if ! has_value_marker "$WORK_FILE" CODEX_MODEL "$PIN_MARKER"; then
|
|
308
|
+
set_value CODEX_MODEL "gpt-6-astra $DEFAULT_MARKER migrated-from=$old_codex_model"
|
|
309
|
+
echo "Migrated managed Codex default: $old_codex_model -> gpt-6-astra" >&2
|
|
310
|
+
fi
|
|
311
|
+
;;
|
|
312
|
+
esac
|
|
300
313
|
|
|
301
314
|
# Migrate only the exact catalog defaults previously generated by this tool.
|
|
302
315
|
# A # ai-consultants:pin marker is the durable escape hatch for users who want
|
package/scripts/doctor.sh
CHANGED
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
set -euo pipefail
|
|
24
24
|
|
|
25
25
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
26
|
+
source "$SCRIPT_DIR/lib/grok_sandbox.sh"
|
|
26
27
|
source "$SCRIPT_DIR/lib/common.sh"
|
|
27
28
|
|
|
28
29
|
# --- Parameters ---
|
|
@@ -229,6 +230,17 @@ check_cli_consultant() {
|
|
|
229
230
|
return 0
|
|
230
231
|
fi
|
|
231
232
|
|
|
233
|
+
if [[ "$env_var" == GROK ]]; then
|
|
234
|
+
source "$SCRIPT_DIR/lib/grok_sandbox.sh"
|
|
235
|
+
local sandbox_diagnostic
|
|
236
|
+
if ! sandbox_diagnostic=$(grok_sandbox_preflight); then
|
|
237
|
+
_print " ✗ $name: $sandbox_diagnostic"
|
|
238
|
+
add_issue "sandbox" "$sandbox_diagnostic" "Inspect the runtime socket before using Grok strict sandbox"
|
|
239
|
+
check_fail
|
|
240
|
+
return 0
|
|
241
|
+
fi
|
|
242
|
+
fi
|
|
243
|
+
|
|
232
244
|
# Check if installed
|
|
233
245
|
if ! command -v "$cmd" &> /dev/null; then
|
|
234
246
|
_print " ✗ $name: NOT INSTALLED (enabled but missing)"
|
package/scripts/lib/api.sh
CHANGED
|
@@ -684,3 +684,24 @@ check_rate_limit() {
|
|
|
684
684
|
|
|
685
685
|
return 0
|
|
686
686
|
}
|
|
687
|
+
|
|
688
|
+
# Resolve per request, without exporting automatic effort into later tiers.
|
|
689
|
+
resolve_codex_effort() {
|
|
690
|
+
local model="$1" effort="${2:-}"
|
|
691
|
+
[[ "$model" != gpt-6-astra || -n "$effort" ]] || effort=high
|
|
692
|
+
[[ -n "$effort" ]] || return 0
|
|
693
|
+
effort=$(validate_reasoning_effort "$effort" Codex) || return 1
|
|
694
|
+
if [[ "$model" == gpt-6-astra && ( "$effort" == none || "$effort" == minimal ) ]]; then
|
|
695
|
+
log_error "[Codex] Astra requires low|medium|high|xhigh|max reasoning effort"
|
|
696
|
+
return 1
|
|
697
|
+
fi
|
|
698
|
+
printf '%s' "$effort"
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
# Codex-only wire adaptation; other OpenAI-compatible providers keep their body.
|
|
702
|
+
build_codex_request() {
|
|
703
|
+
local model="$2" effort
|
|
704
|
+
effort=$(resolve_codex_effort "$model" "${4:-}") || return 1
|
|
705
|
+
build_openai_request "$1" "$model" "${3:-16384}" "$effort" |
|
|
706
|
+
jq '.max_completion_tokens = .max_tokens | del(.max_tokens)'
|
|
707
|
+
}
|