One control plane for AI agents

Claude Code, Codex, Cursor and other agents, routed through your models, budgets and policies.

Supported agents

Terminal and IDE agents.

Claude Code
Codex CLI
Gemini CLI
Qwen Code
OpenCode
Pi.Dev
Amp
Goose
Aider
Cursor
GitHub Copilot
Windsurf
Zed
Cline
Roo Code
Kilo Code
Continue
Kiro
Trae
Junie
Claude Desktop
Claude for Office
Open WebUI
LibreChat

Agent setup

Point the agent, editor or desktop app at Multi-Router with an endpoint, a key and a router.

Terminal agents
Editors
Desktop and chat apps
~/.claude/settings.jsonClaude Code
{  "env": {    "ANTHROPIC_BASE_URL": "https://api.multi-router.ai",    "ANTHROPIC_AUTH_TOKEN": "mr_live_7Kq2…9f2c",    "ANTHROPIC_CUSTOM_HEADERS": "X-MR-Router: rt_claude_code"  }}
SpeaksAnthropic Messages
Served byrt_claude_code
Each requestChecked against policy, routed and recorded in Traffic
~/.codex/config.tomlCodex CLI
model_provider = "multi-router"model = "gpt-5.4" [model_providers.multi-router]name = "Multi-Router"base_url = "https://api.multi-router.ai/v1"env_key = "MR_API_KEY"wire_api = "responses"http_headers = { "X-MR-Router" = "rt_codex" }
SpeaksOpenAI Responses
Served byrt_codex
Each requestChecked against policy, routed and recorded in Traffic
~/.zshrcGemini CLI
export GOOGLE_GEMINI_BASE_URL="https://api.multi-router.ai"export GEMINI_API_KEY="mr_live_7Kq2…9f2c"
SpeaksGemini generateContent
Served byrt_gemini
Each requestChecked against policy, routed and recorded in Traffic
~/.pi/agent/models.jsonPi.Dev
{  "providers": {    "anthropic": {      "baseUrl": "https://api.multi-router.ai",      "headers": {        "X-MR-Router": "rt_pi",        "X-MR-Api-Token": "mr_live_7Kq2…9f2c"      }    }  }}
SpeaksAnthropic, OpenAI and Codex
Served byrt_pi
Each requestChecked against policy, routed and recorded in Traffic
CursorCursor Settings › Models
OpenAI API Keymr_live_7Kq2…9f2c
Override OpenAI Base URLhttps://api.multi-router.ai/v1
Custom modelmulti-router/smart
SpeaksOpenAI Chat Completions
Served bymulti-router/smart
Each requestChecked against policy, routed and recorded in Traffic
ClineCline › API Configuration
API ProviderOpenAI Compatible
Base URLhttps://api.multi-router.ai/v1
API Keymr_live_7Kq2…9f2c
Model IDmulti-router/smart
SpeaksOpenAI Chat Completions
Served bymulti-router/smart
Each requestChecked against policy, routed and recorded in Traffic
Claude
Configure third-party inference Default Export

Connection

Choose where Claude Desktop sends inference requests.

Gateway
Gateway credentials Test connection
Credential kindSelects the credential source. When set, only that source is used (no fallback). Interactive sign-in
Gateway base URL *Full URL of the inference gateway endpoint. https://api.multi-router.ai/
Sign-in session lifetimeHow long a sign-in stays valid under your IdP's session policy. Shows a re-authenticate banner before it expires. 20000seconds
Gateway sign-in flowHow the IdP sign-in runs: system browser (default) or the OS Microsoft Entra broker.Learn more browser
Custom inference headersExtra headers sent with every inference request. X-MR-Router: rt_claude_desktop
Discard Changes Save Changes Apply Changes
SpeaksAnthropic Messages
Served byrt_claude_desktop
Each requestChecked against policy, routed and recorded in Traffic
Open WebUIAdmin Settings › Connections › OpenAI API
API Base URLhttps://api.multi-router.ai/v1
API Keymr_live_7Kq2…9f2c
Model IDsmulti-router/smart, multi-router/fast
SpeaksOpenAI Chat Completions
Served bymulti-router/smart
Each requestChecked against policy, routed and recorded in Traffic

