Skip to content

[Bug]: Claude picker ignores availableModels and ANTHROPIC_DEFAULT_*_MODEL; picking Haiku on Bedrock silently runs Opus #24214

Open

Description

@mmurilo

Note

Claude Opus 5.5 responding on behalf of Marcos Rocha

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/server

Steps to reproduce

  1. Configure Claude Code for Amazon Bedrock in ~/.claude/settings.json, using the ANTHROPIC_DEFAULT_* env vars and an availableModels allowlist with Bedrock IDs:

    {
      "env": {
        "CLAUDE_CODE_USE_BEDROCK": "1",
        "AWS_REGION": "us-west-2",
        "ANTHROPIC_DEFAULT_OPUS_MODEL": "global.anthropic.claude-opus-5-5",
        "ANTHROPIC_DEFAULT_OPUS_MODEL_NAME": "Opus 5.5 via Bedrock Global (1M context)",
        "ANTHROPIC_DEFAULT_SONNET_MODEL": "global.anthropic.claude-sonnet-5-5[1m]",
        "ANTHROPIC_DEFAULT_SONNET_MODEL_NAME": "Sonnet 5.5 via Bedrock Global (1M context)",
        "ANTHROPIC_DEFAULT_HAIKU_MODEL": "global.anthropic.claude-haiku-5-5",
        "ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME": "Haiku 5.5 via Bedrock Global"
      },
      "model": "opus",
      "availableModels": [
        "global.anthropic.claude-haiku-5-5",
        "global.anthropic.claude-sonnet-5-5",
        "global.anthropic.claude-opus-5-5"
      ]
    }
  2. Add a Claude provider instance in T3 Code that uses ~/.claude (default config dir, no custom models).

  3. In the model picker, select Claude Haiku 5.5 and send a prompt.

Expected behavior

The Claude picker reflects the Claude Code configuration, the same way /model does in the CLI:

  • Rows map to the configured Bedrock IDs (ANTHROPIC_DEFAULT_{OPUS,SONNET,HAIKU}_MODEL), labeled with the *_MODEL_NAME / *_MODEL_DESCRIPTION values when set.
  • Models not in availableModels are not offered.
  • Selecting Haiku runs global.anthropic.claude-haiku-5-5.

Passing the alias (haiku, sonnet, opus) or the resolved Bedrock ID to Claude Code would also fix the routing. Both work in the CLI (see Evidence).

Actual behavior

The picker shows T3's bundled first-party catalog (claude-opus-5-5, claude-haiku-5-5, ...) and sends that slug to the SDK. Claude Code rejects it because it is not in availableModels, and silently falls back to the default model (Opus). The UI still shows Haiku. No error appears.

T3's provider event log shows the mismatch for every thread where a non-default model was picked:

query.open  options.model = "claude-haiku-5-5"            # sent by T3
system/init model         = "global.anthropic.claude-opus-5-5"  # what Claude Code actually runs

So users pay for Opus while the UI shows Haiku, and there is no way to get Sonnet or Haiku without extra T3-side config.

Same CLI (claude -p --model <x> --output-format json, modelUsage keys) with the settings above:

--model model actually used
claude-haiku-5-5 (what T3 sends) global.anthropic.claude-opus-5-5 (fallback)
global.anthropic.claude-haiku-5-5 global.anthropic.claude-haiku-5-5
haiku global.anthropic.claude-haiku-5-5

Adding claude-haiku-5-5 to availableModels doesn't help either: Claude Code then sends that raw ID to Bedrock and the request fails.

Related, but not duplicates: #23279 (custom modelPicker in settings, fixed) and #13875 (gateway model discovery, fixed). This report is about availableModels and the ANTHROPIC_DEFAULT_*_MODEL env vars, which T3 doesn't read today. From the discussion on #13875, reported models whose ID or alias matches a catalog entry are skipped, so the catalog slug always wins.

Impact

Major degradation or frequent failure

Version or commit

T3 Code (Beta) 0.1.2

Environment

macOS 26 (Darwin 25.6.0), Claude Code 2.1.309, Claude provider via Amazon Bedrock (CLAUDE_CODE_USE_BEDROCK=1, global.* inference profiles)

Workaround

Add the Bedrock IDs as customModels on the Claude provider instance in T3 and pick those rows instead of the built-in ones. This duplicates config that already lives in ~/.claude/settings.json.

Activity

  1. nicklaw5 commented on Nov 3, 2026

    @nicklaw5

    I'm hitting the same root cause on macOS (T3 Code Beta desktop Version 0.1.5 (6d450a4), Claude Code 2.1.316), but mine shows up as a 403 instead of a silent fallback.

    My ~/.claude/settings.json has:

      "env": {
        "CLAUDE_CODE_USE_BEDROCK": "1",
        "AWS_REGION": "us-east-1",
        "AWS_PROFILE": "<sso-profile>",
        "ANTHROPIC_MODEL": "global.anthropic.claude-sonnet-5-5",
        "ANTHROPIC_DEFAULT_SONNET_MODEL": "global.anthropic.claude-sonnet-5-5",
        "ANTHROPIC_DEFAULT_HAIKU_MODEL": "global.anthropic.claude-haiku-5-5"
      }
    

    T3 detects Bedrock auth fine and shows the provider as authenticated. But when I pick Claude Sonnet 5.5, the first turn fails with:

    API Error: 403 ... is not authorized to perform: bedrock:InvokeModelWithResponseStream on resource: arn:aws:bedrock:us-east-1::inference-profile/us.anthropic.claude-sonnet-5-5

    Our IAM policy only allows the global. inference profile, so the us. one is denied. The CLI works with the same settings.

    From reading the bundled server code, T3 resolves the picker selection to the catalog slug (claude-sonnet-5-5) and passes it as the SDK model. That overrides ANTHROPIC_MODEL, and the ANTHROPIC_DEFAULT_*_MODEL
    values never get used. Same cause as above.

    Workaround that works for me: add the full profile IDs as custom models (Settings > Providers > Claude, or providerInstances.claudeAgent.config.customModels in settings.json) and hide the built-in claude-*-5-5
    entries.

    For a fix, either of these would cover my case:

    • Send the alias (sonnet, haiku, opus) so Claude Code resolves it through ANTHROPIC_DEFAULT_*_MODEL.
    • When CLAUDE_CODE_USE_BEDROCK is set, build the picker from ANTHROPIC_DEFAULT_*_MODEL instead of the bundled catalog, as suggested here.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions