Configures OpenClaw (or Claude Code) to use free AI models from OpenRouter. Selects the best tool-capable model as primary, builds a ranked fallback chain so rate limits cause zero interruption, and leaves the rest of the config untouched.
Only chat models are selected — audio, image, video, and embedding models are automatically filtered out. Models that claim tool support but fail at runtime (e.g. Gemma) are excluded from tool scoring.
1. API key(s)
bash
# Single key
openclaw config set env.OPENROUTER_API_KEY "sk-or-v1-..."
# Multiple keys (comma-separated) — recommended to avoid daily free-tier limits
openclaw config set env.OPENROUTER_API_KEY "sk-or-v1-KEY1,sk-or-v1-KEY2,sk-or-v1-KEY3"
For OpenClaw inference key rotation, add each key as a separate profile in
~/.openclaw/agents/main/agent/auth-profiles.json:
json
{
"version": 1,
"profiles": {
"openrouter:default": { "type": "api_key", "provider": "openrouter", "key": "sk-or-v1-KEY1" },
"openrouter:key2": { "type": "api_key", "provider": "openrouter", "key": "sk-or-v1-KEY2" },
"openrouter:key3": { "type": "api_key", "provider": "openrouter", "key": "sk-or-v1-KEY3" }
}
}
Note: the file is
auth-profiles.json(withs), notauth-profile.json.
2. Install
On Debian/Ubuntu servers (Python 3.12+), use the provided script:
bash
cd /path/to/infinity-router
chmod +x install.sh
./install.sh
which infinity-router # should return /usr/local/bin/infinity-router
To uninstall: ./uninstall.sh
bash
# 1. Configure best model + fallback chain
infinity-router pick
# 2. Apply to the running gateway
openclaw gateway restart
For a safer run that validates each model before writing (avoids stale/broken models):
bash
infinity-router pick --validate
openclaw gateway restart
CommandWhen to runinfinity-router pickSet up best free model + fallbacks (most common)infinity-router pick --validateProbe each candidate before writing — avoids "Unknown model" errorsinfinity-router pick -fKeep current primary, rebuild fallbacks onlyinfinity-router pick -c 10Use 10 fallbacks instead of default 5infinity-router pick --authAlso add OpenRouter auth profile to OpenClawinfinity-router scanBrowse all available free modelsinfinity-router scan -n 30Show all 30+ modelsinfinity-router use deepseekSet a specific model (partial name OK)infinity-router use qwen3-coder -fAdd model to fallbacks onlyinfinity-router use deepseek --validateSet model and validate fallbacksinfinity-router benchLatency-test top 5 modelsinfinity-router bench -c 10Test top 10 modelsinfinity-router statusShow current config, all API keys, cache ageinfinity-router watchTail gateway log, auto-rotate + restart on failuresinfinity-router watch --verboseAlso print every matched failure lineinfinity-router watch --notify URLPOST rotation event to webhook on each rotateinfinity-router resetRemove model config from targetinfinity-router reset --clear-rlAlso clear rate-limit cooldown records
Always run openclaw gateway restart after any command that changes config.
bash
infinity-router pick # default: openclaw
infinity-router pick --target claude-code # Claude Code settings.json
Only these keys in ~/.openclaw/openclaw.json:
agents.defaults.model.primary — e.g. openrouter/meta-llama/llama-3.3-70b-instruct:freeagents.defaults.model.fallbacks — e.g. ["openrouter/free", "mistralai/mistral-small:free", …]agents.defaults.models — model allowlistThe first fallback is always openrouter/free — OpenRouter's smart router that
auto-picks the best available model for each request.
bash
infinity-router-daemon # one-shot check
infinity-router-daemon --loop # continuous monitoring
infinity-router-daemon --rotate # force rotate now
infinity-router-daemon --status # rotation history
infinity-router-daemon --clear-rl # reset all cooldowns
Run once a day or when models start failing:
bash
rm -f ~/.infinity-router/model-cache.json
infinity-router pick
openclaw gateway restart
ProblemFixinfinity-router: command not foundRun ./install.sh from the project directoryOPENROUTER_API_KEY not setGet a free key at https://openrouter.ai/keysConfig not taking effectopenclaw gateway restart, then /new in TelegramUnknown model errors in gateway logStale cache — rm ~/.infinity-router/model-cache.json && infinity-router pick --validateAgent gives fake/hallucinated responsesModel doesn't support tools — run infinity-router pick --validate to get a real tool-capable modelAll probes return rate_limitDaily free quota exhausted — wait for UTC midnight reset, or add more API keysHTTP 429: free-models-per-dayAdd more keys comma-separated in env.OPENROUTER_API_KEY, or add separate profiles to auth-profiles.json``Something went wrong in TelegramRun infinity-router status to see active model, then openclaw gateway restart and /new