v0.21.4 kommt ohne Release Notes — hier sind zehn Änderungen, die auf deiner Maschine schon laufen


Samstagmorgen, du führst hermes update aus, und die Version springt von v0.21.3 auf v0.21.4. Du öffnest die Release Notes, um herauszufinden, was sich tatsächlich geändert hat, und die Seite besteht aus ein paar Absätzen mit einer Zeile am Ende, die besagt, dass die vollständige Ausarbeitung mit v0.22.0 kommt. Das ist keine Faulheit: Patch-Tags im v0.21-Zyklus existieren, um Docker-Images, Hermes Cloud und gehosteten Deployments einen stabilen Anker zu geben, und die kuratierte Dokumentation kommt mit der nächsten Minor-Version. Der Haken ist, dass das Verhalten, das bereits auf deiner Maschine ausgeliefert wurde, nicht auf v0.22.0 wartet.

Dieser Beitrag zieht zehn Dinge aus diesem Fenster heraus, die auf main gemergt und in diesem Tag enthalten sind — jedes mit einem Befehl, den du ausführen kannst, oder einem Config-Block, den du einfügen kannst. Nichts davon ist ein internes Refactoring: Drei ändern deine Gateway-Topologie, zwei ändern dein Ausgabeformat oder deine Rechnung, und der Rest spart dir sofort Zeit.

Zuerst die Bilanz: warum es dieses Tag gibt

Der Release-Text ist dabei ungewöhnlich direkt. Das ist ein Patch-Tag, der alles, was seit v0.21.3 gemergt wurde, zu einem stabilen Release für Downstream-Konsumenten (Docker-Images, Hermes Cloud, gehostete Deployments) bündelt, mit vollständig kuratierten Notes, die auf v0.22.0 verschoben sind. Gemessen am Commit 4b8a8134009a8727a289bcabeb0019fedd353128:

Metrik Wert (seit v0.21.3)
Nicht-Merge-Commits 5.071
Geänderte Dateien 5.169 (+312.961 / −62.855)
Gemergte PRs 1.812
Geschlossene Issues 2.116

Docker-Nutzer können das Tag direkt als nousresearch/hermes-agent:v2026.9.21 ziehen; Git-Installationen upgraden weiterhin mit hermes update. Alles Folgende ist danach geordnet, wie stark es deinen Tag verändert.

Zehn Dinge, die bereits ausgeliefert sind

1. Ein Gateway-Prozess pro Host, nicht einer pro Profile

Das ist die größte architektonische Konvergenz in diesem Fenster: genau ein hermes gateway run-Prozess pro Host und OS-Benutzer, der jedes Profile bedient. Die Lifecycle-Verben haben mit ihr ihre Bedeutung geändert. hermes -p X gateway run startet keinen zweiten Prozess mehr, solange das Host-Gateway läuft — es hängt sich an: Es gibt die PID des Host-Gateways und die bediente Menge aus und beendet mit 0. hermes gateway start --all und restart --all bedeuten jetzt der eine Host-Multiplexer, und sie fegen nie ein Gateway weg, das ein anderes Profile gerade laufen lässt.

Der alte Schalter gateway.multiplex_profiles: false ist außer Betrieb: Er wird weiter geparst, kann aber keinen zweiten Gateway-Prozess mehr festnageln — er wird genau wie ein nicht gesetzter Key aufgelöst, protokolliert eine Warnung und verweist auf den Migrationsbefehl. Wenn du von einer Per-Profile-Topologie upgradest, schau dir den Plan an, bevor du irgendetwas anfasst:

hermes gateway migrate --multiplex --dry-run   # Plan, Blocker und die implizierten Neustarts ausgeben
hermes gateway migrate --multiplex             # wirklich konvergieren (in nicht-interaktiven Shells --yes ergänzen)

Der schrittweise Migrationspfad, die drei echten Vorfälle dahinter (inklusive eines P1, der die MEMORY.md des falschen Profiles löschen konnte) und eine Checkliste nach dem Upgrade stehen in einem separaten Beitrag: Ein Gateway pro Host: die Multiplex-only-Migration. Der frühere Multiplex-by-default-Leitfaden behandelt, wie die Fähigkeit ursprünglich gelandet ist.

2. Connectoren: eine App direkt aus dem Gespräch heraus verbinden

Eine App zu verbinden bedeutete früher, die Config zu bearbeiten, einen Browser zu öffnen und Keys einzufügen. Jetzt bittet ein Nutzer im Chat darum, Notion zu verbinden, und das Backend führt die gesamte Verbindung aus: Es sammelt die Werte ein, zeigt den Anmeldelink, und der Agent kann das neue Tool noch im selben Turn aufrufen. Alle drei interaktiven Clients zeichnen denselben Einrichtungsschritt — ein Dialog in der Desktop-App, ein Callout in hermes --tui, ein Panel in der klassischen CLI. Das Repository liefert einen Katalog mit 65 geprüften MCP-Servern, von denen 55 auth.type: oauth deklarieren.

3. --format stream-json für maschinenlesbare Runs

Einmalige Runs können jetzt JSONL ausgeben:

