See how much of your Cursor plan you have left — in the sidebar and in the status bar, without leaving the editor.
Unofficial and community-maintained. Not affiliated with or endorsed by Cursor (Anysphere).
There are a handful of Cursor usage extensions, and they all do the same thing: one number in the status bar. Two problems with that.
First, one number is not enough any more. A Cursor account in 2026 is a dollar budget and a plan tier, a subscription state, a prepaid balance, a period reset date, and a split between Auto and named-model usage. The status bar shows the budget — $9.51/$70.00 — while the sidebar and hover carry the rest, including Cursor's own summary sentence so you can check our arithmetic against the vendor's.
Second, they keep dying. The most popular one was archived by its author with the note that Cursor's pricing policy changes too often to track. That is a real risk, and it is an architecture problem, not a motivation problem: those extensions parse the API response directly, so a schema change is a crash.
This extension answers both:
- A sidebar view that shows the breakdown, not just the total.
- A provider layer that classifies the response into a billing model first and only then renders. When Cursor changes something we don't recognize, you get the raw numbers and an honest "couldn't interpret this" — not a blank bar and not a wrong figure.
- Sidebar (Activity Bar) — per-pool usage, plan tier, subscription status, period reset, last refresh time.
- Status bar — your budget at a glance.
💳 $9.51/$70.00. When a plan runs more than one budget they all appear in the one entry, each with its own icon, and the entry takes the colour of whichever is in worse shape. Cursor's own summary sentence and its Auto / named-model percentages show on hover and in the sidebar. Five display templates (percent,amount,amountWithReset,amountWithPlan,hidden), left or right aligned, thresholds you set. - Threshold notifications — one notification per threshold crossing per period, not every poll.
- Four ways to sign in — the local Cursor session, the
cursor-agentCLI, a dashboard API key, or a pasted cookie.autopicks whichever works. - Zero configuration by default — the token is discovered locally after a one-time consent prompt.
- English and Korean UI.
Cursor's in-app extension library is served from the Open VSX Registry, so:
- In Cursor — open the Extensions view and search for Cursor Usage.
- In VS Code — install from the Visual Studio Marketplace, id
toragonite.cursor-cockpit. - Manually — download the
.vsixfrom Releases and runcode --install-extension cursor-cockpit-<version>.vsix(orcursor --install-extension …).
Nothing, in the normal case. On first activation the extension asks once for permission to read your local Cursor session, then starts polling.
If you'd rather it not read Cursor's storage — or if it can't — run Cursor Usage: Sign In… and pick another way. There are four, and auto (the default) just uses whichever works first:
| Method | What it does | Reads local files? |
|---|---|---|
| This computer's Cursor session | Uses the token Cursor already stored. Zero effort. | Yes, after consent |
| The Cursor CLI sign-in | Reads the token cursor-agent login saved. One browser sign-in, nothing to copy. |
Only the CLI's own auth file |
| A Cursor API key | Exchanges a dashboard API key for a session token. | No |
| A session cookie | You paste WorkosCursorSessionToken from DevTools. |
No |
A ticked entry in the picker can be used right now. See SECURITY.md for exactly what each one touches.
| Setting | Default | What it does |
|---|---|---|
cursorUsage.refreshIntervalSeconds |
300 |
Poll interval, 60–3600s. |
cursorUsage.statusBarTemplate |
amount |
percent · amount · amountWithReset · amountWithPlan · hidden. |
cursorUsage.statusBarAlignment |
right |
Which side of the status bar to sit on. |
cursorUsage.warnThresholdPercent |
75 |
Status bar turns to the warning colour at or above this. |
cursorUsage.criticalThresholdPercent |
90 |
Status bar turns to the error colour at or above this. |
cursorUsage.notifyOnThreshold |
true |
Notify once when a threshold is first crossed in a period. |
cursorUsage.tokenSource |
auto |
auto, or pin one of localDb · cli · apiKey · cookie. |
| Command | Description |
|---|---|
| Cursor Usage: Refresh | Force a poll now, ignoring the cache. |
| Cursor Usage: Sign In… | Choose a sign-in method (local session, CLI, API key, or cookie). |
| Cursor Usage: Clear Stored Token | Forget a stored cookie/API key and re-ask for consent. |
| Cursor Usage: Open Dashboard | Open Cursor's own usage dashboard in a browser. |
| Cursor Usage: Report Diagnostics | Produce a pre-redacted report to attach to a bug report. |
The short version, in full:
- The token is read locally and sent only to
cursor.comandapi2.cursor.sh— Cursor's own servers. There is no telemetry, no analytics, and no third-party host of any kind. - We never persist the session token. A cookie or API key you enter goes to VS Code
SecretStorage(your OS keychain); nothing goes tosettings.jsonor any plain file. - It is masked in the Output channel, in error messages, and in the diagnostics report.
- Cursor's
state.vscdbis read from a temporary copy and never written to.
Cursor's public Admin API is team-administrator-only and cannot report an individual's usage, so the undocumented dashboard endpoints are currently the only path. If Cursor ships a per-user API key, this extension will move to it and drop local credential access entirely.
The full policy, and how to report a problem privately, is in SECURITY.md.
It will. The extension classifies each response into one of three billing models before rendering anything:
| Model | Detected by | Shown as |
|---|---|---|
request_count |
legacy gpt-4.maxRequestUsage present |
120 / 500 requests |
usd_credit |
planUsage.limit present (in cents) |
$9.51 / $70.00 |
unknown |
neither | raw figures + "couldn't interpret this response" |
unknown is a first-class state, not an error path: the view stays up, the numbers we can read are still shown, and there's a one-click link to open an issue. If you hit it, please do open that issue — a redacted sample of the new response shape is the fastest way to get a fix out.
See CONTRIBUTING.md. Bug reports about API breakage are especially welcome.