Your gateway keeps routing. AgentRoute records why each model was chosen, what it actually cost, and when the evidence supports a change.
0 accounts0 traffic proxiedruns in your browserMIT
Illustrative offline data — a demo of the evidence machinery, not a live benchmark.
82 seconds — the receipt rail, an earned counterfactual, and a governed promotion
STATION 1
The problem: decisions without receipts
Watch your requests get routed. Right now every dot is a decision someone made for you — model picked, money spent, latency paid — and none of it is recorded. Flip the switch.
your app
frontier model strong · slow · $$$
mid model balanced · $$
small model fast · cheap · $
Why did each request go where it went? Nobody can say.
STATION 2
The receipt: four stages, strictly separated
This is a real receipt from the bundled example ledger. Click each stage — AgentRoute refuses to blur what was asked, what was chosen, what was measured, and what is merely predicted.
ROUTE RECEIPT · route_example_code_review
frontier-review-model via provider-a · confidence 0.91
REQUESTED
code_review
what the app asked
SELECTED
frontier-review
and the reason
OBSERVED
success · $0.038
measured · 1420 ms
PROPOSED
fast-review
a labeled prediction
frontier-review-model provider-a · SELECTED — highest eligible quality within the latency & cost ceilingsQUALITY0.90LATENCY1800 msCOST$0.028
fast-review-model provider-b · rejected, but kept with its score — that’s what makes replay possible laterQUALITY0.84LATENCY850 msCOST$0.011
STATION 3
Simulate a policy — and see why predictions stay labeled
Drag the weights. AgentRoute re-ranks only the recorded candidates using only routing-time scores. The winner changes — but notice what the label always says.
Quality weight
Latency weight
Cost weight
Weights are normalized. Quality favors frontier-review; latency and cost favor fast-review.
frontier-review-model0.63
fast-review-model0.61
Predicted winner: frontier-review-model
labeledPredicted under these weights — not a measured outcome. To claim the alternative is actually better, you have to run it. That’s Station 4.
STATION 4 · THE CORE IDEA
Earn the counterfactual — or abstain
Counterfactuals are earned, not asserted. The criteria are preregistered — declared before the analysis runs — and the replay is budget-capped through an injected executor. Run it. Then weaken the evidence and watch what happens.
PREREGISTERED PROTOCOL · fast-review-promotion
Matched task pairs ≥ 1
Mean quality delta ≥ 0
Required task slices covered
Budget respected (≤ 2 requests · ≤ $0.05)
Declared first, judged after — no moving the goalposts once results exist.
SHADOW REPLAY ARENA · fixture executor
task_summarize_diff → fast-reviewqueued
task_review_patch → fast-reviewqueued
STATION 5
Govern the change — a human applies it, always
Evidence never auto-ships. A tamper-evident dossier binds everything a reviewer needs; compilers produce dry-run vendor configs; and the final step belongs to a person, outside AgentRoute.
verifiedtamper-evident Verdict: eligible— the evidence supports review, not auto-ship
// vercel-policy.dry-run.json — AgentRoute wrote this file. It will never apply it.
{ "policy": "balanced-code-review@1.1.0",
"routes": [{ "task": "code_review", "prefer": "fast-review-model", "fallback": "frontier-review-model" }] }
// → a human reviews this diff and applies it in the vendor’s own tooling.
STATION 6
The real thing
Everything you just played with is the actual product output — not mockups. Open the full surfaces, then reproduce the whole chain locally in five minutes.
Decision Lab
The complete audit surface exactly as ar lab generates it — receipt search, candidate evidence, router traces, evidence gaps, and the full predicted-policy sandbox.
31 linked artifacts — replay receipts, the preregistered experiment, the quality gate, a five-target promotion dossier, drift/SLO review, a hash-chained reliability timeline — verified to a single root hash.
# the five-minute proof — no accounts, no keys, no network$ git clone https://github.com/abhid1234/AgentRoute && cd AgentRoute
$ npm ci --ignore-scripts && npm run build
$ node dist/cli.js proof run --out local/proof-pack
$ node dist/cli.js proof verify local/proof-pack