Skip to content

Let Hermes Desktop update its native installation - #325

Open
spencerbull wants to merge 8 commits into
omacom:masterfrom
spencerbull:hermes-native-updates
Open

Let Hermes Desktop update its native installation#325
spencerbull wants to merge 8 commits into
omacom:masterfrom
spencerbull:hermes-native-updates

Conversation

@spencerbull

@spencerbull spencerbull commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Hermes' desktop update can fetch a new backend and then fail or leave the app behind. The existing package bootstraps a detached release with a tag-only fetch refspec and launches Electron from /opt/hermes-desktop; Hermes' native updater expects the desktop beside its writable runtime.

Make the package the installer and launcher for that native installation. Initial setup uses upstream's installer and native CLI to build the desktop under ~/.hermes/hermes-agent/apps/desktop/release/linux-unpacked, and subsequent app and CLI updates use the same runtime. Existing package bootstraps gain branch tracking and a native build. Package upgrades leave an already working native installation alone. Launching or installing from a Hermes profile session resolves its data directory to the shared installation home; explicit custom data roots remain supported.

First setup now shows progress in a terminal and needs internet access and the packaged build dependencies. Voice dependencies follow Hermes' first-use setup. Setup preserves custom launchers and local source work, stages the initial clone so interrupted downloads can be retried, publishes the CLI after a successful desktop build, and registers the desktop entry against that verified CLI. It records an owned mise predecessor for Omarchy's cleanup. The launcher runs the desktop beside its shared CLI runtime and uses Chromium's namespace sandbox. A hidden URI handler keeps existing hermes:// links working alongside upstream's desktop entry.

Coordinated with omacom/omarchy#10443. Publish this package before shipping that integration. This recipe supersedes the version-only bump in #302.

🤖 Generated by GPT-6 in Codex/T3 Code. Reviewed by GPT-6 Codex at xhigh and Claude Opus 5 at default effort through Omabot.

spencerbull and others added 4 commits September 6, 2026 01:56
Install Hermes into its writable native layout instead of shipping a frozen /opt desktop. Preserve the native update path, migrate tagged bootstraps, and keep existing CLI launchers until the desktop is ready.

Co-Authored-By: GPT-6 Codex (xhigh) <noreply@openai.com>
Co-Authored-By: GPT-6 Codex (xhigh) <noreply@openai.com>
spencerbull and others added 2 commits September 6, 2026 02:17
Stage the initial clone before publishing its ownership marker and build the desktop through the same native CLI used by updates. Keep a concurrent checkout intact and reset pkgrel for the version change.

Co-Authored-By: Claude Opus 5 (default) <noreply@anthropic.com>
Keep build-time registration private, verify the published launcher, and then let the native command register the final desktop entry. Keep that launcher first on the desktop environment PATH for subsequent registrations.

Co-Authored-By: GPT-6 Codex (xhigh) <noreply@openai.com>
@spencerbull

Copy link
Copy Markdown
Contributor Author

Omabot review: no remaining source blockers at 351f188d025d7e07d47bd1cb78bd11bada0ea2ac, coordinated with Omarchy 0e454df0edcf4c246565aa02dde4808bcaee94f7 in omacom/omarchy#10443.

Claude Opus 5 in Claude Code, at default effort through Omabot’s subscription workflow, and an independent GPT-6 Codex review at xhigh agree on the final source. The package stages the initial clone before publishing its ownership marker, builds with the native CLI without a late sudo step, and registers the desktop entry only after verifying the published CLI. This keeps the package as the entry point while desktop and CLI updates share the writable native installation.

Runtime validation was performed separately from those static reviews. The exact built package completed a fresh installation as UID1000 in an isolated local environment, even with another Hermes first on PATH. Its desktop entry targeted the new CLI; repeating setup preserved the installed files; CLI update succeeded. A real desktop update advanced 779482 to 245e480, rebuilt the desktop at that same commit, automatically relaunched, and displayed “You’re running the latest version.” Native desktop-entry launch also worked on Wayland with the namespace sandbox.

All 18 package regression tests, targeted mutation checks, and current-head package CI passed. The host pacman replacement still awaits normal system authentication; the fresh package payload and native update flow were exercised without that transaction. Copilot requests produced no review or start event, so no Copilot coverage is claimed. Publish this package before the coordinated Omarchy integration. Voice dependencies use Hermes’ first-use setup, and interrupted clone directories are retained for inspection.

