AI Unified Usage Meter — every AI meter, one honest board
Self-hosted · Open source · Key-free UI

Every AI meter. One honest board.

A self-hosted dashboard that unifies spend and usage limits across every AI provider you use. Your keys never leave your machine.

View on GitHub Read the write-up
TypeScript / Hono · runs on your Mac · no accounts, no telemetry
SNAPSHOT — ALL PROVIDERS updated 12s ago
CLAUDE CODE · SESSION (5H) unofficial LIVE
{{pctText}} % NEAR CAP
of 5-hour session windowresets 14:00
OPENROUTER · COST (30D) official
$127.40 of $150.00
avg $4.25 / day
CODEX · WEEKLY unofficial
34 % HISTORICAL
source: local reader
rendered from GET /api/snapshot — no keys in the browser
01 THE PROBLEM

You find the limit by hitting it.

Claude Code here, Codex there, an OpenRouter tab, two org billing pages. Every provider meters something different — sessions, tokens, credits, invoices — and none of them can see the others. The first unified signal you get is the limit itself.

console.anthropic.com · platform.openai.com/usage · openrouter.ai/activity · x.ai/console · ~/.claude · ~/.codex · HTTP 429: rate_limit_exceeded
02 HOW IT WORKS

Two halves. Keys in only one of them.

The collector — TypeScript / Hono, running on a machine you control — is the only component that holds a credential or talks to a provider. The web UI is a dumb display of GET /api/snapshot. No provider key ever reaches the browser.

PROVIDERS
APIs & local CLI state
OpenAI · Anthropic · OpenRouter · ~/.claude · …
COLLECTOR HOLDS KEYS
On your machine
TypeScript / Hono · reads .env or age vault
SNAPSHOT KEY-FREE
GET /api/snapshot
numbers, labels, timestamps — no secrets
BROWSER
Dumb display
renders the board · nothing to leak
The UI can't leak what it never receives.
03 HONESTY MODEL

Every card says how much to trust it.

Aggregating ten meters only works if you know which numbers are solid. So every card carries a confidence chip and a freshness badge — no silent guesses.

official

A documented provider API. The number comes from the vendor's own usage or billing endpoint, requested with your key, on your machine.

unofficial

A best-effort local reader. It parses state a vendor's CLI already stores on your machine. It can break after a vendor update — and the board will say so rather than guess. Using it is your call under that vendor's terms.

LIVE
fetched from the source this refresh cycle
HISTORICAL
read from data recorded earlier — logs, stored sessions
STALE
couldn't refresh — still shown, clearly labeled
The failure mode is a labeled gap — never a silently wrong number.
04 SECURITY & SELF-HOST

Your keys stay home.

CREDENTIALS
Collector-only keys

Secrets live in a local .env or an age-encrypted vault, read by the collector. The snapshot the browser gets has no secrets in it.

ACCESS
Network as the gate

Run it on your Mac behind Tailscale, so the network itself is the auth. Add password auth if you expose it beyond the tailnet.

FOOTPRINT
No accounts, no service

Self-hosted and single-user. Nothing to sign up for, no hosted backend, nothing phones home.

LICENSE
Auditable by design

MIT-licensed TypeScript. Read the adapter before you trust the number it prints.

05 PROVIDERS

Ten meters, all optional.

Official adapters are opt-in — each registers only when its key is present. Unofficial readers self-discover the token the vendor's CLI already stored, and fail soft when it's absent. The board shows only what you use.

OpenRouterofficial
OpenAI (org)official
Anthropic (org)official
DeepSeekofficial
xAIofficial
BytePlus ModelArkofficial
Claude Codeunofficial
Codexunofficial
ccusageunofficial
Grokunofficial
Provider names identify what's supported — no endorsement implied. Unofficial readers may break after vendor updates; using them is your responsibility under each vendor's terms.
06 QUICK START

Running in three commands.

TERMINAL
$ git clone https://github.com/alexneri/ai-unified-usage-meter-dashboard && cd ai-unified-usage-meter-dashboard
$ npm install
$ AUTH_MODE=open npm start

Add the keys you have to .env — every provider is optional. Or hand DEPLOY_PROMPT.md to Cursor or Claude Code and let it drive.

Open source · MIT

One board. Your machine. Zero keys in the browser.

Built as a personal utility, shared because the ten-tab problem is universal. If it saves you one surprise 429, it earned the star.

Star it on GitHub Read the write-up