Features
- Your usage at a glanceThe ring is your 5-hour session and the dot is your week. Green, yellow, orange and red tell you how close you are.
- Color or monochromeUse the colored gauge, or a monochrome one that matches a light or dark panel, picked automatically or by hand.
- Linux and macOSDeveloped on Linux and tested on GNOME and KDE Plasma, with a signed and notarized Mac app. Builds for Intel/AMD and ARM.
- Alerts before you hit a limitNotifications at 50, 75, 90, 99 and 100% for the session, the week and each model, plus one when your quota resets.
- Light and self-containedA download of about 2 MB that uses about 4 MB of memory on Linux, with nothing else to install.
- Never touches your loginIt reads what Claude Code already writes on your machine. No credentials, no cookies, no API calls of its own.
- Per-model limitsModels with their own weekly limit get their own row in the menu, with their own reset time.
- Every Claude Code profileRun Claude Code with more than one config folder? Each one gets its own section, and you pick which one the icon follows.
Small, standalone and safe
- Light to download and to run
- Downloads are 1.4 to 2.2 MB. Measured on the author's own machines, the running tray uses about 4 MB of memory on Linux and about 22 MB1 on macOS. CPU barely registers: 67 seconds of CPU time in almost three days on a Linux desktop, and 21 seconds in four and a half hours on an M4 Pro Mac. 1Why macOS uses more: a menu bar item has to go through AppKit, Apple's app framework, which sets aside memory in every app that uses it. On Linux the tray talks to your desktop's tray directly, with no framework at all. The macOS figure is the one Activity Monitor shows as Memory.
- Nothing else to install
- The Linux builds are single static binaries, and the macOS app carries everything it needs. No runtime, no browser extension, no background service. The only requirement is Claude Code itself, version 2.1.80 or newer.
- Safe for your account
- Some usage trackers pretend to be the Claude CLI and call Anthropic's API with your credentials, which Anthropic disallows and which can get an account banned. This one never reads your credentials and never calls Anthropic's API. It reads the numbers Claude Code already writes on your machine.
It never talks to Anthropic
The tray never reads your Claude credentials, never touches your OAuth tokens, and never contacts Anthropic or claude.ai. There is no account to create and nothing to log into.
Claude Code already works out your usage and hands it to your statusline. One command adds the tray to that handoff:
- Claude Codeworks out your usage while you use it
- Your statuslinekeeps printing what it always did
- A file on your machinewhere the hook copies the numbers
- The trayreads that file, and that's all
One setting involves Claude itself: Refresh usage via Claude CLI runs the official claude command, at most once an hour, so it fetches your latest numbers with your normal login. It's on by default, and turning it off leaves the tray fully passive. More in the questions below.
Other tools pretend to be the Claude CLI to fetch these numbers, which can get an account banned. This one only reads what Claude Code already wrote to your statusline.
Reading the icon
The outer arc is your 5-hour session, sweeping clockwise as you use it. The dot in the middle is your weekly usage. Both turn yellow at 50%, orange at 75% and red at 90%, the same points where the tray can notify you.
Prefer a quieter panel? Switch to monochrome, and the length of the arc carries the reading on its own.
Made on Linux first
claude-usage-tray is developed on Linux and tested on GNOME and KDE Plasma. The macOS menu bar version came later. The Linux builds are single static binaries with no dependencies, packaged for Debian, Fedora, Arch and Alpine.
- KDE Plasma
- Tested. Works out of the box.
- GNOME
- Tested. Needs the AppIndicator and KStatusNotifierItem Support extension, because GNOME has no tray of its own. If it's missing, the tray tells you instead of running invisibly.
- XFCE 4.16 and newer, LXQt, Cinnamon, MATE
- Work out of the box through the standard freedesktop tray.
Notifications go through your desktop's own notification service, and Launch at login writes a standard autostart entry.
Signed and notarized for macOS
Every macOS build is signed with an Apple Developer ID and notarized by Apple. It opens on the first try: no "unidentified developer" warning, no trip to Privacy & Security to allow it, and no xattr command to run. Builds come for Apple silicon and Intel.
- A real app, in the menu bar only
- Homebrew installs it into Applications. There's no Dock icon and no window, just the gauge in your menu bar.
- Notifications in Notification Center
- The first time it has something to tell you, macOS asks once for permission. After that you can tune or silence it in System Settings like any other app.
- Matches your menu bar
- The icon is monochrome by default and tinted by macOS to match a light or dark menu bar. You can switch to the colored gauge in Settings.
- Launch at login
- macOS lists it under Login Items as "Allow in the Background", and it starts at login all the same.
Install
Runs on macOS and on Linux, on both Intel/AMD and ARM. The Linux builds have no dependencies, and the macOS builds are signed and notarized by Apple, so they open without warnings.
Homebrew installs the full app into Applications and puts the claude-usage-tray command on your path:
brew install --cask patrickdappollonio/tap/claude-usage-trayOr download the app and drag it into Applications:
Get the app, through Homebrew or the download, if you want notifications. macOS only shows them for a real app. The bare binary from npm or a tarball runs the same tray, but its notifications often don't appear.
With Homebrew:
brew install patrickdappollonio/tap/claude-usage-trayOr with your system's package manager:
GNOME needs the AppIndicator and KStatusNotifierItem Support extension to show tray icons. KDE Plasma, XFCE, LXQt, Cinnamon and MATE work as they are.
On a Mac, install the app instead. The npm package installs a bare binary rather than the signed and notarized macOS app, so notifications show without the app's icon and some background features may not work.
The npm package carries the same binaries for macOS and Linux:
npm install -g @patrickdappollonio/claude-usage-trayTo try it once without installing:
npx -y @patrickdappollonio/claude-usage-trayThen turn it on
-
Let Claude Code share its usage numbers. If you already have a statusline, it keeps working exactly as before, and your settings are backed up first.
claude-usage-tray hook install -
Start the tray. It hands your terminal straight back and keeps running after you close it.
claude-usage-tray -
Start a Claude Code session. The numbers show up as soon as you send a prompt.
Changed your mind? claude-usage-tray hook uninstall puts your settings back exactly as they were.
Settings live in the menu
There's no window to open. Your numbers sit at the top of the menu, and everything you can change is under Settings. Changes apply right away.
Shown on macOS. On Linux, the menu follows your desktop's style.
Use more than one Claude Code profile, like ~/.claude-work? The tray finds them all and gives each its own section in the menu. You choose which one the icon follows.
Questions
Why do I see a question mark inside the icon?
Claude Code hasn't reported new numbers in the last 10 minutes, usually because no Claude Code session is running. The tray keeps showing the last reading, the reset countdowns stay accurate, and the session drops back to 0% when its 5-hour window rolls over. The question mark goes away the next time Claude Code reports, which happens as soon as you send a prompt.
"Check for new data" seems to do nothing
It re-reads the numbers Claude Code last wrote and tells you whether anything changed, and how long ago Claude Code last reported. It can't make Claude Code report sooner, because Claude Code only reports while a session is running. Send a prompt in any Claude Code session, then check again.
What does "Refresh usage via Claude CLI" do?
Some numbers, like the per-model weekly limits, only update when Claude Code fetches them itself, for example when you open /usage. Left alone, they can go hours without updating. With this setting on, the tray runs claude -p "/usage" in the background at most once an hour: the official Claude CLI, with your normal login, and it doesn't count against your usage.
It's on by default. Turn it off in Settings if you'd rather the tray never start Claude for you; everything else keeps working, and the per-model rows update whenever you open /usage yourself.
Before you install
- You need Claude Code 2.1.80 or newer
- That's the first version that includes usage in the statusline data.
- You need a Pro or Max subscription
- Billing through an API key doesn't report usage numbers, so there's nothing to show.
- Numbers only move while Claude Code is running
- That's when Claude Code reports them. In between, the icon shows a question mark and keeps the last reading. Reset countdowns stay accurate, and the session drops back to 0% when its window rolls over.