Case study · September 20, 2026
How to connect Reality Router to OpenClaw
One provider block in openclaw.json. Your always-on agent keeps running, but every turn is routed across your whole model pool — and shows up as OpenClaw in your dashboard.
One provider block in openclaw.json. Your always-on agent keeps its models, its channels and its personality — every turn just gets routed per call, with receipts.
An always-on agent is a different cost shape from a coding session. You don't sit down and spend for an hour; it runs, all day, answering things. Every scheduled check, every message, every small tool call is a model call you didn't consciously decide to make. That's exactly the workload where picking one model up front is the wrong move, and where the bill creeps up without an obvious culprit.
OpenClaw supports custom OpenAI-compatible providers, so Reality Router drops in as one:
- Per-turn model choice. A "what's on my calendar" turn and a "read this repo and summarise the diff" turn stop costing the same.
- Your other providers stay configured. Use
mode: "merge"and the router sits alongside them, not instead of them. - Attribution. OpenClaw's calls land in the dashboard tagged
OpenClaw, separate from your coding tools, so you can finally see what the always-on agent actually costs.
1. Add Reality Router as a provider (1 minute)
Edit ~/.openclaw/openclaw.json:
{
"agents": {
"defaults": {
"model": { "primary": "rr/auto" },
"models": { "rr/auto": { "alias": "RR" } }
}
},
"models": {
"mode": "merge",
"providers": {
"rr": {
"baseUrl": "http://localhost:8000/v1",
"apiKey": "rr-local",
"api": "openai-completions",
"models": [
{
"id": "auto",
"name": "Reality Router (auto)",
"reasoning": false,
"input": ["text"],
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
"contextWindow": 128000,
"maxTokens": 8192
}
]
}
}
}
}
Three details worth knowing:
"mode": "merge"keeps every provider you already have. Your Anthropic or OpenAI models stay available as fallbacks; only the primary changes.coststays at zero. OpenClaw can't know which model a request will land on, so let it stop guessing — the router does the cost accounting and reports the real number."id": "auto"lets the router choose per call. Pin a specific id fromreality-router modelsif you'd rather force it.
If OpenClaw runs as a service, restart its gateway after editing.
2. Verify it worked (30 seconds)
openclaw agent --local -m "Create a file called hello.txt containing: routed via RR. Then read it back and tell me the contents."
That one command tests the whole path: the router translating tool definitions, the model calling a tool, the result going back, and the agent finishing the job. Then open the dashboard at http://localhost:8000/metrics/dashboard and look for OpenClaw in Agent Activity.
You should see several requests, not one — each tool step is its own routed call, which is the entire point. In our run, a four-call turn spread across two different models while writing one small file.
Which API to use
OpenClaw supports both "api": "openai-completions" and "api": "openai-responses", and the router serves both. The config above uses Chat Completions. "api": "openai-responses" also works on Reality Router 0.0.7 and newer, which is what OpenClaw recommends for custom endpoints — it's a one-word change.
Why bother
The always-on agent is where routing pays quietly and continuously:
- The floor drops. Most turns in a personal agent are small — a reminder, a lookup, a one-line answer. Those don't need a flagship model, and per-call routing stops sending them to one.
- The ceiling stays. When a turn actually is hard, the router still reaches for a strong model. You don't trade capability for cost; you stop paying for capability you didn't use.
- You see the shape of it. An agent that runs all day is exactly the thing whose cost you can't guess. The dashboard shows it per request, per model, tagged
OpenClaw, next to everything else you route.
Same agent, same channels, same skills. Just routed, and visible.
Reality Router is open source and self-hosted. Setup verified with OpenClaw 2026.4.14 against a running Reality Router, September 2026.