hermes chat -q "Summarize this repository" --format stream-json

Jede stdout-Zeile ist ein JSON-Objekt (system, text, tool_use, tool_result, result), Diagnostik und die session_id:-Zeile bleiben auf stderr, und der abschließende result-Record trägt exit_code, Token-Statistiken und Dauer. Es erfordert -q (oder --query-file), impliziert den Quiet-Modus und lehnt --tui ab. Die vollständige Event-Feldtabelle, die Exit-Code-Semantik (0 / 1 / 130, plus 75 für einen Kanban-Worker) und wie man das in einer Pipeline konsumiert: CI beibringen, Hermes zu lesen: der stream-json-Event-Stream.

4. skills.auto_load heftet Skills in jede neue Session

Drei Zeilen in config.yaml sorgen dafür, dass diese Skills zu Beginn jeder neuen Session vollständig geladen sind und nicht bloß im Katalog aufgeführt:

skills:
  auto_load:
    - release-notes
    - qa-multilingual

Es gilt für CLI-, TUI-, Gateway-, Cron- und API-Agents, und es ist Profile-scoped. Die Injektion wird einmal pro Agent aufgelöst — Modellwechsel, Kompression und Wiederherstellung des statischen Präfix verwenden dieselben gerenderten Bytes —, damit dein Prompt-Cache intakt bleibt. Wann man es vermeiden sollte und wie es gegen --skills dedupliziert: Skills in jede Session heften.

5. mcp.discovery_concurrency stoppt den Spawn-Sturm beim Start

MCP-Discovery fächerte früher mit einem unbegrenzten asyncio.gather auf: acht stdio-Server bedeuteten acht Prozessbäume, die im selben Moment spawnten, und in einer Multi-Profile-Flotte lief jedes bediente Profile seinen eigenen Durchgang. Verbindungen sind jetzt durch mcp.discovery_concurrency begrenzt, Default 4, wobei 0 unbegrenzt bedeutet:

hermes config set mcp.discovery_concurrency 2   # langsamere Maschinen, knapperer Speicher

Die Messungen im PR (8 stdio-Server): Die Spitzenkonkurrenz sank mit dem Default von 8 auf 4, wobei der Durchgang 4,0 s → 5,6 s dauerte; der Wert 2 ergab Peak 2 und 13,2 s; 0 stellte Peak 8 und 3,5 s wieder her. Du tauschst einen etwas langsameren Boot gegen keinen Prozesssturm.

6. hermes sessions set-journal-mode konvertiert den Store offline

Wenn du database.journal_mode: delete konfigurierst, während state.db bereits im WAL-Modus ist, wird Hermes es niemals live herunterstufen — das Gateway, das Dashboard oder Cron können nicht gecheckpointete Commits halten, und ein Downgrade darunter zerstört diese Commits. Der einzige Ausweg war früher ein von Hand ausgeführter PRAGMA. Jetzt gibt es einen Befehl:

hermes sessions set-journal-mode delete                          # WAL -> rollback journal
hermes sessions set-journal-mode wal                             # zurück zu WAL
hermes sessions set-journal-mode delete --db ~/.hermes/kanban.db # ein anderer Hermes-Store

Er sucht zuerst nach Haltern, verweigert die Ausführung, solange irgendein Prozess (oder seine -wal/-shm-Sidecars) die Datei noch offen hat, benennt jeden als pid — command: path und liest die Header-Bytes zurück, um den neuen Modus zu verifizieren. Er verweigert außerdem kategorisch unter Windows, wo der Halter-Scan nicht verfügbar ist, und er weigert sich, WAL auf einem Cross-VM-Dateisystem (virtiofs/9p) zu aktivieren. Hintergrund: doctor und live WAL-Writer und state.db WAL in Docker.

7. Unautorisierte DMs lassen sich höflich ablehnen

Das Gateway hatte zwei Antworten auf eine unautorisierte DM: pair (durch das Pairing schicken) oder ignore (fallen lassen). Jetzt gibt es eine dritte, mit eigener Formulierung:

gateway:
  unauthorized_dm_behavior: decline
  unauthorized_dm_decline_message: "This bot is private. Ask the owner for an invite."

Du kannst sie auch pro Plattform im extra-Block der jeweiligen Plattform überschreiben. Für einen persönlichen Assistenten, der auf einem öffentlichen Kanal erreichbar ist, ist das professioneller als Schweigen: Der Absender erfährt, dass die Nachricht angekommen ist und warum sie nicht beantwortet wurde.

8. session_search bekommt ein Zeitfenster und einen gelockerten Retry

Der Cross-Session-Recall akzeptiert jetzt after- / before-Grenzen, entweder ISO-Daten oder relative Dauern (7d, 24h, 2w):

  • after="7d" — nur Sessions, die innerhalb der letzten Woche gestartet sind;
  • before="2026-09-01" — nur Historie bis zum 1. September (ein reiner Datumswert bedeutet Mitternacht UTC an diesem Tag);
  • die relative Form before="7d" bedeutet älter als eine Woche, nicht die letzte Woche — leicht zu verwechseln.

Der Recall versucht außerdem einmal einen Retry mit gelockertem OR-Matching, wenn striktes Matching nichts findet, sodass ein vages „Ich glaube, ich habe das Deployment-Ding erwähnt“ häufiger trifft. Der Index selbst wurde früher als schneller No-LLM-Pfad neu gebaut (siehe Session-Grenzen); dieser Teil füllt die Zeitdimension auf.

9. Ein Stapel kleiner Desktop-Gewinne

  • Chat-/UI-Font-Picker — wähle eine Schrift für das Transkript und eine für die Oberfläche, getrennt voneinander, inklusive Lesbarkeits-Fonts wie OpenDyslexic.
  • In den Tray minimieren — Opt-in: Minimieren versteckt Fenster, ohne Renderer zu zerstören oder laufende Arbeit zu stoppen; Close, Alt+F4 und Cmd+Q behalten ihr bestehendes Verhalten, und der Tray bietet „Hermes anzeigen“ / „Hermes beenden“.
  • Tap to summon HUD — Cmd+Option unter macOS, Ctrl+Alt unter Windows/Linux X11 tippen und loslassen, um das HUD aus einer anderen App nach vorn zu holen (standardmäßig aus, pro Gerät gespeichert, beide Tasten müssen innerhalb von 500 ms losgelassen werden).
  • Status-Drawer pro Chat — ein Grat über dem Composer versteckt den Status-Stack und die Git-Zeile zusammen; jede Unterhaltung merkt sich ihre Wahl.
  • Plugin-Deinstallation aus dem Plugins-Hub, plus lokale Engine-Updates mit einem Klick.

10. Katalog-Updates: Videomodelle und Plugin-Seiten

Die FAL-Videofamilie hat LTX 2.5 aufgenommen (Lightricks’ offenes Audio-Video-Modell: natives Audio, bis zu 20 s / 4K für Image-to-Video, Kamera-Bewegungs-Presets) und Kling O3 Standard (Kuaishou: natives Multi-Shot-Storytelling, optionales Audio, 3–15 s). Der Plugin-Katalog bekam ein Dutzend Community-Plugins (tailscale, ssh, shodan, terminal, rss, resetwatch, done-bell, kiwi, cognee und mehr), und jedes Katalog-Plugin und jeder Autor hat jetzt eine eigene Seite, mit dem README auf einen geprüften Commit gepinnt.

Wissenswert, kein Handlungsbedarf

Dasselbe Fenster hat auch eine Reihe von Kanten abgeschliffen: hermes -p X update startet das Host-Gateway jetzt einmal für die ganze Maschine neu, wobei der Hinweis jedes bediente Profile erreicht (#118108); Desktop hängt sich an das laufende Host-Backend an, statt eines pro Profile zu spawnen (#118246); benannte Profile lesen wieder die auth.json des Root-Profiles, was die No Codex credentials stored-Fehler nach dem Update behebt (#118373); ein Update-Hinweis an eine Plattform, die sich nie verbindet, wiederholt sich nicht mehr endlos alle 2 Sekunden (#118312); ein Managed-Gateway-429 bei image_generate oder FAL-Video wird als Rate-Limit gemeldet und einmal wiederholt, statt dir zu sagen, du sollst das Modell wechseln oder FAL_KEY setzen (#118311); und der Auto-Title-Aufruf konkurriert nicht mehr mit der Antwort auf einem selbst gehosteten Single-Slot-Modellserver (#117494).

Fünf Minuten Verifikation nach dem Upgrade

hermes version                        # erwartet v0.21.4 (Tag v2026.9.21)
hermes doctor                         # zuerst Warnungen zu Storage / Gateway-Topologie
hermes gateway status                 # wer welche Profile bedient
hermes gateway migrate --multiplex --dry-run   # Upgrades von einer Per-Profile-Topologie: erst den Plan lesen

Wenn du mehr als ein Profile auf der Maschine betreibst, ist Punkt 1 derjenige, der deine Zeit verdient: Er ist gleichzeitig eine Sicherheitsgrenze (Profile lesen nicht mehr die Credentials der anderen) und eine Verfügbarkeitsgrenze (ein Gateway-Neustart pro Update statt einer pro Profile).

Die Kurzfassung

Ein Patch-Tag ohne kuratierte Notes ist normal; „keine Release Notes“ ist nicht dasselbe wie „nichts hat sich geändert“. Die Teile dieses Fensters, die deine Aufmerksamkeit verdienen, sind die Gateway-Topologie-Konvergenz und die Profile-Isolations-Fixes — Erstere entscheidet, wie viele Prozesse auf deiner Maschine laufen, Letztere entscheidet, ob ein Profile die Keys und den Speicher eines anderen lesen kann. Der Rest (strukturierte Ausgabe, geheftete Skills, MCP-Boot-Konkurrenz, Journal-Mode-Konvertierung) gehört zu der Sorte Änderung, die man in dem Moment übernimmt, in dem man erfährt, dass es sie gibt. Die vollständige kuratierte Ausarbeitung kommt mit v0.22.0 und deckt alles seit v0.21.0 ab; zum Tag selbst siehe unsere v0.21.4-Release-Seite.