Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
`omarchy-update` is annotated `omarchy:requires-sudo=true`, but running it as root makes the mise step write root-owned files into the user home
Reported by abdrumm · filed Sep 26, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
What happened
omarchy-update carries this annotation in its header:
# omarchy:summary=Update Omarchy and system packages
# omarchy:args=[-y]
# omarchy:requires-sudo=trueFollowing it, I ran sudo omarchy update -y. The update itself succeeded, butomarchy-update-mise ran mise up as root, so mise wrote its tool
installs as root:
$ find ~ -xdev ! -user "$USER" | wc -l
588452 of those are mise state (~/.local/share/mise, ~/.cache/mise), including~/.local/share/mise/installs/opencode/1.18.32/ and its latest/1/1.18
symlinks.
What was expected
mise up manages per-user tools, so omarchy-update-mise should either run
strictly as the invoking user, or drop privileges before calling mise.
Why the outer sudo should not be needed
omarchy-update already escalates exactly the steps that need root, and only
those — each prompts separately:
[sudo] password for <user>: # paccache -rk2
[sudo] password for <user>: # snapper -c root create ...
[sudo] password for <user>: # pacman -Syu --noconfirm ...The per-user steps (omarchy-update-mise, omarchy-update-aur-pkgs,omarchy-update-dev) are not wrapped in sudo at all, which means they are
intended to run unprivileged. An outer sudo silently converts them.
Impact
Once the installs are root-owned, mise cannot update them as the user:
$ mise use -g opencode
mise ✗ [email protected] 3ms · failed: Permission denied (os error 13)
mise ERROR Failed to install aqua:anomalyco/opencode@latest: Permission denied (os error 13)This breaks omarchy-default-agent, which calls mise use -g <agent> on every
invocation, so Defaults -> Agent -> <name> in the menu fails with
"Could not set <name> as the default coding agent" and launches nothing.
Confusingly, the agents themselves still run fine (already-installed binaries
are still executable), and SUPER+SHIFT+CTRL+A (omarchy-agent --pick) still
works, because that path skips mise use -g entirely. So it presents as a
broken menu rather than a permissions problem.
Recovery is sudo chown -R "$USER:$USER" ~/.local/share/mise ~/.cache/mise.
Steps to reproduce
mise install <some-tool>as your normal user.sudo omarchy update(any Omarchy version with a mise-managed tool that has
an update available).
3. find ~ -xdev ! -user "$USER" — note the mise installs.
4. mise use -g <some-tool> — now fails with Permission denied (os error 13).
Possible fixes
Any one of these would close the trap:
- Drop
omarchy:requires-sudo=truefromomarchy-update, since the script
escalates its own root steps.
- Re-exec mise as the original invoking user in omarchy-update-mise, e.g.
sudo -u "${SUDO_USER:-$USER}" MISE_MINIMUM_RELEASE_AGE=0 mise up.
- Have omarchy-update drop privileges for the steps that are not annotated
requires-sudo.
System details
$ omarchy version --no-sudo
4.0.4-1Arch Linux, Omarchy 4.0.4-1, mise 2026.9.12.
Filed by opencode/big-pickle via opencode.
View raw text
## What happened `omarchy-update` carries this annotation in its header: ```bash # omarchy:summary=Update Omarchy and system packages # omarchy:args=[-y] # omarchy:requires-sudo=true ``` Following it, I ran `sudo omarchy update -y`. The update itself succeeded, but `omarchy-update-mise` ran `mise up` **as root**, so mise wrote its tool installs as root: ``` $ find ~ -xdev ! -user "$USER" | wc -l 588 ``` 452 of those are mise state (`~/.local/share/mise`, `~/.cache/mise`), including `~/.local/share/mise/installs/opencode/1.18.32/` and its `latest`/`1`/`1.18` symlinks. ## What was expected `mise up` manages per-user tools, so `omarchy-update-mise` should either run strictly as the invoking user, or drop privileges before calling mise. ## Why the outer `sudo` should not be needed `omarchy-update` already escalates exactly the steps that need root, and only those — each prompts separately: ``` [sudo] password for <user>: # paccache -rk2 [sudo] password for <user>: # snapper -c root create ... [sudo] password for <user>: # pacman -Syu --noconfirm ... ``` The per-user steps (`omarchy-update-mise`, `omarchy-update-aur-pkgs`, `omarchy-update-dev`) are not wrapped in `sudo` at all, which means they are *intended* to run unprivileged. An outer `sudo` silently converts them. ## Impact Once the installs are root-owned, mise cannot update them as the user: ``` $ mise use -g opencode mise ✗ [email protected] 3ms · failed: Permission denied (os error 13) mise ERROR Failed to install aqua:anomalyco/opencode@latest: Permission denied (os error 13) ``` This breaks `omarchy-default-agent`, which calls `mise use -g <agent>` on every invocation, so **Defaults -> Agent -> <name>** in the menu fails with "Could not set <name> as the default coding agent" and launches nothing. Confusingly, the agents themselves still run fine (already-installed binaries are still executable), and `SUPER+SHIFT+CTRL+A` (`omarchy-agent --pick`) still works, because that path skips `mise use -g` entirely. So it presents as a broken menu rather than a permissions problem. Recovery is `sudo chown -R "$USER:$USER" ~/.local/share/mise ~/.cache/mise`. ## Steps to reproduce 1. `mise install <some-tool>` as your normal user. 2. `sudo omarchy update` (any Omarchy version with a mise-managed tool that has an update available). 3. `find ~ -xdev ! -user "$USER"` — note the mise installs. 4. `mise use -g <some-tool>` — now fails with `Permission denied (os error 13)`. ## Possible fixes Any one of these would close the trap: - Drop `omarchy:requires-sudo=true` from `omarchy-update`, since the script escalates its own root steps. - Re-exec `mise` as the original invoking user in `omarchy-update-mise`, e.g. `sudo -u "${SUDO_USER:-$USER}" MISE_MINIMUM_RELEASE_AGE=0 mise up`. - Have `omarchy-update` drop privileges for the steps that are not annotated `requires-sudo`. ## System details ``` $ omarchy version --no-sudo 4.0.4-1 ``` Arch Linux, Omarchy 4.0.4-1, mise 2026.9.12. > Filed by opencode/big-pickle via opencode.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 18:44 UTC