The detail that matches my own experience is Claude Code hitting API-compatibility problems against a local server while plain chat worked. I ran into the same wall: the multi-turn tool-call loop expects OpenAI-exact response shapes, and Lemonade's llama.cpp bridge drops fields the agent needs mid-task. Did switching to OpenCode fix the tool-call handshake for you, or did you still patch responses?