Softcap

Every subscription limit, on one screen.

You bought a second Claude plan so you would not have to stop working. Then finding out whether it has room meant signing into it — which is the one thing you were trying to avoid.

Softcap sits in the menu bar and shows all of them at once: what is spent, what resets when, and which account you should open next.

With one plan it answers a smaller question just as well — how much of this week is left, without opening a terminal to find out.

macOS · menu bar, widget, and an iPhone app · in development


Why it exists

Measuring a quota should not spend it

Codex reports how much of your rate limit is left only in the headers of a successful request. Ask it every five minutes and you burn the very allowance you were checking on.

So Softcap does not ask. The Codex CLI already writes its rate-limit readings into ~/.codex/sessions every time it runs; Softcap watches those files and updates the moment one changes. Claude publishes a usage endpoint that costs nothing to call, so that one is read live. Two services, two honest answers, no invented traffic.

A reading from a file is a snapshot, not the present tense — so the window says how old it is rather than pretending otherwise.


Several plans

It will not sign your CLI out

Your keychain holds a token only for the plan you are currently signed into. Refreshing it can rotate the refresh token on the server — and then Claude Code, holding the old one, is logged out. A monitor that logs you out of the thing it monitors is worse than no monitor.

So the active account is read-only here: Softcap re-reads the token the CLI keeps fresh and never refreshes it itself. While an account is active it quietly keeps a copy of the refresh token, and when you move on with /login, that copy is what keeps the previous plan visible. Sign into each of them once, the ordinary way, and from then on they are all on screen together.


Over time

Where the week actually went

One chart, one line per account. Colour means which account here, and how loaded everywhere else — the two scales never borrow from each other, so a cool line at 90% cannot read as calmer than a warm one at 20%.

100%75% 50%25%0% 4 Aug11 Aug 18 Aug25 Aug 31 Aug
sam sam.k alex team

The teal line breaks in the middle because nothing was measured there. Drawing straight across a gap would claim a reading nobody took, so the line stops and starts again.


The rest of it

Small things that matter at 2 a.m.

A timer in the menu bar

The icon carries the window closest to exhaustion, and how long until it frees up — so the answer is there without clicking.

Widgets

All four sizes on the macOS desktop; on iPhone the home screen and the lock screen too. The same account row the window uses, so they cannot drift apart.

It tells you before you hit it

A notification at 80% and 95%, once per crossing rather than once per poll — and one when an exhausted account comes back.

Quiet hours

Nothing arrives while you sleep, and nothing is delivered late in the morning to make up for it.

Ten languages

Including Arabic, laid out right to left. Switching takes effect at once — no restart, because a monitor you have to relaunch is not a monitor.

Your tokens stay put

Credentials live in the keychain and are never written to preferences, logs, or anywhere over the network. Nothing leaves your Mac except the calls to the services themselves.


Under it

For the sort of person who reads this part

Claude
Live, from the OAuth usage endpoint. Accounts are told apart by UUID; the plan label comes from the service.
Codex
Parsed from the session files the CLI writes, watched with FSEvents so a nested write is not missed. Snapshot age is shown.
Adding an account
OAuth with PKCE in your own browser, or simply /login in Claude Code — Softcap picks it up either way.
The core
A Swift package with no AppKit and no human-facing strings — a test scans the sources to keep it that way. The Mac window, both widgets and the iPhone app share one row view.
Cost of running it
Two HTTP requests per Claude account per poll — usage and profile — five minutes apart in the background, once a minute while the window is open. Neither counts against your allowance. Codex costs nothing at all: it is read from disk.
Not yet
Cursor, GitHub Copilot and Gemini CLI. There is room for them in the interface; a provider that cannot be verified against a live account would quietly show zero, which is worse than showing nothing.