v0.1.104 · ready · MIT licensed

Pool your Claude rate limits.

Combine your Claude Code accounts into one proxy. Auto-routes to the freshest account, fails over silently, zero setup.

$ curl -sSf https://raw.githubusercontent.com/ramc10/shunt/main/install.sh | sh
shunt connected
accounts 3 active · 1,247 routed
work Claude Pro you@example.com ● active
5h
61% 4h 12m
7d
79% 3d 4h
personal Claude Pro alt@example.com ● active
5h
8% reset soon
7d
12% 6d 2h
codex ChatGPT Go pro@example.com ● warm
1h
88% 22m
streaming output routing → personal
write a rate limiter in Rust

            
generating · 0 tokens 0ms
/ the problem

You paid for a plan. You keep hitting the ceiling.

/ 01

Five hours isn't enough.

The Pro window resets too slowly for a real session.

5h window84% used · 3:42:11
/ 02

Juggling kills flow.

Switching accounts means logout → login → broken context.

$ claude logout $ claude login --account=alt $ # where was I again?
/ 03

429s break loops.

A hard fail mid-agent is a context-switch tax you didn't budget for.

⚠ 429 rate_limit_exceeded retry-after: 01:24:38
/ features

drop-in, transparent, relentless.

F.01 / LIVE STATUS

watch your rate limits breathe

Every response updates the bars in real time. No polling. No guessing. Color shifts amber at 65%, red at 85%, with reset countdown to the second.

work · 5h
61%
work · 7d
79%
personal · 5h
8%
codex · 1h
88%
side · 5h
34%
F.02 / ROUTING

picks the freshest account

Tracks unified utilization headers from every response. The next request always lands on the account with the most headroom.

req #1247in
req #1248queued
req #1249queued
SHUNT
work61%
personal8%
codex88%
F.03 / AUTO-RESUME

never sees a hard fail

If all pools are exhausted, shunt sleeps until the soonest reset — up to 5h — and retries. Your CLI never blinks.

[wait] all accounts cooling
[wait] sleeping 1h 24m 12s
[wake] personal reset
[ok] retry → 200 OK
F.04 / CODEX

openai ⇄ anthropic

Speak OpenAI, route through Claude. Or add a ChatGPT Pro account directly to the pool. Either way — one proxy.

gpt-4o
opus-4-6
o3-mini
haiku-4-5
~ shunt status — 127.0.0.1:8082 ● live
/ faq

Honest answers.

Is this against Anthropic's terms?

No. You're using your own accounts, with your own credentials, from your own machine. shunt doesn't share, resell, or pool credentials with anyone else — it's a local proxy that picks which of your accounts to call. Read the Anthropic Acceptable Use Policy yourself; the operative phrases are "personal account" and "individual user." If you're using shunt to circumvent a per-seat license, that's on you.

Do I need to share my password or API key?

No. shunt reads the OAuth refresh token Claude Code already wrote to disk. For additional accounts, it opens a normal OAuth browser flow — the same one Claude Code uses. Your password never touches shunt. There are no API keys involved.

What if all my accounts hit their limit at the same time?

shunt holds the open connection and sleeps until the soonest reset, then retries. Your CLI sees a single slow response — never a hard 429. There's a 5-hour cap; if every account is > 5h from resetting, shunt returns a 503 and lets your CLI handle it.

Does this work with Cursor / Windsurf / my IDE plugin?

If your tool reads ANTHROPIC_BASE_URL, yes. Cursor and most Claude-based plugins do. If your tool hardcodes api.anthropic.com, you'll need to use a system-level proxy or a hosts entry — there's a guide in the docs.

Why Rust? Why not Python or Go?

Single-binary deploys, zero runtime, and the streaming-response path is sensitive enough that we wanted strict ownership of every byte. The whole binary is under 3MB.

What does it cost?

Nothing. shunt is MIT-licensed and free forever. There's no hosted version, no telemetry, no upgrade tier. You pay for the underlying Claude / ChatGPT accounts — shunt is just a router.

shunt it.

Stop hitting walls. Combine the rate limits you already pay for and keep your CLI moving.

$ curl -sSf https://raw.githubusercontent.com/ramc10/shunt/main/install.sh | sh
MIT licensed · macOS & Linux