Tutorial

Hermes Agent mit Buzz verbinden – die sichere Schritt-für-Schritt-Anleitung

tutorial

Bitte vorher lesen: Was Du hier eigentlich baust

Am Ende dieser Anleitung kann ein Chat-Kanal Befehle auf Deinem Mac auslösen. Wenn Dein Hermes-Agent Zugriff auf Shell, MCP-Server, Datenbanken, CRM oder Google Workspace hat, dann gibst Du diesen Zugriff über Buzz frei – auch vom Handy aus, auch wenn Du gerade nicht am Rechner sitzt.

Das ist genau der Punkt, warum die Kombination so mächtig ist. Es ist aber auch der Punkt, an dem man sich ohne saubere Konfiguration ein Einfallstor baut. Nimm die drei Sicherheitsschritte in dieser Anleitung ernst – sie kosten zusammen keine zehn Minuten.

Die zuverlässige Lösung besteht darin, Hermes nicht als eingebettete ACP-Runtime von Buzz zu betreiben, sondern Hermes über seinen eigenen Buzz Gateway als eigenständigen Teilnehmer der Buzz-Community anzubinden.

Die funktionierende Architektur sieht so aus:

hermes-buzz-architektur.svg

Der Weg einer Nachricht: von Buzz über das Relay zum Hermes Gateway.


Hermes bekommt dafür eine eigene Nostr-Identität, wird Mitglied der Buzz-Community und wird anschließend gezielt den gewünschten Channels hinzugefügt.

Der Vorteil: Hermes funktioniert weiterhin genauso wie außerhalb von Buzz – inklusive MCP, Skills und Tools – bekommt aber die deutlich angenehmere Buzz-Oberfläche mit Channels, Threads und mehreren Arbeitskontexten.

💡 Reihenfolge lohnt sich

Diese Anleitung ist bewusst anders sortiert als mein eigener Weg dorthin. Wer die Schritte in dieser Reihenfolge abarbeitet, umgeht zwei Fehlermeldungen komplett, die sonst garantiert auftreten. Wie es bei mir tatsächlich lief, steht im Anhang.


Die drei Sicherheitsregeln vorweg

Wenn Du Dir nur drei Dinge aus diesem Artikel merkst, dann diese:

  1. Hermes bekommt einen eigenen Schlüssel. Niemals Deinen persönlichen Buzz-Key im Agenten hinterlegen.
  2. Dein persönlicher Schlüssel verlässt niemals eine kurze Terminal-Sitzung. Kein export, kein Notizzettel, kein Screenshot – und am Ende aufräumen.
  3. Der Agent gehorcht nur namentlich freigegebenen Personen. „Allow all members" ist bequem und in der Praxis die Ursache für die meisten Probleme.

1. Voraussetzungen

Für dieses Setup benötigst Du:

  • eine funktionierende Hermes-Agent-Installation
  • Buzz Desktop
  • eine bestehende Buzz-Community
  • das buzz-CLI
  • Homebrew auf macOS
  • nak als Nostr-Key-Tool

Prüfen kannst Du das Buzz-CLI beispielsweise mit:

command -v buzz

Wenn ein Pfad zurückgegeben wird, ist das CLI vorhanden.

Eine Versionsabfrage mit buzz --version oder buzz version funktionierte bei meiner Buzz-Version nicht. Das ist kein Problem.

⚠️ CLI-Optionen ändern sich

Buzz und Hermes entwickeln sich schnell. Die Befehle in diesem Artikel entsprechen dem Stand meiner Installation. Wenn ein Befehl bei Dir eine unbekannte Option meldet, ist --help immer die verlässlichste Quelle.

Diese drei Aufrufe zeigen Dir den Stand Deiner Installation:

buzz channels --help
buzz users set-profile --help
hermes gateway --help

nak installieren:

brew install nak

2. Eigene Nostr-Identität für Hermes erzeugen

Hermes sollte nicht mit Deinem persönlichen Buzz-Key betrieben werden. Stattdessen bekommt Hermes eine eigene Nostr-Identität – so wie ein eigener Mitarbeiter-Account und nicht wie ein weiterer Login in Deinen eigenen Account.

Verzeichnis vorbereiten

