Skip to content

Releases: MattJackson/usagio

v0.10.4

Choose a tag to compare

@github-actions github-actions released this 05 Oct 02:52
a74946c
Merge pull request #95 from MattJackson/qa

0.10.4: qa → main

v0.10.3

Choose a tag to compare

@github-actions github-actions released this 04 Oct 02:49
fb22305

usagio 0.10.3

Fixed

  • A manual switch sticks until the trigger. Switching by hand to an
    account under the trigger no longer flips back to another account (e.g.
    one with a sooner weekly reset) five minutes later; it stays until it
    reaches the trigger, then auto-swaps as usual. A switch to an account
    already at/over the trigger still stays until it's exhausted.

v0.10.2

Choose a tag to compare

@github-actions github-actions released this 03 Oct 19:13
190a636

usagio 0.10.2

Added

  • Add an account by signing in from usagio. Sign in to a new Claude
    account…
    (above "Capture current login") opens usagio's own sign-in
    window on a blank session; sign in as the new account (email code, then
    Authorize) and it's added — without switching to it, and without logging
    out of claude first. Its sign-in is remembered, so later renewals are one
    click. From a terminal: usagio login (uses your browser). Capturing a
    claude login still works as before.

v0.10.1

Choose a tag to compare

@github-actions github-actions released this 03 Oct 18:56
0d4ffec

usagio 0.10.1

Fixed

  • Paste works in the sign-in window. ⌘V (and ⌘C/⌘X/⌘A/⌘Z) did nothing
    in "Renew login…", so the emailed code had to be typed by hand.

Removed

  • "Launch client" in the account menu. It never opened anything from the
    menu bar. usagio start / usagio continue still launch claude from a
    terminal.

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 03 Oct 18:25
e89af93

usagio 0.10.0

Added

  • Renew a login from usagio. When an account's login is about to expire,
    its row shows renew · 2d and you get one notification; an expired one
    shows ⚠ renew. Renew login… opens usagio's own small sign-in window
    for that account, which keeps that account's claude.ai session separate
    from your browser, so it's usually one Authorize click. The new login
    is saved for that account, never changes which account is active, and goes
    live immediately if the account is the active one. From a terminal:
    usagio renew <email> (opens your browser). Built as one login engine for
    every provider; Claude is the first.

Fixed

  • No more false "login expires in N days" in Claude. usagio now records
    the refresh token's real expiry on every refresh, so the login Claude Code
    sees after a switch carries the right date.
  • No more false "re-login required". Two refreshes of the same account
    could race and the loser flagged a healthy account as needing a re-login.
    Refreshes are now serialized and the second one reuses the first's result.
  • A Free account shows "Free", not a re-login warning.

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 06:11
a48b067

usagio 0.9.0

Added

  • Account details show what the provider itself reports beyond your
    limits
    , and only when there's something to show:

    • Credits / extra-usage spend, e.g. "Credits · $12.34 used of $50.00",
      "Credits · 120 left" (Codex credits), or "Credits · limit reached".
    • Where this week's usage went, when it's split across more than one
      product, e.g. "This week · Claude Code 82% · Chats 18%".
    • Per-model weekly limits once they're in use, e.g. "Fable 7d · 42% ·
      resets in 2d 3h".

    These are the provider's own numbers, never estimates. A provider that
    changes or drops these fields never breaks the usage reading itself.

v0.8.9

Choose a tag to compare

@github-actions github-actions released this 02 Oct 05:56
5a15633

usagio 0.8.9

Fixed

  • A manual switch under your threshold auto-swaps as usual. In 0.8.8 any
    manual switch held, so an account picked at 79% rode past the threshold and
    sat at 99% without swapping. Now only a switch to an account already at or
    over the threshold holds (you're acking it's over); it still swaps off once
    it is exhausted (100%).
  • A lapsed account's menu is one line. An account with no subscription
    now shows just No subscription · Free plan instead of two extra lines
    about paused checks.

Tests

  • About 300 new tests close gaps found by a full mutation-testing sweep
    (2,871 mutants): the auto-swap decision core, usage refresh policy,
    credentials, state backups, history logs, burn-rate forecasts and the menu.
    No behaviour changes beyond the fix above.

v0.8.8

Choose a tag to compare

@github-actions github-actions released this 01 Oct 18:39
e4766ec

usagio 0.8.8

