diff --git a/packages/server/src/server/agent/providers/claude-agent.ts b/packages/server/src/server/agent/providers/claude-agent.ts index 6a6e9c59e..39b2f7304 100644 --- a/packages/server/src/server/agent/providers/claude-agent.ts +++ b/packages/server/src/server/agent/providers/claude-agent.ts @@ -873,6 +873,12 @@ class ClaudeAgentSession implements AgentSession { this.availableModes = DEFAULT_MODES; this.currentMode = message.permissionMode; this.persistence = null; + // Capture actual model from SDK init message (not just the configured model) + if (message.model) { + this.lastOptionsModel = message.model; + // Invalidate cached runtime info so it picks up the new model + this.cachedRuntimeInfo = null; + } } private convertUsage(message: SDKResultMessage): AgentUsage | undefined { diff --git a/plan.md b/plan.md index bb52d0d88..4c82686f9 100644 --- a/plan.md +++ b/plan.md @@ -89,10 +89,11 @@ Hard requirement: We must get the actual runtime model, not just echo back the r - Fix: Update `handleSystemMessage()` to capture `message.model` as `lastOptionsModel` - Alternatively: Extract model name from `modelUsage` keys in `SDKResultMessage` -- [ ] **Implement**: Capture actual model from Claude SDK init message. +- [x] **Implement**: Capture actual model from Claude SDK init message. - In `handleSystemMessage()`, set `this.lastOptionsModel = message.model` - This gives us the actual model the SDK selected (not just our config) - Simpler than parsing modelUsage, same result + - **Done (2025-12-21 13:25)**: Updated `handleSystemMessage()` in `claude-agent.ts:868-882` to capture `message.model` from the SDK init message and invalidate cached runtime info. Typecheck passes. - [ ] **Test**: Verify current Codex runtime model detection works. - Create a Codex agent with default model