New self-hosted admin trigger board: board-agent.nix wires up a small Python worker/trigger pair behind an internal Traefik route, backed by a static board.html frontend, with AdGuard rewrite for the new internal hostname. Intent doc captures the design rationale. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CAtPBFEBx3C2QJy6sKGyqd
6.8 KiB
6.8 KiB
Intent: Kanban-Board mit Pilot-Übergang zum Admin-Agenten
Ziel
Ein eigenständiges, ausschließlich auf blunix laufendes Kanban-Board, das
den Intent-Lifecycle (Planner-Dokumente aus docs/intent/*.md)
visualisiert und für einen einzelnen Phasenübergang aktiv steuerbar ist:
Wird eine Intent-Karte von "Geplant" nach "In Umsetzung" verschoben,
löst das Board direkt einen echten Auftrag an den Admin-Agenten aus
(headless codex exec mit agents/admin.md als Rolle und dem
Intent-Dokument als Auftragstext) — kein manuelles Abtippen im Chat
mehr für diesen einen Übergang.
Umfang
- Neuer, eigenständiger Stack ausschließlich auf blunix (kein Bezug
zum bestehenden
dashboard-Repo/pinix, keine Änderung daran). - Board zeigt Spalten entlang des bestehenden Rollen-Workflows: Idee/Backlog → Geplant (Intent fertig) → In Umsetzung → Review → Deployed.
- Aktiv steuerbar ist nur der eine Pilot-Übergang Geplant → In Umsetzung. Alle anderen Spaltenwechsel sind zunächst reine Anzeige/manuelle Einordnung ohne Automatisierung.
- Zugriff Tailnet-only über blunix' internen Traefik-Entrypoint, kein öffentlicher Zugriff.
- Der Agenten-Aufruf läuft headless (
codex exec, kein interaktives Herdr-Pane) und nutzt das bestehende Abo-Login (CODEX_HOMEaus vorhandenemauth.json, keinANTHROPIC_API_KEY/roher API-Key) — Kosten sollen aus dem Abo-Kontingent laufen, nicht als separates Pay-per-Token abgerechnet werden. - Lauf-Ausgabe muss nachvollziehbar sein: mindestens über
journalctldes auslösenden Dienstes, optional zusätzlich als kurze Statusmeldung im bestehenden XMPP-Raumupdate@muc.0ff.space.
Unverbindlicher technischer Anhaltspunkt (keine Vorwegnahme der Umsetzung)
Diskutierter Mechanismus, als Orientierung für die Umsetzung, nicht als
bindende Vorgabe — folgt bewusst dem bereits produktiv laufenden Muster
von hosts/blunix/localServices/agent-codex/:
- Board-Frontend sendet bei Drag "Geplant → In Umsetzung" einen HTTP-Request an einen kleinen Trigger-Endpunkt auf blunix.
- Der Endpunkt prüft den aktuellen Phasen-Status (verhindert
Doppel-Trigger), setzt ihn auf "In Umsetzung" und legt eine
Job-Datei in einem Queue-Verzeichnis ab (z. B.
/var/lib/board-agent/inbox/<slug>-<zeitstempel>.json), analog zuAGENT_QUEUE_DIR/inbox/*.jsonbeiagent-codex. - Ein
systemd.paths-Unit beobachtet dieses Verzeichnis und startet bei neuer Datei einen Oneshot-Service (analogagent-codex-worker.path/.service). - Der Oneshot-Service kopiert/nutzt das bestehende Abo-Login
(
prepareCodexHome-Muster) und ruftcodex exec --sandbox workspace-write -C agents/ --add-dir /home/drone/nixos-config ...mitagents/admin.mdals Rolle auf, Intent-Inhalt als Auftrag. - Job-Datei wandert nach Abschluss von
inbox/nachprocessing/unddone//failed/, wie beiagent-codexbereits etabliert. - Ausgabe landet in
journalctl, optional zusätzlich als kurze Meldung anupdate@muc.0ff.space. - Die eigentliche Code-/Konfigurationsänderung wird nicht automatisch committet oder deployt — das bleibt an eine ausdrückliche, separate Freigabe gebunden, unverändert gegenüber der heutigen Admin-Rolle.
Explizit ausgeschlossen
- Kein Aufbau auf/Integration mit Vikunja (bewusst separat, nicht dessen Kanban-Ansicht/API genutzt).
- Keine Automatisierung der Übergänge In Umsetzung → Review → Deployed in diesem Vorhaben.
- Keine Änderung an
agents/admin.md,agents/catalog.jsonoder Rollen-Settings-Dateien als Teil dieses Intents (falls die Umsetzung das doch braucht, ist das eine separate Entscheidung der Umsetzung, nicht hier vorweggenommen). - Keine Änderung am bestehenden
dashboard-Repo/pinix-Stack. - Kein öffentlicher Zugriff auf das Board.
- Keine automatische Aktivierung/Deployment von Änderungen, die der Admin-Agent im Zuge des Pilot-Laufs vornimmt.
- Kein Einsatz eines rohen API-Keys (
ANTHROPIC_API_KEYo. Ä.) für den Agenten-Aufruf.
Annahmen
- Herdr läuft aktiv auf der dauerhaften Admin-Session auf blunix
(
HERDR_ENV=1) — für diesen Piloten aber irrelevant, da der Agenten-Aufruf bewusst nicht über Herdr läuft (siehe Entscheidung unten), sondern headless direkt percodex exec. - Zugriff Tailnet-only via blunix-Traefik-internal, analog zum bestehenden Muster interner Dienste.
- Der Backend-/Worker-Mechanismus liest
docs/intent/*.mdaus dem bestehendennixos-config-Checkout auf blunix (kein separates Repo für Intent-Inhalte). - Headless-Aufruf über bestehendes Abo-Login (wie bei
agent-codex) zieht gegen das Abo-Nutzungskontingent, nicht als separates Pay-per-Token — Stand der Recherche zum Zeitpunkt dieses Dokuments; ein bekannter, nicht abschließend geklärter Bugreport (anthropics/claude-code#43333) beschreibt Fälle, in denen OAuth/Abo-Login trotzdem als API-Nutzung abgerechnet wurde.
Offene Risiken / zu klärende Punkte (für die Umsetzung, nicht hier entschieden)
- Vor Produktivschaltung: ein einzelner echter Testaufruf, um zu verifizieren, dass der headless-Aufruf tatsächlich gegen das Abo-Kontingent und nicht gegen echtes API-Guthaben läuft (wegen des oben genannten Bugreports) — gleiches Vorgehen wie beim früheren XMPP-Agent-Relay-Vorhaben.
- Wo der Phasen-Status pro Intent gespeichert wird (Frontmatter in der Intent-Datei vs. separate State-Datei/DB) — bewusst offengelassen.
- Wer im Board die Aktion auslösen darf (nur Owner vs. jede Person mit Tailnet-Zugriff) — Zugriffsschutz noch nicht spezifiziert.
- Das Vorgehen umgeht für den Piloten bewusst die in
agents/admin.mdbeschriebene Regel, dass der Orchestrator die einzige Dialogschnittstelle zu Spezialisten ist — explizit benannte Abweichung, keine stille Umgehung. Ob/wie das dauerhaft mit der Rollen-Architektur vereinbart wird, ist nicht Teil dieses Intents. - Exaktes Job-/Queue-Schema, Locking bei parallelen Triggern,
Fehlerbehandlung bei einem abstürzenden/unterbrochenen Lauf (z. B.
durch einen Deploy, der den Worker-Dienst neu lädt) — Sache der
Umsetzung, analog zu den bereits gelösten Fällen in
agent-codex.
Erfolgskriterien
- Eine fertige Intent-Karte lässt sich im Board von "Geplant" nach "In Umsetzung" ziehen.
- Dieses Verschieben löst nachweisbar einen tatsächlichen, headless
laufenden Auftrag an den Admin-Agenten mit dem Intent-Inhalt als
Prompt aus — verifizierbar über
journalctldes Worker-Dienstes. - Der Aufruf läuft nachweislich über das Abo-Kontingent, nicht über separates Pay-per-Token (verifiziert durch den Testaufruf aus den offenen Risiken oben).
- Board läuft ausschließlich Tailnet-erreichbar, kein öffentlicher Zugriff.
- Keine bestehende Funktionalität (Planner-Workflow per Chat,
dashboard-Repo, Vikunja,agent-codex) wird durch dieses Vorhaben verändert oder beeinträchtigt.