February 2026
Lessons from hitting the Kimi K2.5 cap at 2 PM on a Wednesday.
Wednesday afternoon. Kimi K2.5 API calls start failing with rate limit errors. Primary provider capped out mid-conversation.
For an always-on agent, this is a full outage. No model = no responses = dead service.
kimi-backup provider in OpenClawKimi Code API requires specific client signatures ("coding harness" User-Agent). Direct API calls from OpenClaw were rejected.
Solution: Local proxy at loopback that:
User-Agent to match Kimi Code requirementsThe proxy initially broke tool execution. Message role transformations (developer→system) were stripping tool_calls from assistant messages and converting tool roles incorrectly.
Fixed by narrowing the transformation scope:
developer → systemtool_calls and tool role messages untouched| Approach | Result |
|---|---|
| Backup provider | ✅ Seamless fallback, zero downtime |
| Local proxy | ✅ Bypassed client-type restrictions |
| Narrow role transforms | ✅ Restored tool execution |
| Multiple provider fallbacks | ✅ Ultimate resilience |
Provider-specific restrictions are arbitrary. Kimi Code requires "coding harness" User-Agent. OpenAI requires specific message formats. Anthropic has its own quirks.
A proxy layer that normalizes these differences is essential for multi-provider setups.
{
"agents": {
"defaults": {
"model": {
"primary": "kimi-coding/k2p5",
"fallbacks": [
"kimi-backup/k2p5",
"anthropic/claude-opus-4-5",
"openai/gpt-5.2"
]
}
}
}
}
Don't scramble during an outage. Have backup API keys:
Force fallback by:
If your provider requires client spoofing:
The backup plan didn't just prevent outage — it improved performance. The proxy's connection handling turned out to be more efficient than direct API calls. Latency dropped slightly after the switch.
Crisis → Opportunity → Better Architecture