Track usage across all your LLMs. Real time. Desktop, mobile, and terminal.
Read your AI subscription quota locally. Give agents bounded budget state and advice. Open source, local first, cross platform.
Every plan on one screen
A card per provider: the meter, how fresh that reading is, and when the window resets. Every number is read from your own machine, and what you see in this capture is exactly what installs.


The packaged desktop application, captured on a real machine against the project's synthetic demo fixtures. No account, credential or real usage figure appears in it.
Demo dataWhen you step away from the desk, the numbers are still on your own disk.
Nothing had to be uploaded to make that true.
What it reads, where it lands
No testimonials, no avatar wall, no user count. Every card below either ships a connector in this release or says plainly that it does not have one yet, so the wall itself is a status report. Connecting a provider normally happens in the desktop application; the surfaces below are the developer paths, under Advanced, for anyone who wants them directly.
Claude
Parses the rate limit block Claude Code already hands to your statusline command. It asks nothing of Anthropic on its own.
OpenRouter
Parses the credits shape OpenRouter documents. The key belongs in your operating system credential store, never in a file.
Codex
Parses the usage shape the Codex tooling produces. The shape is internal, so it can change without notice, and it fails closed when it does.
Antigravity
Parses the quota shape the Antigravity tooling produces. Internal too, marked as such, and never repaired or rewritten.
OpenCode
Describes the usage view behind an existing session. It carries the highest automation risk of the nine and stops the moment that session expires.
Grok Build
Reads the billing windows exposed to the installed Grok session and fails closed when the shape changes.
Gemini CLI
Reads the quota response through the Gemini CLI session already on this device.
Kimi
Reads the usage windows exposed to the installed Kimi session and fails closed when the shape changes.
Claude Code statusline
One line beside your prompt: the worst meter per provider with a reason code in front. It falls back to the cache and never blocks the tool that called it.
Claude Code prompt hook
A bounded block on prompt submit, fenced in an explicit untrusted data boundary. When every provider is unknown it injects nothing at all.
Any shell
The whole snapshot as a table for you or as JSON for a script, read straight from the local cache with no daemon in the middle. Local mode has zero telemetry and no account; when a provider is connected through the desktop application, that connection talks only to the provider's own endpoint, never to OpenLimiter.
Any tool that can write a file
One generic command takes a payload for any connector, so a provider without an integration can still be fed from a script you control.
Continuous integration
Export the cache as JSON and assert on it in a pipeline. Every release is tested on Windows and Linux on every push.
Your own front end
The cache is a plain document on your disk with a versioned schema. Read it and build whatever view you want.
Works with your tools
One meter over every subscription you already hold. Connect a provider from the desktop application, or use manual entry or ingest under Advanced. Local mode has zero telemetry and no account. Pro sends only selected bounded quota snapshots to the hosted service after you sign in.
Ships today
Nine connectors ship in this release
What each one actually does
A parser is not a connection
- ClaudeLocal CLI
- Parser
- Ready
- Reader
- Ready
- Auth
- Not required
- Verification
- Unverified
Claude Code writes a rate limit block to its statusline command.
- OpenRouterConnected
- Parser
- Ready
- Reader
- Ready
- Auth
- Ready
- Verification
- Unverified
The credits endpoint is documented and its response parses.
- CodexConnected
- Parser
- Ready
- Reader
- Ready
- Auth
- Ready
- Verification
- Unverified
An internal payload shape, which can change without notice.
- AntigravityConnected
- Parser
- Ready
- Reader
- Ready
- Auth
- Ready
- Verification
- Unverified
An internal payload shape, which can change without notice.
- OpenCodeConnected
- Parser
- Ready
- Reader
- Ready
- Auth
- Ready
- Verification
- Unverified
A usage view behind a session you already hold.
- Gemini CLIConnected
- Parser
- Ready
- Reader
- Ready
- Auth
- Ready
- Verification
- Unverified
Model quota returned through the installed Gemini CLI session.
- Grok BuildConnected
- Parser
- Ready
- Reader
- Ready
- Auth
- Ready
- Verification
- Unverified
Subscription windows returned through the installed Grok session.
- KimiConnected
- Parser
- Ready
- Reader
- Ready
- Auth
- Ready
- Verification
- Unverified
Subscription windows returned through the installed Kimi session.
| Provider | State | Parser | Reader | Auth | Verification |
|---|---|---|---|---|---|
| ClaudeClaude Code writes a rate limit block to its statusline command. OpenLimiter reads this one itself. | Local CLI | Ready | Ready | Not required | Unverified |
| OpenRouterThe credits endpoint is documented and its response parses. OpenLimiter reads this one itself. | Connected | Ready | Ready | Ready | Unverified |
| CodexAn internal payload shape, which can change without notice. OpenLimiter reads this one itself. | Connected | Ready | Ready | Ready | Unverified |
| AntigravityAn internal payload shape, which can change without notice. OpenLimiter reads this one itself. | Connected | Ready | Ready | Ready | Unverified |
| OpenCodeA usage view behind a session you already hold. OpenLimiter reads this one itself. | Connected | Ready | Ready | Ready | Unverified |
| Gemini CLIModel quota returned through the installed Gemini CLI session. OpenLimiter reads this one itself. | Connected | Ready | Ready | Ready | Unverified |
| Grok BuildSubscription windows returned through the installed Grok session. OpenLimiter reads this one itself. | Connected | Ready | Ready | Ready | Unverified |
| KimiSubscription windows returned through the installed Kimi session. OpenLimiter reads this one itself. | Connected | Ready | Ready | Ready | Unverified |
Reader means something in OpenLimiter goes and fetches the number. Auth means a credential is held and used. Every cell above is read at build time from the reviewed provider registry rather than written into this page, so a stage cannot be claimed here without a human changing a spec first. The registry describes 12 further products with no connector at all, which is why they are not rows here. A row on this page is only ever called Connected once a live reader for it is confirmed, never on the strength of a parser alone.
Every connector ships marked UNVERIFIED, the honest default: no verifier has confirmed a shape against a live account yet. Three read interfaces internal to somebody else's tooling, and when one changes, that provider fails closed to unknown rather than guessing. Every connector and its real state.
Product names, logos, brands, and other trademarks featured or referred to within OpenLimiter are the property of their respective trademark holders. These trademark holders are not affiliated with OpenLimiter, our products, or our website. They do not sponsor or endorse OpenLimiter. Use of them does not imply any affiliation with or endorsement by them.
Runs where you work
Windows, macOS and Linux, from a terminal, a statusline, a prompt hook or a script, and in any browser through the web app. One local cache, read by whatever you point at it.


