kundencenter/docs/night-agent.md

53 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Nacht-Agent
Arbeitet einmal pro Nacht (01:00 Uhr, `kc-night-agent.timer`) offene Plane-Tickets mit dem Label
**„agent“** ab, in den Status Backlog oder Todo. Ergebnis ist **immer** ein Branch auf der Forge
(`https://forge.flessinghome.de/flessinglabs/kundencenter`), bei Erfolg zusätzlich ein Pull
Request und Ticket-Status „In Review“. **Nichts wird automatisch gemergt oder live geschaltet** –
das bleibt bei der morgendlichen Durchsicht durch den Assistenten bzw. den Nutzer.
## Absicherung
Der Agent läuft als Betriebssystembenutzer `kundencenter` (systemd-Dienst `kc-night-agent.service`,
zusätzlich `ProtectSystem=strict`/`ProtectHome=true`, nur `/var/lib/kundencenter/night-agent`
beschreibbar). Dieser Benutzer:
- hat kein `sudo`, kann also kein `systemctl restart` und keine Dienste anfassen,
- kann `/etc/kundencenter/*` nicht lesen (root:root, chmod 600) – keine Geheimnisse erreichbar,
- arbeitet in einer **eigenen frischen Arbeitskopie** (`/var/lib/kundencenter/night-agent/work`),
niemals in `/srv/kundencenter` selbst.
Zusätzlich bekommt jeder Lauf feste Leitplanken als System-Prompt
(`ops/night-agent-guardrails.md`): ein Ticket = ein Branch, Tests müssen grün sein, keine
Vermutungen bei fehlenden Zugangsdaten, kein Aufräumen außerhalb des Tickets.
## Ablauf je Ticket
1. Plane-Status → „In Progress“, Kommentar mit Branch-Namen.
2. `claude -p` mit Ticket-Text + Leitplanken, Budget-Deckel (`--max-budget-usd`, Standard 3 $),
Zeit-Deckel (Standard 45 Min./Ticket, insgesamt max. 150 Min./Nacht).
3. Unabhängig vom Agenten prüft das Skript selbst: `pnpm install && pnpm build && pnpm typecheck
&& pnpm test` (Tests laufen automatisch gegen eine frische `kundencenter_test`, nie gegen die
produktive Datenbank).
4. Grün + Agent meldet `AGENT_STATUS: ok` → Branch pushen, Pull Request eröffnen, Plane-Status
„In Review“, Kommentar mit PR-Link.
5. Rot, oder Agent meldet `AGENT_STATUS: blocked`, oder keine Änderungen → Branch wird trotzdem
gepusht (nichts geht verloren), aber **kein** Pull Request; Kommentar in Plane beschreibt das
Problem. Status bleibt unverändert (kein automatisches „Wartet auf Input“, das entscheidet der
Mensch nach Lektüre des Kommentars).
## Einrichtung
- `/etc/kundencenter/night-agent.env` (chmod 600, root): `ANTHROPIC_API_KEY` (eigener, vom
interaktiven Zugang getrennter Schlüssel – siehe unten) sowie optionale Stellschrauben
(`NIGHT_AGENT_MAX_TICKETS`, `NIGHT_AGENT_BUDGET_USD`, `NIGHT_AGENT_DEADLINE_MIN`,
`NIGHT_AGENT_TICKET_TIMEOUT_MIN`).
- `/etc/kundencenter/forge.env`: `FORGE_URL`, `FORGE_REPO` (`flessinglabs/kundencenter`),
`FORGE_TOKEN`.
- Plane-Label „agent“ muss auf ein Ticket gesetzt sein, damit der Agent es aufgreifen darf.
- Aktivieren: `systemctl enable --now kc-night-agent.timer`. Einmalig von Hand testen:
`systemctl start kc-night-agent.service` (Logs: `journalctl -u kc-night-agent` sowie
`/var/lib/kundencenter/night-agent/logs/`).
## Bekannte Grenzen
- `kundencenter_test` wird bei jedem `pnpm test` neu angelegt (siehe `apps/api/test/global-setup.ts`)
– Agent-Lauf und ein manueller Testlauf am Tag sollten sich nicht überschneiden.
- Der Agent öffnet nie mehr als `NIGHT_AGENT_MAX_TICKETS` Pull Requests pro Nacht.
- Kein Zugriff auf Anbieter-Testzugänge (z. B. KeyHelp, KCS) – bei Tickets, die das brauchen,
meldet der Agent `blocked`.