LLM Quota

Local-first · MIT · Bun

Your AI subscriptions.
One horizon.

Every provider rate-limits you on its own clock, in its own console. LLM Quota reads the CLI logins and usage history already on your disk, then keeps every reset and your local token spend live without page reloads.

Reset horizon
    Sample data · hover or tab a marker
    Download the app Windows · macOS · Linux

    No Bun, no clone, no terminal: the server ships inside it. Or run it from source —

    git clone https://github.com/SandroHub013/llm-quota && cd llm-quota && bun install && bun start

    Needs Bun 1.0+ · then open localhost:4747

    Claude Code
    Codex
    Gemini
    Grok
    Kimi
    z.ai

    Percentages answer the wrong question

    Claude Code has a 5-hour window and a weekly cap. Codex has its own. Gemini counts per model. When you actually hit a limit, "62% used" tells you nothing you can plan around.

    When am I back?

    Reset horizon

    Every currently measurable provider reset on one axis, now to seven days. Hover a marker and its card lights up; hover a card and its marker does.

    Live without reloads

    Quotas refresh silently every minute, spend every five seconds, and countdowns keep moving locally. Unchanged data does not repaint the UI.

    Official-surface first

    Uses codex app-server and opt-in status-line bridges for Claude and Antigravity. Grok, Kimi and Z.ai read the local official-client session and call that client's own quota endpoint. Stores are never refreshed or rewritten.

    Local token ledger

    Real CLI history becomes model, effort, cache-reuse, daily token, and estimated API-equivalent spend detail — including a count-up total.

    Local-first

    No cloud, no database, no account. Keys and tokens never leave the machine, and there is no server to report to.

    Zero third-party requests

    Fonts and provider logos ship with the app. No CDN, no font host, no favicon service — enforced by a test, not a promise.

    Built for agents

    Sanitized JSON and meaningful exit codes, so an agent can check its own budget before starting a long job.

    Live desktop widget

    The always-on-top widget runs on Windows, macOS and Linux. It follows the dashboard's local server automatically and keeps provider cards, local spend, and available reset countdowns current.

    The whole thing, on one screen

    Quota cards plus local developer activity, one reset horizon, a live status, and a spend total that counts smoothly to every new value.

    Current interface rendered with synthetic sample data.

    The current LLM Quota dashboard with a seven-day reset horizon, official source status, local spend total, provider cards, and a local token-spend calendar.

    What it reads, and from where

    Nothing is uploaded. Official clients own their credentials; bridge caches contain only quota windows and reset times, never account identity, transcripts, or tokens.

    ProviderSupported sourceWhat you get
    Claude CodeOfficial status-line JSON (opt-in)5h + weekly quota %, reset time
    Codex (ChatGPT)Official codex app-serverActive plan + usage windows
    Gemini / AntigravityOfficial Antigravity status-line JSON (opt-in)Per-bucket quota and reset time
    Grok BuildGrok CLI session in ~/.grok/auth.jsonCredit windows and prepaid remainder
    Kimi CodeKimi Code CLI session or pasted key5h + weekly + monthly plan windows
    z.aiCoding Plan key, OpenCode/Pi store, or opt-in bridgeGLM 5h + weekly windows

    OpenCode remains a local token-ledger source. Its Zen gateway was dropped entirely: the public endpoint exposes a model catalog, not numeric usage, limits, or reset times.

    Your installation, your accounts

    • Provider quotas come from official local interfaces or documented APIs. Pasted Open Platform keys stay in ~/.llm-quota/config.json.
    • Token spend comes from the current user's local CLI histories. Screenshots use synthetic data, never maintainer history.
    • GitHub is optional and personal by design. The calendar uses the viewer authenticated by gh auth login; no username is built in.
    • Custom ports work end to end. Set PORT for the server; the dashboard passes its origin to the widget, while CLI and widget also accept LLM_QUOTA_URL.

    A CLI your agent can read

    The same data as the dashboard, as sanitized JSON with exit codes that mean something — safe to pipe into a prompt or a shell script.

    # compact text summary
    bun run cli status
    
    # sanitized JSON for prompts and agents
    bun run cli status --json
    
    # one provider only
    bun run cli provider codex
    • 0 — healthy, quota available
    • 1 — warning, at least one quota ≤ 20%
    • 2 — auth error or provider unreachable
    • 3 — server offline or bad arguments

    The privacy claim, stated precisely

    • No telemetry, analytics or crash reporting. There is no server to report to.
    • The frontend makes zero third-party requests. Fonts and provider logos are served from the app itself. A test fails the build if any external host creeps back in.
    • Logos are frozen in the repo deliberately. Loading them from the provider — or from a favicon service, as an earlier version did — would tell a third party which AI subscriptions you hold, on every page load.
    • Pasted keys stay in ~/.llm-quota/config.json. Local, and never committed.

    Stop checking multiple billing consoles

    A desktop app for Windows, macOS and Linux, a live dashboard, an agent-friendly CLI and a widget for all three. MIT licensed, one runtime dependency, no build step.