Zurück zum Blog
HermesSignalDeploymentAI Agents

Hermes Agent auf Signal bereitstellen (signal-cli)

Stellen Sie Hermes Agent über den signal-cli-Daemon auf Signal bereit: Gerät verknüpfen, SIGNAL_HTTP_URL setzen, Allowlist absichern und einen privaten, E2EE-verschlüsselten KI-Bot ausliefern.

Von Hermify Team||8 Min. Lesezeit
Ein dunkles Signal-Chatfenster mit dem Hermes-Agent-Schriftzug und einem einzelnen grünen Punkt neben dem Bot-Namen, das einen privaten, Ende-zu-Ende-verschlüsselten Assistenten andeutet

Warum Hermes Agent auf Signal betreiben

Wenn Ihr Bedrohungsmodell Metadaten an erste Stelle setzt, ist Signal der Messenger, dem Sie ohnehin schon vertrauen. Ende-zu-Ende-Verschlüsselung ist standardmäßig aktiv, der Server speichert über eine Telefonnummer und einen Zeitstempel der letzten Verbindung hinaus fast nichts, und das Protokoll selbst ist Open Source. Wenn Sie Ihren KI-Agenten auf derselben Oberfläche betreiben, bleibt jeder Prompt, jede Antwort und jede Datei, die Sie ihm übergeben, innerhalb desselben Umschlags.

Hermes Agent unterstützt Signal nativ über signal-cli, einen inoffiziellen, aber gut gepflegten Daemon, der das Signal-Protokoll in Ihrem Namen spricht. Das Hermes-Gateway kommuniziert mit signal-cli über HTTP, wobei JSON-RPC für ausgehende Aktionen und Server-Sent Events für den eingehenden Stream verwendet werden, sodass die gesamte Laufzeitumgebung auf einem 5-$-VPS, Ihrem Laptop oder einem Raspberry Pi hinter einem NAT laufen und dennoch in Echtzeit senden und empfangen kann.

Diese Anleitung führt Sie durch die komplette Einrichtung: die Installation von signal-cli, das Verknüpfen mit Ihrem Signal-Konto als Zweitgerät, das Starten des HTTP-Daemons, die Einbindung in die Hermes-Laufzeitumgebung und die Stolperfallen, über die Erstinstallationen häufig stolpern. Wenn Sie Hermes bereits auf einer öffentlicheren Oberfläche ausgeliefert haben, decken die Slack-Einrichtungsanleitung und der Telegram-Auslieferungsleitfaden dasselbe Ende des Stacks ab und lohnen sich als Begleitlektüre.

Was Sie brauchen, bevor Sie beginnen

Eine saubere Signal-Bereitstellung benötigt fünf Dinge auf dem Host:

  • Eine laufende Hermes-Agent-Installation. Der Hermes Agent Docker-Leitfaden ist der sauberste Ausgangspunkt, falls Sie noch keine haben.
  • Einen Modell-Anbieter-Schlüssel. Anthropic, OpenAI, OpenRouter und jeder OpenAI-kompatible Endpunkt funktionieren. Die Laufzeitumgebung nutzt ihn, um die Nachrichten tatsächlich zu beantworten.
  • Ein Signal-Konto, das bereits auf einem Hauptgerät (Ihrem Telefon) aktiviert ist. signal-cli verknüpft sich als Zweitgerät, genauso wie Signal Desktop es tut - es registriert kein neues Konto.
  • Eine Java Runtime Environment 21 oder neuer. Das signal-cli-Jar startet in aktuellen Builds nicht mit JRE 17. Die GraalVM-native Binärdatei umgeht diese Anforderung, falls Sie eine einzige ausführbare Datei bevorzugen.
  • Etwa 20 Minuten für die erste Installation. Spätere erneute Bereitstellungen dauern unter einer Minute.

Die Telefonnummer, die Sie verwenden, muss nicht die Ihres täglich genutzten Telefons sein. Viele Selbsthoster widmen dem Bot eine zweite Nummer (eine günstige eSIM, eine Twilio-Nummer oder eine Google-Voice-Leitung, die SMS akzeptiert), damit das Bot-Konto betrieblich getrennt bleibt.

Schritt 1 - signal-cli auf Ihrem Host installieren

Installieren Sie unter Debian oder Ubuntu Java und holen Sie sich die neueste signal-cli-Veröffentlichung:

