Stop tokenmaxxing your agentic loops.
The self-improving LLM router that optimizes your agentic workflows with every run — works with any harness, any model, any loop.
optimize my coding agent run — cut cost, keep qualityCheap, fast, right — you don’t have to pick.
Run every call on a frontier model and you’re tokenmaxxing — you overpay, and you’re slow. Make everything cheap and the hard calls get it wrong. BitRouter routes each call to the cheapest model that still clears your bar — and lets you set where that bar is.
A 200-file refactor — ~2,400 model calls in one run.
Same tasks solved. A fraction of the bill.
On Terminal-Bench 2.1, BitRouter routed GPT-5.5’s calls and cut cost ~33% at the same solve rate. Plotted against the vals.ai leaderboard field, the optimized point slides left — same accuracy band, a third cheaper.
‡ GPT-5.5 + BitRouter applies our measured Terminal-Bench result (−32.8% cost, −1.14pp; run codex-full-a4ce879-c3) to the vals.ai GPT-5.5 baseline. BitRouter was not re-run on Terminus 2.
| GPT-5.6 Sol | Terminus 2 | 85.77% | $1.02 | 373s |
| Claude Fable 5 | Terminus 2 | 80.52% | $1.43 | 505s |
| GPT-5.5 | Terminus 2 | 76.40% | $0.74 | 427s |
| ▸GPT-5.5 + BitRouter | bitrouter · adaptive | 75.26%‡ | $0.50‡ | — |
| Claude Sonnet 5 | Terminus 2 | 74.53% | $0.80 | 635s |
| Claude Opus 4.8 | Terminus 2 | 71.91% | $2.41 | 930s |
Act. Observe. Evaluate. Update.
Not a static router that decides once and rots. BitRouter runs a closed loop on every call — act, observe, evaluate, then update the routing policy — so it gets cheaper and sharper each lap, with no tuning by you.
Route each call to the model that fits.
Routine calls go to open models; the hard ones escalate to frontier — the cheapest model that still clears the bar, decided per call.
| request | cx | routed | cost | decision |
|---|---|---|---|---|
| fix auth.py test | 0.18 | qwen/qwen-3.7 | $0.002 | open |
| summarize thread | 0.12 | qwen/qwen-3.7 | $0.002 | open |
| design migration plan | 0.62 | gpt-5.5 | $0.021 | frontier |
| rank retrieval hits | 0.30 | deepseek-v4 | $0.003 | open |
See every call, per run.
Cost, latency and outcome traced for each call and attributed to the run — in the request path, nothing to bolt on.
| time | model | cost | lat | st |
|---|---|---|---|---|
| 14:22:01 | qwen/qwen-3.7 | $0.002 | 82ms | ok |
| 14:22:00 | qwen/qwen-3.7 | $0.002 | 91ms | ok |
| 14:21:58 | deepseek-v4 | $0.003 | 101ms | ok |
| 14:21:55 | gpt-5.5 | $0.021 | 140ms | ok |
Score what the call actually needed.
Each call is scored by complexity against the policy threshold — so the next decision knows when an open model is enough and when to escalate.
| request | cx | bar | q | verdict |
|---|---|---|---|---|
| fix auth.py test | 0.18 | 0.91 | open holds it | |
| rank retrieval hits | 0.30 | 0.88 | open holds it | |
| design migration plan | 0.62 | 0.94 | escalate |
Tune the policy from what it learned.
Every lap folds the traces back into the routing policy — the threshold and model mix shift, and the cost per run keeps dropping.
Questions before you ship.
Common questions about pricing, routing, and data handling. If yours isn’t here, check the docs or talk to us — we usually reply within a day.
Start routing in under a minute.
One API key, every model — and your cost policy is a file you own. Smart defaults out of the box; version it, override any call, never a black box.
curl -fsSL https://bitrouter.ai/install.sh | sh1# bitrouter.policy.yaml — context-aware routing, versioned in your repo2version: 13preset: code/balanced # inherit defaults, override below45# what the loop tunes for on every run6optimize:7 objective: cost # cost | accuracy | latency | balanced8 quality_floor: 0.92 # never drop below this eval score9 max_latency_p95: 1200ms1011# model catalogue — aliases → upstream, priced12models:13 - id: qwen/qwen-3.714 tier: open15 price_per_mtok: { in: 0.14, out: 0.28 }16 - id: deepseek/deepseek-v4-pro17 tier: open18 price_per_mtok: { in: 0.27, out: 1.10 }19 - id: anthropic/claude-opus-4.820 tier: frontier21 price_per_mtok: { in: 15.0, out: 75.0 }2223# routing rules — first match wins; re-scored per call24routes:25 - match: { intent: [lookup, format, classify] }26 use: qwen/qwen-3.727 - match: { complexity: ">=0.6" }28 use: deepseek/deepseek-v4-pro29 - match: { complexity: ">=0.85", tokens_in: ">8k" }30 use: anthropic/claude-opus-4.83132fallbacks: # transparent, mid-run33 - on: [429, 5xx, timeout]34 chain: [anthropic, deepseek, google]3536guardrails:37 prompt_injection: block38 pii: redact # email · card · ssn39 spend_per_run: $5.0040 loop_guard: true4142overrides:43 "src/checkout/**": anthropic/claude-opus-4.8 # you keep the wheel4445telemetry:46 attribution: per_run # cost + latency per call chain47 retention: none # zero content capture by default