Self-hosted LLM routing. OpenAI-compatible. PCI-safe. One endpoint, model:"auto" — and a council of models when the stakes are high. AgoraRouter learns from outcomes your team has already verified — never from vendor benchmarks.
Every smart router is someone else’s cloud.
Every self-hosted gateway is dumb.
AgoraRouter is the only one that is neither.
SaaS routers see every prompt you send and take a cut of your traffic. Open-source proxies stay in your perimeter — but route by static config, learning nothing. We built the missing quadrant: intelligent routing, your infrastructure, regulator-grade audit.
The Shadow Routing Report is read-only: it watches your existing spend log and shows which calls burned frontier-model money on trivial work. Nothing is re-routed, nothing changes in production.
Point Claude Code, Cursor, Cline or any OpenAI SDK at one base URL and write
model:"auto". Eval-driven routing with the CI you already
run as the judge — no new evaluation infrastructure to build or maintain.
Every decision lands on an append-only, hash-chained ledger, signed with your Ed25519 key — client-owned, so we can’t touch it either — and verifiable by open-source tooling without trusting us at all.
For high-stakes calls — a security review, an architecture fork, a payment-flow change — AgoraRouter convenes models from rival families to argue it out, and a facilitator distils the verdict. Disagreement is recorded, not averaged away.
Frames the system: boundaries, trade-offs, what breaks at scale.
Argues for the shippable path: cost, simplicity, time-to-value.
Paid to attack the consensus. Holds a reserved seat the optimizer can never vote off — your built-in challenger function.
Synthesises: where the panel agrees, where it split, and why — onto the ledger.
Different model families fail differently — that is the point. And when the dissenter’s warning later proves right, the system rehabilitates it: scored on retrospective rightness, never on popularity. Risk teams know this pattern as the challenger function in three lines of defense.
A Thompson-sampling bandit per task-class, moved only by verified evidence — CI passed, probe confirmed, no broken returns. Satisfaction is stored, but can never touch the weights: enforced in the schema itself.
Every task-class learns in shadow until a calibration gate (κ ≥ 0.7 over 50 verdicts) proves the judge can be trusted. A 5% canary and drift alarms watch the champion after go-live.
Luhn + IIN detection on every request and response. A card number in a prompt means the call is blocked and an alarm is raised — because your upstream tokenization just failed.
Hash-chained, append-only, signed with your key. Export and verify with open-source
agora-verify — zero trust in us required. Anchor the chain hash anywhere you like.
Per-consumer keys with hard budgets. Over the line → HTTP 429, not a surprise invoice. Spend attribution per key, per model, per day.
Self-hosted EU node, deterministic egress allow-list, secrets via files (never env), and no payment system reachable from the deliberation plane — by network, not by promise.
| Gateway | Smart routing | Learns from your verified outcomes | Self-hosted | PCI tripwire | Client-owned ledger | Council mode |
|---|---|---|---|---|---|---|
| OpenRouter | via 3rd party | no | no | no | no | no |
| Not Diamond | yes | offline eval-set | no | no | no | no |
| LiteLLM / Bifrost | rules | no | yes | no | logs | no |
| Portkey / Kong | config | no | partial | generic PII | logs | no |
| AgoraRouter | yes | online, closed-loop | yes | named feature | Ed25519, verifiable | with protected dissenter |
Sourced from vendor docs and pricing pages, June 2026. “Logs” = editable, retention-billed logging — not a cryptographic ledger.
Log-only. We read your spend, you get the CFO report and a sized prize. Nothing changes in production.
Point one agent at model:"auto". Watch win-rates per task-class on the dashboard. Learning stays in shadow until proven.
High-stakes decisions get a multi-model debate with a protected dissenter — and a signed Decision Audit Report.
Verified outcomes keep re-weighting the router on your reality. The longer it runs, the harder it is to replace — because it knows your work.
# pip install openai — that's it from openai import OpenAI client = OpenAI( base_url="https://agora-mcp.legate.bot/v1", api_key="agk_live_…", ) r = client.chat.completions.create( model="auto", # the router decides messages=[{"role":"user", "content":"refactor this function…"}], ) # → routed to the model that wins # at refactoring — in YOUR repos