Repository navigation
OpenUsage 0.8.0-beta.1
Pre-release
Pre-release
·
0 commits
to fcb5085f62b6d5ae82f97e075cc22f6ebaaed29d
since this release
v0.8.0-beta.1
Upgrading from 0.7.x: add your accounts again from the Accounts screen. OpenUsage no longer
picks up the sign-ins of the coding tools on your Mac, so most accounts don't carry over. The
OpenRouter and Z.ai keys you saved in 0.7.x are added for you, unless you had turned that provider off.
The new OpenUsage announced in #1441. The app
shows only what each provider's API reports for the accounts you sign in to.
Removed
- Account discovery. OpenUsage no longer reads other tools' credentials, config files, Keychain items,
databases, or logs. Sign in to each account from the new Accounts screen instead. - Spend and token estimates from local logs, model pricing, and the pricing supplement. The dashboard
shows the limits and dollar values a provider reports, nothing computed apart from ChatGPT's credit
value (below). - iCloud sync of usage history (daily tokens and spend).
- The log file. The app logs through unified logging only
(log stream --predicate 'subsystem == "OpenUsage"'). - The local HTTP API.
- The Pi provider, which has no account sign-in.
- The welcome screen, provider enable/disable switches, and the On Demand metric tier.
- Menu-bar stars. The menu bar picks its own limits.
- The Density setting and Reset All Customization.
- OpenRouter's Credits bar, which measured spend against every credit ever bought, not a limit.
Balance still shows what's left. - The Icon Style, Increase Transparency, Always Show Pacing, and Reduce Animations settings.
Animations follow macOS's Reduce Motion setting.
Changed
- Dashboard: Today, Yesterday, and every other time range always show, at 0 when the provider reports
nothing for them. An account's page still hides any of them with its switch. - Dashboard: balances always show, even at $0, including Cursor Credits when Cursor reports none. Extra
Usage shows only while the provider has it on, even at $0, and hides while it is off: Claude,
ChatGPT, Cursor, Copilot, and Grok, whose "Disabled" row is gone. - Share: every share image ends with a tinted OpenUsage footer reading "Your AI Limits at a Glance",
in place of the "Monitor Your AI Subscriptions with OpenUsage" line. - Panel: content scrolls cleanly under the top bar, with no glass backdrop, and blurs softly under the
bottom bar only while something is under it. The account name in an account page's header fades its
hover highlight in. - Z.ai: a key Z.ai refuses reads as rejected, not as an invalid response, so the 0.7.x key import
stops checking it on every launch. - Dashboard: after an update from 0.7.x, the empty dashboard welcomes you back, says OpenUsage no longer
reads your local accounts automatically, and asks you to add back the ones to track. - Accounts: add several accounts per provider, rename them, and remove them from the app.
- Accounts: replace an API-key account's key from its page. A key, added or replaced, is saved only
once a usage read accepts it. - Accounts: an account's page lists its metrics, each with a switch that hides it everywhere and a
handle that drags it into order. - Accounts: once Sign In Again works, the sign-in closes and the panel opens on your Default Tab.
- Accounts: Sign In Again shows on an account's page only while Priority lists it under Needs Attention.
- Dashboard: cards per provider with a section per account. Drag to reorder and press ⌘Z to undo;
right-click menus hold refresh, share screenshot, and quick links. - Dashboard: two tabs, Priority for the limits running out or used up, most urgent first, and
All Usage for every account. The panel opens on the Default Tab in Settings, Priority at first. - Priority: pin a metric with the pin beside its switch on its account's page, and it gets a Pinned
section at the top of Priority. While a pinned metric is running out, it shows under Running Out
instead, never in both. - Priority: right-click a metric on All Usage or a row on Priority to Pin or Unpin it, and
All Clear is always one row under the Running Out header. - Dashboard: an account that hasn't reported yet shows grey placeholder rows on Priority and All Usage
instead of Waiting for Usage, even while other accounts have reported. - Priority: an account lists under Needs Attention only once a refresh fails, not while it loads
on launch. - Menu bar: shows the limits closest to running out on its own. Show In Menu Bar, under Settings →
Display → Priority Icons at the top of the tab, sets how many, from App Icon Only to Up to 5. It starts
at Up to 3. - Menu bar: when an update is available, the app icon shows at the far right with a dot, after the
limits and any+7count, whatever Show In Menu Bar is set to. - Notifications: Cutting It Close now fires when a limit drops under 30% left, not when its pace nears
the limit. A switch you turned on in 0.7.x stays on. - Settings: Log Level is back under Advanced → Debug and keeps the level you chose in 0.7.x. It
starts at Info and sets how much the app writes to the macOS log; Debug works in released builds too. - Severity colours are blue, orange, and red.
- Codex accounts are shown as ChatGPT. The provider id the command line takes stays
codex. - Breaking from 0.7.x: the
openusageJSON keysprovidersby account id (codex@1a2b3c4d), not
by provider (.providers.codex);openusage codex | jq '.providers[]'reads every ChatGPT account.
displayNamenames the account the way the app does (ChatGPT · Work).
schemais nowopenusage.limits.v2, so a script can tell this shape from 0.7.x'sv1.
Theerrorskey is gone: the command no longer refreshes, and an account shows"stale": trueonce
its last fetch is pastexpiresAt.
expiresAt, the moment an account turns stale, is 10 minutes afterfetchedAtinstead of 5, when
the app shows its clock next to the account.
Exit code4now means nothing has been fetched yet for the named accounts, not that a refresh failed.
ChatGPT'screditValueresource is gone;creditsstill reports the credit count.
Copilot'sorgCreditsandorgSpendmoved to an organization account; a personal account no
longer reports them. - New app icon.
- Claude: when Anthropic rate-limits a login, every card on it waits out the limit, across a relaunch
too, and cards signed in to one login share one usage request. - A provider's
Retry-Afterwait is honored up to an hour; a longer one is cut to an hour. - A provider number too large for the app, such as a window length, count, or credit balance, no
longer crashes it: the value is treated as malformed. A reset that far off shows the longest countdown. - Sign-ins: an outage, a rate limit, or a lost connection while renewing a sign-in no longer reads as
an expired sign-in. The refresh is tried again later, and a token that still works stays in use. - Sign-ins: a renewed sign-in the Keychain refuses to save stays in use and is saved on the next
refresh, so the account no longer has to be added again. - OpenRouter: a Management key shows Balance and what the standard keys in your default
workspace spent today, this week, and this month. A standard key shows its own spend and Key Limit. - OpenRouter: a Management key scoped to one workspace can be added. It shows that workspace's spend,
without Balance, which OpenRouter keeps from workspace keys. - OpenRouter: a Management key adds Yesterday and Prior 30 Days from OpenRouter's activity. Resting
the pointer on a range shows its BYOK spend, tokens, and top models. A standard key adds Budget and
Free Requests. - OpenRouter: Today, This Week, and This Month no longer show the BYOK an earlier build saved. BYOK
shows only when resting the pointer on a range. - Accounts: a new Cursor account is named after its email, not "Cursor Account".
- Accounts: every account has a name the card shows. A blank name, or one that only repeats the
provider's, becomes<Provider> Account, such asOpenRouter Account, for existing accounts too. - Provider responses are no longer saved to a cache under
~/Library/Caches. The last fetched usage is
saved on this Mac in the app's own preferences, with account names and the layout. - Accounts: a new Ollama account is named after its ollama.com email, not "Ollama".
- Claude: the plan reads Max or Ultra, Anthropic's new names for Max 5x and Max 20x.
- Cursor: Today, Yesterday, and Last 30 Days add the tokens Cursor reports, and resting the pointer on a
range shows what Cursor reported for it: the charge, usage events, each kind of token, and the top
models. - Dashboard: resting the pointer on a range with nothing but a zero total says
<Provider> didn't report any data for this range., for every provider. - Ollama: new Today, Yesterday, and Last 30 Days rows show the usage value and tokens Ollama reports
for each UTC day, a Requests row counts the last 30 days' requests, and resting the pointer on a
range shows what Ollama reported for it: requests, each kind of token, and the top models. - ChatGPT: Today, Yesterday, and Last 30 Days show the tokens counted on UTC days, and Credit Limit
shows a workspace's spending limit. Resting the pointer on a range shows what ChatGPT reported for it. - Grok: a new sign-in no longer asks for
profileorapi:access, so its token can't run Grok
models. Add the account again to drop them from an existing sign-in. - Accounts: connect a CLIProxyAPI server with its address and management key, and its Claude,
ChatGPT, Antigravity, Devin, and Grok logins show as accounts, kept in step with the server. A login
you also signed in directly shows twice; the hub's copy carries the CLIProxyAPI mark. - Accounts: each CLIProxyAPI hub is one row under your accounts. Its page lists the accounts it mirrors
and holds Replace Management Key… and Remove Hub…. You can connect more than one hub. On hub and
account pages, the replace-key and remove actions sit together in one card. - CLIProxyAPI: a hub on Tailscale connects over http, the Connect sheet shows one message at a time,
and it says when a hub doesn't use https. - Panel: it is exactly as tall as its content, with no empty space under a short list, and its top edge
no longer jumps while it resizes. On macOS 15 it grows with the slide back from Accounts, not after it. - Accounts: accounts keep one order on every screen, grouped by provider, and an account keeps its place
when another account of its provider is removed. - Accounts: a saved account this build can't read no longer hides the others, and it is kept as it was.
- Accounts: renaming an account keeps ⌘Z undo for the layout. Hiding every metric shows a line pointing
to Accounts, not the Add an Account screen. - Accounts: replacing a key that was waiting out a rate limit reads the new key at once.
- Copilot: an organization account's right-click menu opens its Organization Billing page.
- Sign-ins: Claude and Antigravity send a random
state, never the PKCE verifier. A pasted Devin token
is masked. - Sign-ins: a stray request to the sign-in callback, or a network error during a device-code sign-in,
no longer ends the sign-in. - Sign-ins: a Claude sign-in whose profile can't be read fails with Try Again instead of adding an
account with no identity, and Sign In Again always checks the new sign-in with its own request. - Antigravity: a refused token is renewed once, as in 0.7.16, and a failed project lookup is tried again
on the next refresh instead of reading as an expired sign-in. - Refresh: one stuck read no longer stalls every refresh and notification.
- Rate limits: a manual refresh, an early sign-in renewal, and a Claude request that finishes late all
respect the provider's newest rate-limit wait. Copilot reads GitHub's rate-limit 403 as a rate limit,
not a rejected token, and Antigravity keeps the wait when both of its hosts answer 429. - Claude: once a reset spends a grant's last reset, a reset left on another grant can be claimed without
waiting for the next hourly check. - Cursor: a usage event without tokens adds 0 tokens, so it no longer hides its range's token total.
- Notifications: Settings reads the notification permission from macOS each time, so a permission
turned off in System Settings shows as off.
Kept
- Automatic updates through Sparkle, with the same release feed, the beta channel, and the update
banner. - Check for Updates… in the dashboard's ⋯ menu, between Settings and Report an Issue…, as in 0.7.x.
The dev build shows it and the Settings Updates section disabled instead of hiding them. - Anonymous telemetry through PostHog, with the same opt-out in Settings for extra analytics. An
anonymous daily active ping and crash reports are always sent; they are not optional. - Notifications, keyboard shortcuts, Launch at Login, Theme, and Time Format.
- The Almost Out, Cutting It Close, and Will Run Out switches in Settings, named after the alerts they
send. A line under each says when it fires, in place of 0.7.x's info button. - The proxy setting in
~/.openusage/config.json, which now covers sign-in too and logs an error
when the file is invalid. - Your 0.7.x hidden metrics, metric order, and provider order, on the first account you add for each
provider, from the account 0.7.x had on. Stars don't carry over. 0.7.x's saved layout stays on disk
unchanged, so a downgrade finds it as it was. - The OpenRouter and Z.ai keys you typed into 0.7.x, added once as accounts on the first launch when
the provider has no account yet, 0.7.x had it on, and the key still passes a usage read. A key that
couldn't be checked or saved is tried again on the next launch. The key files stay unchanged. - Hide From Screen Share, which shows the app icon in the menu bar instead of usage while the
screen is shared or recorded. - ChatGPT's Extra Usage row shows the credits' dollar value, an estimate at 4¢ a credit.
- Copilot Org Credits and Org Spend, now on an organization account added with an owner's or billing
manager's token. - The
openusagecommand, which now prints what the app last fetched and nothing computed.--force
is accepted and does nothing. - OpenRouter's Credits quick link, after Status Page and Usage Dashboard.
- Ollama's and Z.ai's API Keys quick link, after Usage Dashboard.
- Z.ai's notice when a key has no GLM Coding Plan.
- Claude's Extra Usage reads like
$12.34 spentwhen the account sets no monthly limit. - A Grok team account's plan, shown beside the notice that the account has no personal quota.
- Cursor Enterprise and Team seats that Cursor's plan endpoint reports as Pro keep their Enterprise or
Team label, Extra Usage, and request-based usage. The membership now comes from Cursor's
usage-summary, read once an hour, not from Cursor's local database. - Cursor's Today, Yesterday, and Last 30 Days rows, now the dollars Cursor reports it charged for
on-demand usage. Usage your plan includes counts as $0, and the Usage Trend chart is gone. - Devin's Daily, Weekly, and Extra Usage rows. Sign in on windsurf.com and paste the token it shows,
or paste a Windsurf API key. - Claiming a Claude or ChatGPT rate-limit reset refreshes that account right away, so its meters and
Limit Resets count update as soon as the result shows.
Changelog
Full Changelog: v0.7.16...v0.8.0-beta.1
- 7129ab2 Bring the new OpenUsage into main: accounts sign in, API-reported usage only (#1444) by @robinebers
- 5d5b73a Add Credits back to OpenRouter's quick links by @robinebers
- cdea8a1 The openusage JSON drops its always-empty errors key by @robinebers
- bb5644e The changelog tells a 0.7.x script what it loses and how to read every account by @robinebers
- d9ca8ef Replace an API-key account's key from its page (#1455) by @robinebers
- 428d142 Hide usage from the menu bar while the screen is shared or recorded (#1454) by @robinebers
- 89d6677 Merge pull request #1450 from robinebers/restore/openrouter-credits-link by @robinebers
- f4c334c Merge pull request #1453 from robinebers/restore/cli-compat by @robinebers
- 38d29fc Name a Z.ai key that has no GLM Coding Plan (#1451) by @robinebers
- d72b83b ChatGPT's Extra Usage row shows the credits' dollar value again (#1452) by @robinebers
- 81e13c3 Show Copilot Org Credits and Org Spend as an Organization Billing account (#1456) by @robinebers
- e872965 Open a Copilot organization's billing page from its account menu by @robinebers
- 8f9720b The panel is exactly as tall as its screen's content, with no minimum height (#1458) by @robinebers
- f93c857 Merge pull request #1459 from robinebers/fix/copilot-org-billing-link by @robinebers
- 28ffb97 fix(oauth): send a random state, never the PKCE verifier (#1460) by @robinebers
- 886b3c4 fix(providers): restore the Grok team plan and Claude's "spent" word (#1463) by @robinebers
- f9bb8bb fix(oauth): treat only a refused token renewal as an expired sign-in (#1461) by @robinebers
- ee3bf06 fix(cli): use the app's account names and staleness rule (#1466) by @robinebers
- c354c8a feat(proxy): restore the config-file proxy for provider requests (#1464) by @robinebers
- 9d58bb2 Host the dashboard below the panel's content view so SwiftUI never sizes the panel (#1470) by @robinebers
- 7058825 fix(openrouter): read usage by key kind and restore Credits and Key Limit (#1467) by @robinebers
- e20a473 fix(accounts): keep stored accounts this build cannot read (#1462) by @robinebers
- 44637bb feat(cursor): take Enterprise and Team membership from usage-summary (#1465) by @robinebers
- d0ca505 feat(devin): restore Devin with a Windsurf token sign-in (#1468) by @robinebers
- 2114114 feat(layout): carry over 0.7.x stars and order, and leave 0.7.x's keys untouched (#1469) by @robinebers
- f34d5b8 test(layout): expect 0.7.x's Credits star on the restored Credits meter (#1473) by @robinebers
- 8093f14 feat(accounts): name Cursor accounts by email and show a repeated provider name once (#1472) by @robinebers
- 61944da fix(release): close the nine P3 follow-ups from the release review (#1471) by @robinebers
- 8ed39cf feat(devin): star Daily and Weekly by default (#1475) by @robinebers
- 17ad52a docs: align the provider guide and test command with main (#1476) by @robinebers
- 815d8d3 docs: correct the changelog's reorder, undo, and CLI breaking changes (#1477) by @robinebers
- 26bf253 feat(accounts): add API Keys back to Ollama's and Z.ai's quick links (#1478) by @robinebers
- 06636b6 docs: say crash reports ignore the analytics opt-out (#1479) by @robinebers
- aa2e748 docs(changelog): list the removed Density setting and Reset All Customization (#1480) by @robinebers
- 75bbaa7 feat(accounts): import 0.7.x's OpenRouter and Z.ai keys once (#1484) by @robinebers
- c926ffb fix(script): read the front app's display name in test_quiet.sh (#1487) by @robinebers
- 7950aa5 test(macos15): make the top bar and sign-in sheet tests pass on macOS 15 (#1489) by @robinebers
- 36f5d96 fix(popover): grow the panel with the slide on macOS 15 (#1490) by @robinebers
- 520caec fix(http): stop caching provider responses (#1486) by @robinebers
- e4cd530 fix(resets): refresh the account as soon as a reset claim lands (#1488) by @robinebers
- 0f2da90 feat(ollama): name Ollama accounts by their ollama.com email (#1482) by @robinebers
- 91ea4a0 feat(cursor): show what Cursor charged today, yesterday, and in the last 30 days (#1483) by @robinebers
- 3b615db fix(menu-bar): stop dimming the strip when an account is stale (#1493) by @robinebers
- d965a74 feat(accounts): mirror CLIProxyAPI hub logins as Claude and ChatGPT accounts by @robinebers
- 8f3398b docs(changelog): note CLIProxyAPI hub accounts by @robinebers
- cdd786c feat(cliproxyapi): show a login once when it is on a hub and signed in directly by @robinebers
- 7e3982e refactor(cliproxyapi): drop the resync mailbox and unused conformances by @robinebers
- c025046 revert(cliproxyapi): show a login on a hub and signed in directly twice by @robinebers
- e1c959c fix(cliproxyapi): show a hub Claude plan on its first refresh and skip disabled logins by @robinebers
- a5c3a6e feat(cliproxyapi): mark a hub account's card with the CLIProxyAPI glyph after its plan by @robinebers
- 3bfb106 feat(cliproxyapi): move the hub mark from the plan to after the account name by @robinebers
- 6cd3cac feat(cliproxyapi): mirror Antigravity, Devin, and Grok hub logins (#1491) by @robinebers
- d83e0a6 feat(cliproxyapi): turn the hub off behind CLIProxyHub.isEnabled until it is finished by @robinebers
- 461e77c refactor(cliproxyapi): gate only the Add Account choice and drop the hub doc while it is off by @robinebers
- a936e1e fix(cliproxyapi): keep a late rejection of a replaced key from stopping the new one by @robinebers
- 5fa5f01 Merge pull request #1474 from robinebers/cliproxyapi-hub-accounts by @robinebers
- dd94b65 fix(claude): show Max and Ultra plan names (#1499) by @robinebers
- 05baba8 fix(cliproxyapi): keep stored hubs inert while the hub is off (#1508) by @robinebers
- 9d704d4 fix(refresh): cap Retry-After waits at an hour (#1505) by @robinebers
- 498677a fix(accounts): retry the 0.7.x key import until the key is saved (#1507) by @robinebers
- 6133346 fix(antigravity): renew a refused token once and retry a failed project lookup (#1510) by @robinebers
- df3901d docs: list the removed appearance settings and correct the cache wording (#1509) by @robinebers
- 5505e59 fix(refresh): keep a stuck hourly read from stalling every refresh (#1506) by @robinebers
- a050846 feat(cursor): show tokens, usage events and per-range breakdowns on a shared usage history (#1501) by @robinebers
- 7268b48 fix(settings): title notification rows after the alerts they send (#1481) by @robinebers
- fada9bc fix(cli): name the account-keyed limits JSON openusage.limits.v2 (#1504) by @robinebers
- fd48f14 fix(layout): carry over the enabled 0.7.x account's layout (#1514) by @robinebers
- 0208a4d fix(openrouter): accept a workspace-scoped management key (#1512) by @robinebers
- 66f7c9c fix(sign-in): keep the loopback callback listening through stray requests (#1513) by @robinebers
- e504a1c fix(auth): keep renewed tokens when the Keychain write fails (#1515) by @robinebers
- b91d417 fix(providers): reject provider numbers too large for an Int (#1518) by @robinebers
- c170e3d fix: keep card ids unique, undo across a rename, and device sign-in through a network error (#1516) by @robinebers
- dc3bf01 fix(cursor): count an event without token usage as zero tokens (#1519) by @robinebers
- d72e810 feat(ollama): show usage value, tokens and requests from /api/usage (#1520) by @robinebers
- f619b4a fix(accounts): a replaced key clears the old key's 429 hold (#1511) by @robinebers
- 10ac77a fix(claude): a late success keeps a newer 429 window (#1527) by @robinebers
- 502867a fix(auth): wait out Retry-After before renewing a sign-in early again (#1526) by @robinebers
- 638affc fix(refresh): a waiting manual refresh respects a fresh 429 (#1521) by @robinebers
- 1adeac3 fix(claude): fail a sign-in whose profile read failed instead of adding a duplicate (#1525) by @robinebers
- bfed8f8 fix(sign-in): mask the pasted Devin token (#1530) by @robinebers
- b1ed495 feat(openrouter): show BYOK, budget, free requests and activity on the shared usage history (#1523) by @robinebers
- 8a0c696 fix(claude): re-read reset grants once a grant is spent (#1531) by @robinebers
- 53d0414 feat(codex): show daily credits, tokens, turns and the credit limit (#1524) by @robinebers
- a98a3ab fix(accounts): order accounts the same way on every screen and keep it after a removal (#1522) by @robinebers
- 0455ae9 fix(dashboard): show a hidden-metrics state, not onboarding, when accounts exist (#1528) by @robinebers
- 5144e17 test(dashboard): send a double-click's clicks back to back (#1533) by @robinebers
- 2114be5 fix(providers): read 403 rate limits and dual 429s as rate limits (#1529) by @robinebers
- 42fd173 fix(settings): re-read notification permission (#1532) by @robinebers
- daa3ff0 fix(refresh): keep one Keychain read in flight per account and check Claude's due reads first (#1517) by @robinebers
- 0118a32 ci: time out the Build and Test job after 20 minutes (#1534) by @robinebers
- cde20d3 chore(deps): bump github.com/sparkle-project/sparkle (#1503) by @dependabot[bot]
- 0a761af chore(deps): bump github.com/posthog/posthog-ios from 3.92.0 to 3.92.7 (#1502) by @dependabot[bot]
- 4f1b92f feat(dashboard): rebuild the panel around Priority and All Usage (#1535) by @robinebers
- f39ac7a fix(claude): make a new sign-in prove itself with its own request (#1536) by @robinebers
- 92140f0 feat(accounts): open the Default Tab after a successful Sign In Again (#1537) by @robinebers
- 673842d docs(changelog): match the Unreleased notes to the Priority rebuild (#1539) by @robinebers
- 75e1ab1 fix(accounts): show Sign In Again only when the account needs attention (#1538) by @robinebers
- a69d4da feat(accounts): hide and reorder an account's metrics from its page (#1540) by @robinebers
- 6b5452c fix(grok): stop asking for profile and api:access at sign-in (#1541) by @robinebers
- 0231165 feat(settings): bring back Log Level under Advanced → Debug (#1542) by @robinebers
- a67a783 fix(zai): read a 401 inside an OK response as a rejected key (#1543) by @robinebers
- 03fa48b feat(dashboard): tell 0.7.x upgraders why their accounts are gone (#1544) by @robinebers
- a375380 feat(dashboard): welcome 0.7.x upgraders back on the empty dashboard (#1546) by @robinebers
- 587ed16 fix(openrouter): drop the Credits bar, which has no limit behind it (#1547) by @robinebers
- c5a2f41 fix(panel): fade content under the bars instead of the system glass edge (#1548) by @robinebers
- 1acc905 fix(openrouter): show dollars in history rows and tokens and BYOK in a Cursor-style popup (#1550) by @robinebers
- 31f7109 fix(panel): soft edge under the footer only, clean edge under the headers (#1549) by @robinebers
- 8b21637 fix(openrouter): drop BYOK from saved rows, share one popup empty state, name every account (#1552) by @robinebers
- 161f19b feat(menu-bar): show the app icon with a dot when an update is available (#1554) by @robinebers
- 313213a feat(priority): pin metrics to a Pinned section at the top of Priority (#1553) by @robinebers
- 16d35bc fix(dashboard): always show time-range rows at 0 and disabled Extra Usage as no data (#1555) by @robinebers
- 88e4261 fix(dashboard): always show balances at $0 and hide disabled Extra Usage (#1557) by @robinebers
- cd3ba30 fix(updates): restore Check for Updates… in the Options menu (#1556) by @robinebers
- 759e6f1 feat(priority): keep the Running Out header above All Clear and pin from the row menu (#1558) by @robinebers
- debd37a feat(priority): put Priority Icons first in Display and list running-out pins only under Running Out (#1559) by @robinebers
- 5fe11a9 feat(priority): drop the big All Clear and always show the Running Out row (#1560) by @robinebers
- 4381761 feat(share): sign share images with a tinted OpenUsage footer band (#1561) by @robinebers
- 1ae841d fix(cliproxyapi): harden hub keys and the login mirror, then turn the hub on (#1545) by @robinebers
- 61f39c2 fix(accounts): keep a provider turned off in 0.7.x off on upgrade, and correct the notes (#1562) by @robinebers
- 0c4ef6d fix(cliproxyapi): allow http to Tailscale hubs and show one message on Connect (#1563) by @robinebers
- 66d706c feat(dashboard): show skeleton rows until an account's first reading, and flag Needs Attention only after a failed refresh (#1564) by @robinebers
- 7b232e9 feat(accounts): nest CLIProxyAPI hub accounts under a hub page (#1565) by @robinebers
- 111b414 docs(readme): show Priority and All Usage in light and dark (#1567) by @robinebers
- b192a36 docs(readme): cut the README down to a short product page (#1568) by @robinebers
- e33b32f docs: put every docs page on a prose diet (#1569) by @robinebers
- d6835e8 docs(providers): list Cursor and Ollama history rows in the summary table (#1570) by @robinebers
- fcb5085 ci(release): add a manual Test Build workflow for signed DMGs without a release (#1571) by @robinebers
- 87ef48f ci(release): show CHANGELOG notes in Sparkle's update window (#1573) by @robinebers
- 596ca10 docs: changelog for v0.8.0-beta.1 (#1575) by @robinebers