From 724c695180277dc1d3cc9a42939bb967cde6dc21 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Tue, 25 Nov 2025 10:43:31 -0800 Subject: [PATCH] feat: add Claude Opus 4.5 (#121) Co-authored-by: Charles Packer --- README.md | 2 +- src/agent/model.ts | 6 +++--- src/index.ts | 2 +- src/models.json | 9 ++++++++- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 47883bf..3eb5618 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ letta -p "Use the custom skills" --skills ~/my-skills letta # Auto-resume project agent (or create new if first time) letta --new # Create new agent with new memory blocks letta --agent # Use specific agent ID -letta --model # Specify model (e.g., claude-sonnet-4.5, gpt-4o) +letta --model # Specify model (e.g., claude-opus-4.5, claude-sonnet-4.5, gpt-4o) letta -m # Short form of --model letta --continue # Resume global last agent (deprecated, use project-based) diff --git a/src/agent/model.ts b/src/agent/model.ts index dbfb667..472c908 100644 --- a/src/agent/model.ts +++ b/src/agent/model.ts @@ -7,7 +7,7 @@ export const models = modelsData; /** * Resolve a model by ID or handle - * @param modelIdentifier - Can be either a model ID (e.g., "opus") or a full handle (e.g., "anthropic/claude-opus-4-1-20250805") + * @param modelIdentifier - Can be either a model ID (e.g., "opus-4.5") or a full handle (e.g., "anthropic/claude-opus-4-5") * @returns The model handle if found, null otherwise */ export function resolveModel(modelIdentifier: string): string | null { @@ -43,7 +43,7 @@ export function formatAvailableModels(): string { /** * Get model info by ID or handle - * @param modelIdentifier - Can be either a model ID (e.g., "opus") or a full handle (e.g., "anthropic/claude-opus-4-1-20250805") + * @param modelIdentifier - Can be either a model ID (e.g., "opus-4.5") or a full handle (e.g., "anthropic/claude-opus-4-5") * @returns The model info if found, null otherwise */ export function getModelInfo(modelIdentifier: string) { @@ -58,7 +58,7 @@ export function getModelInfo(modelIdentifier: string) { /** * Get updateArgs for a model by ID or handle - * @param modelIdentifier - Can be either a model ID (e.g., "opus") or a full handle (e.g., "anthropic/claude-opus-4-1-20250805") + * @param modelIdentifier - Can be either a model ID (e.g., "opus-4.5") or a full handle (e.g., "anthropic/claude-opus-4-5") * @returns The updateArgs if found, undefined otherwise */ export function getModelUpdateArgs( diff --git a/src/index.ts b/src/index.ts index 4735160..8efe00f 100755 --- a/src/index.ts +++ b/src/index.ts @@ -30,7 +30,7 @@ OPTIONS --fresh-blocks Force create all new memory blocks (isolate from other agents) -c, --continue Resume previous session (uses global lastAgent, deprecated) -a, --agent Use a specific agent ID - -m, --model Model ID or handle (e.g., "opus" or "anthropic/claude-opus-4-1-20250805") + -m, --model Model ID or handle (e.g., "opus-4.5" or "anthropic/claude-opus-4-5") --toolset Force toolset: "codex", "default", or "gemini" (overrides model-based auto-selection) -p, --prompt Headless prompt mode --output-format Output format for headless mode (text, json, stream-json) diff --git a/src/models.json b/src/models.json index 9ebde55..cfa0d2c 100644 --- a/src/models.json +++ b/src/models.json @@ -22,7 +22,14 @@ "id": "opus", "handle": "anthropic/claude-opus-4-1-20250805", "label": "Claude Opus 4.1", - "description": "Anthropic's largest (and slowest) model", + "description": "Anthropic's previous version of Opus", + "updateArgs": { "context_window": 180000 } + }, + { + "id": "opus-4.5", + "handle": "anthropic/claude-opus-4-5-20251101", + "label": "Claude Opus 4.5", + "description": "Anthropic's newest flagship Opus 4.5 model", "isFeatured": true, "updateArgs": { "context_window": 180000 } },