What it shows
Every rate-limit window with the time until it starts over, and every conversation running right now with how full its context is.
⋯
⋯
⋯
- Every window, as a meter. The 5-hour and weekly windows, and a week per model, for Claude; the same two for Codex; the plan's month for Cursor. Green, amber, then red as it fills.
- The time until it starts over. Click any time and every reset shows as the clock time instead.
- What is running right now. Named by what was last said in it, with a breathing dot while it works. Click for the model, effort and branch; click again to bring its terminal or editor forward.
- How full its context is. A real percentage when the limit is known; the tokens when it is not.
Where it lives
One panel, wherever you look.
Two styles
Glass, or a terminal readout. Each in light and dark, with a slider for how sheer the panel is.
⋯
⋯
⋯
Before it runs out
A word when a window you care about reaches a mark you chose, once at each, so the week does not end in the middle of a task.
Nothing is announced until you choose it in Settings › Alerts: Claude's session, its week, Codex's week, or any other window an agent reports. The marks are yours too, 80% and 90% to begin with.
80% says so once and 90% once more; the reads in between say nothing. A read that jumps past both says the higher one, once.
When a window starts over, its marks are announced again as it fills. A restart does not repeat what was already said, and a figure from a window that has already rolled over raises nothing.
When it goes down
Every agent’s own status page, beside its quota, and a word when a service stops working and when it starts again.
⋯
⋯
⋯
A status page covers a whole company. Claude's covers claude.ai, the Console, Cowork and Claude Code as separate parts; AgentBar reads Claude Code and the API, and nothing else. claude.ai going down while Claude Code keeps working is not your outage, and you are not woken for it.
A status page tells you a service is down. Then nothing tells you it is working again, so you go back and try until it does. That is the message this is for, and it comes whether or not you asked to hear about the outage.
A change is announced only once two readings agree, so a moment's flap says nothing. A page that cannot be reached is never reported as an outage: dropped Wi-Fi looks exactly like a dead service. And an outage already under way when you open your Mac is not announced at all; you are already living through it.
The widget
Three sizes for the desktop and Notification Center. Right-click › Edit picks the theme, the windows to show, and whether the running conversations are listed.
A size left with a single window shows it as a card; the small one shows Cursor’s plan. When there are more windows than a size has rows, it shows each agent’s fullest rather than dropping the last agents.
How it knows
Claude Code and Codex write their windows and sessions under your home folder; AgentBar reads them there. Conversations never leave the Mac. For the figures that only the account knows (what was spent on another Mac, or while the agent was not running), it asks each agent’s account with the sign-in that agent already keeps on this Mac. One read-only request every five minutes, and on the panel’s refresh. Nothing is stored or logged.
Install AgentBar
Free, for macOS 14.0 or later. Signed with a Developer ID, notarized by Apple, and it updates itself.
- Download the disk image and open it.Signed with a Developer ID and notarized by Apple; macOS opens it without a fuss.
- Drag AgentBar onto Applications, then open it from there.It appears in the menu bar. Nothing else happens until you click it.
- Settings › General, if you like.Launch at login, where it lives, what a Dock click opens. Updates arrive on their own.
Questions
Why does it ask my accounts, and what does it send?
Claude Code, Codex and Cursor each keep a sign-in on this Mac. AgentBar uses it, read-only, to ask the account how much of each window is used, which is the same page you would open in the browser. One request every five minutes, one when you open the panel (at most once a minute), one when you press refresh. Nothing is stored, nothing is logged, and no token is ever shown or sent anywhere else.
Does it read my conversations?
It reads the tail of each running conversation’s transcript, on this Mac, to name it by what was last said and to read its context figure. That is all it looks for, and it stays on the Mac.
Why does a window show a dash, or say “as of 14:05”?
A dash means the window has already started over and the agent has not written a fresh figure yet; AgentBar will not guess. “as of” means the figure it shows is old enough that you should know how old.
Why does a conversation show tokens instead of a percentage?
Claude Code does not write a session’s context limit anywhere. When the limit is known (a 1M-context session, or a context already past 200K), you get a percentage; otherwise you get the tokens, which is the honest figure.
Cursor shows only the monthly plan. Codex shows nothing.
Cursor writes no usage on disk, so its figures come from the account only. Codex writes its windows while it runs on this Mac; before its first session here, or on a Mac where it never ran, there is nothing on disk, and the account is asked for the rest.
Launch at login asked me to approve something.
AgentBar registers through the system’s Login Items, which macOS may ask you to confirm once in System Settings. It reads the agents’ files only while it runs, and the widget shows what it last read; starting at login keeps both current.
The widget says “Open AgentBar once”.
The widget cannot read the agents’ folders itself (app extensions are sandboxed); it shows what the app last wrote. Open the app once and it fills in.
How do updates work?
The app reads the feed attached to the newest release on GitHub once a day and installs updates itself; you can turn that off in Settings › General. Builds are signed with a Developer ID, notarized by Apple, and every zip is signed with a key only this app accepts, so an update that is not ours is refused.
How does it know a service is down?
It reads the status page each agent publishes, every five minutes and every minute while something is wrong, which is the same page you would open in the browser. It reads the parts you run on rather than the page's overall state: Claude Code and the Claude API, Codex API, Cursor's CLI and IDE. Which part each agent is read from is written down, and the whole page is one click away in the panel.
Will it wake me for nothing?
A change is announced only after two readings agree, so a moment's flap says nothing. A page it could not reach is never reported as an outage: your Wi-Fi dropping looks exactly like a dead service, and one of those is not news. An outage already under way when AgentBar starts is not announced either. Both messages can be turned off in Settings › Status.
What are Codex's limit resets?
Credits OpenAI grants that start a Codex limit over before its time, each with its own expiry. The last line of the Codex group counts them; click it for when each one expires and how long that leaves. They come from the same read-only request to the account, and AgentBar never uses one.
Is it really free, and can I read the source?
Free, and open source under the MIT licence: the app, its tests and this website are one repository on GitHub. Read what it sends before you trust it with an account, or build it yourself. Issues and pull requests are welcome there.
Which agents next?
The three here are the ones on this Mac. Others follow as they get used; usage is the first thing AgentBar shows, not the last.
Know where you stand before the window closes.
Every agent's quota and every running conversation, one glance away, on the Mac you are already using.
Download AgentBar