Releases: avihut/coding-agent-usage-tracker
Release list
v0.102.0
AgentUsage: a new name, its own identity, source-only releases
The app is now AgentUsage — it has metered every coding agent on the Mac
for a while, not one vendor's. ClaudeUsage.app becomes AgentUsage.app, the
bundle id moves from a personal prefix to io.github.avihut.AgentUsage, the
launch agent to io.github.avihut.usaged, and the package and User-Agent take
the repository's name, coding-agent-usage-tracker.
Nothing is lost in the move. On first launch the app (or the daemon, whichever
starts first) retires the old launch agent, moves its Application Support and
Caches directories — history, ledgers, forecasts — to the new identity, and
carries every setting across, menu bar item positions included. It runs once;
the old preferences file is left in place as the way back.
Two things belong to a bundle id and cannot be carried:
- Launch at login has to be switched on again (Settings → General).
- A menu bar manager (Bartender, Ice, …) sees a new app: if the item seems to
be missing, look in its hidden section and place it once.
After pulling, mise run app replaces the running ClaudeUsage and deletes the
stale ClaudeUsage.app beside the new bundle. Delete any other copy you made
(for instance in /Applications): it is still a working app under the old
identity, and launching it would start a second engine on the old directories.
Releases are source-only from here on: a tag and its notes, never a binary.
A macOS app that strangers can open needs a paid Developer ID and
notarization, which this project doesn't have, so the app you run is one your
own Mac built and signed (README → Install). The 31 zips published before
this were removed.
- An app sitting outside a git checkout no longer offers "Update to X…" for a
release that has nothing to download; Settings → General says what to do
instead — get the new version from the repository and rebuild. - The one-click updater, dormant until a notarized build exists, now checks
WHO signed a download, not only that its signature is intact: the bundle
must satisfy the running app's own designated requirement. Before this an
ad-hoc re-signed bundle passed verification.
v0.101.0
Meter every harness at once
The app metered ONE agent: it scored which harness had run recently, read
that one, and offered a picker to override the guess. It now meters every
harness it finds on this Mac — Claude Code, Codex and Gemini CLI together —
the way it already metered several Claude accounts together. They sit
alongside each other in the menu bar under their own marks in their own
colours, one of them holds focus, and the panel, the charts and the CLI
answer for whichever that is. There is no active harness and no switch.
Hiding is display only. A harness you aren't interested in leaves the
bar and the panel (Settings → General → Harnesses) and keeps being polled,
forecast and priced; its models stay in the API Cost rates list, which lists
every detected harness whether shown or not. The last shown harness can't be
hidden.
No new network destination — and one request fewer per day. Each harness
reads exactly what it always read: Claude its usage endpoint and its own
homes, Codex and Gemini their local session files and no credentials at all.
The LiteLLM rate feed is a single mixed-vendor document every harness slices
differently, so its bytes are now fetched once and shared rather than once
per harness. The privacy card lists every metered harness's hosts and files,
one block each. Spec §10 amendment 2026-09-20.
Forecasts stay per harness and per account folder, and a login change
inside a folder keeps that folder's learned history.
A one-harness Mac is unchanged, byte for byte: all 48 pinned status-item
snapshots and the hit-rect sidecar are identical to v0.100.1, every digest
key added is additive, and every account id such a Mac had it still has.
Also in this release:
- The panel's strip is one unified list across harnesses — a heading
carrying the vendor's mark once for a harness with several accounts, and
the mark itself on a lone account's row. - Settings → General has a Harnesses card in place of the Metering picker,
and the Accounts pane lists one card per harness that has accounts. - API Cost groups rates per harness, folding away the models you've never
run, and its what-if model picker is now a fuzzy search across every
harness's priced models. usage-cli harnesseslists every detected harness;noticesand
health --checkanswer about this Mac rather than the focused harness.- A limit is named by its own window, not by the slot a vendor reports it
in: Codex's single 7-day limit reads "Weekly" andW, never "Session
(168h)" — and the menu bar, the CLI prompt line and the terminal status
line draw only the limits an account actually has. - A renamed limit keeps its history and forecast, a forecast waits for a
rhythm it has actually watched rather than one spanning a gap, and each
harness's mark is drawn at the same visual size. - The terminal dashboard reads every harness:
--statusdraws a block per
harness and the header carries the others' digits. - Settings → Accounts lists every metered harness's accounts, not only
the agent that can hold several; a one-folder agent has its one account
there like any other. - The app is named "Agent Usage" in its windows, panel and menus — it has
metered every coding agent for a while, not one vendor's. - Fixed: a limit chart's red "runs out" time stamp could overprint a
weekday label while a clear one was blanked, and the last weekday label
could truncate at the plot's edge.
v0.100.1
v0.100.1
The menu bar item is now legible over any wallpaper.
- The item reads the ground the system inks the menu bar for and draws in
white over a dark bar, near-black over a bright one — the same ink the
clock beside it wears. It follows the wallpaper, not Dark Mode, and
redraws when the wallpaper changes sides. - Over a bright bar the provider glyph and the risk colors (watch dot,
bars, rings) step deeper so they keep their contrast; the red and
incident capsules are unchanged. - A dark bar looks exactly as it did.
v0.100.0
v0.100.0 — forecast lockouts and overshoot
Lockouts. When a narrower limit window (the 5h session) is spent, or is
forecast to be, every wider meter's forecast treats the time until that
window resets as a hard zero: the weekly curve draws a flat plateau across
the lockout instead of spending through it as if nothing had happened.
Equal windows never lock each other out (the scoped weekly leaves the other
models free), and meters without a window neither issue nor receive one.
Overshoot. When the forecast lands past a window's limit, the crossing now
says what covering it would take — "runs out Mon 20:00 · ~$38 extra
(≈11% over)". The tokens come from the window's own percent-per-token
conversion (the popover chart's), the dollars from the window's priced
models at API list rates, which is what Anthropic bills extra usage at.
Tokens and cost stay absent, never $0, when the window's tokens weren't
seen or no model in it carries a rate. Shown on the panel caption, the
popover readout past the crossing and its stats line, Settings → Usage
"Projected at reset", and the CLI: forecast.projected-raw,
forecast.overshoot, forecast.overshoot-tokens,
forecast.overshoot-cost. The digest gains projectedUnclamped and
overshoot on each meter's forecast (additive).
v0.99.3
v0.99.3 — the weekly forecast stops inventing a crossing on a quiet week
Fixes
- The learned weekly rhythm no longer puts spend on days and hours you never
use. Each 4-hour bucket now shrinks toward a structured estimate (that
weekday's rate × that block-of-day's rate ÷ the global rate) instead of the
flat mean. For a Sun–Thu user the old prior placed ~20% of the modeled
week on Fri, Sat and the 00–08 blocks despite zero observed spend, and
pulled the busy blocks down to pay for it. The pace-factor clamp tightens
from 0.25–4 to 0.5–2. - Running hot today steepens tomorrow's forecast, not the whole remaining
week. The pace factor decays toward 1 over about a day instead of scaling
every remaining day at once — the behavior that compressed the week's
rhythm into the days before the crossing. On the reporting Mac the weekly
meter goes from a red 111% / "runs out Mon 20:00" to ~89% with no crossing. - The crossing's red timestamp in the popover's axis row no longer overprints
a weekday tick; the eclipse now compares the labels' drawn extents.
Housekeeping
- Dropped a nonisolated(unsafe) annotation the Xcode 26.6 SDK made redundant.
v0.99.2
v0.99.2
Fixes
- Menu bar hover card: a long incident update no longer stretches the card across the screen. The incident banner wraps inside the card's width, and the message is cut at two lines (the panel and the status popover carry the rest).
- Meter card: the hover readout (an outage's can run past 500pt), the stats line and the account label truncate at the plot's width instead of widening the hover card or the panel's meter popover.
v0.99.1
v0.99.1
Fixes
- Meter popover: a model's token curve is priced by the window's percent GAINS, a vendor grant inside the window included. It used the window's end-to-end change, which omitted everything bought before the grant and drew a scoped meter's one model below its own percent line until the window's end.
- Across a grant the curve is no longer capped at 100: the forgiven spend still happened, so it rides the percent line up to the reset, climbs on past it, and its tip stays the window's token total.
v0.99.0
v0.99.0 — one countdown, the focused account's
- With several accounts, "Runs out" now draws on the focused account's cell only, so the bar carries one countdown — the account the panel opens on. Settings → Menu bar → "Added elements for the focused account only" turns that off to give every account its own.
- Each account's arrangement is untouched: where you dropped the element is where it draws whenever that account is focused.
v0.98.2
v0.98.2 — the default account's "Runs out" element sticks
- Dropping "Runs out" on the default account (the one metered from ~/.claude) wrote the arrangement and then lost it on the next read, so nothing appeared; an added account's arrangement stuck. Fixed; the element you dropped before updating shows once the app restarts.
v0.98.1
v0.98.1 — the palette drag works; Settings → Menu bar
- Dragging the "Runs out" tile onto the preview now lands it (the tile starts a real drag; it dropped nothing in 0.98.0). Work's tile lands on Work's cell, Personal's on Personal's. Clicking the tile still adds it after the meters.
- The bar's styling has its own sidebar pane, Settings → Menu bar: the live preview, one form for every account or each account's own, the elements palette, focus expansion and focus, and per-account rows for "Show in menu bar", "Own menu bar item", form and elements. Settings → Accounts is now only about which sign-ins are metered.