Claude Code Tray logo
Unofficial · Open source · Windows 10 / 11

Your Claude Code usage,
always in the tray.

A native Windows tray monitor that shows your rate-limit usage as a crisp, DPI-aware icon — with burn-rate projection and a privacy-first 24h usage breakdown. Zero config: it reuses Claude Code's own login.

📦 winget install alegauss.ClaudeCodeTray 🔒 No API key, no setup 🔄 Auto-updates
.NET 10 · WinForms + GDI+ Vector icon · PerMonitorV2 DPI Inno Setup installer Apache 2.0
Why you'll love it

Everything you need, nothing you don't

Built for clarity on real displays — it lives entirely in the tray and tells you exactly where you stand.

🎯

Crisp at any DPI

The percentage is drawn as a vector at the exact size the tray requests — no downscaled bitmaps. Stays razor-sharp on 125–200% displays. Its colour says what the number is about: white for the 5h session, yellow for the 7d week, and orange whenever extra usage is paying — which is the one thing on the tile that still says so when 0 left leaves no fill bar to.

📊

Task-Manager-style fill

A vertical bar rises from the bottom proportional to your usage, with a 3D bevel for relief. Blue when you're on track, red when you're not.

📈

Smart projection

Projects when you'd hit 100% — warning you before the window resets, not after. A proportional pace line for the 7-day week, burn-rate regression for the 5h session.

🔍

24h usage insights

A local, cost-weighted breakdown of your last 24h — by model, subagents, and large-context requests. Computed offline from your transcripts.

Zero configuration

No API key to paste, no env var to set. It reuses the OAuth token Claude Code already stores when you log in.

🔄

Self-updating

Checks GitHub Releases and offers an in-app one-click update. Per-user install, no admin rights needed.

At a glance

One hover tells the whole story

The tooltip packs everything into a single read — no dashboards, no browser tabs.

  • 5h session & 7d week usage side by side
  • Extra usage and a live countdown to the next reset — plus how long you have been paying, measured from the first reading past your included quota
  • The projected time to 100% at your current pace, labelled with the active window (e.g. Week 7d projection)
  • What the rate limit itself says about that same window — its own status, named so the word is never about a window you are not watching
  • Connection status — a clear not authenticated prompt on token expiry (with one-click re-auth), logo while connecting
The tray tooltip: session and week usage, the projection, and what the rate limit says
Observability

It doesn't just show a number — it predicts

The icon's color tells you what's coming. The 7-day week uses a proportional pace line — your usage against the share an even burn would have spent by now — accurate from the very first reading. The 5h session uses least-squares regression on a short rolling history of your utilization.

On track

At your current pace, usage stays under 100% until the window resets. The fill bar stays its normal blue — no action needed.

Danger

At your current pace, usage will hit 100% before the reset. The fill bar turns vivid red so you can ease off in time.

Extra usage is paying

You're past the quota included in your plan and still working, because extra usage is enabled. The fill bar turns clay rather than red — red means stopped, clay means this is costing money. The tooltip says which — and since when, because "you are paying" invites "how long", and the answer is what makes the next hour of work a choice rather than something you find at the end of the month. System information tells you whether the allowance is merely enabled or actually in use. In Statistics each pane's verdict chip goes clay and reads Extra usage instead of the red At limit, which on a quota surface means stopped. What it shows you is how much of your extra-usage allowance has gone — its own window, with its own limit and its own reset — never mixed into the 0–100% of the quota included in your plan. And the number stops following your Show on icon pick for as long as it lasts: a 5-hour session with room left cannot report quota the account no longer has, so the icon reports the window that actually crossed — 0% left, or 100% used. Your pick comes back at the reset.

Blocked

A window is spent and nothing is paying past it, so the account is blocked — and it stays blocked on the window that still has room. A week at 47% behind a spent session now wears the red Blocked chip in Statistics and says so in words, where it used to read On track over work that would not run. The tooltip does the same and deliberately says less: with the icon on the window that still has room, it gives no percentage and no window name — only that you are blocked until your quota resets, because naming Week 7d there would caption the wrong number.

Consumption pace

See your burn, not just a number

The Statistics window draws each rate-limit window as a burn-up chart: your real utilization against the even-pace line, with a dashed projection of where your current pace lands. Two tabs — the 5-hour session and the 7-day week — each with its own verdict, plus Throughput for what is running right now and Sessions for where it all went.