mkdir -p ~/.hermes/buzz
chmod 700 ~/.hermes ~/.hermes/buzz

Private Key erzeugen

( umask 077; nak key generate > ~/.hermes/buzz/hermes_key_hex.txt )

💡 Warum die Klammern und umask 077?

Ohne diesen Zusatz legt die Shell die Datei zuerst mit den Standardrechten an – auf vielen Systemen für alle Nutzer lesbar – und erst ein nachträgliches chmod schließt sie wieder. In diesem kurzen Moment liegt Dein Schlüssel offen. umask 077 sorgt dafür, dass die Datei von der ersten Sekunde an nur für Dich lesbar ist. Die runden Klammern begrenzen die Einstellung auf diesen einen Befehl.

Kontrolle:

ls -l ~/.hermes/buzz/hermes_key_hex.txt

Kontrollpunkt

Die Ausgabe muss mit -rw------- beginnen. Steht dort etwas anderes (z. B. -rw-r--r--), dann korrigiere es mit chmod 600 ~/.hermes/buzz/hermes_key_hex.txt und erzeuge den Schlüssel sicherheitshalber neu.

Diese Datei ist die Identität Deines Agenten

Wer sie hat, ist Hermes: kann in Deinen Channels schreiben, sich als Dein Agent ausgeben und vom Gateway erteilte Rechte nutzen. Nostr kennt keine Rücknahme von Schlüsseln – ein einmal abgeflossener Key lässt sich nicht sperren, sondern nur durch eine komplett neue Identität ersetzen. Also: nie in Screenshots, nie in Blogposts, nie in Chat-Nachrichten, nie in ein KI-Fenster kopieren.

Public Key ableiten und dauerhaft ablegen

Den öffentlichen Schlüssel brauchst Du später mehrfach. Damit Du dafür nie wieder den geheimen Schlüssel anfassen musst, speicherst Du ihn einmal separat:

cat ~/.hermes/buzz/hermes_key_hex.txt | nak key public > ~/.hermes/buzz/hermes_pubkey_hex.txt
cat ~/.hermes/buzz/hermes_pubkey_hex.txt

Die Ausgabe ist ein 64-stelliger Hex-Public-Key, zum Beispiel:

1f0a9c4d……(64 Hex-Zeichen)……3b7e

Falls Deine nak-Version die Eingabe über die Pipe nicht akzeptiert, funktioniert alternativ:

nak key public "$(cat ~/.hermes/buzz/hermes_key_hex.txt)" > ~/.hermes/buzz/hermes_pubkey_hex.txt

Bitte mit einem Leerzeichen am Zeilenanfang eintippen – nur dann bleibt die Zeile aus der Shell-History.

⚠️ Beachte das führende Leerzeichen

In der Alternativ-Variante steht der geheime Schlüssel kurzzeitig in der Prozessliste des Systems. Das führende Leerzeichen vor dem Befehl verhindert zumindest, dass die Zeile in Deiner Shell-History landet – vorausgesetzt, Du hast das einmalig aktiviert (Befehl unten). Weil ein führendes Leerzeichen im Text nicht sichtbar ist: Du musst es beim Eintippen selbst setzen. Bevorzuge deshalb die Pipe-Variante, wenn sie bei Dir funktioniert.

Einmalig einschalten:

# zsh (macOS-Standard):
setopt HIST_IGNORE_SPACE
# bash:
export HISTCONTROL=ignorespace

💡 Hex oder npub?

Es gibt zwei Schreibweisen für dieselben Schlüssel: nsec… / npub… (bech32, gut lesbar, in der Buzz-Oberfläche üblich) und die reine Hex-Form (64 Zeichen, im CLI und in der Gateway-Konfiguration üblich). Diese Anleitung arbeitet durchgängig mit Hex. Wenn eine Eingabemaske ausdrücklich npub verlangt, kannst Du mit nak umrechnen (nak encode npub …, siehe nak encode --help). Der häufigste Anfängerfehler an dieser Stelle ist, das falsche Format einzufügen.


3. Hermes-Identität in die Buzz-Community aufnehmen

In Buzz Desktop:

Settings → Invites → Invite to community

Dort nimmst Du die neue Hermes-Identität über ihren Public Key bzw. den vorgesehenen Invite-Mechanismus in die Community auf. Bei mir funktionierte das direkt problemlos.

