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.
hermes-desktop launcher falls back to the stale packaged app forever on the new Hermes runtime layout (no runtime/venv), causing an infinite first-launch bootstrap loop
Reported by Pipboyguy · filed Oct 1, 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
System details
Omarchy 4.0.0 (Wayland/Hyprland), AMD Ryzen 9, NVIDIA GPU, hermes-desktop 2026.9.7-3, Hermes runtime on current main (2026-09-24+)
What's wrong?
The hermes-desktop package's launcher (/usr/bin/hermes-desktop) decides between the user's runtime-built app and the packaged /opt/hermes-desktop fallback with:
if [[ ! -x $native || ! -x $runtime/venv/bin/hermes ]]; then
native=/opt/hermes-desktop/Hermes
export HERMES_DESKTOP_IGNORE_EXISTING=1
fiCurrent Hermes runtimes no longer create ~/.hermes/hermes-agent/venv — dependency environments live under ~/.hermes/installs/<sha>/environments/<hash>/venv, and the CLI launcher is ~/.hermes/hermes-agent/.hermes/bin/hermes. So on an up-to-date runtime the condition is always true, and every launch:
- Runs the stale packaged app (built from the pinned release commit) instead of the runtime's own
apps/desktop/release/linux-unpacked/Hermes - Exports
HERMES_DESKTOP_IGNORE_EXISTING=1, which makes the packaged app skip its "usable active runtime" resolution rung - The packaged app then probes
runtime/venv/bin/python(also gone in the new layout), finds nothing usable, and enters first-launch bootstrap → bootstrap completes → re-resolve → probe fails again → infinite bootstrap loop.~/.hermes/logs/desktop.logfills with repeated cycles of:
[bootstrap] no Hermes install found; starting first-launch bootstrap
... 9 bootstrap stages run (git fetch + full build) ...
[bootstrap] bootstrap complete; marker written. Re-resolving backend.
[bootstrap] no Hermes install found; starting first-launch bootstrap <-- loops foreverThe window never reaches chat; CPU stays busy with repeated fetches/builds.
Steps to reproduce:
- Install Hermes Desktop via Omarchy (Install > AI > Hermes Desktop) and complete the first-run bootstrap
hermes updateto currentmain— the runtime now uses theinstalls/layout and.hermes/bin/hermes, with noruntime/venv- Launch Hermes from the app launcher; watch
~/.hermes/logs/desktop.logloop bootstrap forever
Related but distinct from #13453 (IGNORE_EXISTING used to be unconditional; it is now gated on this venv probe — but the probe itself no longer matches reality) and #12206 (bootstrap marker never written).
Workaround (verified working on my machine): bridge the old path to the new layout and relaunch:
ln -sfn ~/.hermes/installs/<sha>/environments/<hash>/venv ~/.hermes/hermes-agent/venvWith the symlink in place the shim picks the runtime-built app and startup is clean (~2s to backend ready, no bootstrap).
Suggested fix: probe the layout current runtimes actually ship — e.g. treat the runtime as usable when $runtime/.hermes/bin/hermes is executable (keeping $runtime/venv/bin/hermes as a fallback for older runtimes) — in both the launcher's fallback decision and the python selection below it.
View raw text
### System details Omarchy 4.0.0 (Wayland/Hyprland), AMD Ryzen 9, NVIDIA GPU, `hermes-desktop` 2026.9.7-3, Hermes runtime on current `main` (2026-09-24+) ### What's wrong? The `hermes-desktop` package's launcher (`/usr/bin/hermes-desktop`) decides between the user's runtime-built app and the packaged `/opt/hermes-desktop` fallback with: ```bash if [[ ! -x $native || ! -x $runtime/venv/bin/hermes ]]; then native=/opt/hermes-desktop/Hermes export HERMES_DESKTOP_IGNORE_EXISTING=1 fi ``` Current Hermes runtimes no longer create `~/.hermes/hermes-agent/venv` — dependency environments live under `~/.hermes/installs/<sha>/environments/<hash>/venv`, and the CLI launcher is `~/.hermes/hermes-agent/.hermes/bin/hermes`. So on an up-to-date runtime the condition is always true, and every launch: 1. Runs the **stale packaged app** (built from the pinned release commit) instead of the runtime's own `apps/desktop/release/linux-unpacked/Hermes` 2. Exports `HERMES_DESKTOP_IGNORE_EXISTING=1`, which makes the packaged app skip its "usable active runtime" resolution rung 3. The packaged app then probes `runtime/venv/bin/python` (also gone in the new layout), finds nothing usable, and enters first-launch bootstrap → bootstrap completes → re-resolve → probe fails again → **infinite bootstrap loop**. `~/.hermes/logs/desktop.log` fills with repeated cycles of: ``` [bootstrap] no Hermes install found; starting first-launch bootstrap ... 9 bootstrap stages run (git fetch + full build) ... [bootstrap] bootstrap complete; marker written. Re-resolving backend. [bootstrap] no Hermes install found; starting first-launch bootstrap <-- loops forever ``` The window never reaches chat; CPU stays busy with repeated fetches/builds. **Steps to reproduce:** 1. Install Hermes Desktop via Omarchy (Install > AI > Hermes Desktop) and complete the first-run bootstrap 2. `hermes update` to current `main` — the runtime now uses the `installs/` layout and `.hermes/bin/hermes`, with no `runtime/venv` 3. Launch Hermes from the app launcher; watch `~/.hermes/logs/desktop.log` loop bootstrap forever Related but distinct from #13453 (IGNORE_EXISTING used to be unconditional; it is now gated on this venv probe — but the probe itself no longer matches reality) and #12206 (bootstrap marker never written). **Workaround** (verified working on my machine): bridge the old path to the new layout and relaunch: ```bash ln -sfn ~/.hermes/installs/<sha>/environments/<hash>/venv ~/.hermes/hermes-agent/venv ``` With the symlink in place the shim picks the runtime-built app and startup is clean (~2s to backend ready, no bootstrap). **Suggested fix:** probe the layout current runtimes actually ship — e.g. treat the runtime as usable when `$runtime/.hermes/bin/hermes` is executable (keeping `$runtime/venv/bin/hermes` as a fallback for older runtimes) — in both the launcher's fallback decision and the python selection below it.
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 20:29 UTC