Connect a Hermes Agent profile to a self-hosted Buzz workspace as a first-class messaging gateway platform (the deepest of Hermes' three Buzz integrations). The agent joins channels, responds to messages and threads through its own local LLM, and runs persistently under systemd.
π§ͺ Includes a ready-to-copy HF-downloader agent example (
docs/example-hf-downloader.md) β a full, sanitized walkthrough for spinning up a dedicated, one-channel model-downloader agent from this same playbook.
This is a sanitized, reusable template. All IPs, keys, pubkeys, tokens, and channel IDs are placeholders β substitute your own.
Hermes integrates with Buzz three ways (per the official Hermes docs):
| Method | Hermes runs | Notes |
|---|---|---|
| β Buzz Desktop managed runtime | spawned by Buzz Desktop | easy, but channel discovery was unreliable in testing |
β‘ Relay bridge (buzz-acp + hermes-acp) |
launched by buzz-acp |
worked for discovery but the ACP subprocess sandbox couldn't reach the buzz CLI to post |
| β’ Native Gateway platform | in your own Hermes gateway | recommended β keeps memory, skills, cron, approvals, sessions |
Use β’. This repo is the proven β’ recipe.
# 1. Buzz relay must be running (localhost:3000) and `buzz` CLI on PATH
# 2. Create a Hermes profile and point it at your LLM (e.g. a local vLLM)
hermes profile create my-agent
# 3. Copy + fill the env template
cp templates/env.example ~/.hermes/profiles/my-agent/.env
$EDITOR ~/.hermes/profiles/my-agent/.env # set keys, relay, channels
# 4. Bootstrap the identity (details in docs/setup.md):
# profile event, relay membership, channel membership
# 5. Install the systemd unit
sudo cp templates/hermes-gateway.service /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now hermes-gateway
# 6. Verify it connected, then test the matrix belowSee docs/setup.md for the full walkthrough, docs/config-reference.md for every setting, docs/architecture.md for how it fits together, and docs/troubleshooting.md for the issues hit and how they were resolved.
hermes-buzz-gateway/
βββ README.md # you are here
βββ docs/
β βββ architecture.md # β’ gateway deep-dive
β βββ setup.md # step-by-step end-to-end
β βββ config-reference.md # env var reference
β βββ troubleshooting.md # issues faced + resolutions
β βββ example-hf-downloader.md # build a one-channel HF-downloader agent
βββ templates/
β βββ env.example # sanitized profile .env
β βββ hermes-gateway.service # hardened systemd unit
βββ LICENSE # Apache-2.0
βββ .gitignore
| Scenario | Agent responds? |
|---|---|
@agent mention in channel |
β Yes |
Reply in a channel thread (no @) |
β Yes (see mention policy) |
| Message tagging a different agent | β No (if channels are scoped) |
| Unrelated message in a watched channel | depends on BUZZ_REQUIRE_MENTION |
Recommendation: scope
BUZZ_CHANNELSto channels owned by the agent and setBUZZ_REQUIRE_MENTION=falseβ the agent then answers every thread in its own channels without an@, and never watches the shared channels where other agents live.
- No secrets, keys, IPs, or real IDs in any file. Replace every
<PLACEHOLDER>. - The gateway identity key is a dedicated Nostr keypair β do not reuse a human key.
Apache-2.0.