Fixed

  • Switching to an account yourself sticks. Picking an account past your
    auto-swap threshold from the menu used to get undone within a second, and
    usagio switch <acct> got undone at the next poll. A manual switch (menu or
    CLI) is now recorded in state.json, and auto-swap stays on that account
    until it is exhausted or its subscription lapses, or you pick another.
  • Auto-swap no longer thrashes around an account near the trigger. An
    account within 5 points of the trigger was still a valid swap target, but a
    single 429 there counts as reaching the trigger — so auto-swap kept flipping
    back to it and getting forced out again (about 30 swaps in 3 hours around an
    account at 82–85% of an 85% trigger). Targets must now be more than 5 points
    under the trigger; the active account still rides up to it.
  • No "Where is use_default?" dialog after an upgrade. Right after brew upgrade, macOS didn't know the new usagio.app yet, so notification setup
    failed and fell back to a placeholder app. usagio now registers its own
    bundle first.
  • usagio switch names the matches for an ambiguous prefix. usagio switch dev with several dev… accounts said "no account matches" instead of
    listing them.
  • Codex accounts auto-swap too. Every switchable provider now runs
    through the same swap logic as Claude: swap at the trigger, on a 429 near
    it, fresh-reading checks on targets, cooldown only on optional swaps. Each
    provider has its own cooldown, no-return window and poll backoff, so one
    provider's 429 never slows another's polling.
  • Codex polling follows the same request budget rules as Claude. The
    active account is fetched on its cadence tier, inactive accounts at most
    every 10 minutes with their own failure backoff, and a 429 on the active
    account pauses that provider's other fetches for the cycle. Previously
    every Codex account was fetched on every wake.
  • No more staying on a full account when everything else is nearly full.
    If every other account is past the trigger, auto-swap moves to the one with
    the most room left (at least 5 points more than the active one) instead of
    staying put.
  • usagio watch behaves exactly like the menu-bar app. It now runs the
    same loop: it uses the trigger and auto-swap setting from the menu
    (--trigger still overrides), wakes right after usage resets, and notices
    the machine waking from sleep. It used to ignore the menu settings, miss
    most resets, and stay blind for up to 20 minutes after a resume.

v0.8.7

Choose a tag to compare

@github-actions github-actions released this 01 Oct 04:14
f9e733d

usagio 0.8.7

Fixed

  • No more running out after a 429 near the limit. One HTTP 429 from the
    usage endpoint on the active account at 93% (trigger 95%) used to stretch the
    poll interval from 30s to 6 minutes and wait for a second 429 before
    swapping, so the account ran out unobserved. Now a 429 on the active account
    within 5 points of the trigger counts as reaching it and swaps immediately,
    and a 429 backoff doubles the current interval (30s → 60s) instead of
    jumping to twice the base interval. A switch also restarts the backoff from
    30s rather than from the base interval.
  • Leaving an account at its limit is never delayed. The 5-minute swap
    cooldown now only applies to optional swaps (flip-backs and all-blocked
    preparation). It used to hold you on a just-landed account even after it
    hit the trigger.
  • Swap targets use the full allowance up to your trigger. An account is a
    target while its session and weekly are both under your trigger, instead of
    a fixed 85% session cap that ignored the trigger you set (it stranded the
    last ~10% of every session, and with a trigger under 85% it could pick an
    account already past it).
  • Swap targets must have a current reading. A target last read more than
    two minutes ago is re-checked right before the swap and skipped if it's now
    at the trigger. If the re-check fails, an urgent swap only uses it when its
    last reading had at least 10 points of room. An account usagio moved you off
    isn't returned to until a reading taken after leaving it says it has room,
    and accounts excluded only for stale data are re-checked when the active
    account needs to be left, even while it's being rate-limited.
  • The active account is polled even if it was flagged for re-login, so its
    reading (and auto-swap) no longer freezes after you switch to it manually.
  • Account details no longer make a healthy limit look locked. A locked window
    reads "Session locked · unlocks in 28m" in red (matching the red countdown
    on the account row); a healthy one reads "Weekly renews in 6d 22h". Detail
    lines are plain text and no longer highlight on hover.
  • Every provider's header in the menu is now the same plain label row with
    its icon. A provider used to turn into a dropdown (and lose its icon)
    whenever its active account was blocked or an environment override was set;
    the env-override notice now shows inline in the header instead.

Removed

  • Dollar cost estimates: the "~$X this cycle (est)" menu row,
    usagio report --verdict and usagio report --pricing. No provider reports
    what a subscription's usage costs, so these multiplied the usage percentage
    by a guessed token cap and API list prices — numbers that looked precise but
    weren't.

v0.8.6

Choose a tag to compare

@github-actions github-actions released this 28 Sep 05:44
b009854

usagio 0.8.6

Added

  • Accounts whose subscription has lapsed are now detected and shown, for every
    provider. A lapsed account's row shows a red "-" instead of a stale reset
    countdown, its submenu says "No subscription · Free plan" instead of old
    usage and cost, "Switch to this account" and "Launch client" are hidden, it
    always sorts to the bottom (alphabetically), and you get a notification when
    a plan lapses or comes back. usagio list shows the same.
  • The account submenu shows the plan when known (Max 20x, Pro, Plus, …).

Fixed

  • A lapsed account no longer calls the usage endpoint every cycle. Those calls
    only returned 403/429 and spent the request budget the other accounts need.
    It now gets a plan check every 30 minutes (or on usagio list --refresh)
    and resumes normal polling as soon as a plan is back.
  • Auto-swap never picks a lapsed account, and moves off the active account if
    its plan lapses.