N7 · Maschinenraum · Schritt 1

Was herdr richtig macht —
und was NEXUS davon übernimmt.

herdr ist ein Terminal-Multiplexer für KI-Agenten (Rust, ~330 000 Zeilen). Ich habe den Stand ee5bfb5 gelesen: Datenmodell, Zustandserkennung, Rollup, Socket-API. Übernommen wird der Aufbau, nicht der Code.

Lizenz: anders als im Auftrag

Der Auftrag nennt AGPL-3.0. Das Repo steht aber unter Apache-2.0 (LICENSE, Cargo.toml, README). Apache erlaubt sogar Code-Übernahme mit Namensnennung, ohne Offenlegungspflicht. Wir bauen trotzdem neu in Swift und kopieren keine Zeile. Damit gibt es keine Lizenzfrage.

1 · Datenmodell

Workspace (Projekt, Name aus Ordner/Git)
 └ Tab (Ansicht mit Layout)
    └ Pane (Fläche, zeigt auf ein Terminal, trägt „gesehen“-Flag)
       └ Terminal (PTY + erkannter Agent + Zustand)

Für NEXUS: Workspace = Zuständigkeit (z7 Nova-Infrastruktur, Leonhardt …) aus dem Lagebild, Pane = Worker-Session (tmux auf Mini/MacBook). Tabs und Splits brauchen wir nicht. Jede Session sitzt eh in ihrem eigenen tmux.

2 · Zustandserkennung

blockiert: wartet auf dich fertig, ungesehen arbeitet bereit (gesehen) unbekannt / Shell
QuelleherdrNEXUS
Welcher Agent?Name des Vordergrund-Prozesses im PTY (auch hinter node …/codex)Lagebild kennt Rolle + Art je Session
Was tut er?22 Regel-Dateien (TOML), Claude allein 17 Regeln: Spinner im Fenstertitel, „esc to interrupt“ = arbeitet; Erlaubnis-Dialog = blockiert; leere Eingabebox = bereitLagebild misst schon arbeitet (Pane-Laufzeit) und wartet_auf_eingabe. Keine Doppel-Erkennung
Direkt gemeldetHooks in Claude/Codex melden per pane.report_agent an den Socketspäter möglich, heute nicht nötig

3 · Der Trick: „fertig“ ist kein eigener Zustand

herdr kennt nur bereit/arbeitet/blockiert. „Fertig“ ergibt sich aus arbeitet → bereit, während du nicht hingeschaut hast. Dann wird das Gesehen-Flag gelöscht. Erst Hinschauen setzt es zurück.

Rollup je Workspace = der dringendste Zustand gewinnt: blockiert 4 › fertig-ungesehen 3 › arbeitet 2 › bereit 1 › unbekannt 0. Ein fertiger Worker überholt also einen, der noch arbeitet. Genau so sortiert die Leiste links in NEXUS.

NEXUS: Diesen Gedächtnisteil (letzter Zustand + gesehen) speichert der Mac lokal unter ~/Library/Application Support/NEXUS…/maschinenraum.json. Kein Server.

4 · Socket-API

Unix-Socket herdr.sock, JSON pro Zeile. Ungefähr 100 Befehle in Familien: workspace.*, tab.*, pane.* (read, send_text, send_keys, wait_for_output …), agent.* (list, prompt, wait), dazu Ereignisse per events.subscribe (pane.agent_status_changed …).

NEXUS: Unsere Entsprechung gibt es schon: scripts/nexus-pult.py mit snapshot · read · send, dahinter lage.py und pult-talk (Mini per SSH). Neu kommt Handoff anfordern dazu.

5 · Was in NEXUS gebaut wird

Leiste links
Zuständigkeiten mit Farbe + dringendstem Zustand, darunter die Sessions. Klick = gesehen.
Rechts: echtes Terminal
Die vorhandene TerminalTileView hängt sich an die tmux-Session (MacBook lokal, Mini per SSH).
Umschalter „Pult-Ansicht“
Alle Sessions als Karten nebeneinander, horizontal durchwischen (← → oder Wischen), wie im Pult.
Handoff-Knopf
Bittet den Worker per pult-talk, jetzt seinen nova-handoff zu schreiben.

Quelle: github.com/ogulcancelik/herdr @ee5bfb5 · gelesen: src/workspace/aggregate.rs, src/detect/mod.rs + manifests/*.toml, src/app/actions.rs (seen-Regel), src/api/server.rs, src/integration/claude_settings.rs. Labor-Klon: MacBook ~/Studio/labor/2026-11-03_herdr-analyse/herdr