feat(models): add Claude Sonnet 5.5 and move built-in Claude profiles to it - #6111
Conversation
- Add claude-sonnet-5-5 for anthropic native API - Add anthropic.claude-sonnet-5-5 for Amazon Bedrock (all regions) - Add regional variants: au, eu, global, jp, us - Pricing: $2/$10 per MTok input/output, cache read 10% - Context window: 1M tokens, max output: 128K - Thinking mode: anthropic-adaptive (native), anthropic-budget-effort (bedrock) Minimal diff: 185 insertions(+), 5 deletions(-)
- claude-opus: executor → anthropic/claude-sonnet-5-5 - claude-fable: executor → anthropic/claude-sonnet-5-5 - opus-codex: planner → anthropic/claude-sonnet-5-5
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ab55cd459a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| profile("claude-opus", ["anthropic"], { | ||
| default: ["anthropic/claude-opus-5-5:medium", "anthropic/claude-opus-4-6:xhigh"], | ||
| executor: "anthropic/claude-sonnet-5", | ||
| executor: "anthropic/claude-sonnet-5-5", |
There was a problem hiding this comment.
Keep Sonnet 5 as the executor fallback
When Anthropic returns fresh catalog evidence that does not yet contain Sonnet 5.5, this selector remains installed because built-in profiles tolerate stale qualified role bindings (the existing scenario in model-profile-activation.test.ts:282-355 now explicitly preserves it). Executor dispatch then reaches the fail-closed path in task/executor.ts:1810-1825 and errors instead of using the still-available Sonnet 5 model. Make this role an ordered claude-sonnet-5-5/claude-sonnet-5 chain, as is already done for the profile's Opus roles.
Useful? React with 👍 / 👎.
| default: "anthropic/claude-opus-5-5:medium", | ||
| executor: "openai-codex/gpt-5.6-terra:low", | ||
| planner: "anthropic/claude-sonnet-5", | ||
| planner: "anthropic/claude-sonnet-5-5", |
There was a problem hiding this comment.
Add release-note fragments for the model and profile changes
This user-visible change modifies both the shipped AI catalog and coding-agent profile behavior, but the commit adds no fragment under either package's changelog.d/ directory. Consequently scripts/release.ts cannot fold the new model or changed presets into either package's release notes; add the applicable per-package fragments before release.
AGENTS.md reference: AGENTS.md:L201-L201
Useful? React with 👍 / 👎.
| | Family | Models | Transport | Prompt limit | | ||
| | --- | --- | --- | --- | | ||
| | Claude | `claude-sonnet-4-6` (default), `claude-sonnet-5`, `claude-opus-4-6`, `claude-opus-4-7`, `claude-opus-4-8`, `claude-opus-5`, `claude-fable-5` | `anthropic-messages` | 1M | | ||
| | Claude | `claude-sonnet-4-6` (default), `claude-sonnet-5`, `claude-sonnet-5-5`, `claude-opus-4-6`, `claude-opus-4-7`, `claude-opus-4-8`, `claude-opus-5`, `claude-fable-5` | `anthropic-messages` | 1M | |
There was a problem hiding this comment.
Do not advertise an unbundled Junie model
This row says Junie users can select claude-sonnet-5-5, but injectJetBrainsJunieModels() still enumerates only Sonnet 4.6 and 5, the generated jetbrains-junie catalog has no 5.5 row, and the provider test still asserts that old exact list. A user authenticated only through JUNIE_API_KEY therefore cannot find or select the newly documented model; add it to the generator and regenerate the catalog, or remove it from this table.
AGENTS.md reference: AGENTS.md:L85-L90
Useful? React with 👍 / 👎.
|
Verification update (gaebal-gajae) presets #11
0.18.0 compatibility (static, from tag v0.18.0)
— |
|
Correction (gaebal-gajae): my earlier note said 0.18.0 would get degraded metadata for So the bundled catalog entry only matters for offline or no-credential resolution and for Bedrock ids. It is not a prerequisite for signing presets #11. — |
probepark
left a comment
There was a problem hiding this comment.
Review (head ab55cd4, gajae-reviewer on behalf of probepark)
CI: gate pending — every planned check is green (check:@gajae-code/ai and check:@gajae-code/coding-agent both covered, approve gate ALLOW). The only red checks are PR contract bootstrap and Merge approval bootstrap, which are waiting on an exact-head review.
Scope: +190 / -14, 5 files — packages/ai/src/models.json (+175, additive), packages/coding-agent/src/config/model-profiles.ts (3 selectors), 2 coding-agent tests, docs/models.md
Conventions: changelog.d fragment missing (ai and coding-agent); no [Unreleased] or released-section edits; generated file models.json touched (see below); no labels
Notable:
packages/ai/src/models.json: I replayed base vs head. There are 7 added keys, 0 changed and 0 removed. Each new entry (anthropic/claude-sonnet-5-5, Bedrockanthropic./au./eu./global./jp./us.) matches itsclaude-sonnet-5sibling byte for byte apart fromid/name. That includes pricing, 1M/128K,anthropic-adaptiveminimal..max on first-party andanthropic-budget-effortminimal..high on Bedrock. Becausegenerate-models.ts:795re-seeds fromprevModelsJsonand never marks these as retired, a regen keeps them. I don't consider this generated-file edit a blocker.docs/models.md:402(JetBrains Junie family table) now listsclaude-sonnet-5-5, butpackages/ai/scripts/generate-models.ts:332-341(injectJetBrainsJunieModels) was not changed andmodels.jsonhas nojetbrains-junie/claude-sonnet-5-5. The docs claim a Junie model that the catalog doesn't bundle. Either add it to the Junie injector list and regen, or revert that table row. Not blocking on its own.model-profiles.ts:259,266,494:claude-opusexecutor,claude-fableexecutor andopus-codexplanner move toanthropic/claude-sonnet-5-5with no fallback chain. This follows the existing single-selector shape. The tests (model-profile-activation.test.ts:112fake registry and 4 expectation sites;model-profiles-catalog.test.ts:323,334,676,795) track the change.
Blocking:
- No release-note fragment. This is a
feat(models)change that adds a bundled model to@gajae-code/aiand changes three built-in preset role bindings in@gajae-code/coding-agent, both of which users will see. AGENTS.md ("Release notes are per-change fragments: addpackages/<pkg>/changelog.d/<slug>.md") requires a fragment, and the direct precedents shipped one: #5823packages/ai/changelog.d/opus-5-5-catalog.md, #5995packages/coding-agent/changelog.d/gpt6-codex-presets.md. Neitherpackages/ai/changelog.d/norpackages/coding-agent/changelog.d/gets a new file at this head. CI's changelog guard only checks for forbidden[Unreleased]edits and doesn't require a fragment, so green CI does not cover this. Fix: add e.g.packages/ai/changelog.d/sonnet-5-5-catalog.md(### Added) andpackages/coding-agent/changelog.d/sonnet-5-5-presets.md(### Changed).
PR body verdict line count=0, not updated. This follows the #6037 human-review path, and the body belongs to the author.
Suggested verdict line: gajae.pr-review-verdict.v1 needs-human sha256:481fe656d4519e51d64e3cc99d9ad797b9f667d31f9d572c4a7be9d4ccbc77c4 reviewer:critic reviewer-id:gajae-reviewer evidence:models-json-additive-replayed;profiles-tests-checked;missing-changelog-fragment
Verdict: gajae.pr-review-verdict.v1 needs-human sha256:481fe656d4519e51d64e3cc99d9ad797b9f667d31f9d572c4a7be9d4ccbc77c4 reviewer:critic reviewer-id:gajae-reviewer evidence:models-json-additive-replayed;profiles-tests-checked;missing-changelog-fragment
|
Addressed review on
@probepark please re-review at the new head. — |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7702a08d64
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "maxLevel": "max" | ||
| } | ||
| }, | ||
| "claude-sonnet-5-5": { |
There was a problem hiding this comment.
Register the new models in the autorouting tier map
Adding this entry and the six Bedrock variants creates seven in-scope catalog keys that are absent from both CURATED_TIER_LABELS and TIER_MAP_SKIP_LIST. The committed-catalog assertion in packages/coding-agent/test/autorouting-tier-map-gate.test.ts therefore reports them as unlabeledKeys and fails; classify Sonnet 5.5 for autorouting or explicitly skip each new selector.
Useful? React with 👍 / 👎.
probepark
left a comment
There was a problem hiding this comment.
Review (head 7702a08, gajae-reviewer on behalf of probepark)
CI: gate pending plus a gap in the plan. Every planned check is green; Virtual integration validation is still pending, and PR contract bootstrap / Merge approval bootstrap are waiting on an exact-head verdict. The targeted plan did not run bun --cwd=packages/coding-agent run check:autorouting-map or test/autorouting-tier-map-gate.test.ts. Both fail at this head (see Blocking).
Scope: +195 / -13, 7 files: packages/ai/src/models.json (+175, additive), 2 changelog.d fragments, packages/coding-agent/src/config/model-profiles.ts (3 selectors), 2 coding-agent tests, docs/models.md
Conventions: changelog.d fragments present (packages/ai/changelog.d/6111-sonnet-5-5-catalog.md ### Added, packages/coding-agent/changelog.d/6111-sonnet-5-5-presets.md ### Changed), which resolves my ab55cd4 blocker. No [Unreleased] or released-section edits. The models.json edit stays additive, as replayed at ab55cd4. No labels.
Notable:
docs/models.md:402: the unbundled Junieclaude-sonnet-5-5entry is reverted, so my earlier docs/catalog mismatch note is resolved.model-profiles.ts:259,266,494: the executor/planner roles are singleanthropic/claude-sonnet-5-5selectors with noclaude-sonnet-5fallback. On an account whose fresh/v1/modelsevidence lacks 5.5, the preserved stale binding reaches the executor's fail-closed path instead of falling back (Codex P1 on L259). The profile's Opus roles already use ordered chains, so aclaude-sonnet-5-5,claude-sonnet-5chain would match. Not blocking on its own.
Blocking:
- Autorouting tier-map gate fails at this head. The PR adds 7 in-scope catalog keys to
models.json. None of them appears inCURATED_TIER_LABELSorTIER_MAP_SKIP_LIST(packages/coding-agent/src/config/autorouting-tier-map.tshas 0sonnet-5-5entries, while eachclaude-opus-5-5key from #5823 is listed at L50/L78-L144/L429). I reproduced it at7702a08:bun scripts/check-autorouting-tier-map.ts→ "Autorouting tier-map gate failed" with offending keysanthropic/claude-sonnet-5-5,amazon-bedrock/{,au.,eu.,global.,jp.,us.}anthropic.claude-sonnet-5-5. The same report drivestest/autorouting-tier-map-gate.test.ts:14(expect(result.report.unlabeledKeys).toEqual([])). Rootcheck:ts/ci:check:fullboth runcheck:autorouting-map, so merging would turn dev's full check red even though this PR's targeted plan is green. Fix: labelanthropic/claude-sonnet-5-5inCURATED_TIER_LABELS(e.g. next toanthropic/claude-sonnet-5→balanced) and add the 6 Bedrock keys toTIER_MAP_SKIP_LISTwith a rationale, mirroring Opus 5.5.
PR body verdict line count=0, not updated (the body belongs to the author).
Suggested verdict line: gajae.pr-review-verdict.v1 needs-human sha256:54fe241c4c6fe32155cfc3f465e51d4fcec0e3dfdb33d7b31104352d457a4c06 reviewer:critic reviewer-id:gajae-reviewer evidence:changelog-fragments-added;junie-row-reverted;autorouting-tier-map-gate-fails-7-unlabeled-keys-reproduced
Verdict: gajae.pr-review-verdict.v1 needs-human sha256:54fe241c4c6fe32155cfc3f465e51d4fcec0e3dfdb33d7b31104352d457a4c06 reviewer:critic reviewer-id:gajae-reviewer evidence:changelog-fragments-added;junie-row-reverted;autorouting-tier-map-gate-fails-7-unlabeled-keys-reproduced
|
Runtime evidence from a community tester on released
This confirms — |
probepark (#6111 at 7702a08): the 7 new in-scope catalog keys were unlabeled, failing check:autorouting-map and autorouting-tier-map-gate.test.ts. Curate anthropic/claude-sonnet-5-5 as balanced rank 1 (sonnet-5 -> 2, sonnet-4-6 -> 3), mirroring opus-5-5 on the strong tier; skip-list the six Bedrock variants like their opus-5-5 siblings.
|
Fixed the tier-map blocker → 942c49d:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 942c49d818
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| default: "anthropic/claude-opus-5-5:medium", | ||
| executor: "openai-codex/gpt-5.6-terra:low", | ||
| planner: "anthropic/claude-sonnet-5", | ||
| planner: "anthropic/claude-sonnet-5-5", |
There was a problem hiding this comment.
Preserve Sonnet 5 as the opus-codex planner fallback
When live Anthropic discovery returns Sonnet 5 but not the newly introduced Sonnet 5.5—as modeled by the fresh-catalog scenario in model-profile-activation.test.ts:282-355—profile activation retains this explicit planner override even though it is unavailable. Invoking the planner then reaches the fail-closed branch in task/executor.ts:1810-1825 instead of using the available predecessor, so this separate opus-codex binding should be an ordered Sonnet 5.5/Sonnet 5 chain.
Useful? React with 👍 / 👎.
probepark
left a comment
There was a problem hiding this comment.
Review (head 942c49d, gajae-reviewer on behalf of probepark)
The 7702a08 tier-map blocker is fixed. One author-side body-contract defect remains; it keeps both bootstrap checks red.
CI: PR contract bootstrap and Merge approval bootstrap both fail because of this PR's body, not bootstrap infrastructure. Job 109211886627 exits with error: PR body must check exactly one risk classification; found 0. (gjc-pr-contract-bootstrap.mjs:22), and Merge approval bootstrap fails closed on that result (contract job result: failure). The same error was already present at 7702a08 (job 109202993950). My previous review described that red as "waiting on an exact-head verdict", which was wrong; correcting it here. Still pending: Affected path validation / native-build and gjc-state-gates / native addon. The targeted plan does not include check:@gajae-code/ai or check:@gajae-code/coding-agent (biome + check:types), so those have not run at this head.
Scope: +204 / -15, 8 files. The delta from 7702a08 is 1 commit touching only packages/coding-agent/src/config/autorouting-tier-map.ts (+9/-2).
Conventions: changelog.d fragments present (ai ### Added, coding-agent ### Changed). No released-section edits. The models.json edit is additive. No labels. PR body verdict line count=0.
Notable:
autorouting-tier-map.ts:48-50:anthropic/claude-sonnet-5-5is labeledbalancedrank 1, which shiftsclaude-sonnet-5to 2 andclaude-sonnet-4-6to 3. The 6 Bedrock*.claude-sonnet-5-5keys are inTIER_MAP_SKIP_LIST(L79-L84) with a rationale, mirroring Opus 5.5. I ranbun scripts/check-autorouting-tier-map.tsat942c49d:Autorouting tier-map gate passed: 4675 in-scope keys; 3936 baseline skips.The module-loadvalidateTierMaprank-collision check also passes. The golden fixtures (test/autorouting-golden/anthropic.json) use a fixed catalog without 5.5, so their expected chains are unaffected. The7702a08blocker is resolved.model-profiles.ts:259,266,494: this is the same non-blocking note as last round, now repeated as Codex P1 on L494. The executor/planner roles are singleclaude-sonnet-5-5selectors with noclaude-sonnet-5fallback. If fresh/v1/modelsevidence omits 5.5, the role reaches the fail-closed path. A["anthropic/claude-sonnet-5-5", "anthropic/claude-sonnet-5"]chain would match the Opus roles' pattern.
Blocking:
- The PR body has no risk-classification checkbox.
dev-ci.yml's contract requires exactly one line matching^-\s*\[(x|X)\]\s*`(low-risk|regression-risk|high-risk)`, and this body has none. Until one is checked, the bootstrap cannot report the contract as valid, and no approval can authorize merge. Only the author or owner can fix this; I did not edit the body. The change impliesregression-risk, because it changes the default executor/planner model in three built-in profiles. That class requires an independent reviewer's exact-headAPPROVED, which this bot would provide once the box is checked and the remaining checks land.low-riskwould open the solomerge-self-approvedpath, but it understates a default-model change.
Not checked: the linked Yeachan-Heo/gajae-code-presets#11. This reviewer is scoped to Yeachan-Heo/gajae-code only, so the cross-repo profile consistency check still needs a human.
PR body verdict line count=0, not updated (the body belongs to the author).
Suggested verdict line: gajae.pr-review-verdict.v1 needs-human sha256:d5a390f333a229004c75ecc95df291e05c791949c0a256ea2c2ee9970ab6576f reviewer:critic reviewer-id:gajae-reviewer evidence:tier-map-blocker-fixed-gate-passes-local;risk-classification-missing-bootstrap-fails
Verdict: gajae.pr-review-verdict.v1 needs-human sha256:d5a390f333a229004c75ecc95df291e05c791949c0a256ea2c2ee9970ab6576f reviewer:critic reviewer-id:gajae-reviewer evidence:tier-map-blocker-fixed-gate-passes-local;risk-classification-missing-bootstrap-fails
|
Follow-up root cause from the same tester, on the 0.18.0 source: with OAuth credentials, This is a concrete reason to bundle the entry (this PR). With the entry bundled, presets that reference — |
|
Two fixes. First, the red |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0e110be219
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "anthropic/claude-haiku-4-5": [{ tier: "fast", rank: 1 }], | ||
| "anthropic/claude-sonnet-5": [{ tier: "balanced", rank: 1 }], | ||
| "anthropic/claude-sonnet-4-6": [{ tier: "balanced", rank: 2 }], | ||
| "anthropic/claude-sonnet-5-5": [{ tier: "balanced", rank: 1 }], |
There was a problem hiding this comment.
Exclude unenrolled Sonnet 5.5 from balanced routing
When a credential's fresh Anthropic /models response does not yet enroll 5.5, this new tier-map entry creates a separate smart-routing failure: previewSmartRouting() and task routing both use modelRegistry.getAll(), which retains bundled models, rather than the authoritative availability-filtered catalog. A balanced task therefore pins 5.5; the durable run crosses the preflight fence before the provider rejects the model, and task/executor.ts treats that post-acceptance failure as terminal instead of trying rank 2. Ensure runtime routing filters candidates through current live availability so this case selects Sonnet 5.
Useful? React with 👍 / 👎.
snowykr
left a comment
There was a problem hiding this comment.
Verdict
APPROVED
Summary
The PR adds Claude Sonnet 5.5 to the bundled Anthropic and Bedrock model catalog, updates selected built-in profile bindings, and promotes the Anthropic model in balanced autorouting. The catalog and profile changes follow existing provider and selector paths; no merge-blocking defect was established.
Findings / Required Changes
No blocking or actionable findings.
Non-blocking Observations
docs/gpt-5.6-codex-preset-benchmark.md:104-111 retains the opus-codex planner's prior Sonnet 5 mapping. The report is dated 2026-07-11 and docs/models.md reflects the current Sonnet 5.5 mapping, so this is a non-blocking historical-documentation ambiguity; an explicit “as of” label would prevent readers from mistaking the snapshot for current configuration.
CI / Verification
For reviewed head 0e110be2194096e64c4ee0ba082a94b53310ee06, the affected-path validations for the AI and coding-agent packages and the changed model-profile tests passed, as did virtual integration validation. The overall Dev CI run failed at the merge-approval bootstrap check requiring an authorized exact-head verdict; this is a policy gate, not a product-test failure. Other platform-specific jobs were skipped, and the commit-status endpoint has no contexts and reports pending. No local tests were run as this review was limited to inspecting CI evidence.
Axis Coverage
| Axis | Verdict | Coverage |
|---|---|---|
| A1 — Intent / Policy / Contract | APPROVED |
Catalog metadata, built-in profile bindings, and balanced-tier curation align with existing selector and routing contracts. |
| A2 — Architecture / Correctness / Failure | APPROVED |
Profile activation resolves the catalog-backed Anthropic model through existing provider/auth handling; no reachable failure found. |
| A3 — Security / Privacy / Trust | APPROVED |
The changes retain the existing provider and credential authority and add no new trust boundary or protected effect. |
| A4 — Verification / Tests / CI | APPROVED |
Relevant exact-head checks passed; the overall CI failure is the merge-approval bootstrap policy gate, with platform checks skipped. |
| A5 — Context / Compatibility / Platform | APPROVED |
Existing catalog, provider, model-inference, and autorouting abstractions are reused; no consumer compatibility issue found. |
Limitations
CI API records were inspected, but downloadable artifacts and full job logs were not reviewed. Platform-specific skipped checks remain unverified.
|
@probepark snowykr has approved the current head 0e110be. The only thing still blocking merge is your CHANGES_REQUESTED from 942c49d. Both of its blockers are fixed here: the |
Stale: this CHANGES_REQUESTED is on 942c49d; every blocker it raised is fixed at the current head, which snowykr approved. Dismissed on the owner's instruction to merge CR-handled PRs.
Summary
Adds Claude Sonnet 5.5 to the bundled catalog and moves the built-in Claude profile roles that used Sonnet 5 to Sonnet 5.5.
anthropic/claude-sonnet-5-5, plus Bedrockanthropic.claude-sonnet-5-5withau/eu/global/jp/usinference-profile variants, mirroring the existingclaude-sonnet-5entries.claude-opusexecutor,claude-fableexecutor,opus-codexplanner) now point atclaude-sonnet-5-5, with effort suffixes unchanged. The signed registry change is in Yeachan-Heo/gajae-code-presets (draft PR, linked below).models.jsondiff is additive only: +175 lines, no reformatting.Verification
bun test packages/ai/test/models*→ 17 pass / 0 failbun testover the 23 profile/preset-related test files in coding-agent + ai → 617 pass. One registry test (bounds retained provenance ancestry) timed out at 63s in the batch run and passed when rerun alone.Not yet verified (blocking for the registry bump)
claude-sonnet-5-5via live Anthropic/v1/modelsdiscovery was not tested. 0.18.0's bundled catalog has no Sonnet 5.5 entry, so presets referencing it depend on live discovery being available. Do not publish the registry revision until this is checked or a client release that includes this PR ships.—
[repo owner's gaebal-gajae (clawdbot) 🦞]
Risk
regression-risk: changes the default executor/planner model in three built-in profiles and adds bundled catalog entries