From 211f5d193b17d26dd98460f357f377ba52a9dca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fahreddin=20=C3=96zcan?= Date: Tue, 28 Jul 2026 15:07:49 +0300 Subject: [PATCH 1/8] CTX7-1880: expose AWS Bedrock models in the SDKs and CLI - add BedrockModel enum (Claude Code harness only) to the TS and Python SDKs, values are bedrock/ - allow BedrockModel in the ClaudeCode harness model union and export it - route bedrock/ models to the claude-code harness in inferDefaultProvider - add a Bedrock group to the CLI model picker --- packages/cli/src/models.ts | 9 +++++++++ packages/python-sdk/upstash_box/__init__.py | 2 ++ packages/python-sdk/upstash_box/_common.py | 2 ++ packages/python-sdk/upstash_box/types.py | 8 ++++++++ packages/sdk/src/client.ts | 1 + packages/sdk/src/index.ts | 1 + packages/sdk/src/types.ts | 15 +++++++++++++-- 7 files changed, 36 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/models.ts b/packages/cli/src/models.ts index 585cbff..6e1c9c0 100644 --- a/packages/cli/src/models.ts +++ b/packages/cli/src/models.ts @@ -1,5 +1,6 @@ import { Agent, + BedrockModel, ClaudeCode, CursorModel, OpenAICodex, @@ -62,6 +63,14 @@ export const MODEL_OPTIONS_BY_AGENT: Record< { value: VercelModel.Grok_4_3, label: "Grok 4.3 (Vercel)" }, ], }, + { + label: "AWS Bedrock", + options: [ + { value: BedrockModel.Claude_Sonnet_4_5, label: "Claude Sonnet 4.5 (Bedrock)" }, + { value: BedrockModel.Claude_Sonnet_4, label: "Claude Sonnet 4 (Bedrock)" }, + { value: BedrockModel.Claude_Haiku_4_5, label: "Claude Haiku 4.5 (Bedrock)" }, + ], + }, ], [Agent.Codex]: [ { diff --git a/packages/python-sdk/upstash_box/__init__.py b/packages/python-sdk/upstash_box/__init__.py index 50fdb5f..944211b 100644 --- a/packages/python-sdk/upstash_box/__init__.py +++ b/packages/python-sdk/upstash_box/__init__.py @@ -67,6 +67,7 @@ BrowserRecording, BrowserRecordingMarker, BrowserRunResult, + BedrockModel, BrowserRunStep, Chunk, ClaudeCode, @@ -165,6 +166,7 @@ "CustomHarnessEmitter", # Enums "Agent", + "BedrockModel", "BoxApiKey", "ClaudeCode", "CursorModel", diff --git a/packages/python-sdk/upstash_box/_common.py b/packages/python-sdk/upstash_box/_common.py index 5370972..5ffcf53 100644 --- a/packages/python-sdk/upstash_box/_common.py +++ b/packages/python-sdk/upstash_box/_common.py @@ -89,6 +89,8 @@ def infer_default_provider(model: str) -> Agent: """Infer the default harness from a model string prefix.""" if model.startswith("custom/"): return Agent.CUSTOM + if model.startswith("bedrock/"): + return Agent.CLAUDE_CODE if model.startswith("cursor/"): return Agent.CURSOR if model.startswith("vercel/openai/"): diff --git a/packages/python-sdk/upstash_box/types.py b/packages/python-sdk/upstash_box/types.py index 87038ed..9dfda13 100644 --- a/packages/python-sdk/upstash_box/types.py +++ b/packages/python-sdk/upstash_box/types.py @@ -121,6 +121,14 @@ class VercelModel(str, Enum): GROK_4_20_REASONING = "vercel/xai/grok-4.20-reasoning" +class BedrockModel(str, Enum): + """AWS Bedrock model identifiers (Claude Code harness only).""" + + CLAUDE_SONNET_4_5 = "bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0" + CLAUDE_SONNET_4 = "bedrock/global.anthropic.claude-sonnet-4-20250514-v1:0" + CLAUDE_HAIKU_4_5 = "bedrock/global.anthropic.claude-haiku-4-5-20251001-v1:0" + + class OpenCodeModel(str, Enum): """OpenCode model identifiers — supports models from multiple providers.""" diff --git a/packages/sdk/src/client.ts b/packages/sdk/src/client.ts index e6142af..e5e26e2 100644 --- a/packages/sdk/src/client.ts +++ b/packages/sdk/src/client.ts @@ -90,6 +90,7 @@ function base64ToBytes(b64: string): Uint8Array { /** Infer the default harness from a model string prefix. */ export function inferDefaultProvider(model: string): Agent { if (model.startsWith("custom/")) return Agent.Custom; + if (model.startsWith("bedrock/")) return Agent.ClaudeCode; if (model.startsWith("cursor/")) return Agent.Cursor; if (model.startsWith("vercel/openai/")) return Agent.Codex; if (model.startsWith("vercel/")) return Agent.ClaudeCode; diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts index 5c2184a..8bde5a6 100644 --- a/packages/sdk/src/index.ts +++ b/packages/sdk/src/index.ts @@ -17,6 +17,7 @@ export { OpenCodeModel, OpenRouterModel, VercelModel, + BedrockModel, Agent, BoxApiKey, } from "./types.js"; diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index fbc46e0..01f7528 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -119,6 +119,17 @@ export enum VercelModel { Grok_4_20_Reasoning = "vercel/xai/grok-4.20-reasoning", } +/** + * AWS Bedrock model identifiers (Claude Code harness only). Values are global + * cross-region inference-profile ids; the Box injects the caller's Bedrock API + * key as AWS_BEARER_TOKEN_BEDROCK and runs Claude Code in Bedrock mode. + */ +export enum BedrockModel { + Claude_Sonnet_4_5 = "bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0", + Claude_Sonnet_4 = "bedrock/global.anthropic.claude-sonnet-4-20250514-v1:0", + Claude_Haiku_4_5 = "bedrock/global.anthropic.claude-haiku-4-5-20251001-v1:0", +} + /** * OpenCode model identifiers — supports models from multiple providers */ @@ -249,7 +260,7 @@ type ManagedAgentApiKeyConfig = { type HarnessConfig = | { harness: Agent.ClaudeCode; - model: ClaudeCode | OpenRouterModel | VercelModel; + model: ClaudeCode | OpenRouterModel | VercelModel | BedrockModel; provider?: never; runner?: never; } @@ -270,7 +281,7 @@ type HarnessConfig = | { /** @deprecated Use `harness` instead. */ provider: Agent.ClaudeCode; - model: ClaudeCode | OpenRouterModel | VercelModel; + model: ClaudeCode | OpenRouterModel | VercelModel | BedrockModel; harness?: never; runner?: never; } From 33eb7802e8e03361c7e509e6bde8e9104b9fdaf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fahreddin=20=C3=96zcan?= Date: Tue, 28 Jul 2026 15:37:45 +0300 Subject: [PATCH 2/8] CTX7-1880: expand Bedrock model list to full verified Claude lineup Replace the 3-model placeholder with the 10 Claude models that have active global cross-region inference profiles on Bedrock and invoke cleanly (verified via bedrock-runtime converse): Opus 5/4.8/4.7/4.6/4.5, Sonnet 5/4.6/4.5/4, Haiku 4.5. Dropped claude-fable-5 (requires a non-default data-retention mode). --- packages/cli/src/models.ts | 13 ++++++++++--- packages/python-sdk/upstash_box/types.py | 13 ++++++++++--- packages/sdk/src/types.ts | 13 ++++++++++--- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/packages/cli/src/models.ts b/packages/cli/src/models.ts index 6e1c9c0..e839d95 100644 --- a/packages/cli/src/models.ts +++ b/packages/cli/src/models.ts @@ -66,9 +66,16 @@ export const MODEL_OPTIONS_BY_AGENT: Record< { label: "AWS Bedrock", options: [ - { value: BedrockModel.Claude_Sonnet_4_5, label: "Claude Sonnet 4.5 (Bedrock)" }, - { value: BedrockModel.Claude_Sonnet_4, label: "Claude Sonnet 4 (Bedrock)" }, - { value: BedrockModel.Claude_Haiku_4_5, label: "Claude Haiku 4.5 (Bedrock)" }, + { value: BedrockModel.Opus_5, label: "Claude Opus 5 (Bedrock)" }, + { value: BedrockModel.Opus_4_8, label: "Claude Opus 4.8 (Bedrock)" }, + { value: BedrockModel.Opus_4_7, label: "Claude Opus 4.7 (Bedrock)" }, + { value: BedrockModel.Opus_4_6, label: "Claude Opus 4.6 (Bedrock)" }, + { value: BedrockModel.Opus_4_5, label: "Claude Opus 4.5 (Bedrock)" }, + { value: BedrockModel.Sonnet_5, label: "Claude Sonnet 5 (Bedrock)" }, + { value: BedrockModel.Sonnet_4_6, label: "Claude Sonnet 4.6 (Bedrock)" }, + { value: BedrockModel.Sonnet_4_5, label: "Claude Sonnet 4.5 (Bedrock)" }, + { value: BedrockModel.Sonnet_4, label: "Claude Sonnet 4 (Bedrock)" }, + { value: BedrockModel.Haiku_4_5, label: "Claude Haiku 4.5 (Bedrock)" }, ], }, ], diff --git a/packages/python-sdk/upstash_box/types.py b/packages/python-sdk/upstash_box/types.py index 9dfda13..67ac241 100644 --- a/packages/python-sdk/upstash_box/types.py +++ b/packages/python-sdk/upstash_box/types.py @@ -124,9 +124,16 @@ class VercelModel(str, Enum): class BedrockModel(str, Enum): """AWS Bedrock model identifiers (Claude Code harness only).""" - CLAUDE_SONNET_4_5 = "bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0" - CLAUDE_SONNET_4 = "bedrock/global.anthropic.claude-sonnet-4-20250514-v1:0" - CLAUDE_HAIKU_4_5 = "bedrock/global.anthropic.claude-haiku-4-5-20251001-v1:0" + OPUS_5 = "bedrock/global.anthropic.claude-opus-5" + OPUS_4_8 = "bedrock/global.anthropic.claude-opus-4-8" + OPUS_4_7 = "bedrock/global.anthropic.claude-opus-4-7" + OPUS_4_6 = "bedrock/global.anthropic.claude-opus-4-6-v1" + OPUS_4_5 = "bedrock/global.anthropic.claude-opus-4-5-20251101-v1:0" + SONNET_5 = "bedrock/global.anthropic.claude-sonnet-5" + SONNET_4_6 = "bedrock/global.anthropic.claude-sonnet-4-6" + SONNET_4_5 = "bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0" + SONNET_4 = "bedrock/global.anthropic.claude-sonnet-4-20250514-v1:0" + HAIKU_4_5 = "bedrock/global.anthropic.claude-haiku-4-5-20251001-v1:0" class OpenCodeModel(str, Enum): diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index 01f7528..d1ba34d 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -125,9 +125,16 @@ export enum VercelModel { * key as AWS_BEARER_TOKEN_BEDROCK and runs Claude Code in Bedrock mode. */ export enum BedrockModel { - Claude_Sonnet_4_5 = "bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0", - Claude_Sonnet_4 = "bedrock/global.anthropic.claude-sonnet-4-20250514-v1:0", - Claude_Haiku_4_5 = "bedrock/global.anthropic.claude-haiku-4-5-20251001-v1:0", + Opus_5 = "bedrock/global.anthropic.claude-opus-5", + Opus_4_8 = "bedrock/global.anthropic.claude-opus-4-8", + Opus_4_7 = "bedrock/global.anthropic.claude-opus-4-7", + Opus_4_6 = "bedrock/global.anthropic.claude-opus-4-6-v1", + Opus_4_5 = "bedrock/global.anthropic.claude-opus-4-5-20251101-v1:0", + Sonnet_5 = "bedrock/global.anthropic.claude-sonnet-5", + Sonnet_4_6 = "bedrock/global.anthropic.claude-sonnet-4-6", + Sonnet_4_5 = "bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0", + Sonnet_4 = "bedrock/global.anthropic.claude-sonnet-4-20250514-v1:0", + Haiku_4_5 = "bedrock/global.anthropic.claude-haiku-4-5-20251001-v1:0", } /** From d08a9723d389bc6f2e52543732dfeca3b05c719e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fahreddin=20=C3=96zcan?= Date: Mon, 3 Aug 2026 14:04:20 +0300 Subject: [PATCH 3/8] CTX7-1880: fix python-sdk import order for BedrockModel (ruff isort) --- packages/python-sdk/upstash_box/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/python-sdk/upstash_box/__init__.py b/packages/python-sdk/upstash_box/__init__.py index 944211b..270d843 100644 --- a/packages/python-sdk/upstash_box/__init__.py +++ b/packages/python-sdk/upstash_box/__init__.py @@ -51,6 +51,7 @@ AgentOptions, AgentScheduleOptions, Base64FileInput, + BedrockModel, BoxApiKey, BoxConfig, BoxConnectionOptions, @@ -67,7 +68,6 @@ BrowserRecording, BrowserRecordingMarker, BrowserRunResult, - BedrockModel, BrowserRunStep, Chunk, ClaudeCode, From edc034832c2f919bcd22dcee16cef61b581832f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fahreddin=20=C3=96zcan?= Date: Mon, 3 Aug 2026 15:03:30 +0300 Subject: [PATCH 4/8] CTX7-1880: allow Bedrock models with the opencode harness Add BedrockModel to the OpenCode harness model union and a Bedrock group to the OpenCode CLI model picker. --- packages/cli/src/models.ts | 15 +++++++++++++++ packages/sdk/src/types.ts | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/models.ts b/packages/cli/src/models.ts index e839d95..e943ccf 100644 --- a/packages/cli/src/models.ts +++ b/packages/cli/src/models.ts @@ -222,6 +222,21 @@ export const MODEL_OPTIONS_BY_AGENT: Record< { value: VercelModel.Grok_4_3, label: "Grok 4.3 (Vercel)" }, ], }, + { + label: "AWS Bedrock", + options: [ + { value: BedrockModel.Opus_5, label: "Claude Opus 5 (Bedrock)" }, + { value: BedrockModel.Opus_4_8, label: "Claude Opus 4.8 (Bedrock)" }, + { value: BedrockModel.Opus_4_7, label: "Claude Opus 4.7 (Bedrock)" }, + { value: BedrockModel.Opus_4_6, label: "Claude Opus 4.6 (Bedrock)" }, + { value: BedrockModel.Opus_4_5, label: "Claude Opus 4.5 (Bedrock)" }, + { value: BedrockModel.Sonnet_5, label: "Claude Sonnet 5 (Bedrock)" }, + { value: BedrockModel.Sonnet_4_6, label: "Claude Sonnet 4.6 (Bedrock)" }, + { value: BedrockModel.Sonnet_4_5, label: "Claude Sonnet 4.5 (Bedrock)" }, + { value: BedrockModel.Sonnet_4, label: "Claude Sonnet 4 (Bedrock)" }, + { value: BedrockModel.Haiku_4_5, label: "Claude Haiku 4.5 (Bedrock)" }, + ], + }, ], [Agent.Cursor]: [ { diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index d1ba34d..008b089 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -279,7 +279,7 @@ type HarnessConfig = } | { harness: Agent.OpenCode; - model: OpenCodeModel | ClaudeCode | OpenAICodex | OpenRouterModel | VercelModel; + model: OpenCodeModel | ClaudeCode | OpenAICodex | OpenRouterModel | VercelModel | BedrockModel; provider?: never; runner?: never; } @@ -302,7 +302,7 @@ type HarnessConfig = | { /** @deprecated Use `harness` instead. */ provider: Agent.OpenCode; - model: OpenCodeModel | ClaudeCode | OpenAICodex | OpenRouterModel | VercelModel; + model: OpenCodeModel | ClaudeCode | OpenAICodex | OpenRouterModel | VercelModel | BedrockModel; harness?: never; runner?: never; } From 6f1f5b0f1904e14d62ee8fa011d3f56a10d5e30c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fahreddin=20=C3=96zcan?= Date: Mon, 3 Aug 2026 15:05:26 +0300 Subject: [PATCH 5/8] CTX7-1880: prettier-format the OpenCode Bedrock union --- packages/sdk/src/types.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index 008b089..52f1869 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -279,7 +279,13 @@ type HarnessConfig = } | { harness: Agent.OpenCode; - model: OpenCodeModel | ClaudeCode | OpenAICodex | OpenRouterModel | VercelModel | BedrockModel; + model: + | OpenCodeModel + | ClaudeCode + | OpenAICodex + | OpenRouterModel + | VercelModel + | BedrockModel; provider?: never; runner?: never; } @@ -302,7 +308,13 @@ type HarnessConfig = | { /** @deprecated Use `harness` instead. */ provider: Agent.OpenCode; - model: OpenCodeModel | ClaudeCode | OpenAICodex | OpenRouterModel | VercelModel | BedrockModel; + model: + | OpenCodeModel + | ClaudeCode + | OpenAICodex + | OpenRouterModel + | VercelModel + | BedrockModel; harness?: never; runner?: never; } From 6f6c617cbadf0f3a17379ce0430c7d5a5fd1e371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fahreddin=20=C3=96zcan?= Date: Mon, 3 Aug 2026 15:07:34 +0300 Subject: [PATCH 6/8] CTX7-1880: note OpenCode support on the BedrockModel docstring --- packages/python-sdk/upstash_box/types.py | 2 +- packages/sdk/src/types.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/python-sdk/upstash_box/types.py b/packages/python-sdk/upstash_box/types.py index 67ac241..985771c 100644 --- a/packages/python-sdk/upstash_box/types.py +++ b/packages/python-sdk/upstash_box/types.py @@ -122,7 +122,7 @@ class VercelModel(str, Enum): class BedrockModel(str, Enum): - """AWS Bedrock model identifiers (Claude Code harness only).""" + """AWS Bedrock model identifiers (Claude Code and OpenCode harnesses).""" OPUS_5 = "bedrock/global.anthropic.claude-opus-5" OPUS_4_8 = "bedrock/global.anthropic.claude-opus-4-8" diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index 52f1869..4d86adb 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -120,9 +120,9 @@ export enum VercelModel { } /** - * AWS Bedrock model identifiers (Claude Code harness only). Values are global - * cross-region inference-profile ids; the Box injects the caller's Bedrock API - * key as AWS_BEARER_TOKEN_BEDROCK and runs Claude Code in Bedrock mode. + * AWS Bedrock model identifiers (Claude Code and OpenCode harnesses). Values are + * global cross-region inference-profile ids; the Box injects the caller's Bedrock + * API key as AWS_BEARER_TOKEN_BEDROCK. */ export enum BedrockModel { Opus_5 = "bedrock/global.anthropic.claude-opus-5", From b22013727ed8995da3ea9a7dc033d4d800a7dd48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fahreddin=20=C3=96zcan?= Date: Tue, 4 Aug 2026 14:05:06 +0300 Subject: [PATCH 7/8] CTX7-1880: trim the Bedrock enum doc to the sibling one-line style --- packages/sdk/src/types.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index 4d86adb..bdba3a7 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -120,9 +120,7 @@ export enum VercelModel { } /** - * AWS Bedrock model identifiers (Claude Code and OpenCode harnesses). Values are - * global cross-region inference-profile ids; the Box injects the caller's Bedrock - * API key as AWS_BEARER_TOKEN_BEDROCK. + * AWS Bedrock model identifiers — shared across Claude Code and OpenCode harnesses */ export enum BedrockModel { Opus_5 = "bedrock/global.anthropic.claude-opus-5", From 57decd0888bbe61b04b7777218cca40d289b6104 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fahreddin=20=C3=96zcan?= Date: Tue, 4 Aug 2026 14:21:13 +0300 Subject: [PATCH 8/8] CTX7-1880: drop the Bedrock enum comment --- packages/sdk/src/types.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index bdba3a7..badc0eb 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -119,9 +119,6 @@ export enum VercelModel { Grok_4_20_Reasoning = "vercel/xai/grok-4.20-reasoning", } -/** - * AWS Bedrock model identifiers — shared across Claude Code and OpenCode harnesses - */ export enum BedrockModel { Opus_5 = "bedrock/global.anthropic.claude-opus-5", Opus_4_8 = "bedrock/global.anthropic.claude-opus-4-8",