Hermes Agent v0.20.4
Overview
v0.20.4 — The Glass Release. Erschienen am 18. August 2026. Seit v0.20.3 ~74 gemergte PRs · ~146 Commits · ~265 geänderte Dateien (+21.697 / −2.217).
Einen Tag nach dem Resilience Patch kommt das Zeitfenster, um das niemand gebeten hat und das doch alle wollten: Der Desktop hört endlich auf, gegen dich zu arbeiten. Die Überschrift ist Glass – ein macOS-Transluzenzmodus, der das Fenster weichzeichnet, ohne den Text zu bleichen –, und darum herum landen eine dauerhaft getabte SESSIONS|BOTS-Seitenleiste, ein Bot-Roster, das du endlich aufräumen kannst (ausblenden, einblenden, auflösen), Bot-Mode-Gruppenchats, die keine langlaufenden Turns mehr verlieren, ein beratender NVIDIA-SkillEvaluator-Scan bei jeder Skill-Installation, gehärteter Cron-Medienversand (konfigurierbares Timeout, Anhänge manueller Läufe, die überleben), SessionDB-Konkurrenz-Fixes, die festgeklemmte Gateways entblocken, ein hermes update, das die Wahrheit über geparkte Branches sagt, und native Kanban-Benachrichtigungen.
Da es sich um ein Patch-Release handelt, fallen die offiziellen Notizen knapp aus – die vollständige kuratierte Dokumentation erscheint mit v0.21.0. Diese Seite deckt die wertvollsten Teile dieses Zeitfensters ab.
Highlights
1. Desktop-Glass – Transluzenz, durch die man lesen kann (macOS)
Fenster-Transluzenz war früher an die native Fensteropazität gekoppelt, die das ganze Fenster verblassen lässt – Text inklusive –, sodass jeder mit einem unruhigen Wallpaper den Regler praktisch auf 0 festnageln musste. Glass gibt dem Hebel auf macOS eine zweite Interpretation: Das Fenster bleibt auf nativer Ebene opak, und stattdessen legt sich das Feld des Renderers dünn über das Vibrancy-Material, das jedes Chat-Fenster ohnehin schon trägt. Du bekommst einen matten Blur, während Text, Karten, Popovers und der Composer vollen Kontrast behalten (#88744).
Ist Glass erst einmal aktiv, formen es drei Regler:
- Intensity – der gleiche Hebel, über die volle Bandbreite. Ganz oben ist die Tönung komplett verschwunden: nackter, ungetönter Blur, während Text und Karten opak bleiben.
- Frost – Deep / Soft / Bright / Glare. macOS bietet keinen Blur-Radius-Regler, also ist das Vibrancy-Material der Frost-Regler.
- Area – ganzes Fenster oder nur die Seitenleiste (die Finder-Form: Glas-Schiene, opake Inhalts-Spalte).
Jede Anpassung peekt: Das Einstellungs-Overlay verdeckt genau den Effekt, den sein Regler steuert – hält man den Regler gedrückt, wird das Overlay durchscheinend und das Live-Fenster selbst zur Vorschau. Frische macOS-Profile starten jetzt mit vorausgewähltem Glass – die Intensität steht weiterhin auf 0, sichtbar ändert sich also nichts, bis du den Hebel bewegst, und Profile, die bewusst auf klar getunt wurden, bleiben klar. Windows und Linux sehen exakt die Reihe, die sie heute sehen (#88956).
2. Die SESSIONS | BOTS-Seitenleiste ist ein Tab-Streifen – und Bots lassen sich ausblenden
Die linke Seitenleiste des Desktops startet jetzt immer mit SESSIONS | BOTS als nebeneinanderliegenden Tabs in einer Zone. Das Bots-Pane trägt eine erzwungene Dock-Invariante: Beim ersten Übernahmedurchlauf jedes Starts wird jedes gestapelte Sessions-über-Bots-Layout als Center-Tab neu eingehängt – dieses Layout darf nie wieder ein Update überleben (#88872).
Auch das Roster ist aufgeräumter: Rechtsklick auf eine Bot-Zeile → Hide Bot entfernt den Bot aus dem Roster und dem Active-now-Streifen (ohne @Mentions, Gruppenmitgliedschaften oder offene Chats anzufassen), und ein Augen-Toggle im Kopfbereich – nur gerendert, solange mindestens ein Bot ausgeblendet ist – zeigt ausgeblendete Bots abgedimmt, mit Rechtsklick → Unhide Bot. Der Ausgeblendet-Zustand synchronisiert sich über Maschinen hinweg über ui_meta in profile.yaml (#88800).
3. Bot-Mode-Gruppenchats verlieren keine langlaufenden Turns mehr
Ein Member-Turn in einem Gruppenchat hatte früher ein festes 3-Minuten-Limit; ein Turn, das es überschritt, lieferte null, und die Round-Robin-Schleife behandelt null als Pass – eine Antwort, die in Minute 7 fertig wurde, hatte also kein Ziel mehr. Jetzt verlängert sich das Limit, solange die Session des Mitglieds sichtbar inflight/running meldet, gedeckelt durch eine harte Obergrenze von 20 Minuten, und ein Turn, der trotzdem ausläuft, zeichnet eine stranded-Basislinie auf, die an der nächsten Turn-Grenze zurück in den Raum geerntet wird – spät, nie verloren, und sie überlebt Fenster-Neuladungen (#88885). Darum herum: Gruppenchat-Nachrichten rendern Markdown (#88553), maschinenübergreifendes Gruppen-Routing übersteht Verbindungswechsel (#88921), ein Bot kann gleichzeitig in mehreren Gruppenchats sitzen (#88980), Gruppenchats sind First-Class-Zeilen im Discord-Stil, die sich im Hauptfenster öffnen (#88738), und sie können endlich aus der GUI heraus aufgelöst werden (#88659).
4. NVIDIA-SkillEvaluator: eine beratende Zweitmeinung bei Skill-Installationen
hermes skills install führt jetzt bei jeder Hub-Installation NVIDIA SkillEvaluator Tier 1 (PII, Unicode-Smuggling, Script-Lint) als beratenden Scan aus – Befunde werden vor der Installationsbestätigung mit file:line angezeigt, und die Installation läuft immer weiter. Das ist bewusst warn-only: Der Upstream-PII-Scanner hat bekannte False-Positive-Klassen (SSH-Syntax wie [email protected], Beispiel-E-Mails in der Dokumentation, op://-Referenzen des Secret-Managers), Befunde informieren also deine Entscheidung, statt sie zu blockieren. Befunde der Kategorie Secrets (private Schlüssel, Cloud-Keys, Tokens, mit Zugangsdaten versehene Verbindungsstrings) werden rot mit einer expliziten Review-Warnung gerendert. Der Scan ist optional – ohne das skillevaluator-Binary degradiert er zu einem stillen No-op – und lässt sich mit skills.tier1_advisory: false deaktivieren (#88573).
5. Gehärteter Cron-Medienversand
Drei Cron-Zustellungslücken wurden in diesem Zeitfenster geschlossen:
- Konfigurierbares Timeout: Der Versand von Medienanhängen hatte ein festes 30-Sekunden-Fenster, das große Exporte (lange TTS-Audio, große PDFs) sprengten – und nach dem Doppelpunkt folgte nur ein protokollierter Fehler. Das Timeout ist jetzt
HERMES_CRON_MEDIA_SEND_TIMEOUT→cron.media_send_timeout_seconds→ Standard 300 s, und Timeouts zeichnen immer einen nicht-leeren Fehlergrund auf (#88787). - Manuelle Läufe verlieren keine Anhänge mehr:
hermes cron run <job-id>konnte den Text eines Jobs zustellen und dabei seine PDF-/Bildanhänge stillschweigend verwerfen und trotzdem Erfolg melden – der eigenständige Sender protokollierte Upload-Fehler nur inwarnings, die niemand las. Anhang-Fehler sind jetzt in beiden Zustell-Spuren im Run-Status sichtbar (#88631). - Verpasste Auslösungen sind sichtbar: Wenn der gehostete Fire-Pfad das Gateway nicht erreichen kann, bekommt der Job einen dauerhaften
last_fire_error-Stempel, der incronjob list,hermes cron listund im Dashboard auftaucht – gelöscht beim nächsten erfolgreichen Lauf (#88555).
6. SessionDB blockiert den Event-Loop nicht mehr
Eine Enterprise-Flotte traf auf ein Gateway, das nicht mehr hochkam: Ein unsauberes Herunterfahren im Wettlauf mit einer zweiten Instanz ließ jeden Neustart auf dem Event-Loop-Thread innerhalb der v25-Schema-Migration blockieren, der Loop-Liveness-Watchdog feuerte Exit 75, und der Supervisor startete direkt in denselben Zustand zurück. SessionDB (Schema-Init + Migration gegen ein umkämpftes state.db) wird nie wieder auf dem Event-Loop-Thread konstruiert: Bei einem Cache-Miss startet sie ein einmaliges Background-Bootstrap und wartet bis zu 250 ms – eine gesunde Init endet innerhalb des Fensters, eine umkämpfte degradiert zu None (jeder Aufrufer behandelt das bereits), während der Loop weit unter dem Probe-Timeout des Watchdogs steht (#88753).
7. hermes update sagt die Wahrheit über geparkte Branches
Bei einem Source-Checkout, der auf einem Feature-Branch geparkt ist, stashte hermes update früher, synchronisierte, druckte ✓ Code updated! – und ließ den Checkout auf dem veralteten Branch zurück, ohne irgendeinen der neuen Codes von main. Jetzt wechselt es automatisch zurück zu main, wenn der geparkte Branch nachweislich sicher zu verlassen ist (sauberer Baum + vollständig gemergt), warnt laut und markiert das Code-Update als SKIPPED, wenn das nicht der Fall ist – und die Zusammenfassungszeilen tragen den tatsächlichen Branch + HEAD-Short-Sha, sodass Drift auf einen Blick sichtbar ist:
✓ Update complete! [main @ 30fcf9580]
(#88928)
8. Kanban-Aufgaben pingt dich nativ an
Der Desktop feuert jetzt eine native OS-Benachrichtigung, wenn eine Kanban-Aufgabe abgeschlossen wird, auf einen Blocker trifft oder fehlschlägt – der vollständige Terminal-Event-Satz (completed, blocked, gave_up, crashed, timed_out, block_loop_detected) mit Severity pro Typ, sodass ein Worker, der in einer anderen App an einem Blocker festhängt, nicht mehr still stirbt. Geschaltet über Einstellungen ▸ Benachrichtigungen ▸ Plugin-Benachrichtigungen (#88765).
Verbesserungen
- Scan-Quarantäne für Projekt-Skills + nicht-interaktive Trust-Vererbung (Sicherheit): Projekt-Skills werden beim Laden per Scan gegen Injection in Quarantäne gelegt, und nicht-interaktive Oberflächen (cron/API/ACP) erben die Trust-Entscheidung des Menschen pro Repository, statt zu fragen oder automatisch zu vertrauen – damit sind die verbleibenden Skill-Punkte des Epics zu projektlokalen Skills abgeschlossen (#88643).
- One-Shot-Turns bleiben erhalten: One-Shot-Turns von
hermes chat -Q/-qbleiben jetzt in der fortgesetzten Session erhalten – inklusive Bot-zu-Bot-Bot-Chat-Nachrichten (#88763). - Bot-Mode-Gruppenchat-Räume zeigen Profilbilder (#88746); ausgeblendete CLI-geborene Bot-Mode-Sessions bleiben außerhalb der globalen Sessions-Seitenleiste (#88677).
- Desktop-Gateways-Einstellungsseite: Gateway + Connections vereinigen sich zu einer einzigen Seite auf Maschinenebene (#88735, #88812); eine Roster-Zeile pro Bot, selbst wenn ein Backend unter zwei Adressen registriert ist (#88828).
- Provider: Muse Spark 1.2 in den kuratierten OpenRouter-Picker aufgenommen (#88600), und
api.meta.airoutet für Prompt-Caching über die Responses API (#88601).
Fixes
- SessionDB-Stall auf dem Event-Loop-Thread (siehe Highlight 6); das Virtual-Model-Alias-Leck ist bei Write, Read und Recovery-Cache geschlossen (#88761); Multiplex-Sessions werden jetzt in der
state.dbdes besitzenden Profils gespeichert statt in der Root (#88734). - Windows: Bot-/Profil-Löschung schlägt nicht mehr mit WinError 32 fehl – der Speicher wird freigegeben, bevor das Verzeichnis entfernt wird (#88727).
- OpenAI-Adapter toleriert spärliche Response-Objekte; der Relay entpackt faule abgeschlossene Streams und verwendet kanonische verwaltete Operationsnamen (#85581, #85579, #85582).
- Desktop: kein Phantom-Local-Default mehr auf Remote-Gateway-Desktops (#88554); gelöschte Profile verbinden sich nicht mehr neu, und 404s mitten im Wechsel werden nicht mehr als Session-Löschung behandelt (#88638, #88699); das Bots-Pane öffnet immer den gepinnten kanonischen Bot Chat (#88690).
Upgrade
hermes update
Nach dem Upgrade hermes doctor ausführen, um die Installation zu prüfen, und das Gateway neu starten (hermes gateway), damit Plattformänderungen greifen. macOS-Nutzer: Der Glass-Modus erscheint unter Darstellung ▸ Fenster-Transluzenz, sobald sich die Desktop-App aktualisiert hat.