Every agent request passes through the gateway

Each request is checked against policy, routed and recorded.

Your agents
Claude Code
Codex CLI
Cursor
Gemini CLI
Multi-Router api.multi-router.ai
Model allowed
Within budget
Under rate limit
priya@example.com · claude-sonnet-4.6 · 18.4K tokens · $0.061
Your providers
Anthropic
AWS Bedrock
Google Vertex
OpenAI
Enterprise

Policies for every person

Route, region, models and caps are set once in a policy. Everyone it is assigned to gets an agent that follows it.

Standard engineering pol_std_eng Revision 7Save
Claude Code Claude Desktop
Route
Anthropic APIGlobal
Bedrock (Geo)Stays in the geography of the region
Vertex AIOne region or a multi-region
Model groupYour own list of models and keys
Regioneu-central-1
Requests run in8 EU regions
Credentials Organization keyEach person's own bedrock-eu · llpk_4Rw9
Models
Claude Opus 4.8 cap $150
Claude Sonnet 4.6
Claude Haiku 4.5
Claude Fable 5.1
Budget per person
$500DailyWeeklyMonthlyLifetime
At 80% of the capEmail the person
Projected to reach the cap within 3 daysEmail the person and their admin
At 100% of the capBlock
Assigned to48 people
Directory ruleOkta group Engineering44
InvitationSent with this policy3
Access editSet on the person1
Revisions
7Region set to eu-central-1admin@example.com · Today 09:12
6Opus 4.8 capped at $150admin@example.com · Oct 14
5Fable 5.1 disabledlee@example.com · Oct 2
A saved revision applies to every assigned person from their next request.

Budgets, alerts and requests for more

A cap per person and per model, alerts before the cap is reached, a clear refusal at the cap, and a request for more that an admin approves.

Budget Standard engineering policy Enforced
Cap per person, per tool$500.00
PeriodDailyWeeklyMonthlyLifetime
Model capsat or below the cap per person
Claude Opus 4.8 anthropic/claude-opus-4.8 $150.00
Claude Sonnet 4.6 anthropic/claude-sonnet-4.6 No cap
Claude Haiku 4.5 anthropic/claude-haiku-4.5 No cap
Ruleschecked on every request
At 80% of the capWatches each person Email the person
Projected to reach the cap within 3 daysWatches each person Email the personEmail admins
At 90% of the model capWatches claude opus 4.8 Webhook
At 100% of the capWatches each person Block
At 75% of $25,000Watches total for the policy Email adminsWebhook
A blocked request gets HTTP 429 budget_exhausted with the reset time.
Spend this month 48 people Claude CodeClaude Desktop
PersonAgainst capSpend
priya.n@acme.example $388.40$42.91 of $500 · asked for $750 $431.31 Nearing
marcus.o@acme.example $571.25$39.95 of $750 · override $611.20 Nearing
ana.r@acme.example $462.10$37.90 of $500 $500.00 Capped
chen.w@acme.example $241.60$46.10 of $500 $287.70 On track
lena.k@acme.example $122.35$18.40 of $500 $140.75 On track
Each person's agents are their own routers, so spend splits by person and by agent.
Enterprise

A portal for every person

People sign in with SSO and set up the agents their policy allows. Each sees their own budget, models, key and setup, and can ask for more budget.

AAcme · AI agents Signed in with OktaPN
Your agents
Claude CodeNearing
$431.31 of $500 this month$27.60 a day
Claude DesktopOn pace
$42.91 of $500 this month$2.70 a day
+ Add an agent from your policy
Your policy
Standard engineering
Set by Acme IT · Bedrock in the US
Claude Code Request more budget
Spent
$431.31
86% of $500.00
Your pace
$27.60
a day, last 3 days
Cap reached
in 2 days
Oct 19 at this pace
Resets
Nov 1
00:00 UTC
Allowed modelsspend this month
Claude Opus 4.8capped at $150 $131.20
Claude Sonnet 4.6 $268.04
Claude Haiku 4.5 $32.07
Your keycreated Sep 2
sk-mr-••••••••••••9f2cRevealRotate
Routerrt_cc_priya_4Kd8
Scopesinference
SetupmacOS / LinuxWindowsManaged by IT
// ~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.multi-router.ai",
    "ANTHROPIC_AUTH_TOKEN": "sk-mr-••••9f2c",
    "ANTHROPIC_CUSTOM_HEADERS": "X-MR-Router: rt_cc_priya_4Kd8"
  }
}
Enterprise

