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
└ 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| Quelle | herdr | NEXUS |
|---|---|---|
| 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 = bereit | Lagebild misst schon arbeitet (Pane-Laufzeit) und wartet_auf_eingabe. Keine Doppel-Erkennung |
| Direkt gemeldet | Hooks in Claude/Codex melden per pane.report_agent an den Socket | spä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-Socketherdr.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
Zuständigkeiten mit Farbe + dringendstem Zustand, darunter die Sessions. Klick = gesehen.
Die vorhandene TerminalTileView hängt sich an die tmux-Session (MacBook lokal, Mini per SSH).
Alle Sessions als Karten nebeneinander, horizontal durchwischen (← → oder Wischen), wie im Pult.
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