Hermes Desktop schließt den Kreis: Der In-App-Browser ist da und der Agent kann endlich die Seite lesen, die er geöffnet hat

Am 5. August 2026 hat Hermes Agent zwei Updates direkt hintereinander zusammengeführt, die den letzten blinden Fleck auf dem Desktop schließen:
- PR #77705 — der In-App-Browser und die Preview-Leiste wurden zu echten Layout-Tree-Tabs
- PR #79482 — ein neues
read_preview-Tool erlaubt dem Agenten, den Inhalt der aktuell im In-App-Browser geöffneten Seite zu lesen
In einem Satz: Der Agent konnte schon immer eine Webseite „öffnen“, aber er konnte die geöffnete Seite nicht sehen — jetzt kann er sie lesen. Für alle, die mit Hermes Desktop entwickeln, schließt das den Kreislauf „UI erzeugen → Vorschau öffnen → Ergebnis prüfen → selbst beheben“.
Dieser Artikel wiederholt nicht die PR-Notizen. Er geht auf die technischen Details beider Änderungen ein, auf die Design-Entscheidungen dahinter und darauf, wie man sie tatsächlich einsetzt.
Hintergrund: Der Agent öffnete Seiten „blind“
Ein kurzer Blick auf die Entwicklung der Tools macht den Wert dieser beiden PRs deutlich:
- 22. Juli (PR #69519):
open_preview(url[, label])undfocus_pane(...)sind erschienen. Zum ersten Mal konnte der Agent aktiv eine URL, einen localhost-Dev-Server oder eine lokale Datei im Desktop-Vorschaufenster öffnen. Aber Achtung: Er konnte nur öffnen — der Seiteninhalt war eine Blackbox. - Etwa zur gleichen Zeit erlaubten
read_terminal/close_terminaldem Agenten, den Inhalt des eingebetteten Terminal-Panes zu lesen — aber die Web-Seite bekam nie ihr Pendant zum „Lesen“. - 5. August: Beide PRs kamen zusammen — das Browser-Tab-UI-Refactoring plus das
read_preview-Tool.
In den Worten des Maintainers: open_preview konnte eine Seite öffnen und read_terminal den Terminal lesen, aber „Was steht auf dieser Seite?“ blieb unbeantwortet. read_preview schließt diese Lücke.
Update 1: Der In-App-Browser wird zum First-Class-Tab
Vor PR #77705 war die Desktop-Preview-Leiste ein Bürger zweiter Klasse der UI:
- Sie rendert eine eigene, separate Tab-Leiste mit anderer Höhe, eigenem Schließen-Menü und eigener Label-Schreibweise
- Sie hatte ein eigenes ⌘W-Verhalten, das an die Zone des Datei-Browsers geschweißt war (⌘J zog die Vorschau gleich mit weg)
- Die Console/DevTools-Umschalter hingen an der Titelleiste, und ihr Zustand wurde von Click-Handlern gesteuert — das direkte Schließen des DevTools-Fensters ließ den Button im Zustand „an“ hängen
Das Refactoring holt sie vollständig in den Layout-Tree:
- Preview-Tabs sind jetzt Layout-Tree-Kacheln:
$previewTabsspiegelt sich über dieselbepaneMirror-Session in die Pane-Beiträge, die auch die Route-Kacheln nutzen. Tab-Leiste, Drag, Stack, Split, gemeinsame Schließen-Befehle, einfaches ⌘W — was der Hauptbereich hat, bekommt auch die Vorschau. - URL-Tabs heißen „Browser“ — der Tab benennt die Oberfläche, nicht die Seite. Sauberere Semantik.
- ⌘W / ⌃Tab funktionieren jetzt über Preview- und Seiten-Zonen hinweg: Vorher leerte ⌘W über einer einzelnen Vorschau stattdessen den Haupt-Chat. Behoben.
- Session-Drags können jetzt in Preview-/Seiten-Zonen landen — die Asymmetrie beim Hineinziehen ist weg.
- DevTools-Zustand ist ereignisgesteuert: Das Glyph wird von den
devtools-opened/closed-Events des Webviews gesteuert, sodass das direkte Schließen des DevTools-Fensters keinen veralteten „an“-Zustand mehr hinterlässt. - Bonus: Die doppelten i18n-Keys und der gesamte unabhängige Rail-Code wurden gelöscht — unterm Strich weniger Code.
Technische Anmerkung: Die Tab-Leiste selbst wurde zu einem Satz gemeinsamer Primitive abstrahiert (PaneTabStrip, PaneStripGlyph/PaneStripTool, paneTabCloseItems), wobei Glyphen als Daten beigesteuert werden, genau wie die Titelleisten-Tools. Zukünftige Preview-Typen bekommen die einheitliche Tab-Erfahrung gratis.
Update 2: read_preview — die Augen des Agenten
PR #79482 ist das funktionale Herzstück: ein neues read_preview-Tool, das read_terminal durchgängig spiegelt. Keine neue Maschinerie — nur ein zweiter Konsument der bestehenden Struktur:
Tool-Ebene (tools/read_preview_tool.py):
- Per
check_fnaufHERMES_DESKTOPauf den Desktop begrenzt — kein Schema-Fußabdruck außerhalb der GUI, genau wie bei den anderen Desktop-Pane-Tools - Fensterweise Lesevorgänge mit
start/count(Zeichen-Offsets): Lange Seiten werden paginiert, statt den Kontext zu fluten
Gateway-Bridge:
preview.read.request/preview.read.respondüber dieselbe Blocking-Prompt-Bridge wieterminal.read- 45s-Timeout,
allow_expiredund.expirebei Timeout — eine verspätete Renderer-Antwort löst sich still auf, statt einen Fehler zu werfen
Renderer (preview-reader.ts):
- Das URL-Pane registriert einen Page-Reader: Webview
executeJavaScript→ Titel + sichtbares innerText readActivePreviewermittelt den aktiven Tab und begrenzt einen einzelnen Lesevorgang auf 24k Zeichen- Datei-/Artifact-Tabs antworten mit ihrer Identität plus einem Verweis auf das passendere Tool (
read_fileoder das Gespräch selbst) — kein Webview-Roundtrip für Inhalte, für die der Agent bereits ein besseres Tool hat
Der manuelle Test der PR ist ein anschauliches Abnahmeszenario: Reddit im Browser öffnen, fragen „Was ist der Top-Beitrag?“ — der Agent ruft read_preview auf und antwortet von der Seite aus.
So setzt du das tatsächlich ein
1. Selbst-Verifikations-Schleife für die lokale Entwicklung
Der praktischste Fall: Du betreibst eine React-/Vue-App auf localhost:3000 und hast den Agenten gebeten, eine Komponente zu ändern. Jetzt kann er:
open_preview(localhost:3000) # open the preview
# …edit code, restart the dev server…
read_preview() # read the page's current content and verify the change
Vorher änderte der Agent Code „blind“. Jetzt kann er zurücklesen, was die Seite tatsächlich rendert, und den Fix selbst bestätigen.
2. Web-Recherche mit Kontextsicherheit
Nach dem Öffnen eines langen Artikels oder einer Doku-Seite liest der Agent sie mit start/count-Paginierung und holt nur die Absätze in den Kontext, die er braucht — deutlich günstiger, als die ganze Seite hineinzukippen.
3. Zusammen mit den v0.20-Artifacts
Wenn du die Sandbox-Artifact-Vorschauen aus Hermes v0.20 nutzt, kannst du den Agenten jetzt den tatsächlich gerenderten Inhalt generierter HTML-Apps lesen lassen — aus „generieren → Vorschau → Mensch prüft“ wird „generieren → Vorschau → lesen → überarbeiten“.
4. Grenzen und Einschränkungen (wissenswert)
- Nur Desktop:
read_previewexistiert nur in Hermes Desktop (perHERMES_DESKTOPbegrenzt); CLI, TUI und Messaging-Plattformen bekommen es nicht. Gleiches gilt füropen_preview/focus_pane. - Nur sichtbarer Text: Es liefert Titel + innerText — nicht den DOM-Tree, kein Screenshot. Um zu „sehen“, wie eine Seite aussieht, brauchst du weiterhin Screenshot-/Vision-Tools.
- Active-Tab-Semantik: Es liest den aktuell aktiven Tab — bei mehreren offenen Tabs solltest du im Blick behalten, welche Seite der Agent gerade liest.
- 24k-Zeichen-Limit: Einzelne Lesevorgänge sind begrenzt; lange Seiten brauchen Paginierung.
Was das für Entwickler bedeutet
Zwei PRs — „ein UI-Refactoring und ein Tool“ — aber zusammen markieren sie einen Wendepunkt im Interaktionsmodell:
Vorher war der Workflow des Desktop-Agenten „Ich generiere, du schaust zu.“ Er erzeugte HTML oder öffnete eine Seite und wartete dann auf menschliches Feedback. Jetzt wird daraus „Ich generiere, ich öffne, ich lese, ich behebe“ — eine autonome Schleife. read_terminal deckte den Terminal ab; read_preview deckt das Web ab; zusammen mit den bestehenden Datei-Tools ist das „Sensorium“ des Agenten auf Hermes Desktop praktisch vollständig.
Der natürliche nächste Schritt (und worauf die Community wartet): read_preview mit Vision zu kombinieren, damit der Agent nicht nur Text liest, sondern das gerenderte Ergebnis tatsächlich sieht — ab dann ist „eine Webseite lesen“ kaum noch von einem Menschen zu unterscheiden, der einen Browser bedient.
So probierst du es aus
- Aktualisiere auf den neuesten Desktop-Build:
hermes update(oder frisch installieren über die Installationsanleitung) - Bitte den Agenten in Hermes Desktop, mit
open_previeweine URL zu öffnen - Frag ihn „Was steht auf dieser Seite?“ — und sieh zu, wie er
read_previewaufruft, um zu antworten
Weitere Desktop-Funktionen findest du in der Hermes-Desktop-Dokumentation, und für das größere v0.20-Update unseren Deep Dive zum Herald-Release.