* Let Grok updates through mise take effect
Grok's npm launcher runs ~/.grok/bin/grok whenever it exists, and the
install script that repoints it at a new release doesn't run under mise,
so every machine kept running the release it first unpacked. Updating
mise tools now drops a link to an older release and the old binary, and
lets the launcher unpack the installed one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep several Grok accounts, the way Claude and Codex do
Grok honors GROK_HOME, so an added Grok account gets its own home holding
only its login and settings cache, with the CLI binary, sessions, skills,
plugins, memory, and config linked back to ~/.grok. The account commands,
the add flow (a second account signs in through a private window), the
launcher, and a grok shell function all take it like the others, and its
identity and plan come from the files Grok writes at login.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Show Grok's plan and credits in the agents panel
A grok collector reads each account's plan from the settings Grok caches
and its credits from the endpoint behind Grok's own /usage view, so Grok
gets a section, per-account limits, and autoswitch like Claude and Codex.
A signed-in agent with a plan now shows before its first numbers, so a
lapsed sign-in has somewhere to say so. Grok's mark joins the assets, and
with every agent able to take another account the add screen no longer
needs to dim one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Document Grok accounts and limits alongside Claude and Codex
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Read Grok's credits the way xAI actually answers
The answer nests under config, names a weekly period with its end, and
as protobuf JSON leaves the usage percentage out while it's zero. The
collector now reads that shape, so a fresh week shows as 0% until it
resets rather than as nothing known.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Count Grok's prompts and sessions from its session summaries
Grok keeps a summary beside each session with when it was last active
and how many prompts it had, so its section and the hero's summary get
today's prompts and sessions and its active days. It records no token
counts there, so none are claimed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Give each Grok limits cache write its own temporary file
Two overlapping collector runs wrote the same cache through one .tmp
path, so one rename could leave the other's failing and its record not
updated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Read a single Grok account from GROK_HOME when it's set
The launcher and the CLI honor GROK_HOME, but the collector always read
~/.grok, so a Grok signed in only in a custom home showed nothing. With
one account, the collector now reads the home the CLI would; with
several registered, the primary stays ~/.grok.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Drop guesses the real Grok credits answer made unnecessary
The collector carried fallbacks for fields and shapes guessed from the
binary before xAI's actual answer was seen, a numeric timestamp branch
nothing writes, the panel's default for prompt stats, and guards that an
empty sign-in already covers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep the working Grok release until its update is in place
The update dropped the link and older binaries before the new release was
unpacked and ignored a failed unpack, which could leave every Grok
account without a CLI. The old release now stays until the new one is
linked, and its link comes back if it never is.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Count only Grok sessions for today, not prompts
A session's summary holds all its prompts and only when it was last
active, so a resumed session put its whole history on today. Today now
counts the sessions active in it; prompts stay an all-time total.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Reuse the Grok session scan on a limits-only refresh
Opening the panel and near-limit checks only need fresh limits, so they
reuse a scan up to 15 minutes old, as the Codex collector does; --force
still rescans.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Plan multiple Claude and Codex accounts with manual or automatic switching
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep several Claude and Codex accounts and start new sessions as the active one
Each added account gets its own home holding only its login, with history,
settings and skills linked back to ~/.claude or ~/.codex so --continue works
across a switch. Accounts are added through the CLI's own login, and cx, cy,
plain claude/codex and omarchy-agent all start as the active account unless
CLAUDE_CONFIG_DIR or CODEX_HOME is already set.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Report limits for every Claude and Codex account in the usage records
Each registered account is probed with its own sign-in and cached on its own,
and a parked account whose sign-in lapsed keeps its last-known numbers marked
stale. The record's top-level limits keep describing the active account.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Switch accounts automatically near a limit, or notify with a one-click switch
After each usage update, an active account at or over its provider's
threshold (95% by default) moves new sessions to the account with the most
headroom in auto mode, or offers that switch as a notification in manual mode.
It never flaps back to an account that just reset, and says once when every
account is over.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Show every subscription account's limits in the agents panel
With several Claude or Codex accounts, the limits become one card per account
with the active one badged. Pick a card with its number and press Enter (or
click Use) to move new sessions to it, press a to add an account, and m to
toggle automatic switching. Limits refresh every minute while an active
account is above 80%.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Add Setup > Agent Accounts to list, switch and add Claude and Codex accounts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Document switching between several Claude and Codex subscriptions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Count a rested parked account as available, and pin Main to its own home
A parked Claude account whose windows all reset now reads as 0% instead of
unknown, so switching can pick it. Main's Codex limits come from ~/.codex even
when CODEX_HOME is set, and duplicate logins are checked against who each home
is signed in as now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Key limits caches by subscription and report when an account truly frees up
An added account's limits cache follows its account id, so a new account
reusing a removed one's label never inherits its allowance. The all-accounts
notice now names when an account's blocking windows have all reset, not the
earliest reset of any window.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep account ids clear of routing keywords and refresh the panel after removal
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Share Codex plugins and hooks across accounts, and key Claude caches by current sign-in
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Drop the key hint from the Add account button
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Sign new agent accounts in through a private browser window
The main browser is almost certainly signed in to the account you already
have, and the login would silently reuse it. Both CLIs open their login page
through $BROWSER, so it now points at omarchy-launch-browser --private.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Let agent account commands default to your default agent's provider
With Claude or Codex as the default agent, the provider can be left out:
omarchy agent account use work, and primary names the primary account.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Drop the primary alias, which shadowed an account named Primary
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Replace the auto switch button with a small Notify / Autoswitch toggle
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Add accounts from a small + beside the switch toggle
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Fix the punctuation of the switch toggle's README line
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Drop the border around the add account +
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Rename Claude and Codex accounts without moving their homes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Lay out agent accounts on accent rails instead of boxed cards
The active account gets an accent rail and the others a quiet one, each
window is a single compact line, and the switch toggle, add, and Use are text.
Clicking an account's name renames it in place. A window without a reset time
no longer leaves an empty line, and last-known numbers are only red when the
sign-in needs attention.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Read Codex limits without waiting on account/read
Codex 0.158's app-server can leave account/read unanswered, and asking it
first lost the limits whenever it did, leaving the agents panel showing
"Codex limits unavailable". The limits name the plan themselves, so they're
asked first and account/read is only a short fallback when they don't.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Switch agent providers from their marks in the panel header
The row of provider buttons gives way to a small mark per provider in the
hero's corner, the selected one at full strength, with the add account +
beside them in place of the + by the switch toggle and the full-width Add
account button.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep the agents panel's scrollbar off its contents
The panel's content narrows to leave the scrollbar its own strip whenever it
scrolls, and the add account + leads the provider marks instead of sitting at
the very edge.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Add Claude, Codex, or Grok subscriptions from one Add Account menu
The first account for a provider installs its CLI if needed and signs in to
the CLI's own home through the normal browser; only additional accounts get a
home of their own and a private window. Grok signs in its first account.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Reveal Autoswitch beside Use instead of a Notify / Autoswitch row
The panel's + now opens the Add Account menu for any provider.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Split agent accounts with plain separators instead of rails
ACTIVE already marks the account new sessions use.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Only call Claude limits stale once they're old, and poll near a limit less
Anthropic rate-limits its usage endpoint, and polling two accounts every
minute near a limit got every re-check refused, so both accounts read
"Last known" with numbers a minute old. A refused check of numbers under
15 minutes old now counts as current, older ones say how old they are,
and near-limit polling is every three minutes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Show every agent's limits on one page under an Agents hero
The panel stops switching between one provider at a time and lists every
agent and account with its limits, dropping the tokens-by-day and by-model
charts. The hero carries the agents robot and rotates through what the token
counts add up to: tokens this week and today, the most used model, the
busiest day, and today's prompts and sessions. Middle-clicking the bar icon
refreshes, since there's no provider left to advance to.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Report Codex's free rate-limit resets in its usage record
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Give the agents panel more room, and show Codex's free resets
Limit lines are a notch larger with more space between them, each account's
limits sit a clear step below its name, and sections breathe. Codex has one
limit on Pro, so its section now also says how many free full resets are
waiting and when the next one lapses.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Mark Claude's Fable limit on the Weekly meter instead of its own row
A model-scoped allowance on the same clock as a base window is drawn as a
tick on that window's meter and named in the row's tooltip.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Let omarchy-default-agent set the default without launching it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Let the agents panel drive adding an account without a terminal
--check says whether adding one now would be each provider's first sign-in
or an additional account, and --events reports progress as tagged lines
alongside the CLI's own output, notifies with the result, and cleans up the
login and its scratch home when cancelled.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Add subscriptions and pick the default agent right in the agents panel
The + is a proper accent button, and it swaps the list for a picker of
Claude, Codex, and Grok that signs in without a terminal: name a further
account, then follow the sign-in with its status, Grok's confirmation code, a
field for Claude's pasted code, and a link to reopen the page. A dropdown at
the bottom sets the default agent without launching it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Draw the Fable tick in its meter's own color
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Revert "Let omarchy-default-agent set the default without launching it"
This reverts commit da96261f7d26bb76774cbdc1cb9e0abde92bb841.
* Make the first agent signed in the default when none is picked
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep the agents panel in the bar, with setup, starters, and adding in it
A machine with no agent opens the panel on setting one up. Once set up, the
list ends with starter prompts for a new theme, plugin, or app, and a quiet
Add a subscription. The panel no longer sets the default agent, and the hero
drops its add button.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Offer the starter prompts as tiles, and adding as a row beneath them
Theme, Plugin, and App each get a tile with its glyph, and Add a
subscription a matching row with the + in a tinted square. The panel is
allowed to grow tall enough to show it all without scrolling.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Put the tinted add button in the agents panel's hero corner
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Show when a limit resets in small type under its meter
The percentage keeps the right edge to itself, so the meter runs longer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Revert "Show when a limit resets in small type under its meter"
This reverts commit 108d9de59da1af12cddbf232b0b5333ad8994c64.
* Put each account's plan beside its name, and its email in a tooltip
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Stack each limit's percentage over its time left, so the meter runs longer
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Show only each limit's time left, with the exact percentage on hover
The meter already says how full a window is. Dropping the percentage beside
it leaves one calm figure per row, and the row's tooltip carries the number.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Sign an existing account in again with omarchy-agent-account-add --reauth
It signs in where the account already lives: the CLI's own home (:primary)
through the normal browser, an added one through a private window. The usage
records now say which account is the primary.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Offer Sign-in required in the agents panel instead of how old the numbers are
A lapsed sign-in shows as a link that signs that account in again right in
the panel. The "as of" and "last known" notes are gone; trouble that isn't
about signing in still shows as text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep the separator dot out of the Sign-in required link
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Drop the Setup > Agent Accounts menu and the stale plan
The agents panel now lists, switches, and adds accounts, so the menu's
duplicate of it goes, and the plan written before the design settled no
longer describes it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Install the compiler and Qt pieces for building Omarchy-style apps
base-devel plus qt6-base, qt6-declarative, qt6-multimedia, and qt6-wayland,
which is what Hype, Monologue, and Omacut build with through qmake6 and make.
Qt was only there as a dependency of those apps, and the compiler not at all.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Add an omarchy-app agent skill for building apps the Omarchy way
It teaches how Hype, Monologue, and Omacut are built: C++ and Qt Quick in
one flat project, qmake6 and make into a single binary, a theme that follows
Omarchy's accent live, portal dialogs, keyboard-first conventions, Qt Test
offscreen, and a PKGBUILD that puts the app in the launcher, with starter
files that build and pass their tests as written. The agents panel's App
starter uses it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Link the omarchy-app skill on existing installs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Let Cancel stop a waiting login, and list a lone account's limits
Bash holds a trap until the foreground command finishes, so a login waiting
on the browser outlived Cancel. It now runs behind an interruptible wait.
With one account the usage record keeps its limits at the top level, which
omarchy agent account list now reads for the primary.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Re-read identity even when signed out, and count Grok as set up
A home whose login is gone no longer keeps the identity the registry saved,
so it reads as signed out and can be added again. The agents panel leaves its
setup screen once any agent is signed in, not only once one has usage to
show, since Grok has no usage collector.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Save each account's current identity before collecting usage
A home signed in to someone else since it was added kept the old email in
the registry, which the usage records name accounts by. The usage update now
refreshes the registry from each home first.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Offer Claude's paste field from the start, and keep providers with accounts
Claude's login prompts for a pasted code without a newline, so the panel's
line reader never saw it; the field is simply there for Claude sign-ins. A
provider with accounts stays listed even when the active one's limits are
unavailable, so its other accounts can still be switched to.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Never autoswitch to a signed-out account, and report Codex's missing sign-in
An account nobody is signed in to is left out of switching, however much
room its cached numbers show. Codex answers a home without a login with an
error, which now reads as Waiting for auth, so the panel offers Sign-in
required for Codex accounts too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Link shared files before they exist, and only call every account over when it is
A shared file the primary home didn't have yet was left unlinked, so an
added account made its own copy and the two diverged for good; it's linked
up front now, and written in the primary home by whichever account writes it
first. The all-accounts-over notice waits until every account's limits are
actually known.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Make the agent starter tiles compact and call the section Make something cool
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Hold the agents hero line until its next fade
Every usage record that landed rebuilt the summary phrases, and the hero
indexed that live list, so opening the panel could swap the line several
times between fades. It now keeps what it shows until the timed swap.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Start the default agent from the agents panel hero
A console button beside the add button runs the same launcher as the
right click: the default agent, or the picker when none is set. It hides
while adding a subscription, where the add button becomes the way back.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Put the add button before the agent launcher in the hero corner
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Bring keyboard navigation back to the agents panel
The one-page redesign dropped left and right with the per-agent pages,
leaving the arrows only to scroll. They now walk everything that does
something, row by row: the hero's add and launch buttons, each
switchable account, and the starter tiles. Enter acts on the cursor,
the cursor scrolls into view, and hovering moves the same cursor so only
one thing is lit. Number keys still jump to an account.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Let adding an account take over the agents hero
While adding, the hero's line reads "Add an account" in place of the
rotating summary, and the X in its corner is the only way back, so the
add view drops its own title and Back link. Each agent to add is just its
mark and name; one that can't be added is dimmed and says why on hover.
The arrows walk that list too, and Enter picks one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Show the agents to add as large marks, three across
Each agent is a large mark over its name with no box around it, in one
row the arrows move along. The chosen one turns accent and grows a touch.
The reason an agent can't be added is shortened to fit inside the panel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Move between Autoswitch and Use on an account with the arrows
An account that isn't active is now two stops, Autoswitch then Use, so
left and right move between them and Enter acts on the one that's lit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Land on Use when moving up or down onto an account
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Hide Use on an autoswitching account until you're on its line
With Autoswitch on, the line shows only Autoswitch. Use appears when the
line is hovered anywhere or the keyboard is on it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Start adding an account with the first agent focused
Opening the add screen puts the keyboard cursor on the first agent, so
Enter picks it straight away. A focused agent lights up even before the
check says whether it can be added.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Drop the Sign in link under the account name field
Enter in the field already starts the sign-in.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Key the primary Claude account's limits cache by its subscription
The primary home always used claude-limits.json, so signing it in to
another subscription could carry the old one's numbers over when the
first probe failed, and autoswitch would act on them. Once the home says
who it's signed in as, its cache is keyed by that like every other
account's.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Leave Qt Multimedia out of the base packages again
Quattro dropped it once the shell no longer needed it, and the app skill
already has an app that plays audio or video add it and list it in its
own depends. The compiler and the rest of Qt stay.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Render the agents panel's dynamic text as plain text
Sign-in status, help text, and provider names come from outside the
shell, so none of them should be read as markup.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep an account's plan and trouble clear of its Use and Autoswitch links
The details beside an account's name grew to their full width, so a long
plan or warning could run under the links on the right. They now shorten
with an ellipsis instead, and Sign-in required keeps its whole width.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Let primary name the first account, as the manual says
`omarchy agent account rename primary Hey` was documented but failed,
since the primary account's id is main and lookups took exact ids only.
primary now reaches the account marked primary, whatever it's been
renamed to, and no new account can take primary as its id.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Install everything an Omarchy app needs by default
The app skill builds with Qt Multimedia, SVG icons, and ffmpeg as well as
the compiler and the rest of Qt, so qt6-multimedia, qt6-svg, and ffmpeg
join the base packages and the migration. The shell still plays no video
through Qt Multimedia, which is what its test now checks.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Dim agent limits kept from an earlier check, with their age on hover
When a Claude probe fails, the last numbers carry on and looked just like
fresh ones. Those meters now dim, and their tooltip says how old they
are. The record carries limitsStale and limitsFetchedAt for this.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Give the app skill templates for every file its build needs
The templates named src/backend.{h,cpp} and a test file without showing
them, so each app had to invent its own. They're now templated, with a
starter icon, a note that LICENSE and the icon must exist for package(),
and qt6-wayland in the PKGBUILD's depends. Scaffolded from the templates
alone, the app builds and its tests pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Start the agents panel cursor over when the agent list comes or goes
Right after the shell starts, the panel can briefly look like a first
setup and focus the first agent to add. When the records land the rows
change under the cursor, which then lit an account nobody had picked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Drop dead hover and limit checks from the agents panel
The tiles and hero buttons fell back on their own hover when there were
no keyboard rows, but the hero always has one, so hover only ever moves
the cursor. Stale meters only exist when there are limits, so neither
the panel nor the record needs to check for some.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Drop the a hotkey for adding an agent subscription
The + in the hero is the way in, by mouse or by arrowing to it. The
plugin README also catches up with the panel: the launcher, dimmed stale
limits, the new add screen, and the arrows walking a cursor rather than
scrolling.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* List a command family that sits under a flags-only command
`omarchy agent account` reached omarchy-agent, which takes only flags,
and failed on the word instead of listing the account commands. When the
command matched so far takes only flags and the next word names visible
commands, the router now lists them. `omarchy update aur` likewise lists
the update aur commands rather than running a full update.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Refuse to remove an agent account a running session uses
Removing an account deleted its home at once, pulling the login out from
under any session started in it, though running sessions are never meant
to be touched. It now says to quit that session first.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Prefer an account checked just now when switching near a limit
Autoswitch weighed numbers kept from an earlier check like fresh ones.
A parked account's sign-in lapses within hours, so a stale one stays a
candidate, but an account checked just now wins over it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Leave a user's own omarchy-app skill in place when linking ours
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Reach Sign-in required with the keyboard in the agents panel
Both the link on a lapsed account and the one on a single-account agent
are now stops in the cursor's walk, and Enter signs in again. A picked
link scrolls into view.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Bring the manual's agent accounts paragraph up to date
Near-limit checks run every three minutes, not every minute, and
Autoswitch now appears on hovering an account's line and takes Use's
place while it's on.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep the agents panel cursor on things you can act on
The active account was a stop with nothing to do, so the cursor seemed to
vanish there. It now only stops on it to sign in again. The hero's
buttons also show the cursor plainly, with an accent border and a deeper
tint instead of a shade's difference.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Never leave an added agent account's login outside the registry
Registering moved the login into its home before carrying settings over
and saving the registry, so a failure in either stranded a home holding
a sign-in that the account commands couldn't see. Settings are now
carried while the login is still pending, and a failed save moves the
home back there for the add command to clean up.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Put room before freshness when picking an account to switch to
Preferring accounts checked just now outright could pick a fresh one at
94% over a stale one at 10%. An account within 15 points of the
threshold now counts as near its limit however fresh, so accounts with
room come first and freshness only decides among them.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Check agent limits more often relative to the switch threshold
Faster checks started at a fixed 80%, so a threshold set lower could be
crossed and wait out the 15-minute interval. They now start 15 points
below the threshold, which is still 80% at the default 95%.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
fzf's completion.bash rewraps the completions of ~76 commands on every
interactive shell start, costing ~25ms once bash-completion is loaded. Keep
only the key bindings (Ctrl-R, Ctrl-T, Alt-C); **<Tab> fuzzy completion goes.
`starship init bash` only prints a line that runs starship again with
--print-full-init, so call that directly and start the binary once.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Launch claude and codex agents with auto-review instead of full bypass
Claude's auto permission mode and codex's --approve-for-me both run
unattended without prompting, but keep automatic review (and codex's
workspace-write sandbox) instead of skipping approval entirely. Grok
stays on bypassPermissions.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Match the bash aliases to the agent launcher's auto-review modes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* Reshape the agent launcher into omarchy agent
omarchy-launch-agent becomes omarchy-agent, with prompts on omarchy-agent-prompt
rather than the bare route: `omarchy agent` is both a command and a group, so a
positional prompt there would shadow any subcommand under it. The launcher takes
flags only and points at `omarchy agent prompt` when handed one.
Every agent window now launches under a fixed org.omarchy.agent app-id instead of
omarchy-launch-tui's default of org.omarchy.<binary>, so one rule floats them all
whichever agent is default.
Omarchy also stops picking an agent for you. omarchy-default-agent prints nothing
until one is chosen, leaving every entry under Setup > Defaults > Agent unchecked,
and a first-run invitation offers to take you there.
* Wordsmith
* Cover the agent routes and the invitation
The route split is the point of the change, so exercise `omarchy agent`,
`omarchy agent prompt`, and a rejected positional prompt through the router
rather than only the binaries behind them.
The invitation gets the same treatment as the Voxtype and fingerprint ones: it
notifies once, opens the agent defaults menu, and leaves both the notification
and the marker alone for anyone who already chose an agent.
* Offer the agent choice from the keybinding
Super + Shift + Ctrl + A now runs `omarchy-agent --pick`, which opens Setup >
Defaults > Agent when nothing is chosen yet. A keypress that writes to stderr
and opens nothing just looks broken.
* Reach existing installs with the agent invitation
first-run installs the invitation hook, and existing accounts marked it complete
long ago, so they would never see it -- while being the accounts most likely to
need it, since the old getter returned opencode implicitly and most have no
agent recorded at all. Post-update hooks run later in the same update, so the
invitation arrives without waiting for another one.
* Say what the Defaults submenus set
Setup > Defaults lists Agent, Browser, Terminal, Editor, but the header inside
each repeated the same bare word, which reads as a category rather than a
setting -- and says nothing at all when the menu is summoned straight into it.
The list keeps its short labels; the headers now name the setting.
/etc/profile.d/locale.sh only runs for login shells, so bash started by
SSH or herdr's remote bridge ran in the C locale, where printf emits
\u/\U escapes literally instead of the character.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Clean up the terminal and reconnect when SSH connections drop
A remote tmux, herdr, or editor arms terminal modes over the SSH pipe
(mouse tracking, focus reporting, the alternate screen) that only it can
disarm. When the connection dies instead of exiting cleanly, those modes
stay armed on the local terminal, and every mouse move floods the prompt
with escape-sequence junk.
Wrap ssh in a shell function that disarms those modes after every exit,
and automatically reconnects when an established interactive session
drops. Remote commands, configured RemoteCommands, and redirected stdin
never reconnect, so their side effects cannot replay, and the retry loop
runs in a subshell so Ctrl-C cancels both the in-flight attempt and the
loop.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Detect dead SSH connections within a minute
Without keepalives, ssh does not notice a dead peer until TCP gives up,
which can take hours of sitting on a hung terminal with remote-armed
terminal modes stuck on. Ship a client keepalive default so drops are
detected in about 45 seconds, letting the shell's ssh wrapper clean up
and reconnect. ~/.ssh/config is read first and wins, so per-host
overrides still apply.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Fail closed when ssh -G cannot resolve the effective config
An unresolvable configuration could hide a RemoteCommand, so treat it
as non-interactive rather than reconnectable. Also strengthen the
tests from Copilot review: assert the complete disarm sequence, and
verify on a real interactive pty that Ctrl-C during a retry attempt
kills the reconnect loop itself, not just the in-flight attempt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Tolerate the explicit RemoteCommand none when probing ssh -G
The literal "none" is how ssh_config cancels a configured
RemoteCommand, and some OpenSSH versions emit it even when unset, which
would have silently disabled reconnecting entirely. Treat it as no
remote command while still failing closed on real ones and unresolvable
configs, and make the fake ssh -G emit the "none" form so the behavior
tests cover it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* Ship herdr with a config that mirrors our tmux setup
Installs herdr through the mise shim, ships the matching config as an
Omarchy default, and adds the usual refresh/restart pair. The keybindings
map tmux sessions to workspaces, windows to tabs, and keep both the prefix
and direct bindings from config/tmux/tmux.conf.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Add herdr versions of the tmux dev layout functions
hdl, hds, hdlm, and hsl drive herdr through its socket API instead of
tmux. hsl tiles into a real grid since herdr has no select-layout tiled.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Namespace the herdr layout helpers so they stay out of the shell
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Create hdlm's tabs in its own workspace instead of the focused one
herdr tab create follows the focused workspace without --workspace, so
switching workspaces while hdlm loops scatters the new tabs.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Lay hsl's grid out in visual order
Splitting the first column repeatedly inserted each new column between it
and the previous one, so uneven counts put the spare row in a middle
column instead of the last.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Report herdr config reload failures instead of swallowing them
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Hide herdr's pane scrollbars to match tmux
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Escape queued herdr layout commands
* Install herdr from the omarchy-herdr package instead of mise
* Use native herdr resize keybindings for tmux-style pane resizing
* Rename the omarchy-herdr package to herdr
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Give SSH commands the user-level tool paths
ssh host cmd runs neither a login nor an interactive shell, so on Arch it
gets the bare sshd PATH and can't find mise-managed tools like the agent
CLIs herdr scans for. Set PATH in the PAM environment (per-user via
@{HOME}), append the user-level dirs in env-bootstrap so login shells and
the uwsm session get them too, and source env-bootstrap before bashrc's
interactive guard for bash variants that read it non-interactively.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Don't let an empty PATH turn into a cwd entry
Appending with a bare "$PATH:" prefix leaves a leading colon when PATH
is unset, which shells treat as the current directory.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Exporting BROWSER=omarchy-launch-browser into the whole uwsm session made
xdg-settings refuse "set default-web-browser", which broke every browser's
own "Set as default" button. The export only exists for terminal programs
(like gh) to open URLs detached from the terminal process tree, so move it
to default/bash/envs where interactive shells still pick it up.
Fixes#6590
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Reorganizes Omarchy 4 around three layers for populating $HOME:
Seed: omarchy-settings ships defaults to /etc/skel; useradd -m
copies them on user creation
Finalize: omarchy-finalize-user (renamed from omarchy-setup-user)
handles only the runtime tweaks /etc/skel can't do — skill
symlinks, xdg-user-dirs, default browser/mailto, vconsole→hypr
keyboard sync, and install/user/all.sh
Resync: omarchy-reinstall-configs is the explicit, destructive
resync of /etc/skel into an existing user's $HOME
Package-owned files move out of config/ into default/, where the
omarchy-settings PKGBUILD installs them to real system paths:
config/environment.d/fcitx.conf -> /usr/lib/environment.d/
config/fontconfig/fonts.conf -> /usr/share/fontconfig/conf.avail/
config/mimeapps.list -> /usr/share/applications/
config/omarchy.ttf -> /usr/share/fonts/omarchy/
config/systemd/user/*.service -> /usr/lib/systemd/user/
config/uwsm/default -> /usr/share/omarchy/default/uwsm/
config/uwsm/env -> /usr/share/uwsm/env.d/10-omarchy
config/xdg-terminals.list -> /usr/share/xdg-terminal-exec/
omarchy-upgrade-to-4 grows a 'retire' action (renamed from 'move' to
clarify nothing is copied — the system path is owned by the new package
once the user's hash-matched ~/.config copy is removed). Mismatched
copies are kept as backups so user overrides survive the upgrade.
Other simplifications:
- Single env bootstrap at default/bash/env-bootstrap sourced by
/etc/profile.d/omarchy.sh, /etc/skel/.bashrc,
/usr/share/uwsm/env.d/10-omarchy, and default/bash/envs. PATH
prepend only in dev-link mode (production uses /usr/bin/omarchy-*).
- omarchy-refresh-config reads from /etc/skel/.config so refresh
means 'snap to skel'.
- omarchy-reinstall-configs collapses to 'cp -af /etc/skel/. ~/'
plus limine/plymouth/nvim refresh.
- omarchy-font-set uses awk against our own 30-omarchy.conf instead
of xmlstarlet; xmlstarlet dropped from omarchy-base.packages.
- Defer user systemd enables (bt-agent, sleep-lock,
recover-internal-monitor) to first-run via
install/user/first-run/enable-user-units.sh; delete
omarchy-user-systemctl-enable and the per-hardware install
scripts that called it.
- Wireplumber bluetooth-a2dp-autoconnect.conf moves to config/ so
/etc/skel ships it; install/user/hardware/bluetooth.sh deleted.
- Default terminal switched to foot.desktop.
- docs/file-layout.md documents the three-layer model and the
build-time repo→path map.
Remove legacy online installer entrypoints, collapse migrations for 4.0, and move setup responsibilities into target-side system, hardware, and user commands.
The git-era flow installed Omarchy to ~/.local/share/omarchy. In the
package-based flow it lives at /usr/share/omarchy (or, in dev mode, at
the path /etc/omarchy.conf's OMARCHY_PATH points at). Files that hard-
coded the old path broke on package installs:
- default/bash/rc: sourced ~/.local/share/omarchy/default/bash/*, so a
fresh user's terminal logged ENOENT for every line. Now sources from
$OMARCHY_PATH with /usr/share/omarchy as the safe default if the var
is unset.
- config/systemd/user/omarchy-recover-internal-monitor.service:
ExecStart pointed at %h/.local/share/omarchy/bin/. The script ships
to /usr/bin via the omarchy-installer package; point straight there.
- install/config/xcompose.sh: wrote an XCompose include line pointing
at the user-home path; use /usr/share/omarchy/ directly.
- default/hypr/paths.lua and config/hypr/hyprland.lua: fallback when
OMARCHY_PATH is unset is /usr/share/omarchy, not the home path.
Dev-only scripts (omarchy-dev-add-migration, omarchy-reinstall-git) and
the SKILL.md docs still reference the old path; those are separate
cleanups since they don't affect a fresh install's runtime.
omarchy-dev-link (lands in a follow-up) writes OMARCHY_PATH=<checkout>
to /etc/omarchy.conf. Three boot/session entry points now source it
before falling back to /usr/share/omarchy:
- /etc/profile.d/omarchy.sh (login shells, SSH)
- config/uwsm/env (Hyprland session via UWSM)
- default/bash/envs (non-login interactive bash; duplicated for
SSH and similar)
All three use 'export OMARCHY_PATH="${OMARCHY_PATH:-/usr/share/omarchy}"'
so /etc/omarchy.conf wins over the default, and install.sh's script-mode
export wins over /etc/omarchy.conf (because both use the :- guard).
Hyprland updates session env on the fly via hyprctl setenv +
systemctl --user import-environment, so omarchy-dev-link can re-trigger
those to make live sessions pick up the new path without restart.
The /etc/profile.d/omarchy.sh default for OMARCHY_PATH was being clobbered
by shipped config files that re-export the variable to the old script-mode
path. In package mode, every login shell, UWSM session, and Hyprland
autostart was effectively reversing the migration. Fix:
- default/bashrc: source from $OMARCHY_PATH/default/bash/rc; default
OMARCHY_PATH to /usr/share/omarchy if not set (so the source line
works in any boot order, including non-login interactive shells).
- default/bash/envs: change 'export OMARCHY_PATH=$HOME/...' to
'export OMARCHY_PATH=${OMARCHY_PATH:-/usr/share/omarchy}' so the
profile.d default and install.sh script-mode override both win.
- config/uwsm/env: same defaulting pattern. UWSM may not source
profile.d, so the inline default still matters.
- default/hypr/autostart.lua: quickshell launched from $OMARCHY_PATH/shell
(not literal $HOME path). The bash that runs hl.exec_cmd sees
OMARCHY_PATH propagated from UWSM env.
- config/chromium-flags.conf: --load-extension hard-codes
/usr/share/omarchy/... because chromium doesn't expand env vars or
'~'. The omarchy-dev-link workflow symlinks /usr/share/omarchy to a
checkout.
- bin/omarchy-install-browser: same chromium-flag path correction for
brave-origin-beta-flags.conf.