Notchmeter
Free and open source · MIT

A Codex CLI usage tracker in the MacBook notch

Notchmeter shows Codex's session, weekly or monthly rate-limit windows beside the notch, from the same backend Codex itself asks, each with a pace tick, a projection and its reset; prices this Mac's Codex sessions at OpenAI's published rates; lists the Codex sessions running in a terminal, each marked as found without the hook; and, with the optional hook, counts your running threads, shows their waits and finished turns as they happen, and lets you approve a Codex request from the notch. It reads the login Codex already keeps and never refreshes or stores it.

macOS 15 or later · Apple silicon or Intel · no account, ever

What Notchmeter shows for Codex

The render on the right has Codex on a free plan, its Session with no data and its Monthly window untouched; a paid plan fills the same meters.

  • The windows your plan has: Session (5 hours), Weekly, or Monthly, named by the length the backend declares, with the used share, a pace tick, a projection and the reset as a countdown or an exact time, and the plan's name on the card.
  • Offline: the newest rate_limits snapshot Codex wrote into its own session rollouts, tagged snapshot and noted “Reset since Codex last reported” once its reset has passed, because a figure from disk may be stale.
  • Reset credits, opt-in: shown, with when each expires, and never claimed.
  • Cost: this Mac's Codex sessions priced at OpenAI's published rates, today, yesterday, the week, the month, 30 and 90 days, by model and by folder, with a burn line when the last hour ran hot.
  • Sessions: every Codex session running in a terminal, listed without the hook and marked as found without it. With the hook, every running thread and its live state: a dot on the ring while Codex waits for an approval, each finished turn and a refresh the moment it ends, and Allow or Deny from the notch.
The Detailed panel: the Sessions card with two Claude Code sessions, one waiting; the Cost card with today's $131 split between Claude and Cursor; the Advice strip; the Claude card with Session, Weekly and Fable meters, each with a pace tick, a projection and its reset; the Codex and Cursor cards on free plans.
The Detailed panel over a fixed set of readings, so it shows nobody's usage: Claude on Max 5x, Codex and Cursor on free plans.

Where each figure comes from

The windows are OpenAI's own figures; the cost is an estimate whose rule is written down.

Read on 2026-09-24 from the code and docs/accuracy.md.
FigureSourceNotes
Session, Weekly, MonthlyGET https://chatgpt.com/backend-api/wham/usage, the backend Codex itself asks, on a five-minute cadenceUndocumented. The request carries Codex's token as Authorization: Bearer, User-Agent: Notchmeter/<version>, and ChatGPT-Account-Id when auth.json holds one.
The same, offlineThe newest rate_limits line in ~/.codex/sessions/**/*.jsonlTagged snapshot; a weekly-only or monthly plan fills the primary slot by its declared length, as the backend read does.
Reset creditsGET …/wham/rate-limit-reset-credits, opt-inShown and never claimed.
CostThis Mac's rollouts under $CODEX_HOME/sessions: one token_usage_record per response, fresh input as input_tokens less cached_input_tokens, reasoning already inside output_tokens, priced at OpenAI's standard-tier rates read 2026-09-02Cache writes are billed only on the GPT-5.6 rows, the long-context tier above 272K input tokens where a model publishes one, and a model with no published rate is named under “Unpriced” rather than valued at $0. A replayed response_id is counted once.
Sessions, waitsThe optional hook: Codex's PermissionRequest is a documented wait; Stop has no failure kind. Without it, the Codex sessions running in a terminal, each marked as found without the hookA limit hit waits for the next poll of the meter, because no Codex event fires for one; nothing is claimed that a documented signal does not prove.

The login comes from auth.json in $CODEX_HOME, else ~/.config/codex, else ~/.codex: the token is read and never refreshed or written, and a setup on an API key alone has no plan windows, which the card says. The plan's name is read from Codex's own plan_type.

The cost is the API-equivalent value of the work at list price. A ChatGPT Plus, Pro or Business plan includes Codex in the subscription, so on those plans nothing here is a bill; on an API key it is an estimate at the standard tier, since a rollout does not record whether a turn ran under Batch, Flex, Priority or Fast mode. The rates, the four gaps and the golden tests are in Codex sessions.

What it says to do about it

The Advice strip's lines for Codex, each worded as an instruction.

Run-out
At this rate you hit the Codex weekly cap Thursday at 2:00 PM, 3d 4h before reset. Claude weekly is at 22%.A window is behind pace and has a run-out time; another tool on a paid plan with half of its main window left is named.
Room elsewhere
Codex has 78% of its weekly left.Another tool's main window is on track or behind, and Codex, on a paid plan, has half of its own left. Codex's free plan is never the room named.
Reset credit
A Codex reset credit expires in 5h. Claim it in Codex.With the opt-in read on: a credit expires within a day while a Codex window is behind pace.
Burn
Codex burned $3.10 this hour — 4x its 30-day average.The last hour cost at least three times the mean active hour of the last 30 days, from this Mac's rollouts.

Questions

Which Codex plans does it meter?

Any ChatGPT login Codex has made with codex login. The windows are whatever the backend returns for that plan, session, weekly or monthly, named by the length each declares, and the plan's name is shown on the card. A setup on an API key alone has no plan windows, and the card says so.

Does it work offline, or when the endpoint fails?

Yes. It falls back to the newest rate_limits snapshot Codex wrote into its own session rollouts, tagged “snapshot” so a figure from disk is never mistaken for a live one, and noted “Reset since Codex last reported” once that snapshot's reset has passed.

Is the Codex cost my bill?

No. It is the API-equivalent value of the work at OpenAI's list price, computed from this Mac's rollouts. A ChatGPT Plus, Pro or Business plan includes Codex, so on those plans it is a measure of pace and of what the plan is worth; on an API key it is an estimate at the standard tier. What is not priced is named on the card rather than counted as $0; the rules are in docs/accuracy.md.

What are reset credits, and does Notchmeter use them?

Codex can grant credits that reset a window early. With the opt-in read on, Notchmeter shows them and when they expire, and the Advice strip says so when one expires within a day while a window is behind pace. It never claims one; that is done in Codex.

Can I approve a Codex request from the notch?

Yes, with the hook. Codex's PermissionRequest documents the same decision shape as Claude Code's, so the panel opens on the request with Allow and Deny, and everything about it fails open: hand it back, let the hold run out, or quit Notchmeter, and Codex asks in the terminal exactly as it always has. Codex never reports the answer, so the waiting mark clears at the thread's next event or after ten minutes. docs/hooks.md has what the hook sends.

Does it need my OpenAI login?

No. It reads the auth.json Codex keeps, never refreshes or writes it, and sends the token only to chatgpt.com in the same read-only usage request Codex itself makes. Sign into a different account in Codex and the notch follows.

Install it

macOS 15 Sequoia or later, Apple silicon or Intel. Signed, notarised, and it updates itself. Free forever, MIT licensed.

# or with Homebrew brew tap Amir-Hackett/tap brew trust --cask Amir-Hackett/tap/notchmeter brew install --cask notchmeter

Notchmeter is a Mac app. There is no Windows or Linux version; if you want a Windows one, the Windows issue is where to say so. How every figure is built, with its source and its date: docs/accuracy.md.