Problem
All agents (dispatcher + execution) were hardcoded to Claude models via the Anthropic API. Running Gemini was not supported, and a LiteLLM proxy setup was partially wired but broken in several ways:
scripts/start-proxy.sh failed to load .env.local (inline comments broke xargs)
ANTHROPIC_AUTH_TOKEN was used instead of ANTHROPIC_API_KEY — SDK ignored it
- LiteLLM had no model aliases matching the model names Claude Code CLI sends internally (
claude-sonnet-4-6, claude-haiku-4-5-20251001, etc.) → 400 errors
- LiteLLM's
/v1/messages/count_tokens endpoint sends empty body to Gemini's countTokens API → 500 errors flooding logs
- When the dispatcher model produced no text blocks (tool-only responses), the literal string
"(no reply)" was sent to the user's iMessage
Solution (this PR)
See PR #X for implementation. This issue tracks the root causes.
Checklist
Problem
All agents (dispatcher + execution) were hardcoded to Claude models via the Anthropic API. Running Gemini was not supported, and a LiteLLM proxy setup was partially wired but broken in several ways:
scripts/start-proxy.shfailed to load.env.local(inline comments brokexargs)ANTHROPIC_AUTH_TOKENwas used instead ofANTHROPIC_API_KEY— SDK ignored itclaude-sonnet-4-6,claude-haiku-4-5-20251001, etc.) → 400 errors/v1/messages/count_tokensendpoint sends empty body to Gemini's countTokens API → 500 errors flooding logs"(no reply)"was sent to the user's iMessageSolution (this PR)
See PR #X for implementation. This issue tracks the root causes.
Checklist
.env.localloading fixed (strip inline comments beforexargs)ANTHROPIC_API_KEYset correctly for LiteLLM authlitellm.config.yamlmaps all Claude Code internal model IDs togemini/gemini-2.5-flashcount_tokens→ returns mock 200"(no reply)"fallback replaced with a real user-facing fallback message