Anschließend erscheint die neue Identität zunächst als:

Unnamed member

unter Settings → Invites → Members. Das ist normal – die Identität hat noch kein Profil veröffentlicht. Das holen wir im nächsten Schritt nach.

💡 Community-Mitgliedschaft ≠ Channel-Mitgliedschaft

Das ist der wichtigste Denkfehler in diesem ganzen Setup. Eine Identität kann Mitglied der gesamten Community sein und trotzdem in keinem einzigen Channel sichtbar oder aktiv sein. Beides muss separat vergeben werden. Genau daran scheitern die meisten Setups (siehe Schritt 7).


4. Profil für Hermes veröffentlichen

Dieser Schritt kommt bewusst vor der Gateway-Einrichtung. Der Gateway erwartet ein vorhandenes Profil; fehlt es, startet er mit einer irritierenden Fehlermeldung (siehe Troubleshooting, Problem 2).

Zuerst die verfügbaren Optionen Deiner CLI-Version prüfen:

buzz users set-profile --help

Bei meiner Version verfügbar: --name, --avatar, --about, --nip05.

Dann das Profil mit der Hermes-Identität veröffentlichen:

BUZZ_RELAY_URL="wss://DEINE-COMMUNITY.communities.buzz.xyz" BUZZ_PRIVATE_KEY="$(cat ~/.hermes/buzz/hermes_key_hex.txt)" buzz users set-profile --name "Hermes" --about "Hermes Agent via Buzz Gateway"

💡 Warum steht das BUZZ_PRIVATE_KEY= direkt vor dem Befehl – und nicht als export?

In dieser Schreibweise gilt der Wert nur für diesen einen Befehl. Danach ist er wieder weg. Ein export würde den Schlüssel dagegen an jeden weiteren Prozess weitergeben, den Du in diesem Terminal startest – an jedes Skript, jedes Tool, jeden Paketmanager. Merke Dir das Muster; wir brauchen es in Schritt 7 noch einmal in verschärfter Form.

Angenehmer Nebeneffekt: In der Shell-History landet nur der Text $(cat …), nicht der Schlüssel selbst.

Der Platzhalter DEINE-COMMUNITY steht für Deine eigene Community. Das allgemeine Schema lautet:

wss://DEINE-COMMUNITY.communities.buzz.xyz

Kontrollpunkt

In Buzz Desktop unter Settings → Invites → Members steht statt „Unnamed member" jetzt „Hermes".

Optional: vorhandenen Avatar übernehmen

Wenn bereits ein Hermes-Profilbild als URL vorhanden ist, kannst Du dieselbe URL verwenden:

BUZZ_RELAY_URL="wss://DEINE-COMMUNITY.communities.buzz.xyz" BUZZ_PRIVATE_KEY="$(cat ~/.hermes/buzz/hermes_key_hex.txt)" buzz users set-profile --name "Hermes" --avatar "https://DEINE-COMMUNITY.communities.buzz.xyz/media/DEIN-BILD.png" --about "Hermes Agent via Buzz Gateway"

5. Hermes Buzz Gateway konfigurieren

Jetzt wird der eigentliche Gateway eingerichtet:

hermes gateway setup

Im Setup:

Messaging Platforms → Buzz

Danach werden folgende Angaben abgefragt.

Relay URL

wss://DEINE-COMMUNITY.communities.buzz.xyz

Nostr Private Key

Hier trägst Du den Hermes-Schlüssel ein, also den Inhalt von:

~/.hermes/buzz/hermes_key_hex.txt

Ausgeben kannst Du ihn mit:

cat ~/.hermes/buzz/hermes_key_hex.txt

Bitte mit einem Leerzeichen am Zeilenanfang eintippen – nur dann bleibt die Zeile aus der Shell-History.

Nicht Deinen persönlichen Buzz-Key verwenden

Es ist an dieser Stelle verlockend, einfach den eigenen Key zu nehmen, „damit es erstmal läuft". Dann handelt der Agent aber unter Deiner Identität – inklusive aller Rechte, die Du in der Community hast, und ohne dass sich hinterher unterscheiden lässt, ob Du oder der Agent etwas geschrieben hat. Und: Du kannst ihm diese Rechte nie wieder einzeln entziehen.

