Skip to content

feat(models): offer the Claude 5 family only, default to Sonnet 5#775

Merged
aaronjmars merged 1 commit into
mainfrom
chore/models-claude-5
Jul 24, 2026
Merged

feat(models): offer the Claude 5 family only, default to Sonnet 5#775
aaronjmars merged 1 commit into
mainfrom
chore/models-claude-5

Conversation

@aaronjmars

Copy link
Copy Markdown
Collaborator

What

Cuts the Anthropic model picker down to the current Claude 5 family and moves the default to Sonnet 5.

before after
default claude-sonnet-4-6 claude-sonnet-5
offered sonnet-4-6, opus-4-8, opus-4-7, fable-5, sonnet-5, haiku-4-5 sonnet-5, opus-5, haiku-4-5

claude-opus-5 was never in the picker despite Fable 5 and Sonnet 5 being there, so the newest Opus on offer was 4.8.

Why it touches 16 files

The default resolves in six independent places. Miss one and an instance that never opens the picker silently keeps resolving a removed id: MODELS[0], aeon.yml model:, the config.ts parse fallback, the page.tsx useState seed, and the CONFIG_MODEL fallbacks in both aeon.yml and messages.yml.

Three skills generate config and were recommending removed ids - create-skill's default model recommendation, feature's "current models (suggest these as replacements)" list, and skill-repair's timeout downgrade. Left alone they would keep writing ids that 422 at dispatch. Retargeted to Haiku 4.5 for cost cases, Opus 5 for reasoning-heavy ones.

Gateway fixes (verified against live provider catalogs)

openrouter - slot defaults moved to anthropic/claude-opus-5 / anthropic/claude-sonnet-5, both confirmed present in OpenRouter's public catalog.

venice - fixes a latent 404 that predates this PR. Venice carries no haiku model at all, but claude-haiku-4-5 was in the allowlist. Selecting Haiku 4.5, a live picker option, matched and routed to a model Venice has never had, bypassing the safe fallback that existed to catch exactly that case. Allowlist rewritten to the 9 Claude ids Venice actually carries, fallback moved from opus-4-6 to sonnet-5.

Routing now, exercising the real case statement:

claude-sonnet-5           -> claude-sonnet-5     (was opus-4-6, needless downgrade)
claude-opus-5             -> claude-opus-5       (was opus-4-6, needless downgrade)
claude-haiku-4-5-20251001 -> claude-sonnet-5     (was claude-haiku-4-5 -> 404)
claude-opus-4-8           -> claude-opus-4-8     (back-compat preserved)
bogus-model               -> claude-sonnet-5     (fallback intact)

Also flips the GROK_MODEL gateway default from grok-build-0.1 to grok-4.5, so the gateway and CLI paths name the same model.

Verification

  • 165/165 dashboard tests, tsc --noEmit clean
  • validate-config.js CLEAN (62 skills)
  • test_run_grok.sh ALL PASS (incl. the 6 OAuth-refresh cases from fix(grok): persist rotated OAuth refresh token so GROK_CREDENTIALS survives past 6h #773)
  • actionlint + shellcheck -S error clean
  • Bidirectional check that every picker id across all 6 harness lists (18 ids) appears in the workflow choice options and vice versa, so nothing can 422 and no dead option remains

Deliberately unchanged

skills/fork-fleet/SKILL.md keeps claude-sonnet-4-6 in two report templates - those are placeholder values describing config read from other forks, which legitimately pin older ids.

Separate follow-up, not fixed here

harness-adapter/README.md points contributors upstream to aaronjmars/harness-adapter for fixes and says three more harnesses (opencode, copilot, agy) plus the live test suite live there. That repo does not exist - 404 from the API and raw host, absent from an authenticated repo listing, and not in global search. Worth correcting the README separately.

Replace the Anthropic model picker with the current lineup: claude-sonnet-5
(new default), claude-opus-5 (added), claude-haiku-4-5-20251001. Removes
claude-opus-4-7, claude-opus-4-8, claude-fable-5 and claude-sonnet-4-6.

The default moves in all six places that resolve it, so an instance that never
touches the picker still lands on a live id: MODELS[0], aeon.yml model:, the
config.ts parse fallback, the page.tsx useState seed, and the CONFIG_MODEL
fallbacks in aeon.yml + messages.yml.

Three config-generating skills were steering agents at removed ids
(create-skill's default recommendation, feature's "current models" replacement
list, skill-repair's timeout downgrade). Retargeted to Haiku 4.5 for the cost
cases and Opus 5 for reasoning-heavy ones, so they stop minting ids that 422 at
dispatch time.

Gateway pins verified against each provider's live catalog:

- openrouter: slot defaults moved to anthropic/claude-opus-5 and
  anthropic/claude-sonnet-5, both confirmed present in the catalog.
- venice: fixes a latent 404. Venice carries no haiku model at all, yet
  claude-haiku-4-5 sat in the allowlist, so selecting Haiku 4.5 matched and
  routed to a model Venice has never had, bypassing the safe fallback that
  existed to catch exactly that. Allowlist rewritten to the 9 Claude ids Venice
  actually carries; fallback moved from opus-4-6 to sonnet-5. Sonnet 5 and
  Opus 5 now pass through instead of being needlessly downgraded.

Verified: 165/165 dashboard tests, tsc --noEmit, validate-config CLEAN,
test_run_grok ALL PASS, actionlint and shellcheck clean.
@aaronjmars
aaronjmars merged commit 182e781 into main Jul 24, 2026
9 checks passed
@aaronjmars
aaronjmars deleted the chore/models-claude-5 branch July 24, 2026 20:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant