Skip to content

fix(install): put hermes-acp on PATH — install.sh launcher (salvage #73477) + hermes update self-heal + Buzz docs - #73501

Merged
teknium1 merged 3 commits into
mainfrom
salvage/73477-hermes-acp-launcher
Jul 28, 2026
Merged

teknium1 merged 3 commits into
mainfrom
salvage/73477-hermes-acp-launcher

Conversation

@teknium1

Copy link
Copy Markdown
Collaborator

Summary

ACP hosts (Buzz Desktop, Zed, JetBrains) can now resolve Hermes by the hermes-acp command name on the login-shell PATH — on fresh installs via install.sh, and on existing installs via hermes update self-heal.

Root cause: the hermes-acp console script only exists inside the install venv, which is not on the login-shell PATH, so ACP hosts that spawn hermes-acp by name (including Buzz's Hermes preset) reported Hermes as not installed on healthy installs.

Salvages #73477 by @SHL0MS (commit cherry-picked with authorship preserved), plus follow-ups from us.

Changes

  • scripts/install.sh: write a hermes-acp launcher next to the hermes one (venv + non-venv variants, Bug: Re-running install.sh on prior install creates infinite-loop shim (CLI hangs) #21454 symlink-stomp guard) — @SHL0MS
  • hermes_cli/uninstall.py: remove the new launcher on uninstall — @SHL0MS
  • tests/test_install_sh_acp_launcher.py: 3 tests executing the real install.sh block — @SHL0MS
  • hermes_cli/main.py: _ensure_acp_launcher() — hermes update self-heals the launcher for installs that predate it (delegates to the sibling hermes launcher, so it's correct for every install layout; never follows symlinks; skips unwritable dirs; no-op on Windows where venv\Scripts is already on user PATH)
  • tests/hermes_cli/test_ensure_acp_launcher.py: 9 tests covering write, idempotency, symlink guards, Windows no-op, unwritable dirs
  • website/docs/user-guide/features/acp.md (+ zh-Hans): Buzz Desktop section

Validation

Before After
env -i login-shell command -v hermes-acp not found resolves (fresh install or after hermes update)
Buzz "Your runtimes" Hermes absent despite healthy install Hermes discovered
Targeted tests — 12/12 pass
E2E — real _ensure_acp_launcher() run against temp HOME; shim executed, acp --check extra arg argv passthrough verified

Companion Buzz-side fix (works for installs that exist today): block/buzz#3334.

Infographic

hermes-acp on PATH

SHL0MS and others added 2 commits July 28, 2026 10:12
setup_path() wrote a `hermes` launcher to ~/.local/bin but nothing for
`hermes-acp`. That console script exists only inside the venv, which is
not on the login-shell PATH.

ACP hosts resolve the agent by command name against that PATH, so an
otherwise healthy install looks absent to them. Buzz Desktop ships a
Hermes preset that spawns `hermes-acp` and reports the runtime as
unavailable; Zed and JetBrains configs that name the bare command have
the same problem.

Write a hermes-acp launcher next to the hermes one, dispatching to the
acp subcommand. Same PYTHONPATH/PYTHONHOME clearing, and the same rm -f
before cat > so an older symlink into the venv cannot be followed and
stomp the console script (#21454). Uninstall removes both launchers.

tests/test_install_sh_acp_launcher.py drives the block out of install.sh
rather than asserting on a copy, covering the venv and non-venv branches
plus the symlink-stomp case. Reverting the install.sh change turns all
three red.

Signed-off-by: SHL0MS <[email protected]>
…op as an ACP host

Existing installs predate the install.sh hermes-acp launcher, and hermes
update never re-runs setup_path, so ACP hosts (Zed, JetBrains, Buzz)
still resolve Hermes as unavailable until a reinstall. _ensure_acp_launcher()
writes the launcher next to an existing hermes command in ~/.local/bin or
/usr/local/bin during hermes update — delegating to the sibling launcher so
it is correct for every install layout. Never follows symlinks (#21454),
skips unwritable dirs, no-op on Windows (venv Scripts is already on PATH).

Docs: add a Buzz Desktop section to the ACP page (en + zh-Hans).
@teknium1
teknium1 force-pushed the salvage/73477-hermes-acp-launcher branch from c300cf9 to 81a1ffc Compare July 28, 2026 17:27
@github-actions

github-actions Bot commented Jul 28, 2026 •

Copy link
Copy Markdown

૮ >ﻌ< ა ci review

ran on 82c49ac

ℹ️ Info

Desktop E2E visual evidence · View test artifacts · View job

1 visual diff.

inline evidence upload failed.

Failed to upload diff-665a0833239e-onboarding-overlay-diff.png with gh image (exit code 1): Error uploading /home/runner/work/_temp/e2e-evidence/diff-665a0833239e-onboarding-overlay-diff.png: step 0 (get upload token): uploadToken not found on repo page — do you have write access to NousResearch/hermes-agent? (or, if NousResearch enforces SAML SSO, authorize at https://github.com/orgs/NousResearch/sso)

The Buzz Desktop section covered discovery only. The combination that
actually needs stating: the hermes-acp toolset carries terminal and
execute_code, and buzz-acp answers session/request_permission itself with
allow_once instead of surfacing it. A Hermes agent in Buzz runs shell
commands on the host unattended.

Buzz defaults every agent to owner-only and that default holds through to
the spawned process env, so nobody reaches the open state by accident.
But Anyone is one dropdown change away with no warning shown, and it
hands channel-wide shell access to the host.

Also record that the two obvious mitigations do not work: approvals.mode
manual raises the request but Buzz auto-approves it anyway, and
platform_toolsets.acp does not narrow the ACP toolset. Both verified by
running rm -rf through the ACP path under each setting.

Amend the Approvals section too — it promised prompts route back to the
editor, which is only true for hosts that choose to surface them.

en + zh-Hans.

Signed-off-by: SHL0MS <[email protected]>
@alt-glitch alt-glitch added type/bug Something isn't working P2 Medium — degraded but workaround exists comp/cli CLI entry point, hermes_cli/, setup wizard comp/acp Agent Communication Protocol adapter area/install-update Installer, updater, packaging, wheels, doctor labels Jul 28, 2026
@teknium1
teknium1 merged commit fda7714 into main Jul 28, 2026
61 of 63 checks passed
@teknium1
teknium1 deleted the salvage/73477-hermes-acp-launcher branch July 28, 2026 18:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/install-update Installer, updater, packaging, wheels, doctor comp/acp Agent Communication Protocol adapter comp/cli CLI entry point, hermes_cli/, setup wizard P2 Medium — degraded but workaround exists type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants