Hermes Agent v0.21.1
Overview
v0.21.1 — The Consolidation Release. Erschienen am 7. September 2026. ~5.139 Commits · ~4.364 geänderte Dateien (+601.014 / −768.419) · ~632 gemergte PRs seit v0.21.0.
Dieses Fenster hat kein einzelnes Schlagzeilen-Feature – es ist ein Konsolidierungsdurchgang, und die größte Geschichte ist unsichtbar: Die Codebase wurde zerlegt und um ~34 % ihres Quellcodes verschlankt, ohne dass sich das Verhalten ändert (#102117). Rund um diese grundlegende Bereinigung konzentriert sich die sichtbare Arbeit genau dort, wo Power-User sie spüren: Delegation wurde schneller und sicherer (Ergebnisse treffen ein, sobald der jeweilige Subagent fertig ist; Kinder können laufende Hintergrundprozesse an dich zurückgeben), MCP-Server können sich jetzt per Device Code autorisieren – auch auf Maschinen ohne Browser, OpenRouter-Provider-Pins werden pro Modell gesetzt und Modell-Picker aktualisieren sich alle 20 Minuten, das lokale search_files nutzt natives ripgrep und ist bis zu 6× schneller, Compaction behält ihren Prefix-Cache über Rebuilds in Coding-Sessions, und cron lässt stille Ticks die Kontinuität nicht mehr auslöschen – und zeigt dir endlich, wenn ein Job zu spät gefeuert hat.
Das hier ist ein Patch-Release: Die offiziellen Notizen sind knapp, die vollständige kuratierte Dokumentation erscheint mit v0.22.0. Diese Seite deckt die wertvollsten Teile des Fensters ab.
Highlights
1. The deep clean: −34% source LOC, zero behavior change
Die größte interne Geschichte des Fensters ist eine Vereinfachung der gesamten Codebase (#102117, gemergt am 4. September): 1.063.826 → 698.363 Quellcode-Zeilen (−34,4 %). Jede God-Datei wurde zerlegt – aus 37 Dateien mit über 5.000 Zeilen wurden 6; gateway/run.py ging von 34.847 auf 5.512 Zeilen zurück, cli.py von 22.426 auf 4.656; Funktionen mit über 300 Zeilen sanken von 192 auf 2 und die höchste zyklomatische Komplexität von 1.075 auf 84. Die alten Dateien bleiben als schlanke öffentliche Einstiegspunkte erhalten, und das Verhalten ist unverändert: Tool-JSON-Schemas, System-Prompt-Texte, Config-Standards und Wire-Formate sind byte-identisch, verifiziert durch Paritätsläufe über die gesamte Suite. Was du als Nutzer bekommst: eine Codebase, die für einen Agenten günstiger zu navigieren, schneller zu laden und leichter zu warten ist – ohne Config- oder Kommandoänderungen auf deiner Seite.
2. delegate_task: results land the moment each child finishes
Hintergrund-Fan-outs warten nicht mehr auf den langsamsten Subagenten. delegate_task liefert das Ergebnis jeder Aufgabe in dem Moment zurück, in dem die Aufgabe abgeschlossen ist, und Aufgaben, die sich einen optionalen group-String pro Aufgabe teilen, kommen zusammen als eine Nachricht zurück (#104299):
{
"tasks": [
{ "goal": "check api latency", "group": "bench" },
{ "goal": "check db latency", "group": "bench" },
{ "goal": "scan the changelog" }
]
}
Die beiden bench-Aufgaben melden sich in einer gruppierten Nachricht; der Changelog-Scan erscheint für sich, sobald er fertig ist – Schluss mit stundenlangem Warten auf ein hängendes Kind, um die anderen Ergebnisse zu sehen. Nicht gruppierte Aufgaben belegen jeweils eine eigene Unit, aber der gesamte Aufruf zählt weiterhin als ein einziger Slot gegen delegation.max_concurrent_children.
3. Children hand running processes back to the parent
Ein Subagent kann dir jetzt einen lang laufenden Hintergrundprozess übergeben, bevor er beendet wird: process_manage(action="handoff", session_id=<id>, data="<purpose>") überträgt das Eigentum an den Parent, und die Abschlussmeldung landet mit dem Zweck in deinem Chat (#105125). Alles, was ein Kind zurücklässt, wird in der Delegationsmeldung des Parents explizit als beendet gemeldet, statt stillschweigend gekillt zu werden – und das Kind erfährt von vornherein, dass sein notify=true kein Versprechen ist: keine Orchestratoren mehr, die stundenlang auf eine Abschlussmeldung warten, die nie eintreffen kann.
4. MCP logins without a browser: device codes
MCP-Server, die RFC 8628 unterstützen, können sich jetzt von einem Terminal aus autorisieren, ganz ohne Browser-Callback-Listener (#104891) – der Ablauf, der dich früher auf eine Maschine mit Browser gezwungen hat, funktioniert jetzt auf jedem Headless-Host:
hermes mcp login <server> --flow device
Hermes entdeckt den vom Server beworbenen Device-Endpoint, gibt die Verifizierungs-URI und den User Code aus und pollt, bis du auf einem beliebigen Gerät zustimmst. oauth.flow: device in deiner MCP-Server-Config macht den Device Flow zum Standard für Login und Reauth (Browser-PKCE bleibt insgesamt der Standard; --flow browser überschreibt die Config für einen einzelnen Login). Abgelehnte oder abgelaufene Grants ersetzen niemals vorhandene Anmeldedaten.
5. Per-model OpenRouter pins + pickers that stay fresh
provider_routing.models.<model-id> pinnt jetzt einen eigenen OpenRouter-Provider-Satz pro Modell, sodass Routing-Regeln ein Modell nicht mehr stillschweigend an einen Provider schicken können, den du nicht gewählt hast (#104159):
provider_routing:
sort: price
models:
"openai/gpt-6-astra": { only: [openai] }
"anthropic/claude-fable-5.1": { only: [anthropic] }
Der Eintrag pro Modell wird an dem einen Engpass angewendet, den jeder Request-Pfad ohnehin durchläuft – CLI, Gateway, Desktop, cron, /model und delegierte Kinder respektieren ihn alle. Gleichzeitig bleibt der /model-Picker nicht mehr stehen: Kataloge aktualisieren sich jetzt alle 20 Minuten (statt nach einer TTL von 1 Stunde), und eine Hintergrundschleife im Gateway hält sie warm, auch wenn niemand den Picker öffnet (#101319). Der Meta-Model-API-Provider behandelt seine Live-Antwort unter /v1/models nun als maßgeblichen Katalog und schließt Nicht-Chat-Präfixe wie muse-image-* und muse-voice-* aus (#101503).
6. Local file and search operations got a lot faster
search_files auf einem lokalen POSIX-Host führt ripgrep jetzt als direkten Subprozess aus, statt pro Aufruf zwei Bash-Spawns zu starten (#104502): Inhaltsuchen fallen von ~85 ms auf ~15 ms, Dateinamensuchen von ~73 ms auf ~12 ms (5–6× geringere Tool-Latenz bei identischen Ergebnissen; HERMES_NATIVE_FILE_READ=0 stellt den Shell-Pfad wieder her). Zwei weitere Verbesserungen halten die Token-Rechnung in langen Coding-Sessions niedrig: Compaction-Rebuilds pinnen den Coding-Workspace-Snapshot jetzt pro Session, statt jedes Mal git status neu abzufragen – so bleibt der Prompt-Prefix-Cache über Compaction-Grenzen hinweg intakt (#104455); und fertige Subagenten geben ihre Transkripte aus dem Heap des Parents frei, wobei Subagent-Inhalte aus dem Trigram-FTS-Index ausgeschlossen werden (Schema v30) – ein Lauf mit 1.320 Kindern hinterließ früher einen 1,9-GB-Parent-Heap und 1 GB an Shadow-Tables (#102032).
Improvements
- Startup:
hermes serve– der Befehl, den der Desktop bei jedem Kaltstart startet – arbeitet über einen eigenständigen, schlanken Parser und überspringt den Aufbau des argparse-Baums mit ~40 Subcommands (für Hilfe, unbekannte Flags und Container-Routing fällt er auf den vollständigen Parser zurück) (#101265). - Cron visibility:
hermes cron listgibt jetzt pro Job eineDispatch:-Zeile aus, undhermes cron statusergänzt einen Hinweis auf verspätete Jobs – ein Catch-up-Lauf nach verpasstem Feuern zeigt dann⚠ catch-up after missed fire, statt als pünktlicher Erfolg durchzugehen (#100445). - Delegation config: Ein delegiertes Kind, das auf einen Provider/ein Modell gepinnt ist, wird bei einem Fehler nicht mehr stillschweigend über die Fallback-Kette des Parents umgeleitet;
delegation.fallback_providersgibt Kindern eine eigene Kette ([]deaktiviert, fehlend erbt bei fehlendem Pin) (#105347). Kinder erben außerdem nicht mehr die 1-Stunden-Prompt-Cache-Stufe des Parents – Subagenten schreiben auf der 5-Minuten-Stufe, die sie tatsächlich nutzen, und vermeiden so den doppelten Cache-Schreibpreis für eine Aufbewahrung, die sie nie einlösen (#104168). - Token hygiene:
write_filekennzeichnet jetzt ein komplettes Datei-Rewrite, das größtenteils erneut sendet, was bereits auf der Platte liegt (≥20k Zeichen, ≥80 % unveränderte Zeilen), und lenkt den Agenten bei kleinen Änderungen zupatch– 661 solcher Schreibvorgänge (~24,9 Mio. Zeichen, ≈$155 an Output-Tokens) wurden in einem einzigen Refactor-Lauf abgefangen (#103551). - Desktop: Transkript-Zeitstempel sind in beiden Themes wieder lesbar, und ein neuer Message-Bubble-Regler (Settings → Appearance) steuert die Deckkraft deiner Sprechblase von voll deckend bis nur noch Kontur (#103146).
Fixes
approvals.deny-Regeln werden jetzt in isolierten Docker-/Cloud-Sandboxes durchgesetzt – vorher übersprangen sie den schnellen Container-Pfad, sodass eine Deny-Liste selbst unter--yolooderapprovals.mode: offmit einer Sandbox-Shell umgangen werden konnte;hermes approvals testbildet die korrigierte Reihenfolge ab (#103649).- Cron: Stille, durch Monitor/Script gesteuerte Ticks ersetzen nützlichen Kontinuitätskontext nicht mehr durch einen leeren Stub – die Auswahl der Ausgaben läuft die Dateien neueste zuerst durch und überspringt leere/stille Dokumente, während Fehlerdokumente für die Wiederherstellung in Frage bleiben (#104877). Die Incident- und Notepad-Speicher von Cron überstehen außerdem Upgrades, die ein älteres Ausführungsmodul im Cache hinterlassen (#104939).
Upgrade
hermes update
Führe nach dem Upgrade hermes doctor aus, um die Installation zu prüfen, und starte das Gateway neu (hermes gateway), damit die Plattformänderungen greifen. Der strukturelle Refactor hält alle öffentlichen Einstiegspunkte am Platz, sodass Third-Party-Plugins und Configs unverändert übernommen werden. Um vor der Ausführung zu sehen, was das nächste Update anfasst: hermes update --plan.