Deinen Agenten aus dem Zug steuern: ein Praxisleitfaden zur Community-WebUI

Du sitzt im Zug nach Hause, als es dich trifft: Hat dieser Cron-Job heute Morgen wirklich gelaufen? Das Handy kommt raus. Nichts in deinem Postfach. Ein Telegram-Bot ist auch nicht eingerichtet. Also wartest du, bis du am Schreibtisch sitzt — und bis dahin hat das Abendessen die Frage komplett ausgelöscht.
Das Problem ist nicht, dass Hermes nicht remote nutzbar wäre. Es ist, dass „remote“ meistens heißt, erst einen Tunnel und dann noch ein Frontend zusammenzubauen — und die meisten scheuen den Aufwand. Ein Community-Projekt presst das in drei Befehle: Hermes WebUI, rund 18K Sterne, ein Python-Backend mit schlichtem JavaScript im Frontend, kein Build-Schritt, kein Bundler, und es läuft auf der Hermes-Konfiguration und den Modellen, die du schon hast.
Was es ist — und warum sich die Installation lohnt
Du bekommst das vertraute Drei-Panel-Layout: Sessions und Navigation links, der Chat in der Mitte, ein Workspace-Dateibrowser rechts. Die Steuerung für Modell, Profil und Workspace sitzt in der Fußzeile des Composers, damit sie sichtbar bleibt, während du tippst, und ein kreisrunder Ring zeigt die Kontextauslastung auf einen Blick. Alles andere lebt im Hermes Control Center, das du über einen Button unten in der Sidebar öffnest.
Das herausragende Merkmal ist die nahezu 1:1-Parität mit der CLI: Was du im Terminal kannst, kannst du hier größtenteils auch. Sessions anpinnen, archivieren und in Projekten gruppieren; Skills durchsuchen, in der Vorschau ansehen und direkt bearbeiten; MEMORY.md und USER.md editieren; Cron-Jobs anlegen, pausieren und mit Laufhistorie und Abschluss-Benachrichtigungen inspizieren; Profile wechseln und klonen; Autovervollständigung für Slash-Befehle wie /compress, /model, /new und /theme.
Auf dem Handy ist es ordentlich responsiv: Unter 640px klappt die Sidebar zu einem einfahrenden Drawer zusammen, Touch-Ziele bleiben mindestens 44px groß, und der Dateibrowser wird zu einem Panel, das von rechts hereinfährt. Es kommt außerdem als installierbare PWA, wodurch es sich auf dem Homescreen wie eine App anfühlt und nicht wie eine Webseite.
Drei Befehle bis zur Installation — und erst lokal beweisen
git clone https://github.com/nesquena/hermes-webui.git hermes-webui
cd hermes-webui
python3 bootstrap.py
bootstrap.py übernimmt die lästigen Teile: Es erkennt Hermes und führt den offiziellen Installer aus, falls er fehlt, findet oder erstellt eine Python-Umgebung mit den WebUI-Abhängigkeiten, startet den Server, wartet auf /health und öffnet dann deinen Browser in einem First-Run-Wizard. Übergib --no-browser, wenn dir das lieber ist.
Wenn du lieber einen Daemon verwaltest, liefert das Repo zusätzlich ctl.sh mit, das auf einer selbst gehosteten VM freundlicher ist, weil es weder fuser noch pkill braucht:
./ctl.sh start # Hintergrund-Daemon, PID unter ~/.hermes/webui.pid
./ctl.sh status # PID, Uptime, gebundener Host/Port, Log-Pfad, /health
./ctl.sh logs --lines 100 # tail auf ~/.hermes/webui.log
./ctl.sh restart
./ctl.sh stop
Der Server bindet standardmäßig 127.0.0.1:8787 — mit anderen Worten: Bring erst lokal eine Session zum Laufen, bevor du über Remote-Zugriff nachdenkst. Der Health-Check steht immer zur manuellen Überprüfung bereit:
curl http://127.0.0.1:8787/health
Remote und mobil: zwei Wege, von denen keiner einen offenen Port braucht
Der sichere Standard ist ein SSH-Tunnel. Der Server bleibt auf dem Loopback, und du erreichst ihn von außen:
ssh -N -L 8787:127.0.0.1:8787 user@your-server
Dann öffnest du http://127.0.0.1:8787 in deinem lokalen Browser. Auf dem Handy brauchst du nicht einmal einen Desktop-SSH-Client — etliche mobile Terminal-Apps können einen Tunnel offenhalten.
Die bequeme Variante ist Tailscale. Bring Server und Handy ins selbe Tailnet und binde den Dienst an alle Interfaces:
HERMES_WEBUI_HOST=0.0.0.0 HERMES_WEBUI_PASSWORD='pick-your-own' ./ctl.sh start
Dann browst du vom Handy auf http://<server-tailscale-ip>:8787. Beachte die zwei Bedingungen in der zweiten Hälfte: Das Passwort ist nicht optional, und Port 8787 sollte ausschließlich innerhalb des Tailnets existieren — widerstehe der Versuchung, ihn in einer Cloud-Security-Group zu öffnen.
Sicherheit: auf localhost reibungslos, im Remote-Betrieb abgeriegelt
Das Sicherheitsmodell ist erfrischend ehrlich, was die Absicht angeht: Passwort-Auth ist standardmäßig aus, weil der Zugriff über localhost sie nie gebraucht hat. Remote zu gehen heißt, die Dinge selbst einzuschalten.
HERMES_WEBUI_PASSWORDals Umgebungsvariable, oder ein Passwort, das du im Settings-Panel setzt;- Passkeys / WebAuthn: Melde dich mit dem Passwort an, registriere unter Settings einen Passkey, und sobald mindestens einer existiert, kannst du das Passwort weglassen und nur noch mit Passkeys arbeiten (das Passwort bleibt als Wiederherstellungspfad erhalten);
- natives OIDC, konfiguriert über
webui_oidc.issuer,client_id,allow_claimundallow_values— alle vier sind nötig, bevor OIDC anspringt, und der Start warnt dich, wenn die Konfiguration unvollständig ist; - nach dem Login bekommst du ein HMAC-signiertes HTTP-only-Cookie mit 24 Stunden TTL, Security-Header auf den Responses, ein POST-Body-Limit von 20MB und mit SRI-Hashes fixierte CDN-Assets.
Eine Warnung sticht heraus: Wenn du es hinter einen Reverse Proxy stellst, nutze nicht die Basic Auth des Proxys. PWA-Updates laden den Service Worker, und Proxy-Auth blockiert genau diese Abrufe, sodass eine installierte App nach einem Update auf einem leeren Bildschirm landet. Die Doku enthält Schritte zur Wiederherstellung — und genau deshalb sind Tailscale oder ein Tunnel der empfohlene Weg.
Wenn du schon tief in der Remote-Access-Verkabelung steckst, kann dir die OAuth-über-SSH-Ausarbeitung ein paar Stunden sparen.
Wo die Kanten liegen
Der Bootstrap unterstützt kein natives Windows. Nutze Linux, macOS oder WSL2. Es gibt einen von der Community gepflegten Leitfaden für natives Windows, aber dort bist du auf dich allein gestellt.
Der Chat läuft standardmäßig nicht über einen externen API-Server. Die WebUI führt den Hermes-Agenten in-process aus und liest deine HERMES_HOME-Konfiguration direkt. Wenn du bereits einen OpenAI-kompatiblen Endpoint hast, gibt es zwei unterstützte Verwendungen: Trag ihn unter Settings als Custom Provider mit seiner Base-URL und seinem Bearer-Token ein, oder leite den Chat über einen laufenden Hermes Gateway API Server mit HERMES_WEBUI_CHAT_BACKEND=gateway. Der zweite Weg bringt noch keine vollständige Delegation des Agent-Loops mit — dafür gibt es ein offenes Issue —, sieh diesen Modus also als brauchbar an, aber nicht als identisch mit dem lokalen Betrieb.
Mobile-native Alternativen stecken noch in den Anfängen. Am 19. September tauchte ein Handy-App-Repository auf — mit PRD und ohne Implementierung —, und es gibt ältere Android-Experimente. Vorerst ist die WebUI der ausgereifteste und am aktivsten gepflegte Weg, und sie hat einen Eintrag in unserem Ecosystem-Verzeichnis.
Neunzig Minuten ab hier
Zurück in den Zug: Installiere die WebUI, tritt Tailscale bei, leg sie auf den Homescreen. Wenn du dich das nächste Mal fragst, ob dieser Cron-Job gelaufen ist, schaust du aus der Hosentasche nach — und während du schon da bist, bittest du den Agenten, die Logs des fehlgeschlagenen Builds in drei Schlussfolgerungen zu verwandeln und sie dir zu schicken.
Wenn Hermes selbst noch nicht eingerichtet ist, fang mit der Installationsanleitung an; wenn du Desktop und Remote-Clients auf ein Backend ausrichten willst, deckt das die Gateway-Befehlsreferenz ab. Einen Agenten remote zu betreiben sollte der leichte Teil sein.