# Nach /shared/projects/hermes_agent/.env kopieren und Werte anpassen. # .env ist in .gitignore und wird NICHT committet. # Shared Secret zwischen hermes-gateway und Hermes Agent (config.yaml -> api_key). # Mindestens 32 zufaellige Zeichen, z.B. erzeugen mit: # openssl rand -hex 32 HERMES_GATEWAY_TOKEN= # Port auf dem hermes-gateway auf dieser Maschine lauscht. Seit "alles auf # einer Maschine" nur noch auf 127.0.0.1 gebunden (siehe docker-compose.yml) - # Hermes Agent selbst (network_mode: host) erreicht das trotzdem ueber # localhost, kein anderer Rechner kommt mehr direkt ran. HERMES_GATEWAY_PORT=8447 # UID/GID des Host-Users, dem hermes-data/agent-home gehoeren soll, damit # Dateien die Hermes im Container schreibt (Sessions, Memory, Config) auf dem # Host lesbar/schreibbar bleiben. Default 10000 (Hermes' eingebauter Default) # ist ok wenn Dir das egal ist; setze es sonst auf `id -u`/`id -g` des Users # der hermes-data/ auf dem Host verwaltet. HERMES_UID=10000 HERMES_GID=10000 # NICHT MEHR NOETIG im Normalbetrieb (seit dem Caddy-Umbau, 19.07.2026 spaeter # Abend): das Dashboard bindet nur noch auf 127.0.0.1, Hermes' eigenes # Auth-Gate engagiert sich laut eigener Fehlermeldung NUR bei einem 0.0.0.0- # Bind. Caddy (siehe CADDY_BASIC_AUTH_HASH unten) macht die eigentliche # Absicherung nach aussen. Einfach leer lassen. # # Nur falls der Dashboard-Bind mal wieder auf 0.0.0.0 gestellt wird, ist ein # Wert hier noetig (sonst verweigert Hermes den Start hart mit "no auth # providers are registered") — dann zusaetzlich den dashboard:-Block in # hermes-agent-config/config.yaml.example (bzw. der echten config.yaml) # einkommentieren. HERMES_DASHBOARD_USER ist Klartext (frei waehlbar), # HERMES_DASHBOARD_PASSWORD_HASH ist NIEMALS das Klartext-Passwort, sondern # der Hash daraus. Erzeugen (einmalig, gegen den "hermes-agent"-Container, # NICHT "hermes-agent-dashboard" — der braucht den Hash schon zum Hochfahren, # Henne-Ei-Problem): # docker exec -it hermes-agent python -c \ # "from plugins.dashboard_auth.basic import hash_password; print(hash_password('DEIN-PASSWORT'))" # Den Output (nicht das Passwort selbst!) hier eintragen. # # ACHTUNG DOLLARZEICHEN-FALLE falls Du's doch brauchst: der erzeugte Hash hat # das Format "pbkdf2:sha256:$$" - also ZWEI rohe "$"-Zeichen # drin. Docker Compose interpretiert "$xyz" in .env-Werten selbst als # Variablen-Referenz und ersetzt nicht aufloesbare Teile stillschweigend # durch Leerstring (sichtbar als "WARN The "xyz" variable is not set" # beim "docker-compose up"). Ergebnis: ein verstuemmelter Hash, das # Dashboard startet trotzdem nicht ("no auth providers are registered"), # obwohl alles "richtig" eingetragen aussieht. # FIX: jedes einzelne "$" im Hash durch "$$" ersetzen bevor Du ihn hier # eintraegst, z.B. aus # pbkdf2:sha256:260000$f2kwriK6aYVRG5$BRps7npu2Tzg... # wird # pbkdf2:sha256:260000$$f2kwriK6aYVRG5$$BRps7npu2Tzg... # Am schnellsten mit dem sed-Trick: # sed -i '/^HERMES_DASHBOARD_PASSWORD_HASH=/ s/\$/$$/g' .env HERMES_DASHBOARD_USER=admin HERMES_DASHBOARD_PASSWORD_HASH= # Seit 19.07.2026, spaeter Abend: Caddy (Service "caddy" in docker-compose.yml) # macht TLS-Termination auf Port 443 + eine EIGENE Basic-Auth-Schicht vor dem # Dashboard (das selbst nur noch auf 127.0.0.1 bindet). Selber HERMES_DASHBOARD_USER # wie oben, aber ein EIGENER Hash noetig — Caddy will bcrypt, Hermes' Hash ist # pbkdf2, die Formate sind nicht austauschbar. Erzeugen (einmalig, gleiches # Klartext-Passwort wie beim Dashboard-Hash oben verwenden, muss aber nicht): # docker run --rm caddy:2-alpine caddy hash-password --plaintext 'DEIN-PASSWORT' # Output hier eintragen. # # ACHTUNG, GLEICHE DOLLARZEICHEN-FALLE WIE OBEN: ein bcrypt-Hash sieht aus wie # $2a$14$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS # Docker Compose interpretiert "$xyz" in .env als Variablen-Referenz und # ersetzt still durch Leerstring ("WARN ... variable is not set"). FIX: jedes # einzelne "$" durch "$$" ersetzen, z.B. # $$2a$$14$$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS # Am schnellsten mit demselben sed-Trick wie beim Dashboard-Hash: # sed -i '/^CADDY_BASIC_AUTH_HASH=/ s/\$/$$/g' .env CADDY_BASIC_AUTH_HASH= # Optional: NUR setzen wenn Du Hermes' EIGENEN OpenAI-kompatiblen API-Server # aktivierst (siehe API_SERVER_HOST/API_SERVER_KEY-Kommentar im # hermes-agent-Service in docker-compose.yml) — z.B. um einen mobilen Client # wie gpt_mobile/Maid/OpenWebUI direkt gegen Hermes sprechen zu lassen, statt # nur ueber CLI/Dashboard. Andere Richtung als HERMES_GATEWAY_TOKEN oben! # Mindestens 32 zufaellige Zeichen, z.B. openssl rand -hex 32. # API_SERVER_KEY=