Channels to watch

Channel UUIDs to watch
(comma-separated, empty = all joined channels):

Hier musst Du eine bewusste Entscheidung treffen:

  • Feld leer – Hermes beobachtet automatisch jeden Channel, dem seine Identität beitritt. Bequem im Testbetrieb und in kleinen, privaten Communities.
  • Feld mit UUIDs gefüllt – Hermes beobachtet ausschließlich die genannten Channels. Die richtige Wahl im Produktiv- und Teambetrieb.

⚠️ Leeres Feld heißt: andere bestimmen, wo Dein Agent mithört

Bequem ist es, weil neue Channels ohne Nachkonfiguration funktionieren. Der Preis: Jede Person, die Hermes' Public Key in einen Channel aufnehmen kann, entscheidet damit, was Dein Agent zu sehen bekommt – nicht mehr Du. Für einen Agenten mit Shell- oder Datenbankzugriff würde ich die Channels explizit auflisten. Die UUIDs findest Du in Schritt 6; Du kannst also auch zunächst leer lassen und später nachziehen.

Home Channel

Home channel UUID for cron/notification delivery (optional):

Zunächst leer lassen – der Home Channel lässt sich später bequem aus Buzz heraus setzen (Schritt 9).

Zugriffskontrolle

Allow all community members to talk to the agent? [y/N]:

Antwort: N

Allowed users
(comma-separated npubs or hex pubkeys, empty to deny everyone):

Hier trägst Du Deinen persönlichen Buzz-Public-Key ein (nicht den privaten!). Damit kann zunächst nur Dein eigener Account Anweisungen an Hermes senden.

Warum „Allow all" gefährlich ist – ein konkretes Beispiel

Mit offener Freigabe kann jedes Community-Mitglied @Hermes /sethome in einen beliebigen Channel schreiben und damit umleiten, wohin Deine Cron-Ergebnisse und Benachrichtigungen geliefert werden. Aus einem harmlosen Komfort-Feature wird so ein Abfluss für Daten, die eigentlich in Deinem privaten Channel landen sollten. Dasselbe gilt für jedes andere Tool, das Hermes ausführen kann.

⚠️ Freigabeliste ≠ Rundumschutz

