Heartbeat read non-existent split modelProvider/modelId fields while the dashboard saves runtimeConfig.model as combined "provider/modelId", so sessions fell through to pi's default model and failed with "No API key for provider: openai-codex". Add extractRuntimeModel helper that prefers the combined string and use it from heartbeat. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>