🤖 Generated by GPT-6 in Codex/T3 Code. Reviewed by Claude Opus 5 at default effort through Omabot and GPT-6 Codex at xhigh.

@spencerbull
spencerbull marked this pull request as ready for review September 6, 2026 07:35
@smfworks

smfworks commented Sep 6, 2026

Copy link
Copy Markdown

Coordinated review from the Omarchy side (#10443).

The launcher defaults HERMES_HOME to $HOME/.hermes, which is correct for an explicit custom data home. If this binary is ever exec'd from a Hermes profile session (HERMES_HOME=~/.hermes/profiles/), setup lands in the profile instead of the machine tree. Install > AI's floating terminal is a clean env. Worth pinning the packaged entry point to $HOME/.hermes unless HERMES_HOME is set and is not under profiles/.

--disable-setuid-sandbox when user namespaces work is the correct Chromium path on Omarchy; keep that, do not fall back to --no-sandbox in the package.

Ship this before #10443.

@spencerbull

Copy link
Copy Markdown
Contributor Author

Addressed the profile-home finding in beb164a9a218ce680737ef46a94e05786fd9e72c, coordinated with omacom/omarchy#10443 at 61fb0b0dc806bbb3bdbd931d3e391202252de820.

The launcher now resolves an inherited <root>/profiles/<name> home to its shared installation root, following Hermes’ profile resolver. Explicit custom roots, paths with spaces, and symlink spelling remain supported. Setup, readiness, and launch use that root. Filesystem-root homes are rejected before mutations; namespace sandbox behavior is unchanged.

Independent GPT-6 Codex review at xhigh found no confirmed blockers and exercised the coordinated command chain. All 24 package regressions and four repository self-tests pass; five deliberate mutations are caught. The rebuilt package also passed real --check / warm --install / --check from a profile environment as UID 1000, preserving the shared CLI, desktop entry, build stamp, and profile data. Omabot is being rerun on these new commits next. The package must ship before the Omarchy integration.

🤖 Generated by GPT-6 in Codex/T3 Code. Reviewed by GPT-6 Codex at xhigh.

@spencerbull

Copy link
Copy Markdown
Contributor Author

Omabot final review: no confirmed source blockers at beb164a9a218ce680737ef46a94e05786fd9e72c, coordinated with omacom/omarchy#10443 at 61fb0b0dc806bbb3bdbd931d3e391202252de820.

Claude Opus 5 in Claude Code, at default effort through Omabot’s subscription workflow, reviewed the frozen commits and upstream profile resolvers. It reached the same conclusion as the independent GPT-6 Codex review at xhigh. The inherited profile-home fix preserves custom roots and symlink spelling, rejects filesystem-root homes before mutations, and retains the namespace sandbox. No further source changes were required.

All 24 package regressions, four repository self-tests, five targeted mutation checks, and current-head hosted CI passed. Separately, the exact rebuilt package passed real profile-session readiness and warm setup as UID 1000 without changing the shared CLI, desktop entry, build stamp, or profile data. The earlier real GUI/CLI update validation was not repeated for this path-resolution change; cold setup from a profile and its GUI/theme handoff remain covered by fixtures rather than a new end-to-end run.

Publish this package first. Both PRs are needed for the complete profile fix, including Omarchy’s theme and removal paths. The host package replacement still requires system authentication.

🤖 Generated by GPT-6 in Codex/T3 Code. Reviewed by GPT-6 Codex at xhigh and Claude Opus 5 at default effort through Omabot.

@spencerbull

Copy link
Copy Markdown
Contributor Author

Restored the Hermes PKGBUILD’s existing formatting in b36bfce: one dependency per line and wrapped long install commands. All 39 dependencies retain their values and order; generated package metadata and Bash-normalized packaging commands are byte-for-byte identical to the preceding commit.

Syntax and whitespace checks passed. Independent GPT-6 Codex review at xhigh found no blockers in this formatting-only delta.

🤖 Generated by GPT-6 in Codex/T3 Code. Reviewed by GPT-6 Codex at xhigh.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants