From 321a29426f2a909212ea9d6317d49f20732c7991 Mon Sep 17 00:00:00 2001 From: Charles Vien Date: Fri, 24 Jul 2026 12:26:07 -0700 Subject: [PATCH] feat(models): add Claude Opus 5 to available models --- apps/mobile/src/features/tasks/composer/options.ts | 8 +++++++- .../agent/src/adapters/claude/session/models.test.ts | 12 ++++++++++++ packages/agent/src/adapters/claude/session/models.ts | 2 ++ packages/agent/src/gateway-models.test.ts | 1 + .../src/extensions/posthog-provider/models.ts | 6 ++++++ packages/ui/src/features/loops/loopModels.test.ts | 2 ++ packages/ui/src/features/loops/loopModels.ts | 1 + .../components/PromptInput.stories.tsx | 1 + 8 files changed, 32 insertions(+), 1 deletion(-) diff --git a/apps/mobile/src/features/tasks/composer/options.ts b/apps/mobile/src/features/tasks/composer/options.ts index b1de507a61..be0b48cdd3 100644 --- a/apps/mobile/src/features/tasks/composer/options.ts +++ b/apps/mobile/src/features/tasks/composer/options.ts @@ -42,10 +42,16 @@ export const MODELS: ModelOption[] = [ description: "Newest, most capable", supportsReasoning: true, }, + { + value: "claude-opus-5", + label: "Claude Opus 5", + description: "Most capable, slower", + supportsReasoning: true, + }, { value: "claude-opus-4-8", label: "Claude Opus 4.8", - description: "Most capable, slower", + description: "Previous Opus generation", supportsReasoning: true, }, { diff --git a/packages/agent/src/adapters/claude/session/models.test.ts b/packages/agent/src/adapters/claude/session/models.test.ts index 66ffe81c98..b9f42b2b94 100644 --- a/packages/agent/src/adapters/claude/session/models.test.ts +++ b/packages/agent/src/adapters/claude/session/models.test.ts @@ -30,6 +30,10 @@ describe("toSdkModelId", () => { expect(toSdkModelId("claude-sonnet-5")).toBe("claude-sonnet-5"); }); + it("passes claude-opus-5 through unchanged (no SDK alias)", () => { + expect(toSdkModelId("claude-opus-5")).toBe("claude-opus-5"); + }); + it("passes deprecated gateway IDs through unchanged", () => { expect(toSdkModelId("claude-opus-4-6")).toBe("claude-opus-4-6"); expect(toSdkModelId("claude-sonnet-4-5")).toBe("claude-sonnet-4-5"); @@ -67,6 +71,13 @@ describe("model capability flags", () => { xhighEffort: true, mcpInjection: true, }, + { + modelId: "claude-opus-5", + oneMContext: true, + effort: true, + xhighEffort: true, + mcpInjection: true, + }, { modelId: "claude-sonnet-4-6", oneMContext: true, @@ -123,6 +134,7 @@ describe("resolveEffortForModel", () => { ["claude-fable-5", undefined, "high"], ["claude-opus-4-8", undefined, "high"], ["claude-opus-4-7", undefined, "high"], + ["claude-opus-5", undefined, "high"], ["claude-sonnet-4-6", undefined, "high"], ["claude-sonnet-5", undefined, "high"], ["@cf/zai-org/glm-5.2", undefined, "high"], diff --git a/packages/agent/src/adapters/claude/session/models.ts b/packages/agent/src/adapters/claude/session/models.ts index fa30f3eadc..47f2288b71 100644 --- a/packages/agent/src/adapters/claude/session/models.ts +++ b/packages/agent/src/adapters/claude/session/models.ts @@ -24,6 +24,7 @@ export function toSdkModelId(modelId: string): string { const MODELS_WITH_1M_CONTEXT = new Set([ "claude-opus-4-7", "claude-opus-4-8", + "claude-opus-5", "claude-sonnet-4-6", "claude-sonnet-5", "claude-fable-5", @@ -46,6 +47,7 @@ const EXTENDED_EFFORT_LEVELS: readonly EffortLevel[] = [ const MODEL_EFFORT_LEVELS: Readonly> = { "claude-opus-4-7": EXTENDED_EFFORT_LEVELS, "claude-opus-4-8": EXTENDED_EFFORT_LEVELS, + "claude-opus-5": EXTENDED_EFFORT_LEVELS, "claude-sonnet-4-6": STANDARD_EFFORT_LEVELS, "claude-sonnet-5": EXTENDED_EFFORT_LEVELS, "claude-fable-5": EXTENDED_EFFORT_LEVELS, diff --git a/packages/agent/src/gateway-models.test.ts b/packages/agent/src/gateway-models.test.ts index e2ff4aafa3..5aa7438a8d 100644 --- a/packages/agent/src/gateway-models.test.ts +++ b/packages/agent/src/gateway-models.test.ts @@ -111,6 +111,7 @@ describe("getClaudeModelRecency", () => { ["claude-sonnet-4-6", 4006], ["claude-opus-4-7", 4007], ["claude-opus-4-8", 4008], + ["claude-opus-5", 5000], ["claude-sonnet-5", 5000], ["claude-fable-5", 5000], ])("ranks %s by its embedded version (%i)", (modelId, rank) => { diff --git a/packages/harness/src/extensions/posthog-provider/models.ts b/packages/harness/src/extensions/posthog-provider/models.ts index 493c56b0ed..5f81cba127 100644 --- a/packages/harness/src/extensions/posthog-provider/models.ts +++ b/packages/harness/src/extensions/posthog-provider/models.ts @@ -124,6 +124,12 @@ function toModelConfig( } const FALLBACK_GATEWAY_MODELS: GatewayModel[] = [ + { + id: "claude-opus-5", + owned_by: "anthropic", + context_window: 1000000, + supports_vision: true, + }, { id: "claude-opus-4-8", owned_by: "anthropic", diff --git a/packages/ui/src/features/loops/loopModels.test.ts b/packages/ui/src/features/loops/loopModels.test.ts index 26bed1649e..02da501bdb 100644 --- a/packages/ui/src/features/loops/loopModels.test.ts +++ b/packages/ui/src/features/loops/loopModels.test.ts @@ -128,6 +128,7 @@ describe("loopModelOptions", () => { "claude-sonnet-4-6", "claude-opus-4-7", "claude-opus-4-8", + "claude-opus-5", "claude-sonnet-5", "claude-fable-5", "@cf/zai-org/glm-5.2", @@ -153,6 +154,7 @@ describe("loopModelOptions", () => { "claude-sonnet-4-6", "claude-opus-4-7", "claude-opus-4-8", + "claude-opus-5", "claude-sonnet-5", "claude-fable-5", ], diff --git a/packages/ui/src/features/loops/loopModels.ts b/packages/ui/src/features/loops/loopModels.ts index 0c16f6c978..7f2946ab81 100644 --- a/packages/ui/src/features/loops/loopModels.ts +++ b/packages/ui/src/features/loops/loopModels.ts @@ -36,6 +36,7 @@ const FALLBACK_MODEL_OPTIONS: Record< { value: "claude-sonnet-4-6", label: "Claude Sonnet 4.6" }, { value: "claude-opus-4-7", label: "Claude Opus 4.7" }, { value: "claude-opus-4-8", label: "Claude Opus 4.8" }, + { value: "claude-opus-5", label: "Claude Opus 5" }, { value: "claude-sonnet-5", label: "Claude Sonnet 5" }, { value: "claude-fable-5", label: "Claude Fable 5" }, { value: "@cf/zai-org/glm-5.2", label: "GLM-5.2" }, diff --git a/packages/ui/src/features/message-editor/components/PromptInput.stories.tsx b/packages/ui/src/features/message-editor/components/PromptInput.stories.tsx index 043d3ebf98..9ff3c236b2 100644 --- a/packages/ui/src/features/message-editor/components/PromptInput.stories.tsx +++ b/packages/ui/src/features/message-editor/components/PromptInput.stories.tsx @@ -24,6 +24,7 @@ const mockModelOption = { name: "Recommended", options: [ { value: "gpt-5.5", name: "gpt-5.5" }, + { value: "claude-opus-5", name: "Claude Opus 5" }, { value: "claude-sonnet-5", name: "Claude Sonnet 5" }, { value: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" }, ],