Statistics — 5-hour session burn-up chart, pacing ahead of the even-pace line (Too fast)
5-hour session — burning ahead of pace, projected to hit 100% before the reset.
Statistics — 7-day week burn-up chart with the projection stepping around the hours you usually work, flat through the shaded overnight stretches
Week (7 days) — the projection steps around your usual hours: flat overnight, running out mid-afternoon.
Statistics — the weekly chart past the included quota: the clay extra-usage line drawn on its own right-hand scale, with the projection sentence naming the extra-usage allowance
Past the included quota — the clay line is your extra-usage allowance on a right-hand scale of its own, never mixed into the 0–100%. When the API says you are over but never says by how much, the chart shades the stretch instead and names no figure. Being over is a fact about the account, not about one window, so both tabs draw it — and the legend entry's swatch and hover describe only the marks that chart actually drew, never a shape you would go looking for and not find.
Statistics — the Throughput tab: two three-minute line charts of the rolling rate, one line per project above and one per token type below, each ceiling labelled in tokens per second, with a hover readout naming one second, each series' rate through it and the tokens that landed in it, and both window averages beneath them
Throughput — the last three minutes of the rolling rate: one line per repo, one per token type, each ceiling labelled in tok/s. Point at a second to read what landed in it, and see what the cache re-read costs per turn.
Statistics — the Sessions tab: one row per conversation, newest first, with the project, the clock of its last turn, how long it ran, how many turns, how many tokens and what those tokens come to at API list prices, a range picker set to the last 7 days, an information button explaining how that figure is worked out, and sortable clock and token headers
Sessions — where it went, one row per conversation instead of a total, named by the title Claude Code gave it under the project it ran in. A workflow's agents fold into the session that spawned them, so a fan-out is one row and not twelve. Open a row and it unfolds into the tasks that produced it, each with the workflows and agents it fanned out to and its own cost beside its subtree's — which is how you tell a coordinator that was cheap from a fleet that was not. Above the list, the heaviest five hours in the range on screen: when that stretch started, what went through it, and the median active day's own busiest five hours beside it for scale — a window that has already closed, which is the question the live 5-hour tab cannot answer. A measurement, never a recommendation. Click a spike on the Throughput strip and the Sessions tab opens on the conversation running right now — the join runs that way because the strip keeps five minutes and the list opens on seven days, so a spike always has a conversation while a conversation rarely has a spike. Below them, which kind of work ate the range — one row per task kind and one per named slash command, with tasks, median, total and share — because the expensive command and the cheap prompt land in the same repo, so a per-project breakdown cannot separate them. Each row also names the effort its calls ran at, as the mix rather than a winner where a conversation ran at more than one: effort buys more calls rather than longer answers, so it is the biggest thing that makes two conversations of the same length cost differently. It reports what ran and never suggests running cheaper. The last column reads ≈ $ at list prices: what those tokens come to at Anthropic's published API rate card, priced per model and summed, so a $2 conversation and a $40 one stop looking alike — tokens rank the list and this explains it, because the same token count is a different amount of work on a dearer model. It is not a bill: a subscription exposes no dollar balance and the tray knows nothing about your plan, your seat or your invoice, and the ⓘ beside the range picker says exactly that, along with the date the rates were read.
🕘

Paced to your hours

The weekly projection follows the hours you actually work — flat through nights and weekends (shaded usually idle), climbing while you're at the keyboard. So “you run out here” lands mid-afternoon, not at 4 a.m. Needs a few weeks of history; until then it's the plain average-pace line.

💡

And what to do about it

“Stop now, pick it back up around Thursday 13:00, and you'd close the week at about 97%.” The earliest hour you normally work that would still save the week — and if there isn't one, no advice rather than invented advice.

👻

Last week, right behind it

Last week's burn-up is a faint line on the same axes. “Worse than last week?” becomes a glance instead of a memory test — no second chart, no extra number. If that week ran past the quota included in your plan, the stretch it was over is marked in clay at the 100% line, where that claim actually lives — and a week too old to have recorded it says nothing rather than pretending it stayed inside. That mark and this week's shaded stretch share one legend entry, past your plan's quota: one fact about two weeks, with the hover saying which is which.

⏱️

Two numbers, two clocks

Window average — what the window has cost so far. Now ≈ 870 tok/s — what's running this minute. Both are token throughput, not quota.

📉

Live 3-minute charts

The rolling rate sampled once a second, with the ceiling ruled and labelled in tok/s. A line slides down through a pause because the work really is ageing out of the 60-second window, and climbs when new work lands — its right-hand end is the number printed above it. It scrolls because the axis is time — the motion is the data, not a spinner. Idle goes flat, and it only repaints while the window is on screen.

🗂️

Across several repos

