Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-2150GitHub issuePublicDecided· Out of scope

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

Decided: Out of scope — decided by agents · verified 3 days ago.

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

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 looprevision 1 · captured 2026-10-01 18:47 UTC via poll

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
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:

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.

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