ai-consultants 5.1.1 → 5.1.2

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
@@ -116,17 +116,19 @@ ENABLE_DEEPSEEK=false
116
116
  # =============================================================================
117
117
 
118
118
  # Gemini - The Architect (CLI mode via Antigravity CLI: agy)
119
- GEMINI_MODEL="Gemini 3.7 Flash (High)"
119
+ GEMINI_MODEL="Gemini 3.8 Flash (High)"
120
120
  GEMINI_TIMEOUT=180
121
121
  GEMINI_CMD=agy
122
122
  # API-mode model ID (only used when GEMINI_USE_API=true)
123
123
  GEMINI_API_MODEL=gemini-3.1-pro-preview
124
124
  # Gemini 3.1 Pro and 3.6 Flash remain valid CLI pins. API mode stays on the
125
- # separately verified 3.1 Pro ID; gemini-3.7-flash is an API-only opt-in until
125
+ # separately verified 3.1 Pro ID; gemini-3.8-flash is an API-only opt-in until
126
126
  # that transport completes its own authenticated smoke.
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).
127
+ # Reasoning effort for the agy CLI, passed as --effort <value>. Current agy
128
+ # advertises low|medium|high|max globally, but named Gemini 3.8 High/Medium/Low
129
+ # variants reject --effort: leave GEMINI_REASONING_EFFORT unset for those CLI
130
+ # targets and choose the level with GEMINI_MODEL. Native Gemini 3.7/3.8 Flash
131
+ # API thinking supports low|medium|high through this setting.
130
132
  # GEMINI_REASONING_EFFORT=
131
133
 
132
134
  # Codex - The Pragmatist
@@ -160,7 +162,7 @@ KIMI_CMD=kimi
160
162
  # Claude - The Synthesizer
161
163
  CLAUDE_MODEL=claude-fable-5-1 # ai-consultants:default
162
164
  # 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).
165
+ # claude-opus-5-5 (or apply_model_tier standard for a single run).
164
166
  CLAUDE_TIMEOUT=240
165
167
  CLAUDE_CMD=claude
166
168
  CLAUDE_API_MAX_TOKENS=16384
@@ -206,7 +208,7 @@ GLM_API_URL=https://api.z.ai/api/coding/paas/v4/chat/completions
206
208
 
207
209
  # Grok Build CLI + xAI API fallback - The Provocateur
208
210
  GROK_CMD=grok
209
- GROK_MODEL=grok-4.6
211
+ GROK_MODEL=grok-4.7
210
212
  GROK_TIMEOUT=180
211
213
  GROK_MAX_TURNS=4
212
214
  GROK_OAUTH_MODE=shared
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.1.1
9
+ **Version**: 5.1.2
10
10
 
11
11
  ## Distribution
12
12
 
@@ -349,10 +349,10 @@ 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-fable-5-1, Gemini 3.7 Flash (High), gpt-6-astra |
352
+ | **premium** | Latest flagship models | claude-fable-5-1, Gemini 3.8 Flash (High), gpt-6-astra |
353
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
- | **economy** | Optimized for speed and low cost | claude-haiku-4-5, Gemini 3.7 Flash (Low), gpt-5.6-luna |
354
+ | **standard** | Good quality at reasonable cost | claude-opus-5-5, Gemini 3.8 Flash (High), gpt-5.6-terra |
355
+ | **economy** | Optimized for speed and low cost | claude-haiku-4-5, Gemini 3.8 Flash (Low), gpt-5.6-luna |
356
356
 
357
357
  **Default models are now premium tier** for maximum quality.
358
358
 
@@ -365,7 +365,7 @@ apply_model_tier "standard" # Set all consultants to standard models
365
365
  apply_model_tier "economy" # Set all consultants to economy models
366
366
 
367
367
  # Get model for a specific consultant and tier (v2.8.1)
368
- get_model_for_tier "gemini" "premium" # → Gemini 3.7 Flash (High) on agy
368
+ get_model_for_tier "gemini" "premium" # → Gemini 3.8 Flash (High) on agy
369
369
  get_model_for_tier "claude" "economy" # → claude-haiku-4-5
370
370
  ```
371
371
 
@@ -389,12 +389,12 @@ All consultants now use premium models by default:
389
389
  | Consultant | Default Model |
390
390
  |------------|---------------|
391
391
  | Claude | claude-fable-5-1 |
392
- | Gemini | Gemini 3.7 Flash (High) (via agy CLI); API: gemini-3.1-pro-preview |
392
+ | Gemini | Gemini 3.8 Flash (High) (via agy CLI); API: gemini-3.1-pro-preview |
393
393
  | Codex | gpt-6-astra |
394
394
  | Mistral | CLI: mistral-medium-3.5; API: mistral-large-3 |
395
395
  | DeepSeek | deepseek-flash (DeepSeek-V4.1-Flash) |
396
396
  | GLM | glm-5.3-flash |
397
- | Grok | grok-4.6 |
397
+ | Grok | grok-4.7 |
398
398
  | Qwen3 | qwen3.7-max |
399
399
  | Kimi | kimi-code/k3 |
400
400
  | MiniMax | MiniMax-M2.7 |
@@ -402,7 +402,7 @@ All consultants now use premium models by default:
402
402
  Override with environment variables: `CLAUDE_MODEL`, `GEMINI_MODEL`, `CODEX_MODEL`, `KIMI_MODEL`, etc.
403
403
 
404
404
  Grok is CLI-first through the official Grok Build `grok` command, with
405
- `grok-4.6` passed explicitly in headless mode. The prompt is delivered with
405
+ `grok-4.7` passed explicitly in headless mode. The prompt is delivered with
406
406
  `--prompt-file`; HOME and CWD are isolated, built-in/MCP tools are denied, and
407
407
  the strict sandbox prevents user or project extensions from joining the
408
408
  consultation. The xAI Chat Completions path is retained only when the CLI is
@@ -588,7 +588,7 @@ for f in scripts/*.sh scripts/lib/*.sh; do bash -n "$f" && echo "OK: $f"; done
588
588
  | `MAX_SESSION_COST` | 1.00 | Max budget ($) |
589
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
- | `GEMINI_MODEL` | Gemini 3.7 Flash (High) | Gemini agy CLI model |
591
+ | `GEMINI_MODEL` | Gemini 3.8 Flash (High) | Gemini agy CLI model |
592
592
  | `GEMINI_API_MODEL` | gemini-3.1-pro-preview | Gemini API-mode model ID (v2.15) |
593
593
  | `CODEX_MODEL` | gpt-6-astra | Codex model (v2.5) |
594
594
  | `MISTRAL_MODEL` | mistral-large-3 | Mistral model (v2.5) |
@@ -760,6 +760,14 @@ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/s
760
760
 
761
761
  ## Changelog
762
762
 
763
+ ### v5.1.2 (2026-09-28)
764
+
765
+ - **Model selection remains transport-specific.** Grok 4.7 replaces the premium/maximum default, Opus 5.5 replaces standard Claude, and Gemini 3.8 High/Low replace the respective CLI targets. Fable and API Pro 3.1 remain separate defaults. Native Gemini 3.8 API thinking accepts low/medium/high and rejects incompatible explicit values before dispatch.
766
+ - **Configuration preservation.** Exact historical defaults migrate while explicit choices survive. Quoted values plus inline default/pin markers now round-trip correctly; the previous parser retained quotes after removing the comment and missed the migration.
767
+ - **Accounting.** Google GenerateContent output is candidates plus thoughts; prompt count already includes cached input. New rates remain estimates when no provider cost is available. Grok 4.7 rates double above 200K input; Gemini introductory rates expire on 2026-12-31 and require a catalog refresh.
768
+ - **Validation scope.** Exact implementation-head CI passed 34/34 suites; Grok 4.7, Opus 5.5 and Gemini 3.8 High/Low CLI smokes passed on that code. Gemini named variants select effort through the model name and reject an additional --effort; initial rejected attempts and separately authorized corrected successes are recorded. Frozen P1.6 inputs and saved Grok work remain untouched. No model-quality gain is inferred from smoke checks.
769
+
770
+
763
771
  ### v5.1.1 (2026-09-10)
764
772
 
765
773
  - **DeepSeek V4.1 Flash policy.** `scripts/config.sh` selects `deepseek-flash` for the default and every tier. `scripts/configure.sh` migrates only the two exact historical unpinned defaults; durable pins and explicit overrides remain intact. No credentials are imported or personal configuration rewritten by the upgrade.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # AI Consultants v5.1.1
1
+ # AI Consultants v5.1.2
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
- [![Version](https://img.shields.io/badge/version-5.1.1-blue.svg)](https://github.com/matteoscurati/ai-consultants)
5
+ [![Version](https://img.shields.io/badge/version-5.1.2-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)
@@ -385,7 +385,7 @@ INVOKING_AGENT=codex ./scripts/consult_all.sh "Question" # Codex excluded
385
385
  | **Grok** | `grok` | The Provocateur | Challenge conventions |
386
386
  | **MiniMax** | `mmx` | The Pragmatic Optimizer | Performance, efficiency, pragmatism |
387
387
 
388
- Grok uses Grok Build with `grok-4.6` in an isolated, tool-free sandbox. Prompts
388
+ Grok uses Grok Build with `grok-4.7` in an isolated, tool-free sandbox. Prompts
389
389
  are passed through a private file rather than process arguments. It falls back
390
390
  to the xAI API only when the CLI is missing, cannot launch, or has no usable
391
391
  authentication and `GROK_API_KEY` is configured; post-launch request failures
@@ -426,7 +426,7 @@ pip install mistral-vibe # Mistral
426
426
  # Optional CLI-based consultants
427
427
  curl -L code.kimi.com/install.sh | bash # Kimi K3
428
428
  npm install -g @qwen-code/qwen-code@latest # Qwen (alternative to API)
429
- curl -fsSL https://x.ai/cli/install.sh | bash # Grok Build (grok-4.6)
429
+ curl -fsSL https://x.ai/cli/install.sh | bash # Grok Build (grok-4.7)
430
430
  npm install -g mmx-cli # MiniMax
431
431
 
432
432
  ```
