Skip to content

feat(models): bump platform defaults to Claude Opus 5.5 / Haiku 5.5 (#953) - #954

Merged
ayushtr-aws merged 5 commits into
mainfrom
feat/953-default-models-5-5
Oct 16, 2026
Merged

ayushtr-aws merged 5 commits into
mainfrom
feat/953-default-models-5-5

Conversation

@ayushtr-aws

@ayushtr-aws ayushtr-aws commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Why

The platform default models (Opus 5 main, Haiku 4.5 auxiliary) are no longer the latest Anthropic models on Bedrock. Opus 5.5 and Haiku 5.5 have ACTIVE global., us., eu., au. and jp. cross-Region inference profiles. Fixes #953

Approach

Move PLATFORM_DEFAULT_MODEL_ID and DEFAULT_HAIKU_MODEL_ID in the single source of truth (cdk/src/handlers/shared/bedrock-model-constants.ts), add the two new models to DEFAULT_BEDROCK_MODEL_IDS additively so every previously granted model stays invocable for repos that pin it (the #744 regression rule), and mirror the geo-prefixed fallbacks in agent/src/config.py, agent/src/models.py and cli/src/repo-display.ts so the doc-parity test stays green. Grants remain per-model (no wildcard); the geo prefix is still derived from bedrockGeoRegion at every grant site and env injection.

Two things the issue did not anticipate, both required for the acceptance criterion "a task with no pin runs on Opus 5.5":

  1. SDK/CLI pin bump (ask-first boundary: existing dependency version). The pinned claude-agent-sdk==0.2.110 / @anthropic-ai/claude-code@2.1.191 pair rejects the 5.5 models (400 Claude Code 2.1.191 does not support this model; version 2.1.280 or newer is required), so without this every default task would fail at turn 1. Bumped in lockstep (feat: Bedrock cost attribution — session tags, request metadata, and operator FinOps guidance #215) to 0.2.168 / 2.1.301. Verified end to end with agent/scripts/diagnostics/test_sdk_smoke.py against us-east-1: both global.anthropic.claude-opus-5-5 and global.anthropic.claude-haiku-5-5 return a completion with non-zero reported cost, so the SDK price table knows them and max_budget_usd enforcement holds. The arm64 image builds with finch and claude --version inside it reports 2.1.301, matching the SDK's bundled CLI.
  2. Sonnet 5.5 is not granted (the issue's open question). It has no jp. profile, so adding it would recreate the granted-but-uninvocable state the constants header forbids for one geography. Opus 5.5 and Haiku 5.5 have profiles everywhere.

IAM side effect: the larger grant list can push the AgentCore runtime role's inline policy past the IAM size limit, in which case CDK splits it into a ManagedPolicy overflow (it does under the default test context; whether a given deployment overflows depends on its feature set). Operators who override bedrockModels must add both new bare IDs or synth fails on the coherence guard — documented in the developer guide. The existing cdk-nag suppression aspect already covers this path; template resource budgets still pass. Tests that audit the grant set now read both policy kinds.

Changes

  • cdk/src/handlers/shared/bedrock-model-constants.ts — defaults → Opus 5.5 / Haiku 5.5; grant list additive (+opus-5-5, +haiku-5-5; haiku-4-5 kept as a literal).
  • agent/src/config.py, agent/src/models.py, cli/src/repo-display.ts, cli/src/model-id.ts, agent/scripts/diagnostics/test_sdk_smoke.py — mirrored fallbacks / example IDs.
  • agent/pyproject.toml, agent/uv.lock, agent/Dockerfile — claude-agent-sdk 0.2.110→0.2.168, CLI 2.1.191→2.1.301 (lockstep); mcp 1.28.1→1.30.0 (OSV advisory).
  • Tests: cdk/test/stacks/agent.test.ts, cdk/test/constructs/ecs-agent-cluster.test.ts (exact-set baselines, default env assertions, coherence tests; ECS set now audits ManagedPolicy overflow), cdk/test/stacks/compute-selection.test.ts (overflow-aware), cli/test/platform-doctor.test.ts, agent/tests/test_config.py.
  • Docs: docs/guides/{DEVELOPER,USER,DEPLOYMENT}_GUIDE.md, docs/design/{REPO_ONBOARDING,ARCHITECTURE,BEDROCK_COST_ATTRIBUTION,INTERACTIVE_AGENTS}.md, agent/README.md, docs/abca-plugin/skills/{onboard-repo,troubleshoot}/SKILL.md; Starlight mirrors regenerated.

Tests & checks

  • mise run build ✅ — cdk 5764 tests / 235 suites, cli 1079 / 65, agent 1800 pytest, docs build + link check.
  • mise run security: secrets ✅, sast ✅, retire ✅, gh-actions ✅, deps ✅ after bumping the direct mcp pin 1.28.1→1.30.0 (GHSA-84m7-p3x7-pcfv, pre-existing on main; included as its own commit because this branch already relocks agent/uv.lock — happy to split it out if preferred). security:sast:masking ❌ pre-existing — flags agent/src/server.py, linear-oauth-resolver.ts, orchestration-store.ts, none touched here. agent:security:image not runnable locally (needs docker; this machine has finch).
  • Bedrock smoke test for both new defaults: PASS with non-zero cost (see Approach).
  • finch build --platform linux/arm64 -f agent/Dockerfile . ✅; claude --version in image = 2.1.301.
  • Bootstrap/IAM policy bundle: n/a (no new resource types). Synth coverage / template budgets: pass.
  • Hooks: prek install fails on this machine (global core.hooksPath, documented in CONTRIBUTING); equivalent checks run via mise run build + mise //docs:sync (tree clean after sync).

Documentation

  • Updated the model-configuration, deployment, onboarding and architecture prose and both plugin skills; agent/README.md env-var table. Generated mirror regenerated: yes.
  • Historical references to 2.1.191 in ADR-021, the feat(compute): add AWS Lambda MicroVMs as a ComputeStrategy backend #645 smoke runbook and a runner.py narrative comment are left as-is (they describe past measurements).

Self-review

  • Agents run: /code-review (high) — no code bugs; 5 doc-drift findings + Sonnet 5.5 jp. gap, all fixed. /security-review — no findings; confirmed grants stay per-model, overflow ManagedPolicy binds only to the originating role. Repo review_pr — approve with nits; operator-note and source-path nits fixed here; the pre-existing us. hardcode in lambda-microvm-compute.ts is filed as a follow-up issue. Omitted: /simplify — diff is constants, literals and test baselines; nothing to restructure.
  • Human heuristics: Proportionality ✅ · Coherence ✅ · Clarity ✅ · Appropriateness ✅
  • Known nits left in: docs/guides/DEVELOPER_GUIDE.md cost table still shows the Opus 4.8 vs Opus 5 measurement — it is a historical data point illustrating rate-vs-volume, not a default claim.
  • Deployment prerequisite: account-level Bedrock model access for Opus 5.5 / Haiku 5.5 in the target Region; IAM grant alone is not sufficient.

…953)

Move PLATFORM_DEFAULT_MODEL_ID to anthropic.claude-opus-5-5 and
DEFAULT_HAIKU_MODEL_ID to anthropic.claude-haiku-5-5. Add the 5.5 family
(opus, sonnet, haiku) to DEFAULT_BEDROCK_MODEL_IDS additively; every
previously granted model stays so per-repo pins keep working at turn 0.

Mirror the geo-prefixed fallbacks in agent/src/config.py, models.py and
the CLI display default; update the doc-parity-guarded prose and the
Starlight mirrors.

The larger grant list pushes the AgentCore runtime role's inline policy
past the IAM size limit, so CDK now splits it into a managed-policy
overflow. compute-selection.test.ts audits both resource kinds, as
agent.test.ts already did.

Refs #953
… 5.5 (#953)

The Claude 5.5 models are rejected by Claude Code CLI builds older than
2.1.280 ("does not support this model; version 2.1.280 or newer is
required"), so with the pinned 0.2.110 / 2.1.191 pair every task on the
new platform default failed at turn 1. Verified with
agent/scripts/diagnostics/test_sdk_smoke.py against us-east-1: both
global.anthropic.claude-opus-5-5 and global.anthropic.claude-haiku-5-5
now return a completion with a non-zero reported cost, so the SDK price
table also recognises them and max_budget_usd enforcement holds.

Keep the npm CLI pin in the Dockerfile in lockstep with the SDK's
bundled CLI (#215) and refresh the design docs that quote the pair.

Also audit managed-policy overflow in the ECS exact-set grant test,
matching the AgentCore half.

Refs #953
… prose (#953)

Sonnet 5.5 has no `jp.` cross-Region inference profile (verified
2026-10-16 via list-inference-profiles in ap-northeast-1), so granting
it would put a bedrockGeoRegion=jp deployment back in the
granted-but-uninvocable state the constants header forbids. Opus 5.5
and Haiku 5.5, the two defaults, have profiles in every geography.

Also align the remaining prose that still named Opus 5 / Haiku 4.5 as
the default or the granted set (plugin skills, deployment guide,
architecture model table, CLI and smoke-script example IDs).

Refs #953
@ayushtr-aws
ayushtr-aws requested review from a team and backgroundagents as code owners October 16, 2026 19:48
@ayushtr-aws ayushtr-aws added enhancement New feature or request agent-runtime Python agent container: pipeline, runner, hooks, prompts, tools, Dockerfile infra-cdk CDK stacks/constructs, bootstrap, deploy topology, tags, IAM wiring, teardown labels Oct 16, 2026
Bump the direct mcp pin 1.28.1 -> 1.30.0 so the dependency scan passes.
Pre-existing on main; included here because this branch already relocks
agent/uv.lock for the claude-agent-sdk bump. agent pytest: 1800 passed.

Refs #953

@isadeks isadeks left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving. I reviewed the diff and deployed it on a throwaway stack (AgentCore, default context, us-east-1) at d739e47.

Live result: a task with no model pin runs on Opus 5.5

  • The deployed runtime has ANTHROPIC_MODEL=global.anthropic.claude-opus-5-5 and ANTHROPIC_DEFAULT_HAIKU_MODEL=global.anthropic.claude-haiku-5-5.
  • bgagent repo show on a repo onboarded without --model shows (platform default) global.anthropic.claude-opus-5-5. bgagent platform doctor passes, and all 6 granted models resolve as global. profiles.
  • An unpinned new-task completed in 23 s (4 turns, $0.11, build passed). Every agent_turn event reports model=claude-opus-5-5, and the runtime log shows global.anthropic.claude-opus-5-5 was invoked. The image's bumped CLI/SDK pair handled the 5.5 model fine.
  • IAM simulation on the runtime role: the global. profiles for Opus 5.5, Haiku 5.5 and Opus 5 are allowed; Sonnet 5.5 is denied, as intended. The task made no auxiliary call, so Haiku 5.5 was checked by grant only, not live.

Review

  • Bare IDs and global./us. profiles for both new models are ACTIVE in us-east-1. @anthropic-ai/claude-code@2.1.301 and claude-agent-sdk==0.2.168 both exist and stay in lockstep.
  • The grant list is additive and no old default IDs are left in source. The bootstrap already allows iam:CreatePolicy, so the overflow ManagedPolicy path deploys under the least-privilege bootstrap.

Nit (non-blocking): the description says the larger grant list can push the AgentCore runtime role past the IAM size limit. Under default context it doesn't. The runtime role's inline policy synthesizes at about 8.3k chars with no overflow. The only overflow policy belongs to the Linear webhook processor role and has no Bedrock statements. The tests cover both cases, so this is only wording.

@ayushtr-aws
ayushtr-aws added this pull request to the merge queue Oct 16, 2026
Merged via the queue into main with commit 6dad935 Oct 16, 2026
9 checks passed
@ayushtr-aws
ayushtr-aws deleted the feat/953-default-models-5-5 branch October 16, 2026 22:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent-runtime Python agent container: pipeline, runner, hooks, prompts, tools, Dockerfile enhancement New feature or request infra-cdk CDK stacks/constructs, bootstrap, deploy topology, tags, IAM wiring, teardown

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: bump platform default models to Claude Opus 5.5 / Haiku 5.5

2 participants