Repository navigation
Agents panel: status card renders as an empty box when usageStatusText is set without authHelpText #8445
Description
What happened
In the agents bar widget, the status card's visibility is gated on
usageStatusText, but the text it draws comes from authHelpText
(shell/plugins/agents/Panel.qml:498 and :512):
BorderSurface {
visible: !!root.provider && String(root.provider.usageStatusText || "") !== ""
...
Text {
text: root.provider ? String(root.provider.authHelpText || "") : ""A record with a non-empty usageStatusText and an empty authHelpText
therefore renders the card as an empty red box — border and urgent tint, no
text.
Why this is reachable
shell/plugins/agents/README.md documents adding an agent as an
out-of-tree concern:
Adding an agent therefore never touches this plugin: ship a collector that
prints the record contract (see theclaudeandcodexcollectors in
bin/), and the panel gains a tab.
The two fields are independent in that contract, and the combination is a
natural one: an agent whose provider publishes no quota endpoint has a real
status to report ("limits unavailable") but nothing auth could fix, so it has
no help line to offer. I hit this immediately writing a Gemini CLI collector —
Gemini CLI exposes no usage/quota API, so limits is empty and there is no
sign-in advice to give.
The shipped collectors don't surface it because all three happen to set both
fields together or neither, so the mismatch is invisible in-tree.
(Related but distinct: #6987 notes there is no Gemini collector. This report
is about the renderer, and would apply to any collector — in-tree or not —
that reports a status without an auth remedy.)
Latent in stock code too
bin/omarchy-agent-usage-fireworks:501 builds the pair as:
except FireworksError as error:
record = base_record(usageStatusText="Fireworks unavailable", authHelpText=str(error))str(error) is empty for any zero-argument exception. Every current
raise FireworksError(...) passes a message, so this doesn't fire today, but
the empty card is one argument-less raise away.
Steps to reproduce
-
Write any record to
~/.local/state/omarchy/agents/usage/<id>.jsonwith
usageStatusTextset,authHelpTextempty, and enough activity for
providerHasData()(e.g.totalPrompts: 1):jq -n '{schemaVersion:1, id:"demo", name:"Demo", ready:true, hasLocalStats:true, totalPrompts:1, totalSessions:1, activeDays:1, activeDates:["2026-08-26"], recentDays:[], modelUsage:{}, limits:[], tierLabel:"", usageStatusText:"Demo limits unavailable", authHelpText:""}' \ > ~/.local/state/omarchy/agents/usage/demo.json
-
Open the agents panel and switch to the Demo tab.
Expected
No card when there is no text to put in it. The hero subtitle already carries
usageStatusText, so the card adds nothing in this state.
Actual
An empty red box between the subscription switch and TOKENS BY DAY.
Suggested fix
Gate the card on the text it actually renders:
visible: !!root.provider && String(root.provider.usageStatusText || "") !== ""
&& String(root.provider.authHelpText || "") !== ""Alternatively have the card fall back to usageStatusText when
authHelpText is empty — though that duplicates the subtitle.
System
- Omarchy 4.0.1-1
- Hyprland 0.56.2
- Kernel 7.1.9-arch1-2
- Intel Core i5-1035G7 / Intel Iris Plus Graphics G7
(No diagnostics log attached: omarchy debug is not a command in 4.0.1 —
omarchy commands --all lists no debug/diagnostics entry.)
Activity
omarchybot commentedon Oct 4, 2026
Fixed on
quattroby #14049. The agent status card now falls back to usageStatusText when authHelpText is empty, so the reported combination no longer renders an empty box. This incorporates #8497.Closing as completed. If the same failure persists after updating to a build containing the fix, please reopen with the collector output.
Closure scope checked by GPT-6 in Codex and Codex Medium against the reports and landed source. The second opinion agreed; independence is not guaranteed. No runtime tests were rerun for this reconciliation.