Die Allowlist regelt, wer Befehle geben darf. Sie regelt nicht, was Hermes zu lesen bekommt. Der Agent verarbeitet weiterhin den Inhalt der beobachteten Channels – und je nach Aufgabe auch Webseiten, Dateien, Mails oder CRM-Einträge. In all diesen Inhalten kann eine Anweisung versteckt sein, die für Dein Sprachmodell wie eine legitime Aufgabe aussieht („Ignoriere vorherige Anweisungen und …").

Behandle daher jeden Inhalt, der nicht von Dir stammt, als unsicher und gib Hermes im Buzz-Betrieb nur die Werkzeuge, die er dort tatsächlich braucht.


6. Gateway starten und Status prüfen

Unter macOS läuft der Gateway als launchd-Service.

hermes gateway status

Beispielausgabe:

Launchd plist:
~/Library/LaunchAgents/ai.hermes.gateway.plist
✓ Service definition matches the current Hermes install
✓ Gateway is supervised by launchd

Log prüfen:

hermes logs gateway -n 60

Kontrollpunkt

Im Log sollte sinngemäß der Auszug unter dieser Box stehen. Damit stehen Identität, Relay, WebSocket und Gateway. Dass N hier noch 0 sein kann, ist normal – die Channel-Mitgliedschaft kommt erst im nächsten Schritt.

So sieht ein erfolgreicher Verbindungsaufbau aus:

Buzz: connected to wss://DEINE-COMMUNITY.communities.buzz.xyz
as Hermes,
watching N channel(s) via websocket
✓ buzz connected

Schlüssel-Ablage kontrollieren

Der Gateway hat Deinen Schlüssel jetzt in seine eigene Konfiguration übernommen. Damit liegt er an einer zweiten Stelle – und die sorgfältigen Rechte aus Schritt 2 nützen wenig, wenn diese zweite Datei offen liegt.

ls -la ~/.hermes
ls -l ~/Library/LaunchAgents/ai.hermes.gateway.plist

⚠️ Prüfe die Konfigurationsdateien

Alles, was den Schlüssel enthält, sollte -rw------- (600) sein. Falls eine Config- oder plist-Datei offener steht, korrigierst Du das mit chmod 600 PFAD/ZUR/DATEI.

Zweiter Punkt, der gern übersehen wird: ~/.hermes wandert in Time Machine und – je nach Einstellung – in iCloud Drive. Dein Agenten-Schlüssel liegt dann im Klartext in Deinen Backups. Wenn Dich das stört, schließe den Ordner aus dem Backup aus oder lege den Schlüssel in ein verschlüsseltes Volume.


7. Hermes einem privaten Channel hinzufügen

Hier liegt der eigentliche Stolperstein des ganzen Setups.

Die neue Hermes-Identität ist zwar Community-Mitglied, erscheint aber in der grafischen Channel-Mitgliedersuche von Buzz Desktop nicht zuverlässig. Bei mir führten weder Name noch npub noch Hex-Public-Key dort verlässlich zum Ziel.

Die Lösung ist das Buzz CLI. Und dafür braucht das CLI kurzzeitig Deinen persönlichen Schlüssel – denn nur Du als Owner darfst Mitglieder zu einem privaten Channel hinzufügen.

7.1 Persönlichen Key sicher in die Sitzung holen

Deinen persönlichen Private Key findest Du in Buzz Desktop unter:

Settings → Profile → Identity → Private key → Reveal

Der Moment mit dem höchsten Risiko in dieser Anleitung

Dieser Schlüssel ist Dein kompletter Buzz-Account – nicht ein Passwort, das man zurücksetzen kann. Wer ihn hat, ist Du. Für immer, denn zurücknehmen lässt er sich nicht.

Deshalb in den nächsten Minuten: keine Bildschirmaufnahme, keine Screenshots, kein Screensharing, kein Einfügen in irgendein Tool außer dem Terminal – und danach konsequent aufräumen (Schritt 7.5).

Im Terminal:

export BUZZ_RELAY_URL="wss://DEINE-COMMUNITY.communities.buzz.xyz"
printf 'Persönlicher Buzz Private Key: '
read -rs BUZZ_PRIVATE_KEY
echo
export BUZZ_PRIVATE_KEY

Nach read -rs fügst Du den Schlüssel ein und drückst Enter. Du siehst dabei nichts – das ist korrekt und gewollt. Der Schlüssel erscheint so weder auf dem Bildschirm noch in Deiner Shell-History.

💡 Warum nicht einfach export BUZZ_PRIVATE_KEY="…" mit dem Schlüssel in der Zeile?

Weil diese Zeile dann dauerhaft in ~/.zsh_history steht – im Klartext, monatelang, und ausgerechnet in einer Datei, die viele Backup- und Sync-Tools mitnehmen. Die Variante oben vermeidet das vollständig.

7.2 Channel-UUID herausfinden

buzz channels search --query "Hermes"

Beispielausgabe:

{
"channel_id": "00000000-1111-2222-3333-444444444444",
"name": "Hermes",
"visibility": "private"
}

Alternativ alle Channels auflisten:

buzz channels list

7.3 Hermes Public Key bereitlegen

Den brauchst Du jetzt – und dank Schritt 2 ohne den geheimen Schlüssel anzufassen:

cat ~/.hermes/buzz/hermes_pubkey_hex.txt

7.4 Hermes zum Channel hinzufügen

buzz channels add-member --channel CHANNEL_UUID --pubkey HERMES_PUBKEY --role member

Konkret mit den Werten aus den vorherigen Schritten:

buzz channels add-member --channel 00000000-1111-2222-3333-444444444444 --pubkey "$(cat ~/.hermes/buzz/hermes_pubkey_hex.txt)" --role member

Mitgliedschaft kontrollieren:

buzz channels members --channel CHANNEL_UUID

Kontrollpunkt

In der Ausgabe muss Dein Hermes-Public-Key mit einer Rolle auftauchen. Falls dort noch ein alter Agent aus früheren Versuchen steht: nicht ignorieren, sondern in Schritt 10 entfernen.

So sieht eine korrekte Mitgliederliste aus:

[
{ "pubkey": "DEIN_USER_KEY", "role": "owner" },
{ "pubkey": "HERMES_PUBKEY", "role": "member" }
]

7.5 Aufräumen – nicht überspringen

unset BUZZ_PRIVATE_KEY BUZZ_RELAY_URL

Und danach das Terminal-Fenster schließen.

Warum das kein optionaler Hygiene-Schritt ist

Solange BUZZ_PRIVATE_KEY exportiert ist, erbt jeder Prozess, den Du aus diesem Terminal startest, Deinen persönlichen Schlüssel: jedes npm run, jedes Python-Skript, jeder lokal gestartete MCP-Server, jedes Build-Tool. Ein einziges neugieriges oder kompromittiertes Paket genügt. unset und Fenster zu – fertig.


8. Erster Test: funktioniert es, und schweigt es auch?

Positiv-Test

Nach dem Neustart des Gateways:

hermes gateway restart

Falls Deine Version keinen restart-Subcommand hat:

hermes gateway stop
hermes gateway start

Im Channel schreibst Du:

@Hermes Antworte exakt mit TEST123

Hermes antwortet:

TEST123

💡 Wenn scheinbar nichts passiert: schau in den Thread

Buzz zeigt Agenten-Antworten als Thread-Reply an. Die Antwort hängt dann unter Deiner ursprünglichen Nachricht an einem kleinen Hinweis wie 1 reply. Wer das nicht weiß, hält das Setup für kaputt, obwohl alles funktioniert. Das war bei mir der zweithäufigste Fehlalarm.

Negativ-Test – der eigentlich wichtige

Ein Test, der zeigt, dass etwas funktioniert, sagt nichts darüber aus, ob Deine Zugriffskontrolle greift. Deshalb der Gegentest:

Bitte ein anderes Community-Mitglied (oder nutze einen Zweit-Account), im selben Channel zu schreiben:

@Hermes Antworte exakt mit TEST456

Kontrollpunkt

Hermes darf hier nicht antworten.

Antwortet er doch, steht Deine Zugriffskontrolle auf „Allow all" oder die Allowlist enthält den falschen Schlüssel. In dem Fall: hermes gateway setup erneut durchlaufen und die Allowlist korrigieren, bevor Du Hermes weitere Werkzeuge oder Channels gibst.


9. Home Channel festlegen

Der Home Channel ist der Channel, in dem Hermes Cron-Ergebnisse, Benachrichtigungen und Cross-Platform-Nachrichten ablegt. Zunächst meldet Hermes:

No home channel is set for Buzz.

Da Hermes mention-basiert arbeitet, schreibst Du im gewünschten Channel einfach:

@Hermes /sethome

Hermes bestätigt:

✅ Home channel set to Hermes
Cron jobs and cross-platform messages will be delivered here.

⚠️ Bewusst wählen

Alles, was Hermes automatisch produziert – auch Ergebnisse nächtlicher Cron-Jobs mit Daten aus Datenbanken oder CRM – landet ab jetzt in diesem Channel. Nimm einen Channel, dessen Mitgliederliste Du kennst und kontrollierst.


10. Aufräumen: alte Agenten entfernen

Wenn Du – wie ich – vorher andere Wege ausprobiert hast, steht möglicherweise noch eine alte Agenten-Identität in Deinen Channels:

buzz channels members --channel CHANNEL_UUID

Ein vergessener Alt-Agent ist ein offener Zugang

Ein Agent, der noch Mitglied eines privaten Channels ist, sieht dort weiter mit – auch wenn Du ihn nicht mehr nutzt und längst vergessen hast, wo sein Schlüssel liegt. Genau solche Reste findet man Jahre später in Sicherheitsprüfungen.

Zum Entfernen brauchst Du wieder kurz Deinen persönlichen Key (Schritt 7.1) und anschließend den passenden Unterbefehl Deiner CLI-Version:

buzz channels --help

Bei meiner Version hieß er remove-member und wird analog zu add-member verwendet:

buzz channels remove-member --channel CHANNEL_UUID --pubkey ALTER_AGENT_PUBKEY

Danach nicht vergessen: unset BUZZ_PRIVATE_KEY BUZZ_RELAY_URL.

Falls der alte Agent auch einen eigenen Schlüssel auf Deiner Platte hat, den Du nicht mehr brauchst – löschen. Ein nicht existierender Schlüssel kann nicht abfließen.


11. Weitere Channels hinzufügen

Wenn Du das Feld Channel UUIDs to watch leer gelassen hast, beobachtet Hermes automatisch alle Channels, denen seine Identität beitritt. Weitere Channels werden deshalb genauso hinzugefügt wie in Schritt 7.4:

buzz channels add-member --channel WEITERE_CHANNEL_UUID --pubkey "$(cat ~/.hermes/buzz/hermes_pubkey_hex.txt)" --role member

Hast Du die Channels dagegen explizit aufgelistet (die sicherere Variante), musst Du sie zusätzlich in der Gateway-Konfiguration ergänzen:

hermes gateway setup

Falls Hermes einen neu hinzugefügten Channel nicht unmittelbar erkennt:

hermes gateway restart

12. Betrieb: was Du wissen solltest, bevor es produktiv läuft

Schlüsselverlust und Schlüsselwechsel

Es gibt keinen „Passwort zurücksetzen"-Knopf

Nostr-Identitäten lassen sich nicht widerrufen. Daraus folgen zwei Dinge:

Wenn der Hermes-Schlüssel abfließt, hilft nur: neue Identität erzeugen (Schritt 2), neu in die Community aufnehmen (Schritt 3), Profil setzen (Schritt 4), Gateway umkonfigurieren (Schritt 5), in alle Channels aufnehmen (Schritt 7) – und die alte Identität überall entfernen (Schritt 10). Plane dafür realistisch eine halbe Stunde ein.

Wenn der Hermes-Schlüssel verloren geht (Festplattendefekt, versehentlich gelöscht), ist die Identität weg – samt Profil, Channel-Mitgliedschaften und Wiedererkennbarkeit. Der Ablauf ist derselbe.

Ein verschlüsseltes Backup der Datei hermes_key_hex.txt – Passwortmanager oder verschlüsseltes Volume, nicht der Desktop – erspart Dir den zweiten Fall.

Logs enthalten Inhalte

Wenn Du Log-Ausschnitte in einem Blogpost, Ticket oder Support-Chat teilst: vorher lesen. hermes logs gateway enthält je nach Konfiguration Nachrichteninhalte, Channel-Namen, Public Keys und gelegentlich Fragmente von Tool-Ausgaben.

Least Privilege für den Buzz-Betrieb

Je mehr Hermes kann, desto größer die Wirkung einer einzigen erfolgreichen Manipulation. Wenn Du Hermes über Buzz erreichbar machst, lohnt die Frage: Braucht dieser Zugang wirklich Shell, produktive Datenbanken und Browser-Automatisierung? Für viele Anwendungsfälle reicht eine Instanz mit deutlich reduziertem Toolset – und die riskanten Werkzeuge bleiben dem lokalen Hermes-Interface vorbehalten, wo Du jede Ausführung selbst auslöst.


Troubleshooting

Problem 1: 'users get' returned no profile

Buzz: 'users get' returned no profile — is the key a member of this community?

Die Hermes-Identität hat noch kein Profil in dieser Community veröffentlicht. Tritt nicht auf, wenn Du Schritt 4 vor Schritt 5 erledigt hast.

Lösung: Profil nachtragen (Schritt 4), danach hermes gateway restart.

Problem 2: BUZZ_PRIVATE_KEY is required

Das CLI weiß nicht, mit welcher Identität es handeln soll.

Lösung: Relay-URL und Schlüssel wie in Schritt 7.1 setzen – und danach wieder unset.

Problem 3: Hermes ist Community-Mitglied, erscheint aber nicht beim Channel-Invite

Der wichtigste Buzz-Desktop-Stolperstein: Die grafische Suche findet die Identität nicht zuverlässig.

Lösung: Channel-Mitgliedschaft direkt über das CLI setzen (Schritt 7.4).

Problem 4: Hermes antwortet scheinbar nicht

Buzz zeigt Agenten-Antworten häufig als Thread-Reply. Unter Deiner Nachricht nach 1 reply suchen und den Thread öffnen.

Problem 5: Hermes reagiert nur bei ausdrücklicher Erwähnung

Das ist so gewollt, wenn die Zugriffskonfiguration entsprechend gesetzt ist:

@Hermes Deine Aufgabe …

Das ist deutlich sicherer als ein Agent, der jede Nachricht eines Channels ungefragt verarbeitet.

Problem 6: Hermes antwortet Personen, die er nicht bedienen soll

Zugriffskontrolle prüfen: hermes gateway setup erneut durchlaufen, Allow all community members auf N setzen und in der Allowlist die korrekten Public Keys hinterlegen. Anschließend den Negativ-Test aus Schritt 8 wiederholen.


Ergebnis

Am Ende läuft Hermes nicht mehr als eingebetteter Buzz-Agent, sondern als eigenständiger Teilnehmer der Community:

hermes-buzz-architektur-detail.svg

Die fertige Architektur: Hermes als eigenständiger Teilnehmer der Community.


Eigene MCP-Tools und Web-Apps lassen sich aus Buzz genauso über Hermes ansteuern wie im normalen Hermes-Interface – nur mit der deutlich aufgeräumteren Channel- und Thread-Oberfläche von Buzz.


Sicherheits-Checkliste zum Abhaken

  • Eigener Nostr-Key für Hermes erzeugt
  • Schlüsseldatei mit umask 077 erzeugt, Rechte 600 geprüft
  • Gateway-Konfiguration auf Dateirechte geprüft
  • Persönlicher Account-Key nicht im Agenten hinterlegt
  • Persönlicher Key nur per read -rs eingegeben, danach unset
  • Allow all community members steht auf N
  • Allowlist explizit gesetzt
  • Negativ-Test bestanden: fremder Account wird ignoriert
  • Private Channels gezielt und einzeln freigegeben
  • Alte Agenten aus allen Channels entfernt
  • Verschlüsseltes Backup des Hermes-Keys angelegt
  • Toolset für den Buzz-Zugang auf das Nötige reduziert
  • Private Key nirgends veröffentlicht, auch nicht in Logs

Anhang: Wie ich tatsächlich dorthin gekommen bin

Der Vollständigkeit halber – und weil die Fehlermeldungen anderen die Suche ersparen können.

Ursprünglich hatte ich Hermes über die in Buzz angebotene lokale Agent-Runtime eingebunden:

Runtime: hermes-acp
ACP command: buzz-acp

Hermes wurde von Buzz korrekt erkannt und stand auf Ready bzw. Running. Trotzdem erschienen Antworten teilweise nicht im Buzz-Channel. Im Harness-Log war zu sehen:

Turn ended ...
response_len=8

Hermes hatte also tatsächlich geantwortet. Gleichzeitig erschien aber:

auth error: BUZZ_PRIVATE_KEY is required

Die KI-Ausführung funktionierte demnach; der Rückweg der Nachricht nach Buzz nicht. Der eingebetteten Runtime fehlten schlicht die Zugangsdaten für den Rückkanal.


Das lässt sich heute nicht einfach durch env_passthrough beheben. Hermes behandelt die Buzz-Zugangsdaten bewusst als geschützte Messaging-Credentials und entfernt sie aus den vom Agenten gestarteten Terminal-Prozessen. Genau deshalb ist der native Buzz-Gateway die sauberere Architektur: Der Gateway selbst besitzt die Buzz-Identität, ohne den privaten Schlüssel den vom Agenten ausgeführten Tools zur Verfügung zu stellen.


Fazit

Hermes und Buzz übernehmen unterschiedliche Aufgaben, und genau das macht die Kombination interessant.

Hermes ist die Agenten-Engine: Modelle, MCP, Skills, Tools, Memory, Automatisierung, Cron, Anbindung externer Systeme.

Buzz wird zur Arbeitsoberfläche: Channels, Threads, mehrere Agenten, Community-Struktur, Desktop und Mobile, saubere Kollaboration.

Damit wird aus Hermes nicht einfach ein weiterer Chatbot innerhalb von Buzz. Hermes wird zu einem echten Teilnehmer des digitalen Arbeitsplatzes – und sollte deshalb auch so behandelt werden: mit eigener Identität, klar begrenzten Rechten und einer Zugriffskontrolle, die man einmal wirklich getestet hat.

← Alle Beiträge