Free to browse, every day. Go Pro for unlimited installs and Airsc MCP.

See Pro
MCP serverSafeAgent workflow & memorySome setup

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.

575 stars74License: MITUpdated 2 days ago0 opens

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

Safe

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-first fills seats in alias order and expiring-first spends the seat whose weekly window resets soonest. The active strategy shows in the startup banner, GET /status, dario doctor and dario 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 /metrics and 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 speaksModelRoutes toWhat happens
Anthropic Messagesclaude-* / opus / sonnet / haikuClaude poolOAuth swap + Claude Code template, then api.anthropic.com
Anthropic Messagesa slug your ChatGPT account listsCodex engineMessages→Responses translation, subscription auth
Anthropic Messagesgpt-4o, llama-*, any name no plan listsRefused400 + x-dario-upstream-rejection: model_unroutable; reach an API-key backend from this shape with a provider prefix
OpenAI Chatgpt-* / o1-* / o3-* / o4-*OpenAI-compat backendAuth swap, body forwarded byte-for-byte
OpenAI Chata slug your ChatGPT account listsCodex enginechat/completions→Responses translation, subscription auth
OpenAI Chatclaude-*Claude poolOpenAI→Anthropic translation, then the Claude path
Either:<model>Forced by prefixExplicit 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

View source on GitHub