Skip to content

Releases: avihut/coding-agent-usage-tracker

v0.102.0

Choose a tag to compare

@avihut avihut released this 20 Sep 13:36
v0.102.0
b1023e5

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

Choose a tag to compare

@avihut avihut released this 20 Sep 13:36
v0.101.0
5145f7f

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 harnesses lists every detected harness; notices and
    health --check answer 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" and W, 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: --status draws 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

Choose a tag to compare

@avihut avihut released this 19 Sep 17:03
v0.100.1
947e7bc

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

Choose a tag to compare

@avihut avihut released this 16 Sep 19:37
v0.100.0
951a3a2

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

Choose a tag to compare

@avihut avihut released this 16 Sep 13:15
v0.99.3
794b870

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

Choose a tag to compare

@avihut avihut released this 14 Sep 06:58
v0.99.2
04e3860

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

Choose a tag to compare

@avihut avihut released this 07 Sep 17:23
v0.99.1
1a804e4

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

Choose a tag to compare

@avihut avihut released this 07 Sep 15:16
v0.99.0
a4f718f

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

Choose a tag to compare

@avihut avihut released this 07 Sep 15:09
v0.98.2
f99f038

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

Choose a tag to compare

@avihut avihut released this 07 Sep 14:59
v0.98.1
675e49b

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.