VS Code extension · v0.3.0 · MIT

Know your burn,not just your fill.

The Claude Usage HUD keeps your Claude Code usage windows and active model in view, at a glance, without waiting for Anthropic's "you have used X% of your weekly limit" banner. It answers three questions instantly: which model is this window using, how full is each window, and am I spending too fast to make it to the reset.

Uses your own Claude Code login · nothing sent to third parties

A glass instrument panel with three usage meters in green, gold and orange, gauges and a starburst emblem, over a visible code editor
The problem

Usage limits arrive as a surprise.

You are deep in a session and the banner lands: you have burned through your window. Claude Code tells you the number only once you are near the edge, and it says nothing about pace. Two people can both be at 60% and be in completely different trouble: one has all day, the other will hit the wall in twenty minutes.

The Usage HUD puts that reading where you already look, the VS Code status bar, and adds the one signal the banner never gives you: whether your rate of spend will actually reach the reset, or run out well before it.

The active window's model

Which Claude model this window is talking to, resolved per window and tracked through mid-session switches in about 150 milliseconds. No global default is ever shown.

Every usage window

The 5-hour, 7-day, and scoped model windows, each colored green to red against clear thresholds, from plenty of room to right at the limit.

Burn rate, not just level

A second signal on the reset countdown: are you on track to land right at the limit when the window resets, or heading there far too early?

Private by design

It uses your own Claude Code login to read your usage, and caches it so calls stay rare. Nothing goes to any third party, and your token is never stored by the extension.

Where it lives

Four surfaces, one reading.

The same numbers, rendered for four different moments: a glance, a hover, a pinned widget, and a full breakdown.

SurfaceWhat it isHow to reach itAlways visible
Status bar (C1)A composite of adjacent items parked toward the center of the status barBottom bar, out of the boxYes
Hover tooltip (C1b)A markdown card with emoji meters, burn bullets, and live sessionsHover the status barOn hover
Floating HUD (C2)A compact always-on-top widget with smooth colored metersCommand: Pop Out Floating HUDYes, floats on top
Panel dashboard (C3)The full two-column breakdown with every live sessionThe Usage tab in the panelWhen its tab is open

Self-contained. The only requirement is Claude Code, installed and logged in. The Usage HUD reads your existing Claude Code login token from your machine's credential store and calls the same usage endpoint the built-in /usage panel uses. Nothing is sent to any third party, and your token is never stored by the extension. On macOS, the first run may show a one-time keychain permission prompt.

Learn these first

Every number carries two signals.

Understanding them makes the whole HUD legible. One signal is how full a window is. The other is whether you are going to make it to the reset. They live in different places and, on purpose, they can disagree.

Signal A · usage level

How full the window is. Colors the bar fill and the percentage text. One ladder, the same for every window.
saferoom to work< 70%
warnkeep an eye on it70%
actwind things down80%
limitat the wall90%

Signal B · burn rate

Usage% divided by how far through the window you are. Colors the reset countdown.
underroom to spare, go fasterr < 0.75
on trackwill land right at reset0.75 to 1.15
ease offa bit ahead of the clock1.15 to 1.6
slow downwill run out earlyr > 1.6

Why they can disagree, and why that is the point. Every screenshot on this page shows all three windows disagreeing at once, because that is the ordinary case rather than an edge case. The Fable window is at 91%: the bar is red, almost full, yet its countdown is only yellow, because with most of the week still to run that fill is merely a little ahead of pace, not a crisis. Meanwhile the 7-day window is at 73%, a yellow bar, with a green countdown: fuller than Fable in mood, but spending at exactly the rate that lands on the reset. Level tells you where you are. Pace tells you where you are going, and reading only one of them is how a limit arrives as a surprise. A short early-window guard holds pace at "on track" right after a reset, before enough time has elapsed to judge a rate at all.

Surface 1 · the status bar

The glance.

A group of adjacent items sits toward the center of the status bar, past the git items. Up to five segments: the model, then 5h, 7d, and up to two scoped models. Here is a real editor with the HUD running, showing the status bar along the bottom edge, the Usage panel docked at the lower left, and the floating HUD over the editor, all reading the same numbers at the same instant.

A VS Code window with the Usage panel docked at the bottom left, the floating HUD hovering over the editor, and the HUD group in the status bar along the bottom edge. All three show 5h at 44 percent, 7d at 73 percent and Fable at 91 percent.
One editor, three surfaces, one reading. The status bar group parks toward the center, away from the git cluster.

Read it left to right

The status bar group: a gold model label reading Opus 5, then a blue dot with 44 percent in green, a green dot with 73 percent in yellow, and a yellow dot with 91 percent in red. 1 2 3 4
1

✦ Opus 5 , the model this window is using right now. Gold, and shown only when a live session actually resolves. If none does, the segment disappears rather than falling back to a guess.

2

The dot is Signal B, the pace. Blue on the 5-hour window means "under": barely a third of the way through the window and only 44% spent, so there is room to go faster.

3

44% , the number's color is Signal A, the level. Green, because it is under the 70% mark. The dot beside it and the number it precedes are answering two different questions.