The upper chart is one line per repo — the heaviest four, direct-labelled with their own rates, the rest as one grey “others”. Each keeps its colour while it is on screen, so nothing changes hands mid-read; the lower chart splits the same rate by token type. Because the useful question becomes where, not how fast.

All of it comes from your real logged utilization and your local transcripts as they're written — no extra API calls. Nothing leaves your machine.

Reset alerts

When your quota comes back, you'll know — by color

Every reset gets a celebratory, on-brand toast: a confetti burst and the quota bar visibly refilling. Each kind has its own color and headline, so you can tell what happened the instant it appears — without reading a word.

Surprise! toast — weekly limit reset early (rose)
Surprise! · weekly reset early

Your weekly limit reset ahead of its scheduled deadline — a known Claude Code quirk worth catching.

Bonus! toast — weekly usage credited back (violet)
Bonus! · usage credited back

A partial mid-window credit dropped your weekly usage (e.g. 91% → 50%). Found money.

New week! toast — routine weekly reset (teal)
New week! · weekly reset

The calm, routine weekly reset — fresh quota for the week ahead.

Fresh session! toast — 5h session reset (blue)
Fresh session! · 5h reset

The 5-hour session window rolled over — fresh for the next 5 hours.

All four are on by default — toggle each one independently in Settings.

And three that aren't celebrations

The same card, without the confetti

Not every thing worth knowing is good news. These three use the same toast and say so plainly — one about what every session costs you before you type, one about the moment your quota stops being included, and one confirming a change you cannot otherwise see.

Heavy startup context — a project loading a lot before the first prompt (ochre)
Heavy startup context

A project's instruction files, memory and skills have grown enough that every session pays for them before you type a word — with what it costs to load on a cold cache. At most once per project per week, and off by default: nobody asked to be told their own files are growing.

Extra usage has started — past the quota included in your plan (clay)
Extra usage has started

It exists because the four above do: the app interrupted you to say quota came back and said nothing when you started paying. Fires once when a check first finds you past your included quota — not on a timer, not again while the same spell lasts. A receipt, not a prompt: it names no account and suggests nothing.

Profile set for Windows — the machine-wide profile switch landed (slate)
Profile set for Windows

Writing the machine-wide profile is the least visible thing this app does — nothing on screen changes, and you cannot see the effect until you start another program. So it confirms itself: only when you switch by hand, once per switch, and only after the variable is read back to check the write took. No quota bar — a bar animating one account's remaining quota into another's would suggest switching accounts because one ran out, and this app does not say that.

Usage insights submenu
Local · Private

Know where your tokens actually go

The Usage insights (24h) menu is computed entirely on your machine from Claude Code's session transcripts — weighted by per-model price so the numbers reflect real cost, not request count.

  • Last 24h — request and session counts
  • From subagents — share of usage from sidechain requests
  • >150k context — share from large-context prompts
  • By model — top models (Opus / Sonnet / Haiku / Fable) by share
Local · Private

What every session costs before you type

Claude Code loads your instruction files, your memory index and every skill's description before your first prompt — a toll paid on every request of the session, and normally invisible.

The Context Load window: session-zero gauge, per-source breakdown and findings
All projects: total footprint, heaviest loads, duplicated memory directories

Then tells you what to do about it

Every finding comes with one plain sentence and the concrete fix — and the only action is Copy cleanup prompt, which hands paths and numbers to Claude Code. This app measures your files; it never edits them.

  • Eager vs lazy — a 300 KB memory directory can cost less than one bloated AGENTS.md
  • Was it ever used? — skills annotated 45× or never, mined from your own transcripts
  • What-if — tick rows and watch the gauge and the cost drop, before changing anything
  • Grade & drift — A–F per project, and “+2.4 KB in the last 7 days”
  • Between projects — duplicated memory directories and dead project dirs, invisible from inside either
System information

Which plan am I actually on?

Settings has a page that answers it without you opening a single JSON file — and it is read-only, like everything else here.

Settings, System information: the profile picker, the plan with its raw tier and seat, which credentials the profile uses, and a masked account holder
As it opens — the profile being read, the plan, the credentials actually in use, and a holder you have to ask for.
The Claude account card with the holder revealed: plan and seat, credentials in use, name and email, organization and role, extra usage
After Show — name, email, organization and role. A sample account: an organization and its mail domain can't be masked, so the app builds a fictional one for a screenshot.
🎟️

Your plan, by name

The rate-limit tier the API reports for your login, read as you'd say it — Claude Max 5x — with the raw tier, seat and billing type underneath. Plus whether extra usage is enabled — and, when the API is refusing it, why — and how long your stored sign-in is valid.

