This is a submission for Weekend Challenge: Passion Edition
What I Built
My friends and I split one Claude Max subscription. That's $100+/month saved each, and the limits are big enough to share. The catch: Anthropic only reports one account-wide number. When the 5-hour window dies at noon, nobody knows who burned it, and the group chat gets passive-aggressive.
ccpool fixes that. Anthropic tells you the account is at 60%. ccpool tells you who got it there.
Everyone in the group runs a small daemon that watches their own Claude Code activity and reports it to a shared ledger. Together that gives you the account's real usage bars (5-hour, weekly, and Opus limits, straight from Anthropic's own usage endpoint) broken down per person, with reset countdowns and who's coding right now. You get a live terminal dashboard, a one-shot ccpool status, and a Claude Code statusline.
It's strictly an observer. It never proxies requests or touches your login, it just reads the token Claude Code already saved and the transcripts on your disk. There are no quotas or budgets on purpose: it makes the sharing visible and leaves the arguing to the humans. Usage it can't tie to anyone (someone on claude.ai in the browser, say) shows up as unknown instead of being blamed on whoever spoke last.
Demo
npm install -g ccpool # or: npx ccpool@latest
ccpool
The first person to run it creates the group, everyone else joins with a shared password. The hosted server is the default so there's nothing to deploy, but you can self-host it too.
Site and docs: https://ccpool.hexxt.dev
Code
ccpool 👾
Anthropic tells you the account is at 60%. ccpool tells you who got it there.
When a group shares one Claude subscription (Pro or Max), everyone collides on the same limits: someone burns the 5-hour window by noon, someone quietly eats the weekly cap, and nobody finds out until it's gone. ccpool gives the group a live, shared view of the account's usage broken down by person, so fair use becomes something you can see and negotiate instead of guess at.
Available as a terminal dashboard (ccpool tui), a one-shot snapshot (ccpool status), and a Claude Code statusline (ccpool statusline).
What you get
- Live usage bars for all three limits (the 5-hour window, the weekly cap, and the weekly Opus cap) with a countdown to each reset. These are pulled from Anthropic's own usage endpoint, so they match what the account enforces.
- …
MIT. TypeScript monorepo: a runtime-agnostic core, a libSQL storage layer, the daemon, an Ink CLI, and a Hono server. Runs on Node and Bun, and CI runs the whole test suite on both.
How I Built It
The design falls out of two facts. Every machine shares one login, so every machine's poll returns the same account-wide percentage. But each machine can only see its own Claude Code activity. So each daemon reports what it sees, and summing everyone's reports over one shared database gives you the split.
The hard part was attribution. You can't just divide the current tank by token counts: right after a reset, a single message would get credited with 100% of the account. Instead ccpool correlates rises in the tank with whoever was active during that interval. A rise with no matching activity goes to unknown, so the columns always add up to the real number and browser usage never lands on the wrong person.
A few other things I'm happy with:
The TUI refreshes every 2 seconds but the ledger changes maybe once a minute, so the server hides the expensive view computation behind a change token. A steady-state poll is an HTTP 304 backed by a single-row SELECT.
Identity is a name plus a password, not a machine. The server stamps every row with the authenticated member, so your flatmate can't report their usage as yours, and handing a machine to someone else is one command.
Failure handling got most of the weekend, honestly. Expired token? Skip the poll, Claude Code will refresh it. Failed upload? Keep the batch and merge it into the next tick, idempotent by uuid. Machine signed into the wrong Claude account? The server rejects the write and the daemon halts instead of polluting the ledger. There's a table of ~30 edge cases in the docs if you enjoy that sort of thing.

Top comments (0)