4

91% on the Fable window, red because it is past 90%, but its dot is only yellow. Nearly full, yet not spending fast enough to be in trouble before the week turns over. This pairing is the whole reason there are two signals.

This is the micro density, where the dot carries the pace and the number's color carries the level. The four densities below trade that compactness for detail.

Choose your verbosity

Four densities.

The same reading, from a bare pulse to the full countdown. Switchable live from the status bar click, or the density setting.

micro ✦ Opus 5  🔵 44%  🟢 73%  🟡 91% default
minimal ✦ Opus 5  5h 44%  7d 73%  Fable 91%
bars ✦ Opus 5  5h ▓▓░░░ 44%  7d ▓▓▓▓░ 73%
verbose ✦ Opus 5  5h 44% 1h36m  7d 73% 1d18h

The same instant in all four, matching the screenshots above and below. micro is what ships, because a status bar is shared with source control, problems and the language mode, and it carries both signals anyway: the dot is the pace, the number's colour is the level. verbose trades width for the reset countdowns. Switching is one click on the status bar item.

Surface 2 and 3 · hover and pin

The card and the widget.

Hover the status bar for a markdown card that carries color through emoji, the one medium that cannot do CSS. Pop out the floating HUD to keep a smooth, always-on-top widget over everything you do.

The hover card: a table of windows with emoji bars, percentages, reset countdowns and a coloured pace dot, above a list of live sessions with their models and ages, and an actions row.
The hover card. Every colour here is an emoji, because a VS Code hover strips CSS. That constraint is why the bars are squares.
The floating HUD window: three usage windows with coloured bars, percentages and reset countdowns, above a list of four live Claude sessions with the model each is running.
The floating HUD, always on top. The Usage panel tab, docked beside Terminal and Problems, renders identically.
Built in

The legend travels with the tool.

Nothing on this page is knowledge you have to keep. The legend button opens the same two tables inside the extension: the usage ladder for the bars, and the four pace colours for the countdown. If this page and the extension ever disagree, the extension is right.

The panel with its legend open: a usage-bar threshold table reading safe under 70, warn 70, act 80, limit 90 for all three windows, and a reset-pace key giving under, on track, ease off and slow down with their colours.
The legend, open in the panel. The thresholds are one ladder now, identical for every window.
Behind the glass

Everything local, everything cheap.

No accounts, no setup, no third parties, and no runtime dependencies. It uses your own Claude Code login and your local session files, with its own private cache. Here is the loop.

1

Read the usage cache

Every poll (default 60 seconds, floor 15) it checks its own cache first; when that is stale it reads your usage from the same endpoint Claude Code's /usage panel uses, authorized with your own login token, then caches the result. That cache is shared across every open window, so the endpoint is hit at most about once a minute no matter how many windows you have open. A failed read falls back to the last cached value, labeled as cache, rather than erroring.

2

Classify into bands

One built-in ladder, 70 / 80 / 90, turns a raw percentage into a safe / warn / act / limit band and a color, so a glance tells you which zone each window is in: well clear, getting full, time to ease off, or at the wall. The same ladder applies to every window, so a colour means the same thing wherever you see it.

3

Resolve the active model, fast

The Claude extension exposes no API. The trick: it touches a session's transcript file the instant you open that session in the panel. So the HUD resolves the model from the newest-modified transcript in this repo's project folder, watched with a file watcher, and tracks a switch in about 150 milliseconds. VS Code's own record of the active session is flushed to disk minutes late, so it is only a fallback.

4

Scan for live sessions

Every 20 seconds it scans all project folders directly, one newest session per repo, filtered to activity in the last 90 minutes, reading the model and repo name from each transcript tail. Fast file stats, complete across every repo.

5

Emit one snapshot, paint everywhere

A single hub owns usage, model, and sessions. Any change fires one snapshot with all colors and formatting pre-computed. The status bar and both webviews subscribe and simply paint it. The webviews are dumb renderers, which is why all four surfaces always show exactly the same reading.

Sources and cadence

What refreshes, and when.

WhatSourceCadence
Usage windowsyour local Claude Code usageevery pollSeconds (60, floor 15), plus on change
Thresholdsbuilt-in bandsapplied to each reading
Active modelnewest transcript in the project diron change (~150ms) plus a 1.5s safety poll
Live sessionsscan of all project dirsevery 20s

Settings

densitymicro / minimal / bars / verbose
barStyleblock / shade / dot / notch / text
statusBarBarsglyph bars in the bar itself
alignmentleft or right cluster
pollSecondsrefresh interval, min 15
floatModewindow (always-on-top) or beside

Commands

Pop Out Floating HUDopens the widget
Open Detail / Actionsthe click quick pick
Copy Usage Reportplain text to clipboard
Choose Bar Stylepick a glyph
Choose Status Bar Densitypick a density
Refresh Nowforce a refresh

Built lean. TypeScript, with an empty dependencies list: no runtime npm packages at all, so what you install is this project's own code and nothing else. Everything it reads on disk, it reads read-only.