This repository has been archived on 2026-09-17. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
nixos-config/agents/design/herdr-self-close-entwurf.md
pijukka 55b692ea21 Planner darf sein eigenes Intent-Dokument selbst schreiben; Self-Close-Fix bestätigt
Auf Nutzerwunsch: planner (role-version 2.0.0, Major wegen geänderter
Vertrauensgrenze) darf bei COMPLETE genau eine Datei selbst anlegen —
docs/intent/<slug>.md — statt das Dokument nur als Text zu liefern und auf
den Orchestrator zum Ablegen zu warten. Erster Versuch nutzte Write(...)-
Regeln in den Claude-Settings, die von der Permission-Prüfung ignoriert
werden (nur Edit(path) gilt für dateischreibende Tools); korrigiert auf
Edit(docs/intent/*.md) ohne pauschalen Edit(**)-Deny (deny hätte sonst die
gezielte Freigabe überstimmt). Live mit echten claude --print-Läufen
gegengeprüft: Schreiben innerhalb docs/intent/ gelingt, außerhalb bleibt
blockiert.

Zusätzlich: Self-Close-E2E-Nachtest für planner (Claude-Runtime) nach dem
vorherigen Befehlsketten-Fix bestanden — Pfad ist jetzt live E2E bestätigt,
nicht mehr nur konfiguriert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011uSxdbo8zykSeH5WCMmbvp
2026-09-01 20:52:18 +02:00

7.4 KiB
Raw Permalink Blame History

Atomic Self-Close für Herdr-Spezialisten

Status: am 01.09.2026 auf blunix live getestet. Dieses Dokument hält die freigegebene Sicherheitsgrenze, die beiden Laufzeitpfade und die bestätigte Evidenz fest. Die frühere Empfehlung für ausschließlich orchestrator-getriebenes Ernten ist durch die Nutzerentscheidung für echtes Self-Close überholt.

Geltungsbereich

Self-Close gilt für die sichtbaren Rollen graphics, administrator, agent-manager und orga. Der Reviewer bleibt ausdrücklich ausgeschlossen: Seine Rolle ist read-only, seine Claude-Settings enthalten kein Self-Close-Recht und seine Pane wird bei Bedarf durch den Orchestrator geschlossen.

Nachträglich um planner erweitert (siehe agents/planner.md): gleicher Wrapper, gleiche drei Bedingungen, gleiche Claude-Allowlist-Struktur. Die oben beschriebene Codex-Live-Evidenz vom 01.09.2026 bezieht sich ausschließlich auf die vier ursprünglichen Rollen; für planner liegt kein eigener Codex-Test vor, dafür aber inzwischen ein erfolgreicher Claude-E2E-Test (siehe Abschnitt "Claude-Laufzeitpfad" unten) — für die anderen vier Rollen bleibt der Claude-Pfad weiterhin nur konfiguriert, nicht E2E-verifiziert.

Die Capability erlaubt ausschließlich das Schließen der eigenen Pane. Sie ist keine Freigabe, fremde Panes zu starten, zu fokussieren, zu ersetzen oder zu schließen. Insbesondere bleibt ein freier Aufruf von herdr pane close <pane-id> für Spezialisten verboten.

Gemeinsames Sicherheitsprimitive

Der Wrapper /etc/scripts/close-my-pane.sh ist auf blunix live. Er bezieht die Ziel-ID ausschließlich aus $HERDR_PANE_ID der aufrufenden Pane und ignoriert alle Argumente. Ein Test aus einer rohen Herdr-Shell bestätigte, dass er nur die eigene Pane schließt.

Vor jedem Aufruf müssen alle Bedingungen gleichzeitig erfüllt sein:

  1. Die letzte sichtbare Übergabe endet mit COMPLETE; es gibt keine offene Rückfrage und keinen BLOCKED: …-Zustand.
  2. Das vollständige Ergebnis steht vor dem Schließen lesbar im letzten Turn.
  3. Der Orchestrator hat das Ergebnis nachweislich gelesen und den Spezialisten ausdrücklich zum Self-Close freigegeben.

Fehlt eine Bedingung, bleibt der Spezialist idle. Der Wrapper wird nie als Teil einer Befehlskette und nie mit Argumenten aufgerufen. Das Schließen ist der unwiderrufliche letzte Schritt; Pane und Kontext sind danach nicht mehr verfügbar.

Codex-Laufzeitpfad (0.145)

Codex unter workspace-write blockiert den direkten Wrapper-Aufruf. Deshalb muss Codex als einzigen Befehl exakt /etc/scripts/close-my-pane.sh mit sandbox_permissions=require_escalated aufrufen. Shell-Präfixe, Argumente, Umleitungen oder verkettete Befehle gehören nicht zu diesem Pfad.

Beim bestätigten Test wurde die angebotene Prefix-Rule nativ über Option p gespeichert. Codex schrieb sie in ~/.codex/rules/default.rules; sie erlaubt genau den Wrapper außerhalb der Sandbox. Danach schloss das Testpane w5:pQ erfolgreich, während der Orchestrator bestehen blieb.

Für Codex 0.145 nicht wirksam waren separat bereitgestellte Rule-Dateien unter /etc/codex/rules sowie symlinked User-Rules. Sie dürfen deshalb weder als Voraussetzung noch als erfolgreiche Konfiguration dokumentiert werden. Die native Prefix-Rule ist Laufzeitkonfiguration außerhalb des Repositorys; der Rollentest prüft nur den dokumentierten Aufrufvertrag und setzt keine Datei im Home-Verzeichnis voraus.

Wiederherstellung nach Verlust der Prefix-Rule

~/.codex/rules/default.rules liegt außerhalb dieses Repositorys und wird von keiner Nix-Aktivierung erzeugt oder gesichert. Ein frisches Home-Verzeichnis (Neuaufsetzen von blunix, Fork, versehentliches Löschen) verliert die Regel kommentarlos — Codex fällt dann wieder auf das blockierte Verhalten unter workspace-write zurück, ohne Fehlermeldung im Rollenvertrag selbst. Erkennbar daran, dass ein sonst korrekt vorbereiteter Self-Close-Aufruf ohne sichtbaren Grund hängen bleibt oder eine Sandbox-Eskalationsabfrage auslöst, die vorher nicht kam.

Wiederherstellung: den Wrapper-Aufruf einmal regulär auslösen (Bedingungen aus dem Abschlussprotokoll oben erfüllt), die von Codex angebotene Prefix-Rule über Option p erneut bestätigen. Der erwartete Regelinhalt ist als deklarative Referenz in hosts/globalServices/herdr-self-close.nix unter /etc/codex/rules/herdr-self-close.rules hinterlegt — Codex 0.145 liest diese Datei nicht selbst (siehe oben), sie dient ausschließlich als Repo-Referenz, mit welchem exakten Wortlaut die interaktive Bestätigung übereinstimmen muss.

Claude-Laufzeitpfad

Claude ruft exakt Bash(/etc/scripts/close-my-pane.sh) auf. Die fünf rollenspezifischen Allowlist-Einträge sind vorhanden:

  • agents/claude-settings/administrator.json
  • agents/claude-settings/agent-manager.json
  • agents/claude-settings/grafiker.json
  • agents/claude-settings/orga.json
  • agents/claude-settings/planner.json

Jeder Claude-Start und jedes Resume muss weiterhin die katalogisierte Settings-Datei explizit per --settings laden. Ein nacktes Resume erbt die Rollen-Allowlist nicht zuverlässig.

Beim ersten Claude-E2E-Test der Rolle planner wurde nicht Bash generell gesperrt: Der abgelehnte Aufruf war eine Diagnose-Befehlskette (echo ...; echo ...; ls ...) statt eines Versuchs des erlaubten exakten Einzelbefehls. Bash war im selben Session-Verlauf zuvor mehrfach für andere Befehle nutzbar (Transkript-Zeilen 38–46 gegenüber 173–177 in /home/drone/.claude/projects/-home-drone-nixos-config/923d939a-07b7-4c58-8d7c-085a8f4017ea.jsonl). Der Planner schloss daraus voreilig auf einen generellen Lockout, statt den tatsächlich erlaubten Befehl zu versuchen.

Beobachtung/Hypothese zum Permission-Matching (nicht als verifizierter Plattform-Fakt): Die schmale Exact-Match-Bash-Regel lehnt offenbar jede Nicht-Exact-Nutzung desselben benannten Pfads ab, statt auf ein generisches Safe-Read-Verhalten zurückzufallen.

Nachtest bestanden (01.09.2026, Rolle planner, Testpane w5:pY): Mit dem korrigierten Rollenvertrag (nur der exakte Einzelbefehl, keine Vorab-Diagnose per Bash) erreichte planner COMPLETE und schloss nach Orchestrator-Freigabe erfolgreich selbst — die Pane verschwand sofort ohne erneute Ablehnung. Der Claude-Pfad ist damit für planner live E2E-verifiziert. Für Administrator, Agent-Manager, Grafiker und Orga steht ein eigener Claude-E2E-Lauf weiterhin aus; für diese vier bleibt der Pfad "konfiguriert, aber nicht live E2E-verifiziert".

Bestätigte Regressionen und Restgrenze

Die statischen Rollentests sichern:

  • Rollenheader und agents/catalog.json stimmen für die fünf Self-Close-Rollen überein.
  • Alle fünf Rollen nennen den exakten Codex-Aufruf einschließlich sandbox_permissions=require_escalated, sowie das Verbot von Befehlsketten/Vorab-Diagnosen für den Claude-Pfad.
  • Die fünf Claude-Allowlist-Einträge erlauben exakt den Wrapper, kein breites Bash(*) und kein freies Herdr-Pane-Recht.
  • Reviewer-Rolle und Reviewer-Settings bleiben frei von Self-Close.
  • Der Harness liest keine externen Home- oder System-Rule-Dateien.

Der offene Nachweis ist der Claude-E2E-Lauf für die verbleibenden vier Rollen (Administrator, Agent-Manager, Grafiker, Orga) — für planner liegt er inzwischen vor (siehe oben). Ein Nachweis erweitert keine Berechtigung und erfordert keine weitere NixOS-Aktivierung. Bis er für eine Rolle erfolgreich ausgeführt wurde, muss jede Dokumentation für diese Rolle zwischen „Allowlist vorhanden“ und „E2E bestätigt“ unterscheiden.