dario
askalf · askalf/dario
A local proxy that lets coding agents like Cursor and Claude Code use your existing Claude and ChatGPT subscriptions instead of paid API tokens.
One local endpoint that routes Cursor, Cline, Aider, Claude Code and the Agent SDK through your Claude and ChatGPT subscriptions, with failover and pooling and zero runtime dependencies.
Preview
What you can do with it
- Run Claude Code using your existing Claude Pro subscription to avoid per-token billing
- Configure Cursor to use a local endpoint for model access with automatic failover between subscriptions
- Use Aider or Cline without needing to manage multiple paid API keys for different LLM providers
Safety check
No risky patterns found in the files we scanned.
Automated scan of the repo files. Always review code you run.
From the README
dario
Your Claude and ChatGPT subscriptions each work in exactly one place.dario makes them work everywhere, at subscription pricing, not per-token API bills.
One local endpoint. Every AI tool you own. The subscriptions you already pay for.
npm i -g @askalf/dario · 0 runtime deps · SLSA-attested every release · nothing phones home · ~41k lines you can read in a weekend · independent, unofficial, third-party (DISCLAIMER.md)
Start · Why dario · Routing · Risk · Reference · Trust · Coming back after a while?
You're already paying $20, $100 or $200 a month for Claude,[^plans] or for a ChatGPT plan. Then Cursor wants an API key. Aider wants an API key. Cline, Continue, Zed, your own scripts: every one of them bills you again, per token, while the plan you bought sits idle in the one app it shipped with.
dario is one local endpoint that routes all of them through the plans you already pay for. Point any Anthropic- or OpenAI-compatible tool at http://localhost:3456 and you're done. No per-tool config, no second bill, and when one plan hits its limit the other one takes the request.
Start in 60 seconds
npm install -g @askalf/dario
dario login # your Claude plan (Pro, Max 5x or Max 20x); `dario login --manual` for SSH / headless
dario proxy # leave it running, then point any tool at http://localhost:3456 with key `dario`
Anthropic-shaped tools: export ANTHROPIC_BASE_URL=http://localhost:3456 ANTHROPIC_API_KEY=dario. OpenAI-shaped tools use OPENAI_BASE_URL=http://localhost:3456/v1 instead, same key. Every tool that honors those env vars now runs on your subscription.
Works with: Claude Code, Cursor, Aider, Cline, Roo Code, Kilo Code, Continue.dev, Zed, OpenHands, OpenClaw, Hermes, Codex CLI, the Claude Agent SDK, the Anthropic and OpenAI SDKs, curl, your own scripts. Per-tool setup →
Prefer Docker? ghcr.io/askalf/dario:latest, multi-arch (amd64 + arm64), published from the same workflow as every npm release (guide). Something off? dario doctor prints one paste-ready health report.
Why people pick it
- Every tool, one URL. No per-tool keys and no second bill: anything with a base-URL setting runs on the plan you already pay for. Per-tool setup
- Either plan, either wire shape. Your ChatGPT plan behind Claude Code and the Anthropic SDKs; Codex CLI on your Claude plan. Two plans
- Failover that finishes the answer. A 429 on one plan is re-served by the other, and a stream that dies mid-answer is completed on the same model first. Failover
- Many seats, one endpoint. Per-model headroom routing, session-sticky prompt cache, in-flight 429 failover across every seat you hold. New conversations go to the seat with the most headroom by default;
--pool-strategy=fill-firstfills seats in alias order andexpiring-firstspends the seat whose weekly window resets soonest. The active strategy shows in the startup banner,GET /status,dario doctoranddario accounts list. The pool - One key per developer. Named keys with a preferred seat, a model allowlist and a daily budget. Keys
- Knows what it saved you. A ledger prices every request at API rates; see it in the TUI,
/analytics, Prometheus/metricsand a per-request timing split. Analytics - Tracks Claude Code on its own. Eleven unattended watchers catch wire-shape drift and ship the fix, usually the same day. Drift
- Stops before it costs you. The overage guard halts the proxy the moment a response bills outside your subscription. Guardrails
- Your traffic as the benchmark. Shadow-compare any request against another model and read the results with
dario compare. Shadow compare
What it does with a request
You point every tool at one URL. dario reads each request, decides which plan or backend owns it, and forwards it in that backend's native protocol.
| Client speaks | Model | Routes to | What happens |
|---|---|---|---|
| Anthropic Messages | claude-* / opus / sonnet / haiku | Claude pool | OAuth swap + Claude Code template, then api.anthropic.com |
| Anthropic Messages | a slug your ChatGPT account lists | Codex engine | Messages→Responses translation, subscription auth |
| Anthropic Messages | gpt-4o, llama-*, any name no plan lists | Refused | 400 + x-dario-upstream-rejection: model_unroutable; reach an API-key backend from this shape with a provider prefix |
| OpenAI Chat | gpt-* / o1-* / o3-* / o4-* | OpenAI-compat backend | Auth swap, body forwarded byte-for-byte |
| OpenAI Chat | a slug your ChatGPT account lists | Codex engine | chat/completions→Responses translation, subscription auth |
| OpenAI Chat | claude-* | Claude pool | OpenAI→Anthropic translation, then the Claude path |
| Either | :<model> | Forced by prefix | Explicit override |
The tool doesn't know. The backend doesn't know. dario is the seam.
The full Claude lineup, shortcuts, the live model catalog and when a name is refused: routing.md.
Will my account get suspended?
The most common question about dario, and it deserves a straight answer: I can't promise you won't be actioned, and I'd be skeptical of anyone who does. Only Anthropic decides how it enforces its terms. What I can do is lay out exactly how dario works, so you can weigh the risk yourself instead of taking anyone's word for it.
dario runs entirely on your machine, authenticates as you with your own Clau