Ein privater Telegram-Bot kann einen Agenten auf einem VPS erreichbar machen. Eine Verbindung beweist aber keine Antwort an die richtige Person. Wir beginnen mit einem neuen Hermes Agent Datenverzeichnis, erlauben eine numerische ID, prüfen eine echte Antwort und einen verlässlichen Stopp. Grundlage sind NousResearchs Docker-Anweisungen v0.22.2 und Telegram-Anweisungen, geprüft am 19. Oktober 2026. BIG CHANGE hat dafür keinen VPS betrieben, kein Image abgerufen, keinen Bot erstellt und kein Modell aufgerufen.
Die große Veränderung
- Was sich ändert: Ein per Digest fixiertes und versionsgeprüftes Docker-Image mit eigenem
/opt/data-Mount macht Software und Zustand dieses Gateways identifizierbar. - Warum das wichtig ist: Numerische Telegram-Zulassung und eine tatsächliche private Antwort zeigen, ob das vorgesehene Konto zugreifen kann.
- Worauf zu achten ist: Pairing oder globale Rechte können Zugriff erweitern. Ein harmloser Prompt begrenzt Werkzeuge nicht. Prüfen Sie Rechte, Logs, Neustart und Stoppzustand.
Sie benötigen Befugnis zur Verwaltung eines Linux-VPS per SSH, funktionierendes Docker Engine und Host-Wiederherstellungszugang, ein Telegram-Konto mit BotFather-Boterstellung und ein geeignetes Hermes-Modellanbieterkonto. Prüfen Sie Architektur und Ressourcen gegen das offizielle amd64-/arm64-Image sowie Zugang und Abrechnung vor dem Assistenten. Docker wird als betriebsbereit vorausgesetzt; Installation und Firewall hängen von OS und Anbieter ab. Der Host braucht ausgehenden Zugang zu Telegram und Modellanbieter. Reservieren Sie ein privates Zustandsverzeichnis mit eingeschränkten Lesern: /opt/data enthält Zugangsdaten, Sitzungen und Logs. Das Docker-Handbuch bezeichnet den Mount als dauerhafte maßgebliche Datenquelle.
1. Image vor der Einrichtung fixieren
Verbinden Sie sich per SSH und bleiben Sie im selben Shell. Der Tag stable kann sich ändern. Rufen Sie ihn ab, notieren Sie den Repository-Digest und prüfen Sie die vom Image selbst gemeldete Version 0.22.2. Stoppen Sie bei Abweichung, fehlendem Digest, vorhandenen Daten oder einem Container namens hermes. Aktualisieren Sie die Anleitung für die tatsächliche Version oder beschaffen Sie ein passendes dokumentiertes Image. Ein Digest fixiert das Image, beweist aber nicht dessen Release-Version.
set -eu
docker info >/dev/null
docker container inspect hermes >/dev/null 2>&1 && { echo 'Container hermes already exists; stop here.'; exit 1; }
HERMES_DATA="$HOME/.hermes"
if [ -e "$HERMES_DATA" ]; then echo 'Hermes data path already exists; stop here.'; exit 1; fi
mkdir -m 700 "$HERMES_DATA"
docker pull nousresearch/hermes-agent:stable
docker image inspect nousresearch/hermes-agent:stable --format '{{json .RepoDigests}}'
IMAGE_REF="$(docker image inspect nousresearch/hermes-agent:stable --format '{{index .RepoDigests 0}}')"
if ! printf '%s\n' "$IMAGE_REF" | grep -Eq '^nousresearch/hermes-agent@sha256:[0-9a-f]{64}$'; then
echo 'No valid repository digest; stop here.'; exit 1
fi
printf 'Pinned image: %s\n' "$IMAGE_REF"
VERSION_OUTPUT="$(docker run --rm "$IMAGE_REF" --version)"
printf 'Image version: %s\n' "$VERSION_OUTPUT"
if ! printf '%s\n' "$VERSION_OUTPUT" | grep -Eq '(^|[^0-9])v?0[.]22[.]2([^0-9]|$)'; then
echo 'Image version is not 0.22.2; stop here.'; exit 1
fiset -eu stoppt die Befehlsfolge bei fehlendem Docker, fehlgeschlagenem Abruf oder Inspect sowie Versionsbefehl. Die expliziten Prüfungen stoppen leeren Digest oder andere Version. Fahren Sie danach nicht mit Einrichtung fort. Bewahren Sie den notierten nousresearch/hermes-agent@sha256:…-Wert. Einrichtung und Gateway verwenden IMAGE_REF, damit spätere Tagänderungen den Container nicht unbemerkt ändern. Leser müssen dies am echten VPS prüfen; der Artikel enthält keinen verifizierten Image-Digest. Nutzen Sie ein neues eigenes Verzeichnis im nativen Host-Dateisystem, niemals zwei Gateways am selben Datenverzeichnis.
2. Anbieter und einen privaten Telegram-Absender einrichten
Starten Sie den Docker-Einrichtungsassistenten mit dem gemounteten Verzeichnis. Wählen Sie einen erlaubten Modellweg, authentifizieren Sie sich und prüfen Sie Anbieter/Modell. Rechte und Kosten hängen vom Konto ab. Gespeicherte Einstellungen beweisen keinen erfolgreichen Modellaufruf.
docker run -it --rm -v "$HERMES_DATA:/opt/data" "$IMAGE_REF" setupFordern Sie in Telegram bei @BotFather mit /newbot einen Bot an und halten Sie das Token geheim. Ermitteln Sie die numerische Telegram-Benutzer-ID des Absenders, etwa mit der im Telegram-Handbuch verlinkten Methode. Ein Benutzername ist keine ID. Assistent oder hermes gateway setup können Token und Zulassungsliste schreiben. Manuell kommen TELEGRAM_BOT_TOKEN=<private token> und TELEGRAM_ALLOWED_USERS=<your numeric ID> in $HERMES_DATA/.env, das im Container als /opt/data/.env erscheint. Kein Token in Befehle, Verlauf, gemeinsame Notizen oder diesen Artikel.
In $HERMES_DATA/config.yaml (/opt/data/config.yaml im Container) stellen Sie das globale Verhalten unerlaubter Direktnachrichten ein:
unauthorized_dm_behavior: ignoreNach Ende des Einrichtungscontainers hat das offizielle Image möglicherweise $HERMES_DATA der Laufzeit-UID 10000 zugeordnet. Der Start begrenzt .env auf Modus 600 und verschärft eine vorhandene config.yaml auf 640. Eine erstmals dabei erzeugte Konfiguration kann dieselbe Verschärfung brauchen. Ein gewöhnlicher SSH-Nutzer kann sie daher eventuell nicht öffnen. Fehlende Schlüssel kann ein befugter Hostadministrator in den zwei exakten Dateien mit sudo prüfen und ändern, danach Besitzer und private Modi wiederherstellen. Ein Hosteditor als UID 10000 kann ein login-eigenes $HOME womöglich nicht durchqueren; deshalb nutzt der Befehl Hostadministratorzugriff. Auf einem Host mit sudo und vi erst nach geheimnisfreier Besitzer-/Modusprüfung verwenden. Bei anderer UID oder fehlender Datei nicht fortfahren, sondern den Hostzugriff klären.
sudo stat -c '%u:%g %a %n' "$HERMES_DATA" "$HERMES_DATA/.env" "$HERMES_DATA/config.yaml"
# Expected: directory owner 10000 and mode 700; .env owner 10000 and mode 600.
# config.yaml should have owner 10000; its first-boot mode can vary.
sudo vi "$HERMES_DATA/.env"
sudo vi "$HERMES_DATA/config.yaml"
sudo chown 10000:10000 "$HERMES_DATA/.env" "$HERMES_DATA/config.yaml"
sudo chmod 700 "$HERMES_DATA"
sudo chmod 600 "$HERMES_DATA/.env"
sudo chmod 640 "$HERMES_DATA/config.yaml"
sudo stat -c '%u:%g %a %n' "$HERMES_DATA" "$HERMES_DATA/.env" "$HERMES_DATA/config.yaml"Die abschließende Ausgabe von stat muss UID/GID 10000 für beide Dateien, Verzeichnismodus 700, .env-Modus 600 und config.yaml-Modus 640 zeigen. Sie enthält Metadaten statt Zugangsdaten. Der chown zielt nur auf beide Dateien, einschließlich Editor-Ersatzdateien. Fehlt sudo oder vi, verwenden Sie autorisierte Hostverwaltung mit derselben Kontrolle. Machen Sie Daten nicht weltweit lesbar und ordnen Sie den Containerbenutzer nicht neu zu.
Bewahren Sie Anbieterwerte beim Editieren. Keine Telegram-spezifische unauthorized_dm_behavior-Überschreibung darf pair setzen, kein globales GATEWAY_ALLOWED_USERS oder GATEWAY_ALLOW_ALL_USERS weitere Rechte geben. In config.yaml dürfen außerdem weder gateway.allow_all_users noch das oberste allow_all_users true sein, und globale oder Telegram-Listen dürfen keine weiteren Absender enthalten. Verwenden Sie kein * in Listen, keine Gruppenlisten und bestätigen Sie keine Pairing-Codes. Neu vermeidet geerbte Rechte; bei bestehenden Daten stoppen und prüfen statt überschreiben. BotFathers Gruppenprivatsphäre bleibt an. Bot weder in Gruppen aufnehmen noch zum Gruppenadmin machen. Das Gateway-Zugriffshandbuch beschreibt Listen und dauerhafte Pairing-Rechte als getrennte Wege. Das Sicherheitshandbuch beschreibt ignore als stilles Verwerfen unerlaubter Direktnachrichten.
Die Liste begrenzt Gesprächsbeginn, nicht Handlungen eines zugelassenen Agenten. Hermes Telegram Sitzungen enthalten standardmäßig Terminalwerkzeuge. Prüfen Sie Werkzeuge, Docker-Mounts, Anbieterzugriff und Hostregeln vor Zulassung. Ein harmloser Testprompt ist nur ein Prompt.
3. Starten und erste Antwort prüfen
Starten Sie einen benannten Container mit aufgezeichnetem Digest. Der veröffentlichte Docker-Befehl enthält optional -p 8642:8642 für API-Zugriff. Lassen Sie es weg: private Telegram-Nachrichten brauchen keinen öffentlichen API-/Dashboard-Port. Das Image überwacht das Gateway, die Docker-Richtlinie unless-stopped regelt den Containerneustart beim Docker-Start. Das Mount bewahrt Konfiguration und Sitzungen über Neustarts.
docker run -d --name hermes --restart unless-stopped \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" gateway run
if ! {
docker inspect hermes --format '{{.Image}} {{.State.Status}}' &&
[ "$(docker inspect hermes --format '{{.State.Status}}')" = running ] &&
docker logs --tail 50 hermes &&
docker exec -u hermes hermes hermes pairing list
}; then
echo 'State, logs or pairing check failed; stopping before any message.'
docker stop hermes || true
docker inspect hermes --format '{{.State.Status}}' || true
exit 1
fiBestätigen Sie den Zustand running, prüfen Sie Telegram-Verbindung und Anbieterfehler in Logs sowie die Pairing-Liste vor dem Prompt. Scheitert ein anfängliches Lesen, stoppt der Block das Gateway und zeigt Zustand. Ein unbekanntes CLI-/Rechteergebnis ist keine Freigabe. Bestätigen Sie exited vor Untersuchungen und senden oder starten Sie bei Unsicherheit nicht neu. Kein weiterer Absender darf genehmigt sein. Andernfalls stoppen und Stoppzustand prüfen. docker exec funktioniert nicht am gestoppten Container; der normale Image-Einstieg kann ein früher laufendes Gateway wiederherstellen. Bei neuer Standard-UID-Installation führt die Offlineprüfung nur die fixierte Hermes CLI als UID 10000 ohne Netzwerk und Gateway-Start aus. Dies ist eine Anpassung dokumentierter Befehle und Einstiegspunkte, kein BIG CHANGE Test. Nur verwenden, wenn Laufzeit-UID und Datenbesitzer beide 10000 bestätigt sind. Bei Unsicherheit über Eigentum, UID, CLI oder Rechte gestoppt lassen und vor Neustart lösen.
if [ "$(docker exec -u hermes hermes id -u)" != 10000 ] || [ "$(stat -c %u "$HERMES_DATA")" != 10000 ]; then
echo 'Runtime UID or data owner differs; stop for a host-specific repair.'; docker stop hermes; exit 1
fi
docker stop hermes
if [ "$(docker inspect hermes --format '{{.State.Status}}')" != exited ]; then
echo 'Container is not exited; do not mount state in another container.'; exit 1
fi
docker run --rm --network none --user 10000:10000 \
--entrypoint /opt/hermes/.venv/bin/hermes \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" pairing list
# For a listed unwanted Telegram user, read the exact numeric ID first:
printf 'Unwanted numeric Telegram user ID: '; IFS= read -r UNWANTED_ID
if ! printf '%s\n' "$UNWANTED_ID" | grep -Eq '^[0-9]+$'; then echo 'Invalid ID; leave gateway stopped.'; exit 1; fi
docker run --rm --network none --user 10000:10000 \
--entrypoint /opt/hermes/.venv/bin/hermes \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" pairing revoke telegram "$UNWANTED_ID"
docker run --rm --network none --user 10000:10000 \
--entrypoint /opt/hermes/.venv/bin/hermes \
-v "$HERMES_DATA:/opt/data" "$IMAGE_REF" pairing listBestätigen Sie, dass die unerwünschte ID nicht mehr in der letzten Liste steht. Prüfen Sie privat $HERMES_DATA/.env und config.yaml auf andere Plattform-/globale Listen, * oder Vollzugriff und entfernen Sie unerwünschte Rechte dokumentiert. Bis alle Wege geprüft sind, bleibt das Gateway gestoppt. Ein gelöschter Listeneintrag widerruft keine unabhängigen Pairing-/Globalrechte. Danach setzt docker start hermes absichtlich den Originalcontainer fort. Vor Nachrichten Logs und Liste erneut prüfen.
Öffnen Sie vom erlaubten Konto einen privaten Botchat und senden Sie etwas Harmloses wie „Antworte mit einer kurzen Begrüßung“. Prüfen Sie echte Antwort und zugehörigen Log-/Sitzungseintrag. Gesendet, Tippanzeige, Status oder fertige Einrichtung sind keine Antwort. Telegrams /whoami zeigt den aktiven Nachrichtenumfang, beweist aber keine Hostberechtigung. Nur nicht sensible Belege speichern.
Ohne Antwort zuerst Containerzustand und docker logs --tail 50 hermes lesen. Prüfen Sie Token, exakten numerischen TELEGRAM_ALLOWED_USERS-Wert, Anbieteranmeldung, Nutzungsberechtigung und ausgehende Verbindung. Bei unklarem Ergebnis Chat und Logs vor Wiederholung lesen. Dokumentierter Kaltstart kann offene Updates verwerfen; Duplikatsperre ist im Speicher begrenzt. Genau-einmal-Zustellung ist nicht garantiert.
4. Neustart, Stopp und Wiederherstellung prüfen
Nach dem ersten abgeschlossenen Austausch denselben Container neu starten, frische Logs und behaltenen /opt/data-Zustand prüfen, dann einen neuen harmlosen privaten Prompt mit Antwort prüfen. Stoppen Sie den Container und lesen Sie Docker-Zustand. exited ist das Stoppsignal, ein stiller Chat allein nicht. docker start hermes setzt später bewusst fort.
docker restart hermes
docker logs --tail 50 hermes
docker inspect hermes --format '{{.State.Status}}'
# After the restarted gateway is ready, send a new private test message.
docker stop hermes
docker inspect hermes --format '{{.State.Status}}'
# Expected after stop: exited
# When intentionally resuming later: docker start hermesBei Startfehlern Docker-Zustand und Logs, danach $HERMES_DATA/logs/gateways/default/current und $HERMES_DATA/logs/container-boot.log, Mount, Eigentum und fixiertes Image/Version prüfen. Die v0.22.2 Versionshinweise erklären eine Boot-Verfügbarkeitskorrektur, nicht den tatsächlichen Vorgang auf Ihrem Host. Daten nicht zur Reparatur löschen. Bei Tokenleck stoppen, in BotFather widerrufen, privat im gemounteten .env ersetzen und Zugriff vor Neustart prüfen. Auch unerwünschtes Pairing widerrufen und wirksame Listen prüfen.
VPS und Modell können getrennt kosten. Prüfen Sie echten Tarif, Grenzen und Gebühren. Laufzeit, Gratisnutzung oder Verfügbarkeitsziel sind nicht zugesagt. Telegram und Anbieter verarbeiten Nachrichten, das Hostverzeichnis bewahrt Geheimnisse und Zustand. Dies prüft erste Antwort eines Hosts und Bots. Separate BIG CHANGE Anleitungen behandeln Hermes-Sicherung und Wiederherstellung und einen wiederkehrenden Hermes-Job.
Quellen und weiterführende Informationen
Die Docker-Einrichtung, Telegram-Einrichtung, Gateway-Zugriffsanleitung, Sicherheitsanleitung und v0.22.2 Veröffentlichung sind NousResearch-Primärquellen. Der Schnellstart erklärt Anbieter-Setup. Das sind Verfahrensquellen, keine BIG CHANGE VPS-/Bot-Betriebsnachweise.



