feat(agents): add Hermes ACP and external-agent integration#2468
feat(agents): add Hermes ACP and external-agent integration#2468NYTEMODEONLY wants to merge 3 commits into
Conversation
Register Hermes in the Desktop runtime catalog, normalize both native ACP entrypoints, track managed Hermes processes, and document personal-agent setup through buzz-acp. Co-authored-by: nytemodeonly <contact@nytemode.com> Signed-off-by: nytemodeonly <contact@nytemode.com>
Co-authored-by: nytemodeonly <contact@nytemode.com> Signed-off-by: nytemodeonly <contact@nytemode.com>
Co-authored-by: nytemodeonly <contact@nytemode.com> Signed-off-by: nytemodeonly <contact@nytemode.com>
peteclt92
left a comment
There was a problem hiding this comment.
I tested the Hermes runtime path end to end on an Intel macOS Buzz Desktop host with the agent running persistently on Linux. Two interoperability details look worth tightening before merge:
-
Please accept the native
hermesentrypoint, not onlyhermes-acp. The official installer produced Hermes Agent v0.19.0 at~/.local/bin/hermes; it did not install ahermes-acpexecutable in the expected PATH. The verified ACP invocation washermes acp(and, for a dedicated profile,hermes --profile <profile> acp). Withcommands: &["hermes-acp"], Desktop can report adapter-missing immediately after a successful official install. I suggest discovering both forms, with command-specific defaults:hermes->["acp"],hermes-acp->[].hermes acp --checkis also the useful readiness probe where the catalog can express command arguments. -
Please include Python in marked managed-process recognition. The live Hermes service process was a venv interpreter running the Hermes console script (
.../venv/bin/python3 .../venv/bin/hermes ... acp), rather than a process namedhermes. The existingBUZZ_MANAGED_AGENTmarker check keeps this bounded, so adding exactpython/python3interpreter matches would let Buzz lifecycle cleanup find the process without sweeping unrelated Python jobs. Prefixes such aspython3.12should remain rejected unless intentionally handled.
The rest of the first-class catalog shape matches the live integration well. These two points came from actual install, discovery, selection, and signed Buzz reply verification rather than static inspection.
Summary
10100directory profiles from externally hostedbuzz-acpagentsbuzz channels set-add-policychanges one fieldRoot cause
Externally hosted agents could have valid identity, ownership, and channel membership while remaining absent from Desktop mention surfaces. Their replaceable kind
10100record was incomplete, policy changes could clobber it, and Desktop did not carry verified owner identity into eligibility checks.The new path keeps the security boundary fail-closed: Desktop ignores self-claimed owner fields and trusts only a cryptographically valid NIP-OA auth tag.
Hermes runtime design
Hermes exposes ACP over stdio through both
hermes acpandhermes-acp. Desktop useshermes-acpas the readiness probe so a base install without the optional ACP extra is reported accurately. Automatic installation remains disabled because the official ACP-extra install path differs across managed source installs and platforms; Doctor links to Hermes's official setup instructions instead.Hermes keeps its own model/provider selection and existing
~/.hermes/config.yamlstate. Buzz does not inject parallel provider configuration or replace Hermes memory, skills, or tools.Live interoperability proof
The baseline Hermes integration was deployed on a Linux VPS with Hermes Agent
v0.19.0and Buzzv0.4.23:hermes acp --checkreturnedOKbuzz-acpinitialized Hermes with its existing memory and native MCP toolsbotrolesystemdwithRestart=alwaysThe external-directory changes in commit
464dc366still require the commit-bound Linux package to be deployed to that VPS before the final live UI verification.No private key, API token, owner authorization, or private relay endpoint is included in this PR.
Validation
At commit
464dc366:cargo fmt --all -- --checkcargo clippy --workspace --all-targets -- -D warningscargo test -q -p buzz-acp -p buzz-cli— ACP 584 unit + 9 integration; CLI 253cd desktop && pnpm test— 3,402 passedcd desktop && pnpm typecheckcargo test --manifest-path desktop/src-tauri/Cargo.toml --lib— 1,565 passed, 13 ignoredgit diff --checkjust cireaches Desktop's existing file-size baseline failure in unchangeddesktop/src-tauri/src/managed_agents/discovery/tests.rs(1,293 lines vs 1,273 limit).Companion Hermes documentation