🪪

Work and personal, one click apart

Claude Code keeps one account per configuration folder. Register them once and Open Claude Code becomes a submenu — each profile launches with its own folder, its own login and its own working directory, so the work account can't open in a personal repo. The tray never writes to a config folder and never moves credentials: it passes CLAUDE_CONFIG_DIR and lets Claude Code do the rest. With more than one registered, the icon wears a thin per-profile colour band along its top edge, so a glance says whose percentage you are looking at — in hues the icon never uses for anything else, so it can't be read as a warning.

🖥️

… or the whole machine follows

Turn on Use the chosen profile everywhere in Windows — the switch sits in the Profile submenu, where the picking happens — and picking a profile writes CLAUDE_CONFIG_DIR into your user environment — so a terminal you open yourself and an editor started from the Start menu use it too, not only what the tray launches. It follows the profile you choose, never the one auto-follow drifts to. Open Claude Code becomes a single command again while it is on — the profile is already picked, so every entry would open the same one. Off by default, and reversible: switch it off and the variable, and the submenu, go back exactly as they were. And when CLAUDE_CONFIG_DIR names a profile other than the one on the icon, the submenu marks it · set in Windows — whose numbers you are looking at and which profile a new session starts in are two questions, and the tray only speaks up when they differ.

🧭

The icon keeps up on its own

Turn on Follow the active profile and the icon moves to whichever profile Claude Code last worked in — no click to switch. Read from transcript timestamps only, on the refresh you already pay for: nothing is opened, and nothing runs in between. Picking a profile by hand pins the icon there until you click Resume following. Off by default.

🫥

Masked by default

Account holder, email and absolute paths are hidden until you ask for them, because this is the page that ends up in a screenshot. Show reveals them, Hide puts them back.

📈

Statistics, per account

The Statistics window reports on one profile at a time and says which. Switch it at the top and the charts, the projection, the weekly shape and the live throughput are all recomputed from that account's own readings and its own transcripts.

🔑

Is it even your subscription?

A folder you've never signed into runs on whatever ANTHROPIC_API_KEY is in your environment — billed per use, and invisible to the 5-hour and weekly windows. The page says which credentials each profile really uses, and warns in plain words when the percentages (and the icon) aren't describing what Claude Code is spending.

📂

Your install, at a glance

Installed CLI version, install method, auto-update state, how many projects Claude Code tracks, and the configuration folder — with a button to open it. CLAUDE_CONFIG_DIR is honoured.

📋

Copy for a bug report

Windows build, .NET runtime, architecture and the tray's own version and data folder — the whole page as plain text in one click, exactly as shown, so a masked holder stays masked.

🔒

Privacy by design

Only token counts, model ids, and flags are read — never your message content, with one exception you can see: the Sessions list names each conversation, using the title Claude Code generated for it or the prompt that opened it, because a list you cannot name is a list you cannot search. Both are capped at 200 characters before they are stored, they appear on that one screen, and nothing further into a conversation is ever read. The insights scan is bounded to files touched in the last 24h and runs in the background. The rate-limit reading is a single 1-token API call every 5 minutes. Nothing leaves your machine beyond that, and there's nothing to log into. Usage history is stored locally on disk and never uploaded. The context scan reads only sizes, names, timestamps and frontmatter from ~/.claudenever the contents of your memories, instructions or skills — and it never edits them: the one action it offers is copying a cleanup prompt for Claude Code to act on.

Get started

Up and running in two minutes

Already using Claude Code? Then you're already set up.

1

Have Claude Code

Install it and run claude once so it stores your login token.

2

Install it

One command with winget, or grab ClaudeTray-Setup.exe from Releases. Per-user, no admin.

3

It just works

The icon appears in your tray and starts reporting. Right-click for options.

Install from the Windows Package Manager:

winget install alegauss.ClaudeCodeTray

Prefer a direct download? Grab the installer below.

⬇ Download the latest release
One window, right-click menu

Control, without leaving the tray

  • Click the icon — one window on the pacing report, with Statistics, Context and Settings as tabs along the top: everything is navigated to, nothing opens a second window
  • Show on icon — switch between Session 5h / Week 7d / Extra (remembered across restarts)
  • Used or remaining — flip the icon to count down your remaining quota instead of counting up usage
  • Profile — with more than one Claude Code profile: each one's usage, a check on the one the icon follows, click to switch
  • Refresh now — immediate API read
  • Open Claude Code — re-authenticate in one click if the token expires
  • Update to vX.Y.Z — appears only when a newer release exists
Right-click menu