@@ -483,27 +483,27 @@ and cannot support a comprehensive coverage claim.
483
483
 
484
484
  | Consultant | `max_quality` | Premium | Standard | Economy |
485
485
  |------------|---------------|---------|----------|---------|
486
- | Claude | claude-fable-5-1 | claude-fable-5-1 | claude-opus-5 | claude-haiku-4-5 |
487
- | Gemini CLI | Gemini 3.7 Flash (High) | Gemini 3.7 Flash (High) | Gemini 3.7 Flash (High) | Gemini 3.7 Flash (Low) |
486
+ | Claude | claude-fable-5-1 | claude-fable-5-1 | claude-opus-5-5 | claude-haiku-4-5 |
487
+ | Gemini CLI | Gemini 3.8 Flash (High) | Gemini 3.8 Flash (High) | Gemini 3.8 Flash (High) | Gemini 3.8 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
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-flash | deepseek-flash | deepseek-flash | deepseek-flash |
493
493
  | GLM | glm-5.3-flash | glm-5.3-flash | glm-5.3-flash | glm-4-flash |
494
- | Grok | grok-4.6 | grok-4.6 | grok-4.5 | grok-4.5 |
494
+ | Grok | grok-4.7 | grok-4.7 | grok-4.5 | grok-4.5 |
495
495
  | Qwen3 | qwen3.8-max when Token Plan is configured; otherwise qwen3.7-max | qwen3.7-max | qwen3.6-35b-a3b | qwen3-32b |
496
496
  | Kimi | kimi-code/k3-256k | kimi-code/k3 | kimi-code/k3 | kimi-code/k3 |
497
497
  | MiniMax | MiniMax-M3 | MiniMax-M2.7 | MiniMax-M2.7 | MiniMax-M2.5 |
498
498
 
