Jeder Fehler ist eine Information. Nie zweimal denselben Fehler machen.
Workflow: nanoclaw/workflows/selbstverbesserung
- Was passiert: SSH-MCP
docker ps auf vm-610 als claude-agent gibt permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock zurück. Mit sudo docker ps funktioniert alles.
- Warum:
claude-agent ist auf vm-610 nicht in der docker-Gruppe. Nur root und Mitglieder der docker-Gruppe haben direkten Socket-Zugriff.
- Betrifft: Den aktiven
docker-check Skill — vm-610 Container-Status wird nicht korrekt angezeigt. ssh_execute_multi mit docker ps liefert auf vm-610 immer einen Fehler statt Container-Liste.
- Gelernt:
claude-agent hat auf vm-600 docker-Gruppe (docker ps funktioniert direkt), auf vm-610 nicht. Inkonsistenz zwischen den VMs!
- Fix:
sudo usermod -aG docker claude-agent auf vm-610, dann Session neu starten. Marcel muss das ausführen.
- Workaround bis dahin:
sudo docker ps in SSH-Befehlen auf vm-610.
- Aktion: Marcel via Telegram informieren. docker-check Skill muss für vm-610
sudo verwenden.
- Was passiert: Telegram-Buttons in Skill-Approval-Nachrichten sind nach einem Container-Neustart tot — Klicks lösen keine Aktion mehr aus.
- Warum: Telegram Inline-Keyboard-Buttons senden beim Klick eine
callback_query mit einer callback_data ID. Der Handler für diese Callbacks lebt nur im laufenden Prozess. Nach einem Neustart ist der Handler weg — Telegram bekommt keine Antwort, der Button „dreht sich" und schlägt still fehl.
- Gelernt: Ephemere Callback-Handler sind nicht restart-safe. Alle genehmigungspflichtigen Zustände müssen persistent gespeichert werden.
- Lösungsoptionen:
- Pending-Skills-Rescan nach Neustart — beim Container-Start alle Dateien in
pending-skills/ prüfen und für jeden ungenehmigten Skill neue Approval-Buttons senden (Topic 8). Einfach, sofort umsetzbar.
- Approval via Text-Befehl —
/approve <skill-name> statt Buttons. Kein Callback-Handler nötig, restart-safe by design.
- State in WikiJS — pending approvals in WikiJS speichern, nach Neustart wiederherstellen und Buttons neu senden.
- Empfehlung: Option 1 + 2 kombinieren: Buttons für UX, Text-Fallback für Robustheit. Beim Start einmalig rescan + re-post.
- Aktion: In TODO als Verbesserung eingetragen.
- Was passiert: 805 Orphan-Snapshots konnten nicht gelöscht werden (HTTP 403). Token
agent@pve!automation hat kein Datastore.Allocate-Recht auf Storage local-Backup-Server.
- Warum: PVE-Token-Rechte wurden für VM-Operationen erweitert (VM.Allocate, Sys.Modify), aber nicht für PBS-Storage-Zugriff.
- Gelernt: PBS-Storage-Verwaltung via PVE-API braucht explizit
Datastore.Allocate auf dem jeweiligen Storage.
- Aktion: Builder informiert — Token-Erweiterung nötig.
- Was passiert:
/opt/docker/librechat/docker-compose.yml gehört User claude, Gruppe claude. claude-agent ist nicht in Gruppe claude → kein Schreibrecht.
- Warum: vm-610 hat zwei User:
claude (für Docker-Compose-Dateien) und claude-agent (für NanoClaw SSH-Zugang). Gruppen-Zuweisung fehlt.
- Gelernt: Vor Datei-Operationen via SSH immer Eigentümer und Gruppen prüfen.
- Aktion: Builder informiert —
usermod -aG claude claude-agent auf vm-610 nötig.
- Was passiert: rag_api wurde in Session 13 gestoppt (
docker stop), aber Restart Policy blieb auf always. Container startete automatisch neu und crashte weiter (3h Crash-Loop nach dem Stop).
- Warum:
docker stop stoppt nur den aktuell laufenden Container, ändert nicht die Restart Policy.
- Gelernt: Bei crashenden Containern immer ZUERST Restart Policy deaktivieren:
docker update --restart=no CONTAINER && docker stop CONTAINER. Sonst startet er beim nächsten Daemon-Start oder nach kurzer Zeit wieder.
- Aktion: rag_api dauerhaft gestoppt (restart=no, status=exited).
- Was passiert: luckynuc.de Cert läuft am 02.04.2026 ab (11 Tage). Zoraxy hat es nicht automatisch erneuert obwohl auth.luckynuc.de und netbird.luckynuc.de Anfang März erneuert wurden.
- Warum: Unklar — möglicherweise ACME-Config für diese Domain separat verwaltet oder Zoraxy-Bug.
- Gelernt: SSL-Zertifikate brauchen aktives Monitoring. „Auto-Renewal" ist nicht garantiert.
- Aktion: Marcel via Telegram benachrichtigt. Daily SSL-Check-Cron eingerichtet. WikiJS SSL-Seite aktualisiert.
- Was passiert: In Phase 2a Forensik-Bericht schrieb ich „PVE-Hetzner ist massiv veraltet" und meinte dabei implizit den Home-Proxmox (N100). Marcel korrigierte: PVE-Hetzner (10.0.0.50) ist mein eigener Host. PVE-Home (10.0.16.2) ist sein Heim-Hypervisor.
- Warum: Ich hatte die zwei Proxmox-Instanzen nicht klar getrennt.
- Gelernt: Es gibt ZWEI Proxmox-Instanzen: PVE-Hetzner (10.0.0.50, mein Host) und PVE-Home (10.0.16.2, bei Marcel zuhause). Nie verwechseln.
- Aktion: Phase 2a korrigiert.
- Was passiert: Gleiche Warnung 10x/Tag gesendet ohne State-Tracking.
- Gelernt: Jedes Monitoring mit Warnung braucht persistenten State (WikiJS).
- Aktion: Disk-Task auf WikiJS-State umgestellt.
Neue Einträge oben einfügen (neueste zuerst).