sudo apt update
sudo apt install -y curl openjdk-21-jre
VERSION=$(curl -s https://api.github.com/repos/AsamK/signal-cli/releases/latest | jq -r .tag_name | sed 's/^v//')
curl -L -o /tmp/signal-cli.tar.gz \
  "https://github.com/AsamK/signal-cli/releases/download/v${VERSION}/signal-cli-${VERSION}-Linux.tar.gz"
sudo tar -xf /tmp/signal-cli.tar.gz -C /opt
sudo ln -sf "/opt/signal-cli-${VERSION}/bin/signal-cli" /usr/local/bin/signal-cli
signal-cli --version

Wenn Sie eine einzige statische Binärdatei ohne JRE-Abhängigkeit bevorzugen, ist der GraalVM-native Build von der Release-Seite des Projekts ein direkter Ersatz und vermeidet das ständige Java-Upgrade-Hin-und-Her vollständig.

Schritt 2 - signal-cli mit Ihrem Signal-Konto verknüpfen

signal-cli tritt Ihrem Konto als verknüpftes Gerät bei, genau wie Signal Desktop. Erzeugen Sie eine Provisioning-URL und lassen Sie den Daemon einen QR-Code ausgeben:

signal-cli link -n "hermes-agent"

Der Befehl gibt eine sgnl://linkdevice?...-URL und einen QR-Code im Terminal aus. Öffnen Sie auf Ihrem Telefon Signal, gehen Sie zu Einstellungen -> Verknüpfte Geräte -> Neues Gerät verknüpfen und scannen Sie den QR-Code. Innerhalb weniger Sekunden gibt das Terminal etwa Folgendes aus:

Associated with: +12025550123

Diese E.164-Nummer ist Ihr SIGNAL_ACCOUNT-Wert für den Rest der Einrichtung. Der auf der Festplatte gespeicherte Zustand der verknüpften Identität liegt unter ~/.local/share/signal-cli/. Sichern Sie dieses Verzeichnis, bevor Sie den Host vernichten - es ist der einzige Ort, an dem die Schlüssel des verknüpften Geräts gespeichert sind, und ein erneutes Verknüpfen von Grund auf entwertet den ausstehenden Nachrichtenverlauf.

Schritt 3 - Den signal-cli-HTTP-Daemon starten

Das Hermes-Gateway kommuniziert mit signal-cli über HTTP, daher muss der Daemon im HTTP-Modus laufen und an einen ausschließlich lokalen Port gebunden sein:

signal-cli -a +12025550123 daemon --http 127.0.0.1:8080

Das --http-Flag stellt einen JSON-RPC-Endpunkt zum Senden und einen Server-Sent-Events-Stream zum Empfangen bereit. Binden Sie ihn an 127.0.0.1 und sonst nichts; der Daemon führt keine eigene Authentifizierung durch, sodass jeder Prozess, der den Port erreichen kann, Nachrichten in Ihrem Namen senden kann. Wenn das Gateway in Docker auf demselben Host läuft, funktioniert host.docker.internal:8080 oder ein gemeinsames Docker-Netzwerk, ohne den Port dem LAN auszusetzen.

Für langlaufende Bereitstellungen hinterlegen Sie eine systemd-Unit, damit der Daemon nach einem Neustart wieder hochfährt. Das signal-cli-Wiki enthält eine einsatzbereite Unit-Vorlage; die einzigen Felder, die Sie ausfüllen müssen, sind die Kontonummer und die Bind-Adresse.

Ein geteiltes Terminal, das links die signal-cli-Daemon-Logs und rechts die Hermes-Gateway-Logs zeigt, beide über localhost:8080 verbunden

Schritt 4 - Die Hermes-Laufzeitumgebung konfigurieren

Öffnen Sie ~/.hermes/.env (oder welche .env-Datei auch immer Ihr Container liest) und fügen Sie hinzu:

SIGNAL_HTTP_URL=http://127.0.0.1:8080
SIGNAL_ACCOUNT=+12025550123
SIGNAL_ALLOWED_USERS=+34611222333,+12025557788
SIGNAL_GROUP_ALLOWED_USERS=group.abc123==
SIGNAL_HOME_CHANNEL=+34611222333

Ein Hinweis zu jedem Eintrag:

  • SIGNAL_HTTP_URL - der lokale Daemon-Endpunkt aus Schritt 3. Immer http://, immer Loopback oder ein privates Netzwerk.
  • SIGNAL_ACCOUNT - die E.164-Nummer der verknüpften Signal-Identität. Muss exakt mit dem übereinstimmen, was signal-cli link gemeldet hat.
  • SIGNAL_ALLOWED_USERS - durch Kommas getrennte E.164-Nummern oder Signal-UUIDs, die mit dem Bot sprechen dürfen. Ohne diese Einstellung (und ohne DM-Pairing) lehnt das Gateway als sichere Voreinstellung jede eingehende Nachricht ab. Dies ist die wichtigste einzelne Sicherheitskontrolle im gesamten Stack.
  • SIGNAL_GROUP_ALLOWED_USERS (optional) - durch Kommas getrennte Gruppen-IDs, in denen der Bot antworten darf. Gruppen-IDs erhalten Sie über signal-cli listGroups -d. Leer lassen, um die Gruppenunterstützung zu deaktivieren.
  • SIGNAL_HOME_CHANNEL (optional) - das Standard-Auslieferungsziel für geplante Aufgaben, Cron-Jobs und skill-ausgelöste Benachrichtigungen. Wenn nicht gesetzt, geht proaktive Ausgabe an den ersten erlaubten Benutzer.

Führen Sie nach dem Speichern chmod 600 ~/.hermes/.env aus. Die Kombination aus der verknüpften Signal-Identität und Ihren Modell-Anbieter-Schlüsseln gibt jedem mit Lesezugriff die Möglichkeit, sich als der Bot auszugeben und Ihre Tokens zu verbrennen - behandeln Sie die Datei wie einen SSH-Schlüssel.

Schritt 5 - Das Gateway starten und die erste Nachricht senden

Starten Sie das Hermes-Gateway neu, damit es die neue Umgebung übernimmt:

hermes gateway restart

Verfolgen Sie die Logs und achten Sie auf zwei Zeilen in dieser Reihenfolge:

signal: connecting to http://127.0.0.1:8080
signal: subscribed to receive stream for +12025550123

Öffnen Sie vom erlaubten Telefon aus Signal und senden Sie eine DM an die Nummer des Bots. Hermes antwortet im selben Thread, mit intaktem persistentem Gedächtnis und Skill-Kontext - die Anleitung zu Gedächtnis und Skills beschreibt, was darunter passiert. Anhänge bis zu 100 MB nutzen dieselbe Signal-Upload-API wie eine reguläre Nachricht, sodass Screenshots, Sprachnotizen und PDFs ohne zusätzliche Verkabelung durchlaufen.

Ein Signal-Chat-Thread, der einen privaten Austausch zwischen einem Benutzer und dem Hermes-Bot zeigt, mit oben auf dem Bildschirm sichtbaren Indikatoren für Ende-zu-Ende-Verschlüsselung

Die Fehlerquellen, die zuerst zubeißen

Fünf Fehler machen fast jeden Support-Thread zum Thema „Signal-Einrichtung ist kaputt" aus:

Vergessen, das Gerät zu verknüpfen. Wenn Sie signal-cli daemon gegen ein nicht verknüpftes Konto ausführen, wird kein Fehler ausgegeben - der Daemon startet und verweigert stillschweigend jede Nachricht. Wenn die Logs null Ereignisse und null Sendeversuche zeigen, führen Sie signal-cli listAccounts aus und bestätigen Sie, dass Ihre Nummer erscheint.

Falsche JRE-Version. Aktuelle signal-cli-Builds benötigen JRE 21. Auf langlebigen Servern, die noch auf JRE 17 oder 11 festgelegt sind, scheitert das Jar in dem Moment, in dem Sie --http aufrufen, an einer Klassenversions-Inkompatibilität. Aktualisieren Sie entweder Java oder verwenden Sie die GraalVM-native Binärdatei.

Leeres SIGNAL_ALLOWED_USERS. Die Voreinstellung ist, alle abzulehnen. Das ist Absicht - eine durchgesickerte Telefonnummer für das Bot-Konto würde andernfalls jedem auf der Welt erlauben, Prompts zu senden, die Ihre Modell-Tokens verbrennen. Dass der Bot für einen Erstanwender, der vergessen hat, seine eigene Nummer hinzuzufügen, tot wirkt, ist der häufigste Fehlalarm.

Daemon an 0.0.0.0 gebunden. Der HTTP-Daemon führt keine Authentifizierung durch. Ihn an eine öffentliche Schnittstelle zu binden bedeutet, dass jeder, der den Port erreichen kann, Signal-Nachrichten in Ihrem Namen senden kann. Binden Sie ihn immer an 127.0.0.1 oder ein privates Docker-Netzwerk.

Veralteter Zustand des verknüpften Geräts. Ein erneutes Ausführen von signal-cli link überschreibt das lokale Zustandsverzeichnis. Die neue Verknüpfung ist in Ordnung, aber Hermes blickt plötzlich auf eine andere Identität als die in der env-Datei deklarierte. Behalten Sie entweder den alten SIGNAL_ACCOUNT-Wert beim erneuten Verknüpfen bei, oder aktualisieren Sie die env-Datei auf die neue Nummer, die der Link-Befehl ausgegeben hat.

Wenn ein Problem Signal-spezifisch aussieht, sich die Symptome aber allgemein anfühlen - fehlende Antworten, Gedächtnisabweichungen, Anbieterfehler - behandelt der Telegram-Fehlerbehebungsleitfaden die zugrunde liegenden Gateway- und Anbieterprobleme ausführlicher. Die meisten sind oberflächenunabhängig.

Signal neben Telegram und Slack

Aspekt Signal Telegram Slack
Einrichtungszeit 20 Min. (Verknüpfen + Daemon) 5 Min. (BotFather-Token) 15 Min. (Manifest + 2 Tokens)
Verschlüsselung Standardmäßig Ende-zu-Ende Optionale geheime Chats Nur serverseitig
Gespeicherte Metadaten Fast keine Serverseitiger Verlauf Workspace-weite Aufbewahrung
Kontomodell Verknüpfte Telefonnummer Bot-Konto, keine Nummer Bot-Benutzer im Workspace
Allowlist-Feld SIGNAL_ALLOWED_USERS (E.164) TELEGRAM_ALLOWED_USERS (numerisch) SLACK_ALLOWED_USERS (numerisch)
Am besten für Datenschutzbewusste Einzelpersonen und kleine Teams Privatnutzung, Mobile-First, Sprachmodus Team-Workflows und Kanal-Kontext

Die drei Oberflächen schließen sich nicht gegenseitig aus. Dieselbe Hermes-Laufzeitumgebung kann an alle gleichzeitig ausliefern und dabei über einen einzigen Gedächtnisspeicher multiplexen. Ein Gründer, der aus derselben Installation einen persönlichen Agenten auf Signal und einen teamzugewandten Agenten auf Slack betreibt, ist ein gängiges Muster.

Überspringen Sie die Signal-Verkabelung

Die obigen Schritte sind machbar, aber sie lassen Sie für den Host in der Verantwortung: signal-cli aktuell halten, den Zustand des verknüpften Geräts sichern, die JRE rotieren, auf Daemon-Neustarts achten. Für eine persönliche Installation ist das in Ordnung. Für alles, was Sie innerhalb von Minuten live haben und dann vergessen möchten, stellt Hermify eine verwaltete Hermes-Laufzeitumgebung bereit, bei der die Signal-Brücke bereit zum Verknüpfen ist, verschlüsselt Ihre SIGNAL_*-Konfiguration im Ruhezustand und hält den signal-cli-Daemon auf einem dauerhaften Server gesund, in den Sie sich nie per SSH einloggen müssen.

Sie bringen die Signal-Nummer und einen Modell-Anbieter-Schlüssel mit; die Plattform kümmert sich um alles darunter. Wenn Sie vergleichen möchten, was unter Ihrer Kontrolle bleibt und was abgegeben wird, schlüsselt die Anleitung zu selbst gehostet versus verwaltet die Wartungs- und Kostenzahlen auf. Und wenn die Kosten der entscheidende Punkt sind, legt der Leitfaden für günstige VPS dar, wie ein Selbsthosting für 5 $/Monat in der Praxis tatsächlich aussieht. Starten Sie mit Hermify, wenn Sie bereit sind, die Verkabelung vollständig zu überspringen.

Quellen

Betreiben Sie Ihren eigenen Hermes Agent

Bringen Sie Ihren API-Schlüssel mit, verbinden Sie Telegram und erhalten Sie in 60 Sekunden einen selbstlernenden KI-Agenten.

Loslegen