Open source contribution · Rust · macOS · Linux · Waybar
akitaonrails/ ai-usagebar
Native status bar and system tray app for real-time monitoring of AI consumption quotas across multiple providers (OpenAI, Anthropic, Claude, Kimi, MiniMax).
- 44 merged PRs
- 154 commits to the project
- +3.8k lines added
- 641 GitHub stars
The project
ai-usagebar shows, right in the system bar, how much of each AI service plan has been used: Claude, Codex/ChatGPT, GitHub Copilot, OpenRouter, DeepSeek, Kimi, Devin and others. It runs as a native panel on Linux (Omarchy, Waybar, GNOME, KDE Plasma), on macOS and on Windows, plus a terminal dashboard, and it warns when a quota gets close to its limit.
For anyone paying for several AI plans, the number in the bar decides whether a task can go on or it is time to switch accounts. And since the tool holds access keys to those services, protecting those credentials matters as much as showing the right number. Most of the contributions below focus on those two points.
Highlights
The PRs with the largest effect for people who rely on the project every day.
-
#266merged Sep 27, 2026
Multiple accounts per provider for eight more API-key services
Anyone using more than one key with the same provider, for example to separate work from personal use, can follow each one's usage without mixing the numbers. Existing configurations keep working with no changes.
-
#325merged Oct 3, 2026
Config file errors no longer reveal the API key
A common typo no longer exposes the API key on screen or in the terminal output, and the user still knows exactly where to fix it.
-
#306merged Oct 3, 2026
Monthly Ollama Cloud plans stop showing a fake 0% in the bar
Anyone on a monthly Ollama Cloud plan stops seeing percentages for windows their plan does not have and sees the usage that actually limits it.
How each PR was made
-
One problem per PR
Each PR fixes a single thing with the smallest possible change. That keeps reviews simple, lowers the risk of side effects and lets one change be reverted without taking others with it.
-
The problem becomes a test
Fixes come with automated tests that cover the case that used to fail, so the problem cannot come back unnoticed.
-
The project's own bar
Formatting, static analysis and the full test suite run in the project's continuous integration, and a change only lands after the maintainer's review.
-
Written for the reviewer
Each PR description explains the problem, the change and how it was tested, so the maintainer can decide with confidence.
Where the work went
Each PR solves a single problem. Grouped by what it changes for the people using the tool:
-
11 PRs
Keys and data protection
API keys kept out of error messages, of files other users can read and of other programs, and outside text sanitized before it reaches the screen.
-
14 PRs
Trustworthy numbers
What the bar shows matches real usage: no fake percentages, no mixed-up rows and the right error when something fails.
-
8 PRs
More accounts and providers
Several accounts per provider, every service complete on every platform and logins that renew without asking to sign in again.
-
8 PRs
Consistent experience
Settings that stick, the same behavior on every screen, complete translations and documentation that points the right way.
-
3 PRs
Secure distribution
Packages with verified signatures and checksums, and automated checks before every release.
Every PR, in business terms
Click a PR to see the problem, what was done and the value delivered. The link at the end of each one leads to the full technical discussion on GitHub.
Keys and data protection 11 PRs
-
#402merged Oct 11, 2026 Antigravity session read without passing on other providers' keys To read the Google session used by Antigravity, ai-usagebar calls the system password vault, and that call inherited every other provider's API key; they are now removed first.
- The problem
- Antigravity relies on a Google session stored in the system password vault, read through external system tools on Linux and macOS. Those tools were launched inheriting every environment variable holding other providers' access keys, on each refresh that fell back to the saved session. The equivalent Grok Bot lookups already removed those keys.
- What was done
- The call on each system was reorganized to remove the keys before the lookup runs, without changing what is looked up or how. The reorganization and the behavior change were kept in separate steps, and a test confirms the removal on Linux and macOS.
- Value delivered
- API keys no longer reach a program that has no use for them, and the Antigravity lookup now follows the same rule as the tool's other outside calls (Grok Bot, Claude, Codex, GitHub and agy).
-
#399merged Oct 11, 2026 Remaining provider text made safe before reaching the bar Claude's plan and model, Codex's balance and Ollama's cost still went into the custom bar text untreated, where a & or < broke the display; all of them are now handled.
- The problem
- After the fix for five providers (PR #343), four format placeholders still carried provider text untreated: Claude's plan and model name, Codex's balance when OpenAI sends something that is not a number, and Ollama's cost. Ollama's default hover text also printed the activity period untreated. Any of them containing & or < reached Waybar as broken formatting.
- What was done
- The four placeholders and Ollama's period are now converted to safe text at the same point where each provider already handles its plan names. With this, the treatment the documentation already promised for plan and model names now actually holds for all of them.
- Value delivered
- Closes the remaining cases, including Claude, the last provider whose plan name went through untreated. People who customize their bar no longer see it break over unexpected provider text in these fields.
-
#344merged Oct 4, 2026 Extra Codex account sign-in no longer gets other providers' keys When adding an extra Codex account, the sign-in program received other providers' API keys stored in the environment; they are now removed before it starts.
- The problem
- The command that adds an extra Codex account opens Codex's own interactive sign-in. That program was launched inheriting the environment variables holding other providers' access keys. The Claude sign-in already removed those keys; the Codex one had been left out.
- What was done
- The Codex sign-in now goes through the same cleanup as Claude's: the fixed list of known keys and any custom variable names the user configured are removed before the program starts. New tests check the cleanup on both sign-ins.
- Value delivered
- Narrows API key exposure: the Codex sign-in no longer receives other providers' keys, the same protection the Claude sign-in already had.
-
#343merged Oct 4, 2026 Plan and model names made safe before entering the bar text For five providers, plan and model names went into the custom bar text untreated, and a single & or < was enough to break the display; that text is now made safe first.
- The problem
- Users who build their bar or hover text from custom format placeholders got the plan and model names of Cursor, Z.AI, OpenAI (Codex), Kilo and Ollama untreated, most of them coming from the providers' APIs. Because the bar reads certain characters as formatting, a name containing & or < produced invalid text that Waybar rejected. These providers' default text was already handled; only the custom path was exposed.
- What was done
- The names are now converted to safe text at the point where they enter the placeholders, the same pattern already used for Kiro, OpenRouter and Antigravity. Each of the five providers gained a test with names containing & and <, which fails on the previous version.
- Value delivered
- Plan and model names from these five providers can no longer break or alter the formatting of a customized bar, and these providers now follow the rule others already did.
-
#328merged Oct 3, 2026 Named-account keys no longer leak to other programs The external tools ai-usagebar launches received keys from named accounts and from custom-named variables; those keys are now removed before each launch as well.
- The problem
- Before launching external tools such as the GitHub, Grok, Antigravity and Claude command-line programs, ai-usagebar strips provider keys from the environment variables passed to them so each key reaches only the service it belongs to. The list, however, held only the default names and those of custom providers. Keys from named accounts and from variables the user renamed, OpenRouter management keys included, were passed to all of those tools.
- What was done
- When the configuration loads, the program now registers for removal the variables of every named account, the default names the user changed and OpenRouter's management keys. Invalid or already covered names are still ignored, and two new tests fail on the previous version.
- Value delivered
- The rule that each key reaches only its own provider now also holds for people using named accounts or custom names, reducing the exposure of credentials to third-party programs.
-
#326merged Oct 3, 2026 A key pasted into the wrong field stays out of error messages Anyone who pasted their API key into the field meant for the environment variable's name saw the key repeated in two error messages; they now name only the field.
- The problem
- The field meant for the name of the environment variable that holds the key sometimes gets the key itself, pasted in the wrong place. The program already avoided repeating that value, but two messages still showed it: Kimi's no-credentials error and the validation error for custom providers, which stops the whole configuration from loading. The key reached the bar's details popup, the scripting report and the terminal dashboard.
- What was done
- Kimi now names the variable only when it is a valid name and otherwise asks for a valid variable without repeating the value. The custom-provider error names the field without its content. Each message gained a test that fails on the previous version, and valid names still appear to guide the fix.
- Value delivered
- A common data-entry slip no longer exposes the API key on screen, and the message still points to the field that needs fixing.
-
#325merged Oct 3, 2026 Config file errors no longer reveal the API key A typo in the config file made the error message repeat the offending line, often the one holding the API key; the message now points to the line and column without showing its content.
- The problem
- Error messages for a config file that failed to load quoted the line where reading stopped. The most common mistake is a missing quote, and when it happens on an API key written in the file, the quoted line is the key itself. It showed up in the bar's details popup, in the warnings of every interface, in the scripting report, in the terminal dashboard, on the settings screen and in the error output.
- What was done
- A small function builds the message from the line, column and explanation only, without the line's content, and it applies wherever the file is read or written, including when accounts are registered. When the problem is a value of the wrong kind, the message still names the setting. The position is enough to find the mistake.
- Value delivered
- A common typo no longer exposes the API key on screen or in the terminal output, and the user still knows exactly where to fix it.
-
#320merged Oct 3, 2026 A config file holding an Ollama Cloud key is locked to its owner The protection that restricts the config file to its owner when it holds an API key did not recognize the Ollama Cloud key; it now gets the same protection as every other.
- The problem
- On Linux and macOS, when the config file has an API key written in it, the program restricts reading to the file's owner. The Ollama Cloud key was the only one of sixteen key fields missing from the list that triggers this protection. A file whose only key was Ollama's kept the permissions it was created with, usually readable by every user on the machine.
- What was done
- The Ollama Cloud key joins the list that triggers the protection. The new test walks every provider instead of naming each one, so a future provider that gains an in-file key without joining the list makes the test fail.
- Value delivered
- Anyone keeping their Ollama Cloud key in the config file no longer exposes it to other accounts on the same machine, and the automated check covers the providers to come.
-
#318merged Oct 3, 2026 SuperGrok stops showing the raw response from a failed login With an expired SuperGrok login, the screens showed up to 200 characters of the server's response instead of the neutral message already stored on disk; they now show exactly what was recorded.
- The problem
- On an authentication refusal, ai-usagebar stores only a neutral message on disk, because the server's response may carry account details. For SuperGrok, with an expired or revoked Grok Build login and the bar falling back to the last saved figure, the message on screen was still built from the raw response, up to 200 characters. It appeared in the Waybar details popup, the terminal dashboard and the scripting report on every new check.
- What was done
- The screens now show exactly the message stored on disk, as the other providers already did. The error is still recorded only when a saved figure goes on screen. A new test simulates a refusal whose response contains an email address and fails on the previous version.
- Value delivered
- SuperGrok users no longer have the content of an authentication response exposed in the bar, the dashboard or scripts, and what appears on screen matches what is recorded.
-
#317merged Oct 3, 2026 Antigravity custom formats no longer break the Waybar bar A bar format showing Antigravity's "Claude & GPT OSS" model group handed Waybar invalid text; those names and the plan name are now made safe before entering the bar.
- The problem
- The documentation offers markers to show Antigravity's model group names in a custom format, and one group is called "Claude & GPT OSS". The text went untreated into the bar and its details popup, and a bare & is invalid in the formatting Waybar interprets, so the text was rejected. The plan name, which comes from the service itself, took the same path.
- What was done
- The five text fields (the plan and the four group names) are now converted to a form the formatting accepts before going into the bar and the details popup, the pattern Kiro and OpenRouter already followed. GNOME and macOS keep showing a plain &.
- Value delivered
- Anyone customizing the bar can show any model group without Waybar rejecting the text, and what comes from the service can no longer alter the bar's formatting.
-
#281merged Sep 29, 2026 Account command messages free of hidden terminal codes The account management commands now clean folder paths and account names before showing them, and Claude Desktop history merging no longer competes with an account switch for the same profile.
- The problem
- The commands that add accounts, switch between them and merge conversation history across Claude Desktop profiles printed folder paths and account names untreated. A deliberately crafted name could carry terminal control codes able to change what appears on screen. History merging also touched the profile without the lock used by account switching and login renewal, so the processes could write the same files at once.
- What was done
- Every message from these commands now goes through a single cleanup before reaching the terminal, and a guard test rejects any new message that shows a path or error without it. History merging now waits for the same lock as account switching before touching the profile.
- Value delivered
- Anyone managing several accounts is protected from text that manipulates the terminal and from two processes changing the same profile at once, which can corrupt it. The guard test keeps future messages from bringing the problem back.
Trustworthy numbers 14 PRs
-
#401merged Oct 11, 2026 Claude card color on KDE reflects the quota again In the KDE widget's card view, the Claude card turned red because of a session at 90% context while quotas sat at 29%; the color now comes from the quotas.
- The problem
- The KDE Plasma widget's card view colors each card with the highest severity among all its rows. Claude Code session rows, which measure context window use rather than quota, were part of that count. With a session at 90% and quotas at 29%, the main number read as calm, yet the Claude card turned red.
- What was done
- The card color now follows the same separation already applied to the main number and the panel slots: quota rows decide, and session rows count only when the provider has nothing else. The list of rows inside the card still shows everything.
- Value delivered
- Closes another spot on KDE where a long conversation looked like an exhausted quota, and the card now agrees with the widget's own main number.
-
#400merged Oct 11, 2026 Windows tray icon no longer turns red because of a session On Windows, a Claude Code session with a nearly full context turned the tray icon red even with quotas at 29%; the color now comes from the quotas.
- The problem
- The Windows tray icon takes its color from the most critical metric across all providers, and that count included Claude Code session rows, which measure context window use (the conversation size limit), not quota. A session at 90% painted the icon red while the quotas sat at 29%. Within the tray app, it was the last place still mixing sessions with quotas.
- What was done
- The color calculation now skips breakdown rows whenever the provider has a quota of its own; with no quota, they still count, as on the other screens. It is the same separation already used on Omarchy, Linux Mint, KDE and the macOS menu bar.
- Value delivered
- Red in the Windows tray once again means a quota is running low, and a long conversation no longer raises a false alarm at a glance.
-
#394merged Oct 11, 2026 Nous Research credits shown without a stray decimal point Nous Research credit amounts with a tiny fraction appeared as "1." or "0."; they now come out as clean numbers.
- The problem
- Nous Research credits are shown with up to six decimal places, without trailing zeros. When the fraction was so small it rounded to zero, such as calculation residue near a whole number, all the zeros went away but the point stayed, so the bar and its details showed values like "1." or "0.".
- What was done
- After the zeros are removed, the formatting now also drops a decimal point left dangling at the end. Whole numbers and ordinary decimals stay the same.
- Value delivered
- Nous Research credit balances now always appear as well-formed numbers, on the bar and in its details.
-
#391merged Oct 9, 2026 No more false critical alert at the start of a weekly quota Normal use in the first hours of a weekly quota set off a critical alert even with 88% left; it is now a yellow warning, and meters always show what has been used.
- The problem
- The panel projects the pace of consumption to warn when a quota will run out before it renews. Early in a long window, such as the weekly quota of SuperGrok, Claude or Codex, a few hours of normal use already projected more than double the quota and set off the critical alert, with a flame and a run-out date. When showing what is left, the result was an 88%-full bar painted red.
- What was done
- In the first 15% of a window (roughly the first 25 hours of a week), with at least half of the quota still free, fast consumption now raises a yellow warning without the flame; Linux Mint got the same rule. Meters in the panel and the menu bar now always fill with what has been used (revisiting the direction taken in PR #389), and the used/left option changes only the numbers. A row at 0% also no longer vanishes against the dark macOS menu bar.
- Value delivered
- The critical alert signals real risk again: burning 55% in the first eight hours of a week still raises the alarm, but ordinary early-week use no longer looks like an emergency.
-
#373merged Oct 8, 2026 Signed-out Codex asks for sign-in instead of a false rate limit With an empty Codex login, ai-usagebar could query OpenAI without a credential and show a false rate limit, stuck for five minutes; it now asks the user to sign in again.
- The problem
- With the Codex login file signed out (blank credentials), the tool could try to renew access with an empty renewal code, which OpenAI rejected, or query usage with no credential. The server's refusal showed up as a temporary error and, when it came back as "too many requests", paused queries for five minutes, leaving the card wrong even after the user signed back in.
- What was done
- A blank credential is now treated as a sign-in problem, with a message asking to run "codex login", no network call and no pause. Renewal is attempted only when a renewal code is present, and in that case it restores access on its own before querying usage. Three new tests cover these paths.
- Value delivered
- Codex users get the right diagnosis and the action that fixes it, instead of waiting out a limit that does not exist. Claude already received the same treatment.
-
#363merged Oct 7, 2026 macOS menu bar badge no longer swaps the quota for a balance On macOS, the menu bar badge could show a provider's prepaid balance while its tab in the panel showed the quota; both now follow the same rule.
- The problem
- One of the macOS menu bar modes shows a badge with the provider's name and its highest usage percentage, the same number as the provider's tab in the panel that opens on click. When the provider also had a prepaid balance with a percentage, that balance joined the ranking: with 95% of it spent beside a weekly quota at 12%, the badge showed the dollar balance while the tab showed 12% (or 88% when showing what is left).
- What was done
- Balances no longer compete with quota windows and appear on the badge only when the provider has no window at all, the rule the panel already applied. Tests pin that rule on both sides, menu bar and panel, so they cannot drift apart again.
- Value delivered
- Anyone tracking usage from the menu bar sees the same number they find when opening the panel, in both reading modes. Two screens of the same tool stop contradicting each other.
-
#362merged Oct 7, 2026 KDE panel slots go to quotas, not to sessions In the compact KDE Plasma panel view, a Claude Code session could take one of the slots next to the quotas, with its own alert color; the slots now show quotas first.
- The problem
- The compact KDE widget that sits in the desktop panel shows a few numbers side by side. They were picked in report order without telling quotas apart from breakdown rows, so a Claude Code session at 90% of its context (or SuperGrok's per-product breakdown) appeared next to the 5-hour and weekly quotas and colored its slot with its own severity.
- What was done
- The slots now follow the same rule the widget's main number already uses: quota rows first, breakdown rows only when the provider has nothing else. How each slot looks is unchanged.
- Value delivered
- The panel's limited space now shows only what signals quota risk, with no visual alert caused by a long conversation. It closes a second path of the same problem on KDE.
-
#345merged Oct 4, 2026 A Claude Code session no longer trips the KDE widget's alarm On KDE Plasma, a Claude Code session with a nearly full context became the widget's main number and set off the alarm even with low quotas; the headline now comes from quotas only.
- The problem
- With context tracking on, the widget also receives recent Claude Code sessions, each showing how much of its context window (the conversation size limit) it has used. The main number took the highest percentage across all rows, so a session at 90% became the headline, painted the widget red and triggered the alarm while the 5-hour and weekly quotas were low.
- What was done
- The headline is now picked from the quota rows only; session rows stand in only when the provider has nothing else. This is the same rule already applied on Omarchy and Linux Mint. New tests show the widget reading 29% with no alarm in the scenario where it used to read a critical 90%.
- Value delivered
- The widget's alarm once again means a real risk of running out of quota, not a long conversation. KDE Plasma users now get the same headline Omarchy and Linux Mint already showed.
-
#324merged Oct 3, 2026 Linux Mint menu sums up the Claude quota, not a session The Linux Mint tray menu summary could show a single Claude Code conversation's percentage as if it were Claude's quota; it now reads the usage quotas.
- The problem
- With session tracking on, the Claude entry also lists each recent Claude Code session with how much of the conversation's text limit it already uses. The summary line in the Linux Mint tray menu showed the highest percentage across all of these, so a session at 90% appeared as Claude's usage while the 5-hour and weekly quotas were low.
- What was done
- Choosing the summary figure moves out of the graphical interface into the display rules module, where tests can reach it. The summary now picks among the quota rows, and grouped rows such as sessions are used only when an entry has nothing else. The full dashboard already kept those rows apart.
- Value delivered
- Linux Mint users see in the menu the figure that actually limits their Claude usage, under the same rule applied to the Omarchy bar.
-
#323merged Oct 3, 2026 Omarchy bar shows the Claude quota again, not a single session With session tracking on, a Claude Code conversation near its text limit became Claude's number on the Omarchy bar and set off the alarm, even with the quota low.
- The problem
- With session tracking on, recent Claude Code sessions appear alongside Claude, each with how much of its text limit the conversation already uses. The Omarchy bar picked the highest percentage across every row, so a session at 90%, even one from yesterday, became Claude's value, turned the indicator critical and lit the bar's alarm while the 5-hour and weekly quotas were low.
- What was done
- The indicator now reads only the quota rows, and grouped rows such as sessions are used only when an entry has nothing else. The same rule covers SuperGrok's per-product slices, which are also a breakdown. The test that already reproduced the case gained checks that fail on the previous version.
- Value delivered
- Omarchy users again get an alarm that follows the quota that actually limits usage, with no false critical alerts caused by one long conversation.
-
#319merged Oct 3, 2026 A rejected Grok key is now reported for the right reason A failed validation of the Grok management key was recorded as a generic error, which hid the warning from the bar, exposed the server's response and ignored the request limit.
- The problem
- With no team identifier configured, the default, every Grok check validates the management key before reading the prepaid balance. Errors from that step were stored without the server's status code: a revoked key put up to 200 characters of the response into the dashboard and report warnings, the Waybar bar showed the stale balance with no error at all, and a too-many-requests reply never triggered the five-minute pause.
- What was done
- The validation step now records the error with its status code, as the balance read already did. An authentication refusal becomes the standard neutral message, and too many requests trigger the shared pause. Network failures still fall back quietly to the last saved value.
- Value delivered
- Anyone tracking a Grok balance sees the key problem in the bar itself, without the server's response in the warnings, and the program stops insisting on a service that asked it to wait.
-
#316merged Oct 3, 2026 Kiro no longer mistakes a network outage for a bad login A network failure while renewing Kiro access showed up as a request to sign in again; it is now treated as a temporary failure, as with other providers.
- The problem
- Kiro access lasts about an hour and is renewed before the usage read when it is close to expiring. If the network failed at that moment, as on a laptop waking up before it reconnects, the error became "run kiro-cli login again" and was recorded as the last error, next to the stale figure or in its place. The login was fine.
- What was done
- Network failures during renewal now pass through as temporary failures, which quietly fall back to the last saved value, as Kiro's own usage read and the Claude, OpenAI and Antigravity providers already do. The sign-in request is reserved for when the server answers and rejects the renewal.
- Value delivered
- Kiro users no longer see a false sign-in prompt when the network drops or is slow to come back, and the credential warning once again means a real problem.
-
#306merged Oct 3, 2026 Monthly Ollama Cloud plans stop showing a fake 0% in the bar Ollama Cloud accounts with only a monthly limit showed 0% for 5-hour and weekly windows that do not exist; the bar now shows the real monthly usage.
- The problem
- Some Ollama Cloud Pro accounts report only a monthly limit, with no 5-hour or weekly window. The terminal dashboard and the report already showed that month, but the Waybar and macOS bars displayed 0% for the two missing windows and hid the real monthly usage. The documentation already promised the monthly percentage in the bar, and the code did not deliver it.
- What was done
- A window the account does not report is now left empty instead of turning into 0%, while real usage of 0% still shows as 0. The default bar format follows what the account reports: the 5-hour and weekly pair when it exists, or the monthly percentage. On macOS, the monthly limit now takes the main bar, labeled as monthly.
- Value delivered
- Anyone on a monthly Ollama Cloud plan stops seeing percentages for windows their plan does not have and sees the usage that actually limits it.
-
#218merged Sep 19, 2026 Scripts get the diagnosis even when every account fails The scripting report signaled failure exactly when every account had an error, leading scripts to discard the diagnosis; failure is now reserved for when the report cannot be produced.
- The problem
- The command that reports usage across all providers exited with a failure code whenever every entry had an error, even after printing the complete report with the cause of each one. A monitoring script that trusted that code discarded the output and went silent exactly when every account was in trouble, the moment the diagnosis mattered most.
- What was done
- The command now exits successfully whenever it delivers the complete report, with each account's error still recorded inside it. The failure code is reserved for when the report cannot be produced: a missing, unreadable or invalid configuration, no provider enabled, or a startup failure. The command's help and the documentation state the rule, and a new test fails on the previous version.
- Value delivered
- Anyone monitoring AI usage through scripts now gets a per-account diagnosis in the worst case instead of silence. The success and failure rule is explicit and documented.
More accounts and providers 8 PRs
-
#379merged Oct 8, 2026 Antigravity stays on the bar after agy 1.3.1 Version 1.3.1 of agy, Antigravity's command-line tool, reworded an error message and the provider could drop off the bar; both wordings are now recognized.
- The problem
- When agy's local server refuses a direct query, ai-usagebar uses the saved Google session to fetch the numbers from the cloud. It recognized that refusal by the exact text of the message, and agy 1.3.1 added a prefix to it. The refusal was then read as "signed out", the cloud lookup never ran and, with only agy open, Antigravity disappeared from the bar.
- What was done
- The check now accepts both the old and the new wording by looking at the end of the message, and keeps the other checks on the error. A refusal with a different message is still treated as a sign-in problem the user must fix.
- Value delivered
- Antigravity users see their numbers again after the agy update, and older versions of the tool keep working as before. The problem was reported by an Omarchy user.
-
#372merged Oct 8, 2026 Devin daily and weekly quotas show up in the legacy macOS menu In the legacy macOS menu bar dropdown, Devin showed no daily quota and its weekly one under generic labels; both now appear with the right names.
- The problem
- Devin reports a daily and a weekly quota. To avoid presenting a 24-hour window as the 5-hour session, ai-usagebar does not put the daily quota in the session field, and the legacy macOS dropdown had nowhere else to show it. Selecting Devin left the main bar blank, the daily quota missing and the weekly one under generic labels.
- What was done
- The daily quota got its own fields at the end of the list the menu reads and now fills the main bar labeled "Daily" (1d), while the weekly one keeps "Weekly" (7d). With older versions of the program that do not send the daily quota yet, the weekly quota still shows as before.
- Value delivered
- Devin users on the legacy macOS menu now see both quotas the service reports, each with its own time frame, and the change does not break anyone still running an older version of the program.
-
#364merged Oct 7, 2026 DeepInfra balance shows up in the legacy macOS menu In the legacy macOS menu bar dropdown, DeepInfra appeared with no balance and no credits row; its dollar balance is now displayed.
- The problem
- DeepInfra is a prepaid, balance-only provider with no 5-hour or weekly quotas. The legacy macOS dropdown, still kept in the project, reads each provider from a fixed list of fields, and DeepInfra's balance was not on it. Selecting DeepInfra left the menu bar title empty and the menu without its credits row.
- What was done
- DeepInfra's balance was added to the fields the menu reads, at the end of the list so no other provider's data moves. The macOS documentation now lists DeepInfra and Lyceum among the balance-only providers.
- Value delivered
- DeepInfra users on the legacy macOS menu can now see how much credit they have left, with no change to how other providers are read.
-
#331merged Oct 3, 2026 Extra Claude accounts on macOS recognized as configured On macOS, an extra Claude account stored only in the Keychain was listed as not configured even though its usage loaded fine; the provider catalog now checks the Keychain too.
- The problem
- On macOS, an additional Claude account whose login lives only in the Keychain (the system password vault), with no credentials file on disk, was listed as "not configured" in the provider catalog, the list that tells the interfaces which providers are ready on this machine. Usage fetching and automatic detection already found that account, so parts of the tool disagreed about it.
- What was done
- When an additional account has no credentials file on disk, the catalog now also checks that account's own Keychain entry. Nothing changes outside macOS.
- Value delivered
- People running several Claude accounts on a Mac no longer see a working account flagged as not configured, and the provider list now agrees with the usage the tool actually shows.
-
#315merged Oct 3, 2026 Grok Bot reuses its renewed login instead of asking to sign in After renewing the Grok Bot login, ai-usagebar stored the new credentials where it never looked for them again; the renewal is now reused on the following checks.
- The problem
- When renewing expired Grok Bot access, the program stored the new credentials under a different identifier from the one the next lookup used. Every check went back to the expired access and renewed again with the old credential. When the server accepts each renewal credential only once, the bar showed the old figure and then asked to sign in to the app again while valid credentials sat unused; otherwise, every check cost three requests.
- What was done
- Renewed credentials are now stored under the identity of the app sign-in they came from, the same rule Kiro and Antigravity already followed. A fresh sign-in in the app still never inherits the previous session's credentials. A new test runs two checks in a row and fails on the previous version.
- Value delivered
- Grok Bot users stop getting needless sign-in prompts and stale figures, and later checks go straight to the renewed access instead of spending three requests.
-
#309merged Oct 3, 2026 DeepInfra named accounts available in the macOS menu bar The macOS menu bar ignored DeepInfra's named accounts, which the rest of the program already supported; they now appear as choices in the menu and in Preferences.
- The problem
- Support for multiple DeepInfra accounts was added to the program's core, but the macOS menu bar's list of providers with named accounts was not updated. As a result, the macOS app did not read those accounts from the config file and did not offer them in the menu or in Preferences.
- What was done
- DeepInfra joins the macOS list, and the app's documentation now mentions it. A new test checks that it is on the list and that the list holds the same ten providers as the program's core.
- Value delivered
- Anyone with several DeepInfra accounts on a Mac can now pick each one from the menu, as the rest of the program already allowed.
-
#308merged Oct 3, 2026 Providers set up with named accounts show as configured The provider list flagged providers set up only with named accounts or a custom login file path as missing credentials, even though fetching worked; the status now reflects the real configuration.
- The problem
- Anyone who set up a provider with named accounts only, or hid the default account, saw it marked "needs credential" in the provider catalog and in the status views of the terminal dashboard and macOS, even though usage was being read normally. The same happened to Claude and Codex when the login file lived at a custom path or in named accounts.
- What was done
- The status check now considers the named accounts of the ten API-key providers, plus Claude's and Codex's named accounts and custom paths. Automatic detection now also recognizes the named accounts of those two. Eight new tests cover these cases.
- Value delivered
- Anyone organizing access through named accounts sees a status consistent with what actually works, without false missing-credential warnings.
-
#266merged Sep 27, 2026 Multiple accounts per provider for eight more API-key services Z.AI, DeepSeek, Kilo, Novita, Moonshot, Grok, MiniMax and OrcaRouter now accept several named keys, as OpenRouter already did, each with its own usage tracking.
- The problem
- Among the providers that use an API key, only OpenRouter tracked several keys separately; anyone with work and personal keys elsewhere saw just one. Two bugs surfaced along the way: on macOS, OrcaRouter was never queried because the menu bar called it by a name the program rejected, and automatic detection ignored keys kept only in named accounts, leaving the provider switched off.
- What was done
- The eight providers get the same named-account feature as OpenRouter, and each account has its own tab in the terminal dashboard, its own line in the report, its own choice in the macOS menu and its own saved data. An unknown account name is an error and never falls back to the default key. New tests cover all nine providers, and both bugs are fixed.
- Value delivered
- Anyone using more than one key with the same provider, for example to separate work from personal use, can follow each one's usage without mixing the numbers. Existing configurations keep working with no changes.
Consistent experience 8 PRs
-
#403merged Oct 11, 2026 Unused money formatter that hard-coded the dollar removed A money formatter that always printed the dollar sign was still in the code with no callers; it is gone, and every amount keeps going through the single path that respects the currency.
- The problem
- The project formats money in a single place that respects each account's currency, because copies of that logic had once grown into four diverging versions. One old copy remained, always printing the dollar sign and used by no part of the program; only its own tests and a few comments mentioned it, as the example of the wrong way.
- What was done
- The function and its two tests were removed, and the comments were reworded to describe the counterexample without naming code that no longer exists. Negative-sign rules stay covered by the official formatter's tests, and nothing changes for users.
- Value delivered
- Less dead code, and no risk of someone reusing a formatter that would show a dollar sign on accounts billed in another currency.
-
#396merged Oct 11, 2026 Nous Research format placeholders documented in the guide The guide to the placeholders used to build the bar text covered every provider except Nous Research; its nine placeholders are now documented.
- The problem
- The project has a reference guide, linked from the main documentation, with one section per provider describing the placeholders users can combine to build their bar text. Nous Research had no section, so its nine placeholders (plan, percentage, renewal and six more on credits) could only be discovered by reading the source code.
- What was done
- A new section, in the same shape as the others, explains what each placeholder carries, how credits are formatted, the default format, what appears when no percentage is available and which shared placeholders map to it. A general note that named only Kiro for a behavior Nous shares was corrected.
- Value delivered
- Nous Research users can customize their bar from the documentation instead of the code, and the reference now covers every provider.
-
#395merged Oct 11, 2026 Lyceum credits note translated in Omarchy settings In the Omarchy settings screen, the note on Lyceum's API key card stayed in English whatever the interface language; it is now translated into all five supported languages.
- The problem
- Each API key card in the Omarchy settings screen carries a short note translated into the user's language. Lyceum's note ("billing credits") was left out of the translation dictionary when the provider was added, so it showed in English to people using Russian, Portuguese, Korean or Spanish.
- What was done
- The note was added to the dictionary with translations for the five supported languages: English, Russian, Brazilian Portuguese, Korean and Spanish. Tests check the text shown in each language.
- Value delivered
- People using Omarchy in Russian, Portuguese, Korean or Spanish see the whole settings screen in their language, with no stray English text.
-
#393merged Oct 11, 2026 KDE widget honors money values as the headline figure On KDE Plasma, rows meant to lead with a money value, such as prepaid balances, appeared as percentages in the panel, the cards and the widget's pop-up; they now show the value.
- The problem
- Each report row states which of its two numbers leads: the percentage or the value, such as a prepaid balance or a credit spend. The KDE widget's main number already honored that, but the slots in the desktop panel, the card gauges and the rows of the pop-up window always showed the percentage. A row with 25% used and a value of $75.00 appeared as "25%".
- What was done
- All three places now follow the same rule as the main number: when the row asks for the value, the value is shown, and the percentage appears only if the value is empty. The alert color and the gauge fill are still driven by the percentage.
- Value delivered
- People tracking prepaid balances on KDE Plasma see the money figure in every part of the widget, consistent with the main number and with their configuration.
-
#389merged Oct 8, 2026 macOS menu bar chart follows the 'show what is left' setting On macOS, the panel followed the choice to read usage as what is left of the quota, but the small menu bar chart kept showing what was used; the two now agree.
- The problem
- Users can choose to read usage as what has been consumed or as what is still left. On macOS the panel that opens from the icon followed that choice, but the compact bar chart in the menu bar ignored it. With the "left" option on, a fresh quota looked full in the panel and empty in the menu bar, and an exhausted quota looked the other way around.
- What was done
- The chart now reads the same setting as the panel: with "left" selected, each bar fills with the share still available, and rows without a percentage stay empty instead of looking full. During review, the maintainer reproduced the old defect and confirmed the new tests catch it.
- Value delivered
- Removes the contradiction between the menu bar and the panel for people who read usage as what is left. The fill direction was revisited shortly after in PR #391, which kept both screens in agreement.
-
#327merged Oct 3, 2026 Windows docs point to the config file the program actually reads The program's help and four parts of the documentation pointed Windows users to a config file the program never reads; they all name the real location now.
- The problem
- On Windows the config file lives in a "config" subfolder of the application's data folder, but the program's help, the project's main page and three documentation pages gave another path. The Windows guide even created that file and opened it in Notepad. Nothing reads it, so settings were silently ignored, while whatever was saved from the tray or the dashboard went to the right place, which hid the mismatch.
- What was done
- All five places now name the real path, and the guide creates the correct folder. No program behavior changes; reading the old path as well, which would require a code change, was left to the maintainer's decision.
- Value delivered
- Windows users following the documentation now edit the file the program actually uses, without wasting time on settings that have no effect.
-
#321merged Oct 3, 2026 Paths with ~ now work for Command Code and Copilot too Two path settings did not understand the ~ shortcut for the home folder: the documented example made Command Code look signed out, and Copilot reported the GitHub CLI as not installed.
- The problem
- The program converts the ~ shortcut for the home folder in every path setting, but two had been left out: Command Code's login files and the GitHub command-line tool that Copilot uses. Turning on the documented example made Command Code report that the user was not signed in, and a path with ~ made Copilot claim the GitHub CLI was not installed.
- What was done
- Both settings now convert ~ like every other one, and full paths are left untouched. A new test covers both cases and fails on the previous version.
- Value delivered
- Anyone using ~ in these two settings, including the documented example, gets Command Code and Copilot working, without misleading messages about a missing login or a missing program.
-
#314merged Oct 3, 2026 Switched-off providers stay off when other settings are saved Turning off the primary provider and then saving any other setting quietly switched that provider back on; it now returns only if the user chooses to re-enable it.
- The problem
- When a user turned off the provider still set as primary (the one the bar shows by default) and it kept an API key, the settings screen reopened with that provider selected. The next save, whatever had changed, wrote the provider back as enabled and it started being queried again. The Omarchy settings panel followed the same path.
- What was done
- A disabled primary provider is no longer shown as the selected one; the screen shows the first enabled provider instead, a rule that already applied to Copilot and to keyless providers. Explicitly choosing a disabled provider is still the way to turn it back on. A new test reproduces the case and fails on the previous version.
- Value delivered
- The choice to switch a provider off is respected: it is not queried again because of a save that had nothing to do with it.
Secure distribution 3 PRs
-
#347merged Oct 4, 2026 AUR packages checked before every release goes out Arch Linux (AUR) packages keep files and checksums in parallel lists, and if those fell out of step the package would not install; the release now fails before publishing instead.
- The problem
- Each AUR package declares the files to download and, in a separate list, a checksum for each one. When the two lists end up with different lengths, Arch's packaging tool rejects the package, and this had already happened twice. The automatic check that runs before each release compared version numbers across eight files, but not this match.
- What was done
- The release verification step now compares the list lengths in both packages (the one built from source and the prebuilt one) and in their metadata files, and fails before publishing if they differ. The same check joined the project's regular test suite, so the mistake shows up during development.
- Value delivered
- Keeps a release from reaching the AUR with a package Arch Linux users cannot install. A mistake that had already recurred is now blocked automatically before publication.
-
#322merged Oct 3, 2026 AUR package recipe is accepted by Arch Linux again A version bump left the binary package recipe one checksum short for each architecture, and Arch Linux refused to build the package; the two entries per architecture are back.
- The problem
- Since the package started downloading each file's signature as well, every architecture needs two checksums. The bump to version 1.29.0 left only one, and Arch's packaging tool rejects lists of different lengths. The in-repository package would not build in a local test or in the manual AUR upload the release checklist describes, and the version check, which only looks at the number, let it through.
- What was done
- The two entries per architecture are restored in the recipe and in the package metadata file. Apart from the version number, both files are now byte-for-byte identical to the ones approved when signature checking was adopted. The automated publishing workflow had not been affected, because it rewrites these lists.
- Value delivered
- Anyone packaging or testing ai-usagebar on Arch Linux again has a recipe that works outside the automated workflow, and the manual publishing fallback no longer fails.
-
#288merged Sep 29, 2026 AUR package verifies each release's digital signature The ai-usagebar binary package on the AUR now downloads each release's signature and checks it against the maintainer's key, ending the skipped-verification warning on Arch Linux and Omarchy.
- The problem
- Since version 1.28.0, ai-usagebar has been released with a digital signature, but the AUR binary package neither downloaded it nor declared a trusted key. On installation, Arch Linux warned that it was skipping signature verification: the file was checked only by its checksum, which proves integrity but not authorship.
- What was done
- The package recipe now declares the maintainer's key and downloads the signature for each file, on both processor architectures, and Arch's packaging tool checks it automatically. The release workflow was adjusted to keep the checksum list as long as the file list, which the package needs in order to be accepted.
- Value delivered
- Anyone installing from the AUR now has assurance that the program was signed by the maintainer, not just that it arrived intact. This completes, on the packaging side, the hardening that began with signed releases.
Figures updated on Oct 11, 2026.
The same care in your system
The habits behind these PRs carry over to backends that move money: reproduce the problem before fixing it, prove the fix with a test and keep sensitive data from leaking.