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/hosts/pinix/localServices/finance-agent/README.md
pijukka ec6d335aff docs: prune completed Herdr task papers, retire session log
Deletes 13 docs/intent/ files whose tasks are already shipped (verified
against git log, not just their own "Status" headers) plus docs/log.md
and docs/notiz-hardware-architektur.md, whose content is superseded or
fully absorbed elsewhere. Two still-open intent docs
(forgejo-umzug-blunix, ipv6-mango-connector-poc) get folded into
docs/roadmap.md as visible open items instead of sitting unlinked in
docs/intent/.

Cross-checked every candidate against the rest of the repo first:
agents/design/herdr-self-close-entwurf.md and
docs/intent/sdlc-playbook-prozessergaenzungen.md are read at runtime by
agents/tests/roles.sh (would have broken the test suite), and
docs/hdm-klon-plan.md, docs/herdr-eskalation-review-entwurf.md,
docs/graphify-dashboard-plan.md and docs/intent/kanban-board-admin-trigger.md
are actively cited by live service code or explicitly declared to remain
elsewhere — all six were kept out of the original consolidation list for
that reason.

Cleaned up dangling docs/log.md references left behind in README.md,
operator-prompt.md, memory/INDEX.md, memory/project-context.md,
docs/repos.md, dex.nix, radicale.nix and finance-agent/README.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QYZodsX5a4ksWdrwKXSExX
2026-09-05 16:57:19 +02:00

3.6 KiB

finance-agent

XMPP-erreichbarer Codex-Agent für Finanzen (finance@bot.0ff.space), nach demselben Muster wie agent@/builder@bot.0ff.space auf blunix (hosts/blunix/localServices/agent-codex/), aber nur eine Rolle, nur für den Owner erreichbar, mit Schreibrecht auf ihr eigenes Arbeitsverzeichnis statt eines Git-Commit-Workflows.

Architektur

XMPP-Nachricht (Text oder ein von Monal hochgeladener Anhangs-Link) an
finance@bot.0ff.space
  → finance-xmpp-listener.service (go-sendxmpp --listen | listener.py)
  → Queue: /var/lib/finance-agent/inbox/*.json
  → systemd.path löst finance-agent-worker.service aus
      → codex exec --sandbox workspace-write -C /home/drone/finance-agent
        --add-dir /home/drone/finance-agent ...
      → Antwort per go-sendxmpp zurück an lukas@0ff.space

listener.py ist eine unveränderte Kopie von hosts/blunix/localServices/agent-codex/listener.py (rein umgebungsvariablengetrieben, keine Codex-Spezifika). worker.py ist eine abgespeckte Variante von agent-codex/worker.py: gleiche Queue-/Sitzungs-/Debounce-Mechanik, aber --sandbox workspace-write statt read-only und ohne Builder-Handoff/Git-Logik -- dieser Agent committet nichts, er pflegt einfach Dateien in seinem eigenen Arbeitsverzeichnis.

Was hier fehlt und noch von Hand ergänzt werden muss

Dieses Modul bereitet nur die Plattform-Seite vor (XMPP-Konto, Secret, Listener/Queue/Worker-Verdrahtung, Verzeichnis). Damit der Agent tatsächlich antwortet, fehlen noch zwei Dinge, die nicht deklarativ in diesem Repo passieren:

  1. codex login als drone auf pinix, einmalig, interaktiv -- erzeugt /home/drone/.codex/auth.json, von dort kopiert prepareCodexHome in ../finance-agent.nix es bei jedem Worker-Lauf in den isolierten CODEX_HOME der Rolle.
  2. /home/drone/finance-agent/finance-agent.md (plus alles sonst, was die Rolle braucht -- Rechnungen, CSVs, Vorlagen). Dieses Verzeichnis wird von der Nix-Aktivierung leer angelegt (systemd.tmpfiles.rules, 0700 drone); der eigentliche Inhalt ist Lukas' eigenes, lokal gebautes Repo, hierher kopiert (erledigt am 31.07.2026, per rsync von tnix). worker.pys FIXED_PROMPT weist Codex an, zuerst vollständig finance-agent.md in diesem Verzeichnis zu lesen -- das definiert Rolle, Aufgabenbereich und Grenzen des Agenten vollständig; hier wird nichts Fachliches vorausgesetzt oder dupliziert.

Bis beides erledigt ist, schlägt finance-agent-worker.service beim ersten Trigger fehl (fehlendes auth.json bzw. fehlendes finance-agent.md) -- erwartet, kein Fehler in diesem Modul. Der Listener funktioniert davon unabhängig schon vorher: Nachrichten landen zuverlässig in /var/lib/finance-agent/inbox/, auch wenn der Worker sie noch nicht verarbeiten kann.

Anhänge (Rechnungsscans)

Kein Sonderfall nötig: Monal lädt Dateien über Prosodys httpFileShare (upload.0ff.space) hoch und schickt den Link als normalen Nachrichtentext -- landet unverändert im body-Feld des Queue-Eintrags (mit einem .HEIC-Upload verifiziert). finance-agent.md kann Codex anweisen, in body enthaltene upload.0ff.space-Links herunterzuladen (curl steht im PATH des Workers) und auszuwerten.

Zugriff

AGENT_ALLOWED_SENDERS ist fest auf lukas@${domain} beschränkt (kein @domain-Wildcard wie bei agent@) -- bewusst, da es um private Finanzdaten geht. Keine MUC-Anbindung.

State-Verzeichnisse (/var/lib/finance-agent/)

Gleiches Muster wie agent-codex: inbox/, processing/, failed/, sessions/, senders/, codex-home/, home/. Kein builder-*-Äquivalent -- es gibt nur eine Rolle.