Screenshots of the web app at phone size, against the project's synthetic fixtures, declared here in words rather than stamped over the pictures. The same reading opens in the web app and installs to a home screen. Native mobile applications are planned and not built.
Web app
liveA browser is the one surface every device already has. This one runs the same engine as the command line tool, parsed entirely in the tab, with nothing to install before it works. Sign in and it shows the percentages your own devices synced; a phone paired by QR reads the same rows.
The same engine, in the tab
Not a second implementation. The core, the connectors and the adapter are mirrored from the command line tool into the browser bundle, so a reading here and a reading in a terminal cannot disagree.
Sign in, or hand it a document
Signed in, it shows the bounded percentages your own devices synced. You can also paste or drop what openlimiter export prints, and that parsing happens in the tab: a document you hand it is never uploaded.
Installs, and works offline
Add it to a phone or desktop home screen and it opens like an application. A service worker keeps it working with no network at all, because it never needed one.
Both of those are written up in full: what an agent is told and every command it ships with.
FAQ
What actually leaves my machine?
Is it safe to point at my tools?
Can the prompt hook break my session?
Which providers work today?
Do I need an API key?
Does it route my requests for me?
What happens when a connector breaks?
Is there a desktop or phone app?
Is it free?
What is OpenLimiter Pro?
Do I get alerts when a window fills up?
Can I see my quota on my phone?
How much API spend does the free plan track?
Pricing
Everything you can see is free. Alerts, history, phone access, extra accounts and spend tracking above $100 are Pro.
OpenLimiter
availableFreeforever, and in the licence
The local product and the account are free. Sync is on from the moment you sign in, because moving your own percentages between your own devices is what signing in is for.
- Every supported provider
- Sync across your own devices, on from your first sign in
- One active account per provider, and Pro raises that
- No usage limit and no charge for the account. Everything you can see is free
OpenLimiter Pro
available$5a month
or $50 a year
Five Pro features. Three are hosted services and two are switches in the local application.
- Every alert: a desktop toast, an email and a phone push at 60, 80 and 90 percent of a window, and when it resets
- One Pro accent or density preset, applied in the local application
- More than one account per provider, unlocked in the local application
- API spend meters, in beta. Free tracks up to $100 a calendar month for each source and Pro goes above it
- Ninety days of hosted history, with a forecast to the day a window runs out
Spend meters need an organisation admin key. Full refund within 14 days, cancel any time in the Stripe portal. Sold by Lucas Costa, payments by Stripe. Full conditions
Everything you can see is free. Alerts, history, phone access, extra accounts and spend tracking above $100 are Pro.
OpenLimiter is an independent open source project for people who hold several AI coding subscriptions at once and would rather know which one still has room than find out the hard way, mid task.
It is built around three commitments that are easy to state and awkward to keep. If it saves you an afternoon, sponsorship is the best way to keep the connectors working as the shapes underneath them shift. Reporting a connector that broke is worth just as much.
It runs on your machine
Local mode has zero telemetry. The account is free. Provider connections talk only to that provider through a fixed allowlist, with credentials held by the operating system. Only usage percentages sync, and sync can be turned off.
It reports to nobody
The app reports to nobody. It sends no telemetry in any mode. This website counts page views without cookies, which is a count of pages rather than a profile of you. Pro is optional and receives selected bounded quota snapshots only after sign in, never provider credentials.
Unknown stays unknown
A missing number never becomes a confident one. When a shape changes underneath a connector, that provider fails closed.
Lucas Costa
Author and maintainer. lucas@lucaswebsystems.com



