Browser: Agent arbeitet im unsichtbaren agent-browser statt im Panel; 0.5.x-Fixes (Binary-Guard, System-Prompt, scrollIntoView) #218

Closed
opened 2026-10-22 15:23:35 +00:00 by alf · 2 comments
Owner

Befund (22.10., Chat „eBay-Suche: RTX 4090")

Nutzer: „Es wird kein neuer Tab geöffnet." Rekonstruktion aus state.db (73 Messages) + agent.log:

  1. Turn 2 („Öffne das Angebot in einem neuen Tab") rief der Agent nie browser.mjs auf: erst das nicht existierende iris-browser-CLI, dann fand er ~/.hermes/tools/agent-browser-0.26.0-darwin-arm64 — den eingebauten Hermes-Browser — und trieb ihn: eigene Suche öffnen, tab new auf den PNY-Link, Listing lesen. Das t2 existierte also — in einem separaten headlessen Chrome mit Temp-Profil, für den Nutzer unsichtbar. Im Panel-Browser (Plugin) stand t1 die ganze Zeit auf /sch/.
  2. Turn 3 („Es ist kein Tab geöffnet worden"): „diesmal über einen echten Klick" — null Tool-Aufrufe, reine Halluzination.

Ursachen

  • disables_hermes_toolsets (0.4.1) meldet nur die Tool-Registrierung ab; das Binary bleibt im Hermes-Tool-Store und ist per Terminal erreichbar. Hermes-Startup prüft nur „Ordner existiert" (pm/install.py: „startup keeps its cheap facts check") → ein Umbenennen des Binaries bleibt haften, kein Re-Download.
  • Der skill_view-Dedup (Turn 2: content_returned: false) plus kleines lokales Modell ließ die Aufruf-Formel verloren gehen.
  • Latent: humanClickLoc (0.5.0) macht kein scrollIntoViewIfNeeded (0.4.x loc.click() scrollte automatisch) → Klicks auf Elemente unterhalb des Folds gehen ins Leere.

Umsetzung (0.5.1)

  • hooks/guard-builtin-browser.sh (neu): benennt die agent-browser-Binaries im Tool-Store um (…disabled-by-iris-browser), disable idempotent, enable stellt wieder her; post_install ruft disable auf, pre_uninstall (neu) enable.
  • system_prompt.md + SKILL.md: genau ein Browser, agent-browser/~/.hermes/tools/* nie; Tab-Zustände erst melden, wenn --tabs es zeigt.
  • humanClickLoc: scrollIntoViewIfNeeded vor boundingBox (0.4.x-Verhalten zurück).
  • Smoke-Tests: Guard (temporärer Store) + Klick auf unterhalb-des-Folds-Element.

Geprüft: Befund per state.db/agent.log/ps (Schatten-Chrom lief noch, PID 10322, beendet); Guard idempotent über Smoke; Repro --new-tab + Klick im warmen Profil (Chat diag-202, danach geschlossen).
Nicht geprüft: Langzeit-Effekt des Binary-Guards gegen Hermes-Updates, die Turn-3-Halluzination (Modellsache, nur System-Prompt-Dämpfung).

## Befund (22.10., Chat „eBay-Suche: RTX 4090") Nutzer: „Es wird kein neuer Tab geöffnet." Rekonstruktion aus `state.db` (73 Messages) + `agent.log`: 1. Turn 2 („Öffne das Angebot in einem neuen Tab") rief der Agent **nie `browser.mjs`** auf: erst das nicht existierende `iris-browser`-CLI, dann fand er `~/.hermes/tools/agent-browser-0.26.0-darwin-arm64` — den **eingebauten Hermes-Browser** — und trieb ihn: eigene Suche öffnen, `tab new` auf den PNY-Link, Listing lesen. Das t2 existierte also — in einem separaten **headlessen** Chrome mit Temp-Profil, für den Nutzer unsichtbar. Im Panel-Browser (Plugin) stand t1 die ganze Zeit auf `/sch/`. 2. Turn 3 („Es ist kein Tab geöffnet worden"): „diesmal über einen echten Klick" — **null Tool-Aufrufe**, reine Halluzination. ## Ursachen - `disables_hermes_toolsets` (0.4.1) meldet nur die Tool-Registrierung ab; das Binary bleibt im Hermes-Tool-Store und ist per Terminal erreichbar. Hermes-Startup prüft nur „Ordner existiert" (pm/install.py: „startup keeps its cheap facts check") → ein Umbenennen des Binaries bleibt haften, kein Re-Download. - Der `skill_view`-Dedup (Turn 2: `content_returned: false`) plus kleines lokales Modell ließ die Aufruf-Formel verloren gehen. - Latent: `humanClickLoc` (0.5.0) macht kein `scrollIntoViewIfNeeded` (0.4.x `loc.click()` scrollte automatisch) → Klicks auf Elemente unterhalb des Folds gehen ins Leere. ## Umsetzung (0.5.1) - `hooks/guard-builtin-browser.sh` (neu): benennt die `agent-browser`-Binaries im Tool-Store um (`…disabled-by-iris-browser`), `disable` idempotent, `enable` stellt wieder her; `post_install` ruft `disable` auf, `pre_uninstall` (neu) `enable`. - `system_prompt.md` + `SKILL.md`: genau ein Browser, `agent-browser`/`~/.hermes/tools/*` nie; Tab-Zustände erst melden, wenn `--tabs` es zeigt. - `humanClickLoc`: `scrollIntoViewIfNeeded` vor `boundingBox` (0.4.x-Verhalten zurück). - Smoke-Tests: Guard (temporärer Store) + Klick auf unterhalb-des-Folds-Element. Geprüft: Befund per `state.db`/`agent.log`/`ps` (Schatten-Chrom lief noch, PID 10322, beendet); Guard idempotent über Smoke; Repro `--new-tab` + Klick im warmen Profil (Chat diag-202, danach geschlossen). Nicht geprüft: Langzeit-Effekt des Binary-Guards gegen Hermes-Updates, die Turn-3-Halluzination (Modellsache, nur System-Prompt-Dämpfung).
Author
Owner

PR #220 gemergt: fix(browser): Schatten-Browser: Binary-Guard, Folds-Klick, Ein-Browser-Regel (0.5.1) (#218)
#220

Commits:

  • test(browser): Smoke für Folds-Klick und Binary-Guard; Doku 0.5.1
  • fix(browser): Klicks scrollen ins Viewport; Ein-Browser-Regel im Prompt
  • fix(browser): Binary-Guard für eingebauten agent-browser

Stand

Befund (rekonstruiert aus state.db + agent.log): Der Agent des Chats „eBay-Suche: RTX 4090" hat im zweiten Turn nie browser.mjs aufgerufen, sondern den eingebauten Hermes-Browser (~/.hermes/tools/agent-browser-*/bin/) getrieben — dessen Toolset ist zwar abgemeldet, das Binary blieb im Tool-Store und war per Terminal erreichbar. Das t2 und das PNY-Listing existierten dort — in einem headlessen Chrome mit Temp-Profil (lief bis zu diesem Stand, PID 10322, jetzt beendet). Im Plugin-Browser (Seitenpanel) geschah nichts. Im dritten Turn („Es ist kein Tab geöffnet worden") meldete der Agent „diesmal über einen echten Klick" bei null Tool-Aufrufen (Halluzination, Modell swift-1.5-iq3_xxs).

Geändert (0.5.1):

  • hooks/guard-builtin-browser.sh (neu): benennt die agent-browser-Binaries im Hermes-Tool-Store um (…disabled-by-iris-browser); disable idempotent, enable stellt wieder her, ohne Store no-op. post_install ruft disable auf, pre_uninstall (neu, Manifest ergänzt) enable. Hermes führt beim Start nur den Existenzcheck aus, kein Byte-Vergleich — das Umbenennen bleibt haften, kein Re-Download. Das .js-Wrapper-Skript wird nicht angerührt; es startet das native Binary und scheitert damit eigenständig.
  • human.mjs: scrollIntoViewIfNeeded vor boundingBox in humanClickLoc (0.4.x-Verhalten zurück; ohne es gingen Klicks auf Elemente unterhalb des Folds ins Leere und meldeten ok).
  • SKILL.md + system_prompt.md: Ein-Browser-Regel (niemals agent-browser / ~/.hermes/tools/*) + --tabs-Verifikation vor Tab-Berichten.
  • tests/smoke.sh: Klick auf Deep-Link unterhalb des Folds (4000-px-Spacer), Guard gegen temporären Store (disable/idempotent/enable/no-op), Cleanup wartet auf den Chromium-Exit statt zu rennen. Dazu store/changelog.md, PLAN.md (Sektion + drei Lessons Learned), plugin.json (0.5.1).

Geprüft: Befundskette (73 Messages in state.db, Tool-Aufrufe, agent.log, ps — Schatten-Chrom war nachweislich am Leben); kompletter Smoke-Test grün (exit 0, inkl. neuer Guard- und Folds-Checks); Guard-Glob gegen den echten Store-Layout gelesen; --new-tab + Klick im warmen Profil in einem separaten Chat reproduziert (diag-202, danach geschlossen; die diag-Tabs sind weg, der Schatten-Chrom beendet).

Nicht geprüft: Ob ein Hermes-Upgrade das Tool explizit neu publiziert und damit das Binary zurückbrächte (in dem Fall würde der Guard beim nächsten Plugin-Install/Update erneut laufen — das Risiko bleibt, ist aber seltener und lauter als heute); die Turn-3-Halluzination (Modellsache, nur per System-Prompt gedämpft); die eBay-Verhaltens-Schicht im Langzeitbetrieb (separate Front, #202).

Offen: Das installierte Plugin auf 0.5.1 aktualisieren — der Guard läuft erst beim Installieren. Danach im Alltag ein eBay-Chat (der Fall, der den Vorfall auslöste). Issue bleibt status/zu-testen, bis der Nutzer es gegengeprüft hat.

PR #220 gemergt: fix(browser): Schatten-Browser: Binary-Guard, Folds-Klick, Ein-Browser-Regel (0.5.1) (#218) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/220 Commits: - test(browser): Smoke für Folds-Klick und Binary-Guard; Doku 0.5.1 - fix(browser): Klicks scrollen ins Viewport; Ein-Browser-Regel im Prompt - fix(browser): Binary-Guard für eingebauten agent-browser --- ## Stand **Befund** (rekonstruiert aus `state.db` + `agent.log`): Der Agent des Chats „eBay-Suche: RTX 4090" hat im zweiten Turn **nie `browser.mjs`** aufgerufen, sondern den eingebauten Hermes-Browser (`~/.hermes/tools/agent-browser-*/bin/`) getrieben — dessen Toolset ist zwar abgemeldet, das Binary blieb im Tool-Store und war per Terminal erreichbar. Das t2 und das PNY-Listing existierten dort — in einem headlessen Chrome mit Temp-Profil (lief bis zu diesem Stand, PID 10322, jetzt beendet). Im Plugin-Browser (Seitenpanel) geschah nichts. Im dritten Turn („Es ist kein Tab geöffnet worden") meldete der Agent „diesmal über einen echten Klick" bei **null Tool-Aufrufen** (Halluzination, Modell `swift-1.5-iq3_xxs`). **Geändert** (0.5.1): - `hooks/guard-builtin-browser.sh` (neu): benennt die agent-browser-Binaries im Hermes-Tool-Store um (`…disabled-by-iris-browser`); `disable` idempotent, `enable` stellt wieder her, ohne Store no-op. `post_install` ruft `disable` auf, `pre_uninstall` (neu, Manifest ergänzt) `enable`. Hermes führt beim Start nur den Existenzcheck aus, kein Byte-Vergleich — das Umbenennen bleibt haften, kein Re-Download. Das `.js`-Wrapper-Skript wird nicht angerührt; es startet das native Binary und scheitert damit eigenständig. - `human.mjs`: `scrollIntoViewIfNeeded` vor `boundingBox` in `humanClickLoc` (0.4.x-Verhalten zurück; ohne es gingen Klicks auf Elemente unterhalb des Folds ins Leere und meldeten ok). - `SKILL.md` + `system_prompt.md`: Ein-Browser-Regel (niemals `agent-browser` / `~/.hermes/tools/*`) + `--tabs`-Verifikation vor Tab-Berichten. - `tests/smoke.sh`: Klick auf Deep-Link unterhalb des Folds (4000-px-Spacer), Guard gegen temporären Store (disable/idempotent/enable/no-op), Cleanup wartet auf den Chromium-Exit statt zu rennen. Dazu `store/changelog.md`, `PLAN.md` (Sektion + drei Lessons Learned), `plugin.json` (0.5.1). **Geprüft:** Befundskette (73 Messages in `state.db`, Tool-Aufrufe, agent.log, `ps` — Schatten-Chrom war nachweislich am Leben); kompletter Smoke-Test grün (exit 0, inkl. neuer Guard- und Folds-Checks); Guard-Glob gegen den echten Store-Layout gelesen; `--new-tab` + Klick im warmen Profil in einem separaten Chat reproduziert (diag-202, danach geschlossen; die diag-Tabs sind weg, der Schatten-Chrom beendet). **Nicht geprüft:** Ob ein Hermes-Upgrade das Tool explizit neu publiziert und damit das Binary zurückbrächte (in dem Fall würde der Guard beim nächsten Plugin-Install/Update erneut laufen — das Risiko bleibt, ist aber seltener und lauter als heute); die Turn-3-Halluzination (Modellsache, nur per System-Prompt gedämpft); die eBay-Verhaltens-Schicht im Langzeitbetrieb (separate Front, #202). **Offen:** Das installierte Plugin auf 0.5.1 aktualisieren — der Guard läuft erst beim Installieren. Danach im Alltag ein eBay-Chat (der Fall, der den Vorfall auslöste). Issue bleibt `status/zu-testen`, bis der Nutzer es gegengeprüft hat.
Author
Owner

PR #223 gemergt: fix(browser): Binary-Guard fehlte im Paket — alle Hooks packen, laute Warnung (0.5.2) (#218)
#223

Commits:

  • fix(browser): Guard und pre_uninstall kommen ins Paket (0.5.2)

Stand (0.5.2 — Paket-Fehler)

Befund (22.10., zweiter Vorfall, Chat 18:00):

  1. 0.5.1 war installiert (17:44) — aber der Guard lief nie: build-irisplugin.sh kopierte nur hooks/post_install.sh (hart verdrahtet), guard-builtin-browser.sh und pre_uninstall.sh blieben aus dem Paket; || echo WARN schluckte den Fehlschlag. Binary im Tool-Store unangetastet, zusätzlicher überlebender agent-browser-Wrapper-Prozess (PID 10318, aus dem Vormittags-Vorfall — jetzt beendet).
  2. Der 18:00-Vorfall selbst nahm diesen Pfad nicht: Turn 2 („Öffne das GIGABYTE Angebot in einem neuen Tab") lief mit null Tool-Aufrufen — reine Halluzination (Beleg: state.db, keine Tool-Zeile zwischen 17:59:59 und 18:00:11; Daemon-Zustand: 1 Tab, next: 2). Der Schatten-Browser war diesmal irrelevant; entscheidend ist das Modell, das handeln sollte und nur sprach.

Geändert (0.5.2): build-irisplugin.sh kopiert jetzt alle hooks/*.sh (Build-Test: Paket enthält alle drei Dateien); post_install meldet einen nicht neutralisierten agent-browser mit deutlicher Fehlerzeile. Inhaltlich identisch zu 0.5.1.

Geprüft: Build gegen /tmp, Paketinhalt per unzip -l (alle Hooks drin); Paketinhalt von 0.5.1 nachträglich geprüft (nur post_install.sh — der Fehler bestätigt).
Nicht geprüft: Installation von 0.5.2 auf dem Mac (wartet auf Veröffentlichung + Update); Modellverhalten bei Tab-Aufträgen (liegt nicht am Plugin; System-Prompt-Regel besteht, Modell ignorierte sie).

Offen: 0.5.2 veröffentlichen und auf dem Mac aktualisieren; evtl. einmaliges Umbenennen des Binaries als Sofort-Schutz (Nutzer-Entscheidung); Gegenmaßnahmen zur Halluzination (größeres Modell für solche Jobs und/oder Hermes-seitige Verifikation) sind ein separates Thema.

PR #223 gemergt: fix(browser): Binary-Guard fehlte im Paket — alle Hooks packen, laute Warnung (0.5.2) (#218) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/223 Commits: - fix(browser): Guard und pre_uninstall kommen ins Paket (0.5.2) --- ## Stand (0.5.2 — Paket-Fehler) **Befund (22.10., zweiter Vorfall, Chat 18:00):** 1. 0.5.1 war installiert (17:44) — aber der Guard lief nie: `build-irisplugin.sh` kopierte nur `hooks/post_install.sh` (hart verdrahtet), `guard-builtin-browser.sh` und `pre_uninstall.sh` blieben aus dem Paket; `|| echo WARN` schluckte den Fehlschlag. Binary im Tool-Store unangetastet, zusätzlicher überlebender agent-browser-Wrapper-Prozess (PID 10318, aus dem Vormittags-Vorfall — jetzt beendet). 2. Der 18:00-Vorfall selbst nahm diesen Pfad **nicht**: Turn 2 („Öffne das GIGABYTE Angebot in einem neuen Tab") lief mit null Tool-Aufrufen — reine Halluzination (Beleg: `state.db`, keine Tool-Zeile zwischen 17:59:59 und 18:00:11; Daemon-Zustand: 1 Tab, `next: 2`). Der Schatten-Browser war diesmal irrelevant; entscheidend ist das Modell, das handeln *sollte* und nur sprach. **Geändert (0.5.2):** `build-irisplugin.sh` kopiert jetzt alle `hooks/*.sh` (Build-Test: Paket enthält alle drei Dateien); `post_install` meldet einen nicht neutralisierten agent-browser mit deutlicher Fehlerzeile. Inhaltlich identisch zu 0.5.1. **Geprüft:** Build gegen `/tmp`, Paketinhalt per `unzip -l` (alle Hooks drin); Paketinhalt von 0.5.1 nachträglich geprüft (nur `post_install.sh` — der Fehler bestätigt). **Nicht geprüft:** Installation von 0.5.2 auf dem Mac (wartet auf Veröffentlichung + Update); Modellverhalten bei Tab-Aufträgen (liegt nicht am Plugin; System-Prompt-Regel besteht, Modell ignorierte sie). **Offen:** 0.5.2 veröffentlichen und auf dem Mac aktualisieren; evtl. einmaliges Umbenennen des Binaries als Sofort-Schutz (Nutzer-Entscheidung); Gegenmaßnahmen zur Halluzination (größeres Modell für solche Jobs und/oder Hermes-seitige Verifikation) sind ein separates Thema.
alf closed this issue 2026-10-23 19:47:54 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/iris-plugins#218
No description provided.