499
- Promotion is transport-specific. Gemini 3.7 Flash High completed an exact live
500
- smoke through the `agy` adapter and is now the CLI default; Low is the CLI
501
- economy target. The Google API model remains `gemini-3.1-pro-preview`, while
502
- `gemini-3.7-flash` stays an API-only opt-in until that separate transport is
503
- verified. The new Mistral API IDs (`mistral-medium-3-5`,
499
+ Promotion is transport-specific. Gemini 3.8 Flash High is the new CLI target;
500
+ Low serves economy. Both are available in the installed `agy models` inventory;
501
+ High/Low CLI smokes passed on 2026-09-28 with capability-probed identity. Earlier Gemini 3.7 evidence remains historical.
502
+ The Google API default remains `gemini-3.1-pro-preview`; `gemini-3.8-flash` is
503
+ an explicit API opt-in whose live transport is not yet verified. The new Mistral API IDs (`mistral-medium-3-5`,
504
504
  `mistral-large-2512`, `mistral-small-2603`) remain catalogued opt-ins. Claude
505
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
+ `CLAUDE_MODEL=claude-opus-5-5` for the lower-cost standard override. Selecting a preset later intentionally reapplies that
507
507
  preset's tier and can replace an explicit model override for the run.
508
508
  Qwen3.8-Max is likewise selected by `max_quality` only when API mode already
509
509
  points at an authenticated OpenAI-compatible Token Plan `/chat/completions`
@@ -634,7 +634,7 @@ MAX_SESSION_COST=1.00 # USD budget cap (paired with ENABLE_BUDGET_LIMIT=t
634
634
  KIMI_MODEL=kimi-code/k3 # Pin the Kimi consultant to K3
635
635
  CLAUDE_API_MAX_TOKENS=16384 # Shared thinking + visible-output budget in API mode
636
636
  MISTRAL_CLI_MODEL=mistral-medium-3.5 # Vibe alias; MISTRAL_MODEL remains API-only
637
- GEMINI_MODEL="Gemini 3.7 Flash (High)" # agy CLI; API uses GEMINI_API_MODEL
637
+ GEMINI_MODEL="Gemini 3.8 Flash (High)" # agy CLI; API uses GEMINI_API_MODEL
638
638
  ```
639
639
 
640
640
  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: 5.1.1
8
+ version: 5.1.2
9
9
  ---
10
10
 
11
- # AI Consultants v5.1.1 - AI Expert Panel
11
+ # AI Consultants v5.1.2 - 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
 
@@ -86,7 +86,7 @@ Configuration (presets, strategies, features, personas, API keys) can be managed
86
86
 
87
87
  **API-only consultants**: GLM (The Methodologist), DeepSeek (The Code Specialist)
88
88
 
89
- **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.
89
+ **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.7` 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.
90
90
 
91
91
  Grok CLI OAuth defaults to `GROK_OAUTH_MODE=shared`: concurrent invocations
92
92
  share one runner-owned persistent `GROK_HOME` so the vendor auth lock can
@@ -103,10 +103,10 @@ the observed version is recorded only as response provenance.
103
103
 
104
104
  The `max_quality` preset enables all 10 consultants. It uses the separately
105
105
  smoke-tested K3-256k and MiniMax M3 targets, plus Qwen3.8-Max when an authenticated Token Plan transport is
106
- already configured. Gemini 3.7 Flash High is the exact-transport-smoked `agy`
107
- default for maximum, premium, and standard CLI tiers; Low serves economy. The
108
- Gemini API target remains 3.1 Pro until `gemini-3.7-flash` completes a separate
109
- API smoke. Claude Fable 5.1 is the default/premium/maximum target; the new
106
+ already configured. Gemini 3.8 Flash High is the new `agy` target for maximum,
107
+ premium, and standard CLI tiers; Low serves economy. The installed model inventory
108
+ lists both; High/Low CLI smokes passed on 2026-09-28 with capability-probed identity.
109
+ The Gemini API default remains 3.1 Pro; `gemini-3.8-flash` is an explicit API opt-in. Claude Fable 5.1 is the default/premium/maximum target; the new
110
110
  Mistral API IDs remain explicit opt-ins.
111
111
  Grok, GLM, and DeepSeek receive their
112
112
  highest accepted reasoning effort in this preset (`xhigh`, `max`, and `max`
@@ -1,4 +1,4 @@
1
- # Cost Rates - AI Consultants v5.1.1
1
+ # Cost Rates - AI Consultants v5.1.2
2
2
 
3
3
  This page documents the per-token rates used by the cost tracking system.
4
4
 
@@ -23,8 +23,8 @@ models programmatically.
23
23
 
24
24
  | Model | Tier | Cost/1K | Consultant |
25
25
  |-------|------|---------|------------|
26
- | Gemini 3.7 Flash (High) | Maximum/Premium/Standard | $0.00075 | Gemini (verified agy CLI; promotional through 2026-12-31) |
27
- | Gemini 3.7 Flash (Low) | Economy | $0.00075 | Gemini (verified agy CLI; promotional through 2026-12-31) |
26
+ | Gemini 3.8 Flash (High) | Maximum/Premium/Standard | $0.00075 | Gemini (CLI smoke passed; API-equivalent estimate; promotional through 2026-12-31) |
27
+ | Gemini 3.8 Flash (Low) | Economy | $0.00075 | Gemini (CLI smoke passed; API-equivalent estimate; promotional through 2026-12-31) |
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 |
@@ -33,7 +33,8 @@ models programmatically.
33
33
  | gpt-5.6-terra | Standard | $0.002 | Codex |
34
34
  | gpt-5.6-luna | Economy | $0.0002 | Codex |
35
35
  | claude-fable-5-1 | Maximum/Premium | $0.010 | Claude |
36
- | claude-opus-5 | Standard | $0.005 | Claude |
36
+ | claude-opus-5-5 | Standard | $0.004 | Claude |
37
+ | claude-opus-5 | Legacy override | $0.005 | Claude |
37
38
  | claude-fable-5 | Legacy pins | $0.010 | Claude |
38
39
  | claude-sonnet-5 | Legacy pins | $0.003 | Claude |
39
40
  | claude-haiku-4-5 | Economy | $0.001 | Claude |
@@ -51,7 +52,8 @@ models programmatically.
51
52
  | glm-5.3-flash | Maximum/Premium/Standard | Unpriced | GLM coding-plan endpoint |
52
53
  | glm-5.3 | Legacy pins | Unpriced | GLM coding-plan endpoint |
53
54
  | glm-4-flash | Economy | $0.001 | GLM |
54
- | grok-4.6 | Maximum/Premium | $0.002 | Grok |
55
+ | grok-4.7 | Maximum/Premium | $0.002 | Grok |
56
+ | grok-4.6 | Legacy override | $0.002 | Grok |
55
57
  | grok-4.5 | Standard/Economy | $0.002 | Grok |
56
58
  | qwen3.7-max | Premium | $0.0012 | Qwen3 |
57
59
  | qwen3.6-35b-a3b | Standard | $0.000163 | Qwen3 |
@@ -68,8 +70,8 @@ models programmatically.
68
70
 
69
71
  | Model | Tier | Cost/1K | Consultant |
70
72
  |-------|------|---------|------------|
71
- | Gemini 3.7 Flash (High) | Maximum/Premium/Standard | $0.00375 | Gemini (verified agy CLI; promotional through 2026-12-31) |
72
- | Gemini 3.7 Flash (Low) | Economy | $0.00375 | Gemini (verified agy CLI; promotional through 2026-12-31) |
73
+ | Gemini 3.8 Flash (High) | Maximum/Premium/Standard | $0.00375 | Gemini (CLI smoke passed; API-equivalent estimate; promotional through 2026-12-31) |
74
+ | Gemini 3.8 Flash (Low) | Economy | $0.00375 | Gemini (CLI smoke passed; API-equivalent estimate; promotional through 2026-12-31) |
73
75
  | Gemini 3.1 Pro (High) | CLI opt-in | $0.012 | Gemini (agy CLI) |
74
76
  | gemini-3.1-pro-preview | API default | $0.005 | Gemini API |
75
77
  | Gemini 3.6 Flash (High/Low) | Legacy CLI pins | $0.0075 | Gemini |
@@ -78,7 +80,8 @@ models programmatically.
78
80
  | gpt-5.6-terra | Standard | $0.012 | Codex |
79
81
  | gpt-5.6-luna | Economy | $0.0012 | Codex |
80
82
  | claude-fable-5-1 | Maximum/Premium | $0.050 | Claude |
81
- | claude-opus-5 | Standard | $0.025 | Claude |
83
+ | claude-opus-5-5 | Standard | $0.020 | Claude |
84
+ | claude-opus-5 | Legacy override | $0.025 | Claude |
82
85
  | claude-fable-5 | Legacy pins | $0.050 | Claude |
83
86
  | claude-sonnet-5 | Legacy pins | $0.015 | Claude |
84
87
  | claude-haiku-4-5 | Economy | $0.005 | Claude |
@@ -96,7 +99,8 @@ models programmatically.
96
99
  | glm-5.3-flash | Maximum/Premium/Standard | Unpriced | GLM coding-plan endpoint |
97
100
  | glm-5.3 | Legacy pins | Unpriced | GLM coding-plan endpoint |
98
101
  | glm-4-flash | Economy | $0.003 | GLM |
99
- | grok-4.6 | Maximum/Premium | $0.006 | Grok |
102
+ | grok-4.7 | Maximum/Premium | $0.006 | Grok |
103
+ | grok-4.6 | Legacy override | $0.006 | Grok |
100
104
  | grok-4.5 | Standard/Economy | $0.006 | Grok |
101
105
  | qwen3.7-max | Premium | $0.006 | Qwen3 |
102
106
  | qwen3.6-35b-a3b | Standard | $0.0009 | Qwen3 |
@@ -204,3 +208,26 @@ UTC. The estimate deliberately excludes these discounts; it is not an invoice.
204
208
  Legacy Flash and Flash Vision Exp aliases are now served and billed as V4.1 Flash.
205
209
  Other legacy catalog entries remain historical estimates, not newly verified quotes.
206
210
  Source: [DeepSeek models and pricing](https://api-docs.deepseek.com/quick_start/pricing/).
211
+
212
+ ## Grok 4.7 and Opus 5.5
213
+
214
+ Grok 4.7 uses $2/M input and $6/M output at standard API rates; above 200K
215
+ input tokens the estimator applies $4/M and $12/M to the whole request. It
216
+ excludes cached-input discounts and regional, priority and Grok Build Fast
217
+ adjustments. CLI subscription usage is not an API invoice. Opus 5.5 uses
218
+ $4/M input and $20/M output; measured Claude provider cost takes precedence
219
+ when present. Otherwise cache/service adjustments are excluded from estimates.
220
+
221
+ Sources checked 2026-09-26: [xAI release notes](https://docs.x.ai/developers/release-notes)
222
+ and [Opus 5.5](https://platform.claude.com/docs/en/models/opus-5-5/overview).
223
+
224
+ ## Gemini 3.8 Flash
225
+
226
+ CLI High/Medium/Low and API ID `gemini-3.8-flash` are priced at the promotional
227
+ API-equivalent rate: $0.75/M input, $3.75/M output through 2026-12-31. Standard
228
+ rates from 2027-01-01 are $1.50/M input and $7.50/M output; the static catalog
229
+ must be refreshed at expiry. Cache, service-tier and subscription adjustments
230
+ are excluded: a CLI estimate is not a subscription invoice. Legacy model rates
231
+ remain in the catalog. API Pro 3.1 is still the default for API mode.
232
+ Source: [Google latest-model guide](https://ai.google.dev/gemini-api/docs/latest-model),
233
+ checked 2026-09-27.
package/docs/SETUP.md CHANGED
@@ -872,3 +872,62 @@ from the alias. No CLI transport is introduced.
872
872
 
873
873
  Sources: [models/pricing](https://api-docs.deepseek.com/quick_start/pricing/) and
874
874
  [thinking mode](https://api-docs.deepseek.com/guides/thinking_mode/).
875
+
876
+ ### Grok 4.7 and Claude Opus 5.5
877
+
878
+ Grok defaults to `grok-4.7` for premium/maximum; standard/economy stay on
879
+ `grok-4.5`. Configure migrates exact unpinned persisted `grok-4.5`/`grok-4.6`
880
+ defaults. Pins, environment overrides, `--set` and unrelated IDs survive.
881
+ The existing capability/model inventory probes, strict sandbox and OAuth
882
+ isolation still apply; the Grok 4.7 Fast variant is not implicitly selected.
883
+
884
+ Claude standard/medium selects `claude-opus-5-5`; default/premium/maximum
885
+ remain Fable 5.1 and economy remains Haiku 4.5. Select Opus directly with
886
+ `configure --set CLAUDE_MODEL=claude-opus-5-5`. The historical unpinned Claude
887
+ default migration to Fable is unchanged; explicit old Opus pins stay pinned.
888
+
889
+ Opus 5.5 has always-on adaptive thinking, including empty thinking display
890
+ blocks. Our tool-free single-turn API request omits thinking overrides, sampling
891
+ parameters and forced tool choice; parsing selects visible text by block type.
892
+ The API therefore uses the provider's default effort (medium), with the existing
893
+ 16384 total-output budget. The CLI retains explicit `CLAUDE_REASONING_EFFORT`
894
+ control. Content identity and terminal success remain separate checks.
895
+
896
+ These additions have offline regression coverage. Grok 4.7 and Opus 5.5 CLI
897
+ smokes passed on 2026-09-28. New API transports remain separately unverified. Frozen
898
+ P1.6 benchmark IDs/efforts/preregistration are not changed by this update.
899
+ See the [Opus migration guide](https://platform.claude.com/docs/en/models/opus-5-5/migration-guide)
900
+ and [Grok 4.7](https://docs.x.ai/developers/grok-4-7).
901
+
902
+ ### Gemini 3.8 Flash
903
+
904
+ The installed `agy models` inventory on 2026-09-27 lists Gemini 3.8 Flash
905
+ (High), (Medium) and (Low). CLI default/maximum/premium/standard now select High;
906
+ economy selects Low. Medium remains an explicit `GEMINI_MODEL` choice. Inventory
907
+ evidence is capability-probed, not provider attestation of a generated answer.
908
+
909
+ Configure migrates unpinned historical Pro 3.1 High and Flash 3.7 High/Low
910
+ defaults, preserving the High/Low choice. Pins, environment/--set overrides and
911
+ unrelated models are preserved. API mode remains on `gemini-3.1-pro-preview`.
912
+ Select `GEMINI_API_MODEL=gemini-3.8-flash` explicitly to use Flash via API; its
913
+ native thinking levels are low/medium/high. Other explicit efforts fail before
914
+ dispatch. With no effort setting, the provider's API default is medium.
915
+
916
+ Inventory discovery performed no inference. Separately authorized High/Low CLI
917
+ smokes passed on 2026-09-28, using the named variant without --effort. This is
918
+ capability-probed provenance, not provider content-model attestation. Prices are promotional estimates
919
+ through 2026-12-31; see [Google's model guide](https://ai.google.dev/gemini-api/docs/latest-model).
920
+ The frozen P1.6 inputs remain unchanged.
921
+
922
+ For Google GenerateContent accounting, output tokens include both
923
+ `candidatesTokenCount` and `thoughtsTokenCount`. Input uses `promptTokenCount`,
924
+ which already includes cached content. This avoids dropping billed thinking
925
+ or adding cache tokens twice; it applies to the existing Google API path too.
926
+ See [UsageMetadata](https://ai.google.dev/api/generate-content).
927
+
928
+ For named Gemini 3.8 Flash High/Medium/Low CLI variants, leave
929
+ `GEMINI_REASONING_EFFORT` unset: the level is selected by `GEMINI_MODEL`, and
930
+ `agy` rejects an additional `--effort` for these variants. The CLI's general
931
+ help lists effort values for other supported model selections; it does not
932
+ establish support for every model. Native API thinking remains separately
933
+ configured with low/medium/high.
@@ -1,7 +1,37 @@
1
1
  {
2
- "version": "5.1.1",
3
- "updated": "2026-08-23",
2
+ "version": "5.1.2",
3
+ "updated": "2026-09-28",
4
4
  "models": {
5
+ "gemini-3.8-flash": {
6
+ "input": 0.00075,
7
+ "output": 0.00375,
8
+ "notes": "Promotional API-equivalent estimate through 2026-12-31; standard from 2027-01-01: 0.0015/0.0075 per 1K. Cache/service adjustments excluded; not a CLI invoice."
9
+ },
10
+ "Gemini 3.8 Flash (High)": {
11
+ "input": 0.00075,
12
+ "output": 0.00375,
13
+ "notes": "Promotional API-equivalent estimate through 2026-12-31; standard from 2027-01-01: 0.0015/0.0075 per 1K. Cache/service adjustments excluded; not a CLI invoice."
14
+ },
15
+ "Gemini 3.8 Flash (Medium)": {
16
+ "input": 0.00075,
17
+ "output": 0.00375,
18
+ "notes": "Promotional API-equivalent estimate through 2026-12-31; standard from 2027-01-01: 0.0015/0.0075 per 1K. Cache/service adjustments excluded; not a CLI invoice."
19
+ },
20
+ "Gemini 3.8 Flash (Low)": {
21
+ "input": 0.00075,
22
+ "output": 0.00375,
23
+ "notes": "Promotional API-equivalent estimate through 2026-12-31; standard from 2027-01-01: 0.0015/0.0075 per 1K. Cache/service adjustments excluded; not a CLI invoice."
24
+ },
25
+ "claude-opus-5-5": {
26
+ "input": 0.004,
27
+ "output": 0.020,
28
+ "notes": "Standard API list-rate estimate; cache/service adjustments excluded. Verified 2026-09-26."
29
+ },
30
+ "grok-4.7": {
31
+ "input": 0.002,
32
+ "output": 0.006,
33
+ "notes": "Standard API estimate; above 200K input both rates double for the request. Cache, regional, priority and Fast rates excluded. Verified 2026-09-26."
34
+ },
5
35
  "deepseek-flash": {
6
36
  "input": 0.0003,
7
37
  "output": 0.0012,
@@ -443,12 +473,12 @@
443
473
  "consultant_fallbacks": {
444
474
  "_comment": "Premium defaults - Updated Sep 2026",
445
475
  "claude": "claude-fable-5-1",
446
- "gemini": "Gemini 3.7 Flash (High)",
476
+ "gemini": "Gemini 3.8 Flash (High)",
447
477
  "codex": "gpt-6-astra",
448
478
  "mistral": "mistral-large-3",
449
479
  "deepseek": "deepseek-flash",
450
480
  "glm": "glm-5.3-flash",
451
- "grok": "grok-4.6",
481
+ "grok": "grok-4.7",
452
482
  "qwen3": "qwen3.7-max",
453
483
  "kimi": "kimi-code/k3",
454
484
  "minimax": "minimax-m2.7"
@@ -457,31 +487,31 @@
457
487
  "_comment": "Model tiers for apply_model_tier() function",
458
488
  "maximum": {
459
489
  "claude": "claude-fable-5-1",
460
- "gemini": "Gemini 3.7 Flash (High)",
490
+ "gemini": "Gemini 3.8 Flash (High)",
461
491
  "codex": "gpt-6-astra",
462
492
  "mistral": "mistral-medium-3.5",
463
493
  "deepseek": "deepseek-flash",
464
494
  "glm": "glm-5.3-flash",
465
- "grok": "grok-4.6",
495
+ "grok": "grok-4.7",
466
496
  "qwen3": "qwen3.8-max",
467
497
  "kimi": "kimi-code/k3-256k",
468
498
  "minimax": "MiniMax-M3"
469
499
  },
470
500
  "premium": {
471
501
  "claude": "claude-fable-5-1",
472
- "gemini": "Gemini 3.7 Flash (High)",
502
+ "gemini": "Gemini 3.8 Flash (High)",
473
503
  "codex": "gpt-6-astra",
474
504
  "mistral": "mistral-medium-3.5",
475
505
  "deepseek": "deepseek-flash",
476
506
  "glm": "glm-5.3-flash",
477
- "grok": "grok-4.6",
507
+ "grok": "grok-4.7",
478
508
  "qwen3": "qwen3.7-max",
479
509
  "kimi": "kimi-code/k3",
480
510
  "minimax": "MiniMax-M2.7"
481
511
  },
482
512
  "standard": {
483
- "claude": "claude-opus-5",
484
- "gemini": "Gemini 3.7 Flash (High)",
513
+ "claude": "claude-opus-5-5",
514
+ "gemini": "Gemini 3.8 Flash (High)",
485
515
  "codex": "gpt-5.6-terra",
486
516
  "mistral": "mistral-medium-3.5",
487
517
  "deepseek": "deepseek-flash",
@@ -493,7 +523,7 @@
493
523
  },
494
524
  "economy": {
495
525
  "claude": "claude-haiku-4-5",
496
- "gemini": "Gemini 3.7 Flash (Low)",
526
+ "gemini": "Gemini 3.8 Flash (Low)",
497
527
  "codex": "gpt-5.6-luna",
498
528
  "mistral": "devstral-small-2",
499
529
  "deepseek": "deepseek-flash",
@@ -507,10 +537,10 @@
507
537
  "transport_model_tiers": {
508
538
  "_comment": "Transport-specific namespaces used by Gemini and Mistral; the legacy model_tiers table reflects their CLI values.",
509
539
  "gemini": {
510
- "maximum": {"cli": "Gemini 3.7 Flash (High)", "api": "gemini-3.1-pro-preview"},
511
- "premium": {"cli": "Gemini 3.7 Flash (High)", "api": "gemini-3.1-pro-preview"},
512
- "standard": {"cli": "Gemini 3.7 Flash (High)", "api": "gemini-3.1-pro-preview"},
513
- "economy": {"cli": "Gemini 3.7 Flash (Low)", "api": "gemini-3.1-pro-preview"}
540
+ "maximum": {"cli": "Gemini 3.8 Flash (High)", "api": "gemini-3.1-pro-preview"},
541
+ "premium": {"cli": "Gemini 3.8 Flash (High)", "api": "gemini-3.1-pro-preview"},
542
+ "standard": {"cli": "Gemini 3.8 Flash (High)", "api": "gemini-3.1-pro-preview"},
543
+ "economy": {"cli": "Gemini 3.8 Flash (Low)", "api": "gemini-3.1-pro-preview"}
514
544
  },
515
545
  "mistral": {
516
546
  "maximum": {"cli": "mistral-medium-3.5", "api": "mistral-large-3"},
@@ -520,8 +550,8 @@
520
550
  }
521
551
  },
522
552
  "opt_in_targets": {
523
- "gemini_cli": ["Gemini 3.1 Pro (High)", "Gemini 3.6 Flash (High)", "Gemini 3.6 Flash (Low)"],
524
- "gemini_api": ["gemini-3.7-flash"],
553
+ "gemini_cli": ["Gemini 3.8 Flash (Medium)", "Gemini 3.7 Flash (High)", "Gemini 3.7 Flash (Low)", "Gemini 3.1 Pro (High)", "Gemini 3.6 Flash (High)", "Gemini 3.6 Flash (Low)"],
554
+ "gemini_api": ["gemini-3.7-flash", "gemini-3.8-flash"],
525
555
  "mistral_api": ["mistral-medium-3-5", "mistral-large-2512", "mistral-small-2603"],
526
556
  "claude": []
527
557
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-consultants",
3
- "version": "5.1.1",
3
+ "version": "5.1.2",
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"
@@ -59,7 +59,7 @@ Model defaults carry an `# ai-consultants:default` marker. On rewrite,
59
59
  `CLAUDE_MODEL=claude-opus-4-8` and `claude-opus-5` generated defaults to
60
60
  Fable 5.1. An explicit model override supplied with `--set` is stored with
61
61
  `# ai-consultants:pin`, so `--set CLAUDE_MODEL=claude-opus-5` keeps the
62
- lower-cost standard model intentionally.
62
+ legacy Opus 5 model intentionally. Standard/medium now select Opus 5.5.
63
63
  The exhaustive parameter contract is [`.env.example`](../.env.example); the
64
64
  configurator derives its accepted keys from that template, while
65
65
  [`scripts/config.sh`](../scripts/config.sh) remains the runtime source of truth.
@@ -240,11 +240,11 @@ ENABLE_DEEPSEEK=false
240
240
  ### Model Overrides
241
241
 
242
242
  ```bash
243
- GEMINI_MODEL=Gemini 3.7 Flash (High) # verified agy CLI default; API mode uses GEMINI_API_MODEL
243
+ GEMINI_MODEL="Gemini 3.8 Flash (High)" # CLI smoke passed; capability-probed identity; API uses GEMINI_API_MODEL
244
244
  CODEX_MODEL=gpt-6-astra
245
245
  CODEX_API_MAX_TOKENS=16384
246
246
  CLAUDE_MODEL=claude-fable-5-1
247
- # Lower-cost standard override: CLAUDE_MODEL=claude-opus-5
247
+ # Lower-cost standard override: CLAUDE_MODEL=claude-opus-5-5
248
248
  CLAUDE_API_MAX_TOKENS=16384 # API only: adaptive thinking + visible output
249
249
  MISTRAL_MODEL=mistral-large-3
250
250
  MISTRAL_CLI_MODEL=mistral-medium-3.5
@@ -257,7 +257,7 @@ QWEN3_API_MAX_TOKENS=16384
257
257
  GLM_MODEL=glm-5.3-flash
258
258
  GLM_API_MAX_TOKENS=16384
259
259
  GLM_REASONING_EFFORT= # max_quality sets max
260
- GROK_MODEL=grok-4.6
260
+ GROK_MODEL=grok-4.7
261
261
  GROK_MAX_TURNS=4
262
262
  GROK_API_MAX_TOKENS=4096
263
263
  GROK_REASONING_EFFORT= # max_quality sets xhigh (Grok Build maximum)
package/scripts/config.sh CHANGED
@@ -128,7 +128,7 @@ LAUNCH_STAGGER_MAX_SECONDS="${LAUNCH_STAGGER_MAX_SECONDS:-2}"
128
128
 
129
129
  # CLI mode uses the Antigravity CLI (`agy`), successor to the deprecated
130
130
  # Gemini CLI (transitioned 2026-06-18). Models are passed by display name.
131
- GEMINI_MODEL="${GEMINI_MODEL:-Gemini 3.7 Flash (High)}"
131
+ GEMINI_MODEL="${GEMINI_MODEL:-Gemini 3.8 Flash (High)}"
132
132
  GEMINI_TIMEOUT_SECONDS="${GEMINI_TIMEOUT:-180}"
133
133
  GEMINI_CMD="${GEMINI_CMD:-agy}"
134
134
  # API mode (GEMINI_USE_API=true) talks to the Google AI generativelanguage
@@ -213,7 +213,7 @@ GLM_FORMAT="${GLM_FORMAT:-openai}"
213
213
  # =============================================================================
214
214
 
215
215
  GROK_CMD="${GROK_CMD:-grok}"
216
- GROK_MODEL="${GROK_MODEL:-grok-4.6}"
216
+ GROK_MODEL="${GROK_MODEL:-grok-4.7}"
217
217
  GROK_TIMEOUT_SECONDS="${GROK_TIMEOUT:-180}"
218
218
  GROK_API_MAX_TOKENS="${GROK_API_MAX_TOKENS:-4096}"
219
219
  GROK_MAX_TURNS="${GROK_MAX_TURNS:-4}"
@@ -619,12 +619,12 @@ get_model_for_tier() {
619
619
  maximum|max_quality|max-quality)
620
620
  case "$consultant" in
621
621
  claude) echo "claude-fable-5-1" ;;
622
- gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.7 Flash (High)" ;;
622
+ gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.8 Flash (High)" ;;
623
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-flash" ;;
626
626
  glm) echo "glm-5.3-flash" ;;
627
- grok) echo "grok-4.6" ;;
627
+ grok) echo "grok-4.7" ;;
628
628
  qwen3) echo "qwen3.8-max" ;;
629
629
  kimi) echo "kimi-code/k3-256k" ;;
630
630
  minimax) echo "MiniMax-M3" ;;
@@ -634,12 +634,12 @@ get_model_for_tier() {
634
634
  premium|max|best)
635
635
  case "$consultant" in
636
636
  claude) echo "claude-fable-5-1" ;;
637
- gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.7 Flash (High)" ;;
637
+ gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.8 Flash (High)" ;;
638
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-flash" ;;
641
641
  glm) echo "glm-5.3-flash" ;;
642
- grok) echo "grok-4.6" ;;
642
+ grok) echo "grok-4.7" ;;
643
643
  qwen3) echo "qwen3.7-max" ;;
644
644
  kimi) echo "kimi-code/k3" ;;
645
645
  minimax) echo "MiniMax-M2.7" ;;
@@ -648,8 +648,8 @@ get_model_for_tier() {
648
648
  ;;
649
649
  standard|medium|balanced)
650
650
  case "$consultant" in
651
- claude) echo "claude-opus-5" ;;
652
- gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.7 Flash (High)" ;;
651
+ claude) echo "claude-opus-5-5" ;;
652
+ gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.8 Flash (High)" ;;
653
653
  codex) echo "gpt-5.6-terra" ;;
654
654
  mistral) [[ "$transport" == "api" ]] && echo "mistral-large-3" || echo "mistral-medium-3.5" ;;
655
655
  deepseek) echo "deepseek-flash" ;;
@@ -664,7 +664,7 @@ get_model_for_tier() {
664
664
  economy|fast|quick)
665
665
  case "$consultant" in
666
666
  claude) echo "claude-haiku-4-5" ;;
667
- gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.7 Flash (Low)" ;;
667
+ gemini) [[ "$transport" == "api" ]] && echo "gemini-3.1-pro-preview" || echo "Gemini 3.8 Flash (Low)" ;;
668
668
  codex) echo "gpt-5.6-luna" ;;
669
669
  mistral) [[ "$transport" == "api" ]] && echo "mistral-large-3" || echo "devstral-small-2" ;;
670
670
  deepseek) echo "deepseek-flash" ;;
@@ -715,7 +715,7 @@ apply_model_tier() {
715
715
 
716
716
  # Gemini and Mistral intentionally carry both transport-specific IDs so a
717
717
  # later transport choice cannot send a CLI display name to an HTTP API (or
718
- # an API slug to a CLI). Gemini 3.7 uses one API ID plus a thinking level.
718
+ # an API slug to a CLI). Gemini 3.7/3.8 Flash use one API ID plus a thinking level.
719
719
  export GEMINI_MODEL="$(get_model_for_tier gemini "$tier" cli)"
720
720
  export GEMINI_API_MODEL="$(get_model_for_tier gemini "$tier" api)"
721
721
  export MISTRAL_CLI_MODEL="$(get_model_for_tier mistral "$tier" cli)"
@@ -839,8 +839,8 @@ apply_model_tier() {
839
839
  ;;
840
840
  esac
841
841
 
842
- # Gemini 3.7 is promoted only on the exact agy transport that completed a
843
- # live adapter smoke. API tiers remain on the separately proven 3.1 Pro ID;
842
+ # Gemini 3.8 CLI availability is inventory-probed; new live smokes are
843
+ # required separately. API tiers remain on the proven 3.1 Pro ID;
844
844
  # neither transport silently substitutes the other's model namespace.
845
845
 
846
846
  case "$tier" in
@@ -1035,4 +1035,4 @@ list_presets() {
1035
1035
  # VERSION
1036
1036
  # =============================================================================
1037
1037
 
1038
- AI_CONSULTANTS_VERSION="5.1.1"
1038
+ AI_CONSULTANTS_VERSION="5.1.2"
@@ -133,6 +133,8 @@ chmod 600 "$WORK_FILE"
133
133
 
134
134
  read_value() {
135
135
  local file="$1" wanted="$2" line key value found="" seen=false
136
+ local double_quoted='^"(([^"\\]|\\.)*)"[[:space:]]*(#.*)?$'
137
+ local single_quoted="^'([^']*)'[[:space:]]*(#.*)?$"
136
138
  [[ -r "$file" ]] || return 1
137
139
  while IFS= read -r line || [[ -n "$line" ]]; do
138
140
  line="${line%$'\r'}"
@@ -147,8 +149,8 @@ read_value() {
147
149
  key="${key//[[:space:]]/}"
148
150
  [[ "$key" == "$wanted" ]] || continue
149
151
  value="${line#*=}"
150
- if [[ "$value" =~ ^\".*\"$ ]] || [[ "$value" =~ ^\'.*\'$ ]]; then
151
- value="${value:1:${#value}-2}"
152
+ if [[ "$value" =~ $double_quoted ]] || [[ "$value" =~ $single_quoted ]]; then
153
+ value="${BASH_REMATCH[1]}"
152
154
  else
153
155
  value=$(printf '%s' "$value" | sed -E 's/[[:space:]]+#.*$//; s/[[:space:]]+$//')
154
156
  fi
@@ -314,11 +316,20 @@ esac
314
316
  # Migrate only the exact catalog defaults previously generated by this tool.
315
317
  # A # ai-consultants:pin marker is the durable escape hatch for users who want
316
318
  # to keep an older target or a nonstandard binary name.
317
- if [[ "$(read_value "$WORK_FILE" GEMINI_MODEL 2>/dev/null || true)" == "Gemini 3.1 Pro (High)" ]] \
318
- && ! has_value_marker "$WORK_FILE" GEMINI_MODEL "$PIN_MARKER"; then
319
- set_value GEMINI_MODEL "Gemini 3.7 Flash (High) $DEFAULT_MARKER"
320
- echo "Migrated managed Gemini CLI default: Gemini 3.1 Pro (High) -> Gemini 3.7 Flash (High)" >&2
321
- fi
319
+ case "$(read_value "$WORK_FILE" GEMINI_MODEL 2>/dev/null || true)" in
320
+ 'Gemini 3.1 Pro (High)'|'Gemini 3.7 Flash (High)')
321
+ if ! has_value_marker "$WORK_FILE" GEMINI_MODEL "$PIN_MARKER"; then
322
+ set_value GEMINI_MODEL "Gemini 3.8 Flash (High) $DEFAULT_MARKER"
323
+ echo "Migrated managed Gemini CLI default to Gemini 3.8 Flash (High)" >&2
324
+ fi
325
+ ;;
326
+ 'Gemini 3.7 Flash (Low)')
327
+ if ! has_value_marker "$WORK_FILE" GEMINI_MODEL "$PIN_MARKER"; then
328
+ set_value GEMINI_MODEL "Gemini 3.8 Flash (Low) $DEFAULT_MARKER"
329
+ echo "Migrated managed Gemini CLI economy default to Gemini 3.8 Flash (Low)" >&2
330
+ fi
331
+ ;;
332
+ esac
322
333
 
323
334
  case "$(read_value "$WORK_FILE" GLM_MODEL 2>/dev/null || true)" in
324
335
  glm-5.2|glm-5.3)
@@ -329,11 +340,14 @@ case "$(read_value "$WORK_FILE" GLM_MODEL 2>/dev/null || true)" in
329
340
  ;;
330
341
  esac
331
342
 
332
- if [[ "$(read_value "$WORK_FILE" GROK_MODEL 2>/dev/null || true)" == "grok-4.5" ]] \
333
- && ! has_value_marker "$WORK_FILE" GROK_MODEL "$PIN_MARKER"; then
334
- set_value GROK_MODEL "grok-4.6 $DEFAULT_MARKER"
335
- echo "Migrated managed Grok default: grok-4.5 -> grok-4.6" >&2
336
- fi
343
+ case "$(read_value "$WORK_FILE" GROK_MODEL 2>/dev/null || true)" in
344
+ grok-4.5|grok-4.6)
345
+ if ! has_value_marker "$WORK_FILE" GROK_MODEL "$PIN_MARKER"; then
346
+ set_value GROK_MODEL "grok-4.7 $DEFAULT_MARKER"
347
+ echo "Migrated managed Grok default to grok-4.7" >&2
348
+ fi
349
+ ;;
350
+ esac
337
351
 
338
352
  # Refresh only exact unpinned historical DeepSeek defaults. Environment and
339
353
  # --set selections carry pin markers and remain user-owned.
@@ -345,7 +345,11 @@ extract_token_usage() {
345
345
  ;;
346
346
  google_ai)
347
347
  input_tokens=$(echo "$response" | jq -r '.usageMetadata.promptTokenCount // 0' 2>/dev/null)
348
- output_tokens=$(echo "$response" | jq -r '.usageMetadata.candidatesTokenCount // 0' 2>/dev/null)
348
+ # Google bills candidates plus thoughts as output. Cached input is
349
+ # already included in promptTokenCount and must not be added again.
350
+ output_tokens=$(echo "$response" | jq -r '
351
+ def token: if type == "number" and . >= 0 and floor == . then . else 0 end;
352
+ .usageMetadata | ((.candidatesTokenCount | token) + (.thoughtsTokenCount | token))' 2>/dev/null)
349
353
  ;;
350
354
  *) # openai format (default)
351
355
  input_tokens=$(echo "$response" | jq -r '.usage.prompt_tokens // 0' 2>/dev/null)
@@ -381,7 +385,11 @@ extract_token_split() {
381
385
  ;;
382
386
  google_ai)
383
387
  input_tokens=$(echo "$response" | jq -r '.usageMetadata.promptTokenCount // 0' 2>/dev/null)
384
- output_tokens=$(echo "$response" | jq -r '.usageMetadata.candidatesTokenCount // 0' 2>/dev/null)
388
+ # Google bills candidates plus thoughts as output. Cached input is
389
+ # already included in promptTokenCount and must not be added again.
390
+ output_tokens=$(echo "$response" | jq -r '
391
+ def token: if type == "number" and . >= 0 and floor == . then . else 0 end;
392
+ .usageMetadata | ((.candidatesTokenCount | token) + (.thoughtsTokenCount | token))' 2>/dev/null)
385
393
  ;;
386
394
  *) # openai format (default)
387
395
  input_tokens=$(echo "$response" | jq -r '.usage.prompt_tokens // 0' 2>/dev/null)
@@ -88,24 +88,24 @@ run_api_mode_query() {
88
88
 
89
89
  case "$api_format" in
90
90
  google_ai)
91
- # Gemini 3.7 exposes low|medium|high thinking levels on the native
91
+ # Gemini 3.7/3.8 Flash expose low|medium|high thinking levels on the native
92
92
  # Google AI wire. The shared syntax validator is intentionally
93
93
  # broader for OpenAI-compatible providers, so fail before spending
94
94
  # a request when Google receives an unsupported level.
95
95
  local google_thinking_level=""
96
96
  if [[ -n "$effort" ]]; then
97
97
  case "$model" in
98
- gemini-3.7-flash*)
98
+ gemini-3.7-flash*|gemini-3.8-flash)
99
99
  case "$effort" in
100
100
  low|medium|high) google_thinking_level="$effort" ;;
101
101
  *)
102
- log_error "[$consultant_name] $effort_var=$effort is unsupported for Gemini 3.7 on the 'google_ai' wire format (expected low|medium|high)"
102
+ log_error "[$consultant_name] $effort_var=$effort is unsupported for $model on the 'google_ai' wire format (expected low|medium|high)"
103
103
  return 1
104
104
  ;;
105
105
  esac
106
106
  ;;
107
107
  *)
108
- log_warn "[$consultant_name] $effort_var is only transported to Gemini 3.7 on the 'google_ai' wire format and is ignored for $model."
108
+ log_warn "[$consultant_name] $effort_var is only transported to Gemini 3.7/3.8 Flash on the 'google_ai' wire format and is ignored for $model."
109
109
  ;;
110
110
  esac
111
111
  fi
@@ -133,10 +133,13 @@ get_input_cost_per_1k() {
133
133
 
134
134
  # Fallback to hardcoded rates for backwards compatibility
135
135
  case "$model" in
136
+ gemini-3.8-flash|"gemini 3.8 flash (high)"|"gemini 3.8 flash (medium)"|"gemini 3.8 flash (low)") echo "0.00075" ;;
136
137
  gemini-2.5-pro) echo "0.00125" ;;
137
138
  gemini-2.5-flash) echo "0.000075" ;;
138
139
  gemini-2.0-flash) echo "0.0001" ;;
139
140
  deepseek-flash|deepseek-v4-flash|deepseek-v4-flash-vision-exp) echo "0.0003" ;;
141
+ claude-opus-5-5) echo "0.004" ;;
142
+ grok-4.7) echo "0.002" ;;
140
143
  gpt-6-astra|claude-fable-5-1) echo "0.01" ;;
141
144
  gpt-4) echo "0.03" ;;
142
145
  gpt-4-turbo) echo "0.01" ;;
@@ -181,10 +184,13 @@ get_output_cost_per_1k() {
181
184
 
182
185
  # Fallback to hardcoded rates for backwards compatibility
183
186
  case "$model" in
187
+ gemini-3.8-flash|"gemini 3.8 flash (high)"|"gemini 3.8 flash (medium)"|"gemini 3.8 flash (low)") echo "0.00375" ;;
184
188
  gemini-2.5-pro) echo "0.005" ;;
185
189
  gemini-2.5-flash) echo "0.0003" ;;
186
190
  gemini-2.0-flash) echo "0.0004" ;;
187
191
  deepseek-flash|deepseek-v4-flash|deepseek-v4-flash-vision-exp) echo "0.0012" ;;
192
+ claude-opus-5-5) echo "0.020" ;;
193
+ grok-4.7) echo "0.006" ;;
188
194
  gpt-6-astra|claude-fable-5-1) echo "0.05" ;;
189
195
  gpt-4) echo "0.06" ;;
190
196
  gpt-4-turbo) echo "0.03" ;;
@@ -238,6 +244,10 @@ estimate_query_cost() {
238
244
  input_rate=$(echo "scale=6; $input_rate * 2" | bc)
239
245
  output_rate=$(echo "scale=6; $output_rate * 1.5" | bc)
240
246
  fi
247
+ if [[ "$model" == grok-4.7 && "$input_tokens" -gt 200000 ]]; then
248
+ input_rate=$(echo "scale=6; $input_rate * 2" | bc)
249
+ output_rate=$(echo "scale=6; $output_rate * 2" | bc)
250
+ fi
241
251
  # Calculate cost
242
252
  local input_cost output_cost total_cost
243
253
  input_cost=$(echo "scale=6; $input_tokens / 1000 * $input_rate" | bc)
@@ -403,7 +413,7 @@ format_cost_caveats() {
403
413
  local responses_dir="${1:-}"
404
414
  [[ -d "$responses_dir" ]] || return 0
405
415
 
406
- local estimated=0 unknown=0 priced=0 f astra_estimate=0 deepseek_flash_estimate=0
416
+ local estimated=0 unknown=0 priced=0 f astra_estimate=0 deepseek_flash_estimate=0 grok_47_estimate=0 opus_55_estimate=0 gemini_38_estimate=0
407
417
  local unpriced_models=()
408
418
  while IFS= read -r f; do
409
419
  [[ -n "$f" ]] || continue
@@ -432,6 +442,17 @@ format_cost_caveats() {
432
442
  fi
433
443
  ;;
434
444
  esac
445
+ if ! jq -e '.metadata.provider_cost_usd | numbers' "$f" >/dev/null 2>&1; then
446
+ [[ "$model" != grok-4.7 ]] || grok_47_estimate=1
447
+ [[ "$model" != claude-opus-5-5 ]] || opus_55_estimate=1
448
+ fi
449
+ case "$model" in
450
+ gemini-3.8-flash|'Gemini 3.8 Flash (High)'|'Gemini 3.8 Flash (Medium)'|'Gemini 3.8 Flash (Low)')
451
+ if ! jq -e '.metadata.provider_cost_usd | numbers' "$f" >/dev/null 2>&1; then
452
+ gemini_38_estimate=1
453
+ fi
454
+ ;;
455
+ esac
435
456
  is_unpriced_model "$model" || continue
436
457
  seen=false
437
458
  for item in "${unpriced_models[@]+"${unpriced_models[@]}"}"; do
@@ -453,6 +474,15 @@ format_cost_caveats() {
453
474
  if [[ $deepseek_flash_estimate -eq 1 ]]; then
454
475
  parts="${parts:+$parts; }DeepSeek Flash cost estimated at peak cache-miss rates; off-peak/cache discounts excluded, not an invoice"
455
476
  fi
477
+ if [[ $grok_47_estimate -eq 1 ]]; then
478
+ parts="${parts:+$parts; }Grok 4.7 API list-rate estimate includes long-context pricing; cache/regional/priority/Fast adjustments excluded, not an invoice"
479
+ fi
480
+ if [[ $opus_55_estimate -eq 1 ]]; then
481
+ parts="${parts:+$parts; }Opus 5.5 Standard API estimate excludes cache/service adjustments, not an invoice"
482
+ fi
483
+ if [[ $gemini_38_estimate -eq 1 ]]; then
484
+ parts="${parts:+$parts; }Gemini 3.8 promotional API estimate through 2026-12-31; cache/service adjustments excluded, not a CLI invoice"
485
+ fi
456
486
  local unpriced=""
457
487
  if (( ${#unpriced_models[@]} > 0 )); then
458
488
  unpriced=$(IFS=,; printf '%s' "${unpriced_models[*]}")
@@ -8,7 +8,7 @@
8
8
  # Usage: ./query_gemini.sh "question" [context_file] [output_file]
9
9
  #
10
10
  # Environment variables:
11
- # GEMINI_MODEL - agy model display name (default: "Gemini 3.7 Flash (High)")
11
+ # GEMINI_MODEL - agy model display name (default: "Gemini 3.8 Flash (High)")
12
12
  # GEMINI_TIMEOUT - Timeout in seconds (default: 180)
13
13
  # GEMINI_USE_API - Use Google AI API mode instead of the agy CLI (default: false)
14
14
  # GEMINI_API_MODEL - API model ID for API mode (default: gemini-3.1-pro-preview)
@@ -5,7 +5,7 @@
5
5
  #
6
6
  # Environment variables:
7
7
  # GROK_CMD - Grok Build command (default: grok)
8
- # GROK_MODEL - Model to use in both transports (default: grok-4.6)
8
+ # GROK_MODEL - Model to use in both transports (default: grok-4.7)
9
9
  # GROK_TIMEOUT - Timeout in seconds (default: 180)
10
10
  # GROK_MAX_TURNS - Bounded advisory turns (default: 4)
11
11
  # GROK_USE_API - Force the API path when true (default: CLI-first auto)