Offboarding, audit and rollout

Remove a person in your directory and every key and agent they hold stops. Each change is recorded, and settings reach laptops through device management.

PRPriya Ramanpriya@example.com Suspended
InvitedActiveSuspendedOffboarded
✕ Suspended by directory sync at 10:42. Okta deactivated this user. Every key and agent router this person holds stopped serving from the next request.
Agents
Claude Code · Engineeringrt_cc_priya · mr_live_…9f2c Disabled
Claude Desktop · Engineeringrt_cd_priya · mr_live_…41ad Disabled
Claude Code · Researchrt_cc_priya_rs · mr_live_…7b10 Disabled
Reactivate Offboard Offboarding retires every agent and removes the person from each organization.
Activity Account All eventsAgentsKeysPoliciesAccess Search people, keys or policies
TimeEventSubjectDetailBy
10:42 person_suspended Priya Raman Priya RamanDeactivated in Okta. 3 keys and 3 agent routers stopped.Directory sync Directory sync
10:15 agent_key_rotated Marco Ruiz Marco RuizClaude Code · Platform · mr_live_…c3e1 replacedmarco@example.com marco@example.com
09:58 policy_changed Standard engineering Standard engineering2 settings changed · applies to 48 peopledana@example.com dana@example.com
SettingBeforeAfter
Cap per person$400 monthly$500 monthly
ModelsSonnet 4.6, Haiku 4.5Opus 4.8, Sonnet 4.6, Haiku 4.5
Revision 7 of policy:standard-engineering · new requests use it
09:31 agent_created Ana Costa Ana CostaClaude Desktop · Designana@example.com ana@example.com
09:02 portal_access_granted Li Wei Li WeiRule: group Engineering · policy Standard engineeringDirectory sync Directory sync
Yesterday agent_retired Jo Patel Jo PatelClaude Code · Research · removed from Researchsam@example.com sam@example.com
Yesterday portal_access_revoked Jo Patel Jo PatelLeft group Research in OktaDirectory sync Directory sync
Agent, key, policy and access changes for every person in the account, from the dashboard, the API and directory sync.

Agents in CI

Agents in CI pipelines and Kubernetes sign in with the identity the platform already issues them. There is no static key to store or rotate.

triage-agent.yamlToken rotates every 10 min
apiVersion: v1
kind: Pod
metadata: { name: triage, namespace: agents }
spec:
  serviceAccountName: triage
  containers:
    - name: agent
      image: acme/triage-agent:2.4
      env:
        - { name: MR_BASE_URL, value: https://api.multi-router.ai/v1 }
        - { name: MR_TOKEN_FILE, value: /var/run/mr/token }
      volumeMounts: [{ name: mr, mountPath: /var/run/mr }]
  volumes:
    - name: mr
      projected:
        sources:
          - serviceAccountToken:
              audience: https://api.multi-router.ai
              expirationSeconds: 600
              path: token
Traffic by machine identity · last 7 daysIdentity: machine
SubjectRequestsTokensCost
system:serviceaccount:agents:triageKubernetes 18,402 96.1M $214.80
req_3Nf8QpL2vd200claude-sonnet-4.6 · 5,214 tokens · $0.0117
Identity kindkubernetes_service_account
Issuerprod-eks · mi_iss_3Lp8
Subjectsystem:serviceaccount:agents:triage
Bindingmb_9Hc4Wz · prefix system:serviceaccount:agents:
Routerrt_triage
system:serviceaccount:agents:supportKubernetes 9,877 41.3M $102.16
repo:acme/api:pull_requestCI 1,204 38.7M $71.92
project_path:acme/web:ref:mainCI 316 6.2M $9.40
Every request records which workload sent it, so cost is attributed to a pipeline or a service, not a shared key.

Route your agents through Multi-Router

Set the agent's endpoint and API key to Multi-Router, then view its requests in Traffic.