maxx

Keep pace with your Claude subscription. /usage says how much of the week is gone. maxx says whether you are on pace to make it, for every account you are signed into, and when a walled one frees up.

Install →  ·  See the statusline →  ·  GitHub →

 @reif · fable  │  chat 66%  │  session 16% · 3h20m  │  week 16/15% · 5d  │  Maxx · main · 6ecd0ea7  │  /maxx

The bar. It is the last line of every Claude Code session — this one is the renderer's real output for the session that wrote this page.

@reif_tgp ● LIVE
   ~/.claude · reif@thegoodproject.net
   week 6% · 5h 11% · week resets in 150h

@reif
   ~/.claude-gmail · reiftauati@gmail.com
   week 6% · 5h 94% · WALLED · back in 1h20m

   1 walled, 1 with room — eval "$(maxx switch)" moves to @reif_tgp.

/maxx accounts — one row per login, and the thing no other surface tells you: when a walled account frees up.

What maxx is

One sentence: maxx keeps you on pace with your Claude subscription. "62% used" means nothing on its own. "62% used on Tuesday, twice the pace that makes the week" is a decision. maxx turns the number into that pace and puts it in the statusline, where you will see it every two seconds, and in the gate your agents hit before they fan out.

Most people running Claude Code seriously are signed into more than one account. There is no screen anywhere that shows them together — so you find out one is walled by hitting the wall, and you find out another sat idle all day by never finding out.

/maxx accounts, at the top of this page, is that screen. Local and instant — it reads the same cache the statusline does, so it works offline and needs no network round-trip.

Underneath, maxx is a counter. It reads token usage from every Claude Code session on this machine, prices each token by model, and turns that into one question with one answer: how much can this session spend right now without ending the week early?

It answers as a rate. Your burn in percent-of-week per hour, against the rate that spends the week exactly by its reset. When you are over, it tells you the hour you run out.

maxx counts. Anthropic limits. Nothing maxx computes can deny you work. The only things that stop a call are Anthropic's own 5-hour and 7-day windows, and they enforce themselves by rejecting it. A counter that can deny is a limit nobody agreed to.

Two surfaces, same number:

The problem

Claude enforces two walls: a 5-hour session cap and a 7-day weekly cap. /usage shows you the 5-hour one clearly. The weekly one is the one that actually ends your week.

A 5-hour window refills every 5 hours. So "session 100%" reads fine six windows in a row. Spend every window to its wall and the week is gone by Wednesday, with every individual session reporting "within limits" the whole way.

Do not pace against "% of my 5-hour limit." It cannot see the week. Pace against your share of the week for this window.

Agents have it worse. A subagent cannot glance at a statusline and has no /usage. Six of them spending from one pool have no idea what the siblings already took. The gate is how they find out.

How it works

  1. Count. maxx reads the token metadata in Claude Code's own session logs on this machine (never prompt content).
  2. Anchor. Anthropic's own /usage figure rides in on every session, already summed over every machine and agent on your login. maxx pins the count to it. Everything is reported as a percent of the week, on that denominator, because a cache-weighted token ledger never agrees with Anthropic's billing.
  3. Pace. What remains of the week ÷ the 5-hour blocks left in it = this block's share. What this block has spent, on the same denominator, sits beside it. Two numbers, one denominator, compare directly.
  4. Verdict. Burn rate vs. sustainable rate. Over means the week ends early, and maxx says when.
# the whole model, in three lines
block_share_pct  = week_remaining_pct ÷ blocks_left_week      # what THIS 5h block may spend
block_used_pct   = spent this block, as % of week            # what it HAS spent, same denominator
on_pace          = block_used_pct ≤ block_share_pct           # going past borrows from later blocks

Going past your share is allowed. It borrows from later blocks and breaches nothing. Burning above sustainable_pct_per_hour is the thing that ends the week early.

Install (humans)

One line. It installs the statusline, the gate and the /maxx skill. It claims nothing and calls nobody.

$ curl -fsSL https://meetmaxx.co/install | bash

Restart Claude Code and the bar is there. Requires Node 18+.

Update by running the same line again.

Or install it as a Claude Code plugin:

/plugin marketplace add reif-y/Maxx
/plugin install maxx
/maxx wire

A plugin can place skills but cannot write to settings.json, so /plugin install alone gives you the commands with no statusline and no hooks. /maxx wire adds them. Run /maxx without it and the card tells you what is missing.

The statusline

One line at the bottom of every Claude Code session. Numbers lead, identity trails.

 @reif · fable  │  chat 66%  │  session 16% · 3h20m  │  week 16/15% · 5d  │  Maxx · main · 6ecd0ea7  │  /maxx

Real output of the renderer, not a mockup — the spans above are converted from the actual ANSI it emits. Colors are plain ANSI and work in any terminal Claude Code does.

cellreadscolor
@reif · fableWhich account this session is signed into, and the model. On a narrow pane this is the first thing to go — you can get it from the prompt line.—
chat 66%How close this conversation is to rolling over, out of 100. Claude Code auto-compacts at a quarter of the context window (the installer sets that), and maxx keeps the thread on disk, so 100 is not a wall — it is the point where the context gets cheap again. Every turn re-reads the whole conversation, so the number is also the cost of each turn.green → amber at 71 → red at 85
session 16% · 3h20mAnthropic's 5-hour window — the same number /usage prints — and the time until it resets. This is the wall you can act on in the next ten minutes, so it carries the bold.red past the share this window should spend
week 16/15% · 5dUsed against pace. 16% of the week is spent; 15% is where you would be if you were spending it evenly to the reset, 5 days away. Used above pace means the week ends early at this rate. /usage gives you the first number; the second is the one that tells you whether it is fine.red when used is past pace
Maxx · main · 6ecd0ea7Repo, branch, and this chat's id. Paste the id to another session and /maxx who 6ecd0ea7 resolves it back to the repo, the account and how full that chat is.—

/maxx commands

commandwhat it does
/maxxThe usage card: total tokens, tokens per day, cache-hit rate, streak.
/maxx sessionWhat this 5-hour window can safely spend right now, in plain language.
/maxx accountsEvery login on this box: what each has left, which is live, which is walled and when it frees up.
/maxx who <id>Resolve the 8-character session tag from the statusline back to its repo, account and chat size.
/maxx turnWhat the last turn cost, including subagent burn.
/maxx reportWhere the week went, per account, with the move each finding implies.
/maxx switchPrints the account with the most room left. eval "$(maxx switch)" hops to it.
/maxx dark · light · autoStatusline theme. auto adopts the terminal's own palette.
/maxx refreshBar looks stuck: rebuild the derived caches.

Local by default

The install claims nothing and calls nobody. Your numbers come from Anthropic itself: the 5-hour and weekly percentages ride in on every session, already summed across every machine and every agent on that login. maxx reads them, prices the local ledger against them, and draws the bar. No account, no network, nothing to be down.

That is also why there is no "collate my machines" step — Anthropic's number is the collation. Measured on a two-account box: the optional tally returned 83.0%/17.0%, byte-identical to what the local session already had, because it anchors to that same number.

The budget gate fails open. It denies on a real weekly wall and never on its own unreachability. A counter that stops your work because it cannot reach itself is inventing a limit — the one thing this project promises not to do. gate.mjs --fail closed if you want the stricter posture.

Privacy

Nothing leaves your machine. maxx reads token counts, timestamps and model names from Claude Code's own logs. Never a prompt, never a message, never your code. It never reads them, so it cannot leak them.

Source

MIT. github.com/reif-y/Maxx

$ npm test    # node --test maxx/*.test.mjs fenix/*.test.mjs server/*.test.mjs