Enthält alle Pi-Orchestrator-Infrastrukturkomponenten: - bin/Sub* Skripte (SubAgenten, SubStatus, SubWatcher, SubConfirm) - extensions/ (arbeitsweise-guard, confirm-deletion, etc.) - memory/ (arbeitsweise, subagent-autocheck) - agent/AGENTS.md mit SubConfirm-Reaktionslogik - install.sh: deterministisches, idempotentes Setup für neue Maschinen SubConfirm (neu): Stasis-Detektor der alle 30s tmux-Sessions prüft. Bei unverändertem Output sendet er den vollständigen Pane-Inhalt an die Alert-Datei — der Orchestrator beurteilt selbst ob Handlung nötig. Kein Keyword-Matching.
12 KiB
Wiederkehrende lokale Probleme (Persistent Issues)
Erstellt: 2026-05-24
Standort: ~/.pi/agent/memory/persistent-issues.md
Spiegel: CrowdBrain persistent-issues.md
Regel: Wann ist ein Problem WIRKLICH gelöst?
Ein Problem gilt erst dann als erledigt, wenn es mehrere Tage hintereinander nicht mehr aufgetreten ist. Ein Fix, der einmal funktioniert, ist kein gelöster Bug — er ist eine Hypothese, die sich über Zeit beweisen muss.
Vor jedem Schließen eines Tickets prüfen:
- Wie viele Resume-/Reboot-Zyklen hat der Fix überlebt? (Minimum: 3)
- Ist das Problem in dieser Session reproduzierbar NICHT aufgetreten?
- Gab es einen System-Update, der den Fix unwirksam machen könnte?
🟢 Problem 1: Spracherkennung nach Standby-Resume
Status: In Bewährung (Fix vom 2026-05-24)
Status-Änderung (2026-05-24):
- Aktueller Stand: Persistence Mode (GPU) aktiviert
Standby-Skript modifiziert (stoppt Dienst vor Suspend)- Auto-Resume-Trigger (
crowd-nvidia-speech-resume.service) eingerichtet - Implementierung eines „Wait-for-GPU“-Checks (
/usr/local/bin/Speech-Auto-Start) anstelle fester Wartezeit (Test steht aus) - Service-Korrektur:
Environment=CUDA_VISIBLE_DEVICES=0(zwingt GPU-Nutzung)
Bewährungsprüfung (Erfolgs-Kriterien):
- 3 Suspend-/Resume-Zyklen hintereinander erfolgreich (Startet auf GPU, performant)?
- Keine CPU-Fallback-Warnungen im Log?
- Die neue Warte-Logik startet den Speech-Dienst zuverlässig erst NACH Treiber-Bereitschaft?
🟡 Problem 2: Session-Header Extension (UI-kritisch)
Erstmals erstellt: 2026-05-23 Status: ✅ Funktioniert aktuell (2026-05-24)
Was es tut
Die Extension ~/.pi/agent/extensions/session-header.ts zeigt in gelber Schrift eine vom LLM generierte Zusammenfassung der Session-Intention oberhalb des Pi-Editors an.
Warum es hier gelistet ist
Dies ist ein kritisches UI-Element: Wenn es unbemerkt kaputtgeht, kann der Benutzer in der falschen Session die falschen Befehle eingeben. Es darf nicht stillschweigend ausfallen.
Prüf-Checkliste (bei jeder Session)
- Gelbe Statusleiste sichtbar?
- Zeigt die korrekte Session-Intention?
- Kein „warte auf erste Eingabe…“-Fallback in einer laufenden Session?
Was tun bei Ausfall?
- Extension-Log prüfen
- Fallback:
truncate(text)zeigt den Originaltext an — das ist okay als Notlösung - Nicht ohne Ersatz weiterarbeiten
🔴 Problem 3: Tickets werden zu früh geschlossen (Metaprozess)
Erstmals dokumentiert: 2026-05-24 Status: ❌ SYSTEMISCHES PROBLEM
Muster
- Problem tritt auf → Ticket wird erstellt
- Fix wird implementiert → Fix funktioniert einmal
- Ticket wird als „erledigt“ markiert
- Problem tritt Tage/Wochen später wieder auf
- Ticket ist bereits geschlossen → wird nicht erneut geöffnet
- Benutzer muss Problem erneut melden
Bekannte Vorfälle
- Spracherkennung nach Standby (siehe Problem 1)
- Weitere? (Liste wächst mit jedem neuen Vorfall)
Systemische Lösung
- Mindest-Bewährungszeit: 3 Resume-/Reboot-Zyklen oder 3 Tage ohne Wiederauftreten
- Status „Bewährung“ statt „Erledigt“: Ein neuer Status zwischen „Offen“ und „Erledigt“
- Diese Datei ist der Kanon: Was hier als ungelöst steht, ist ungelöst — egal was in todos.md steht
🔴 Problem 4: Pi Skills landen im falschen Verzeichnis (strukturiert)
Erstmals dokumentiert: 2026-05-24 Status: ✅ GEFIXT (2026-05-24) — in Bewährung
Symptom
Pi las seine Skills aus ~/.claude/skills/ (Verzeichnis des Claude-Code-Agenten) statt aus ~/.pi/agent/skills/. Dadurch:
- Agenten schrieben Skills in das falsche Verzeichnis
- Andere Agenten oder globale Befehle lasen aus dem richtigen Verzeichnis → alter Stand
- Nach Session-Neustarts waren Änderungen "verschwunden" weil die falsche Datei gelesen wurde
- Dies war die Root Cause für mehrfache Fehlschläge bei Skill-Updates (Video-Analyse, Session-Header, etc.)
Was passiert ist
In ~/.pi/agent/settings.json war konfiguriert:
"skills": ["~/.claude/skills"]
Das ist das Skills-Verzeichnis von Anthropic Claude Code (einem völlig anderen Tool). Pi hat dort gelesen und geschrieben.
Fix (2026-05-24)
settings.jsonkorrigiert:"skills": ["~/.pi/agent/skills"]- AGENTS.md um Regel ergänzt: Skills gehören AUSSCHLIESSLICH nach
~/.pi/agent/skills/ - Video-Analyse-Skill neu geschrieben und in alle drei Orte synchronisiert
Bewährungsprüfung
- Nächste Session: Prüfen ob Pi Skills aus
~/.pi/agent/skills/liest - Skill-Änderung überlebt Session-Neustart?
- Globale Befehle (Videoanalyse etc.) funktionieren mit dem neuen Stand?
- Minimum: 3 Session-Wechsel ohne Rückfall
Verwandte Einträge
- AGENTS.md — Abschnitt "Skill-Verzeichnis-Regel"
- Problem 3 (Tickets zu früh geschlossen) — dieses Muster war eine Folge dieses Problems
🟡 Problem 5: Session-Index zeigt keine Handover-Links (für 20260524-Projekt)
Erstmals dokumentiert: 2026-05-24 Status: ❌ NICHT GELÖST
Symptom
Die Extension session-index.ts erzeugt korrekt einen Rolling Index der letzten 10 Sessions (SESSION_INDEX.md). Aber:
- Alle Sessions heißen „(unbenannt)" — keine Session-Namen gesetzt
- Handover-Links werden nicht gefunden, obwohl
SESSION_HANDOVER.mdim Projektverzeichnis liegt - Die Extension fragt beim Start NICHT ob das Handover geladen werden soll
- Ergebnis: Jede neue Session startet blind, Benutzer muss Kontext manuell rekonstruieren
Betroffene Komponenten
~/.pi/agent/extensions/session-index.ts— Rolling Session Index~/.pi/agent/extensions/session-header.ts— Session-Namen setzen~/.pi/agent/SESSION_INDEX.md— generierter Index<projekt>/SESSION_HANDOVER.md— Handover-Datei
Vermutete Ursachen
- Handover-Pfad-Auflösung: Die Funktion
findHandover()rekonstruiert den Projektpfad aus dem Verzeichnis-Slug. Für--media-xray-NEU-Code-20260524--muss sie/media/xray/NEU/Code/20260524/SESSION_HANDOVER.mdfinden — das klappt nicht. - Session-Namen:
getSessionName()sucht nachheader.name— aber die Session-Header-Extension setzt den Namen möglicherweise zu spät oder in einem anderen Feld.
Nächste Schritte
- Debug: Warum wird der Handover für das 20260524-Projekt nicht gefunden?
- Debug: Warum bleiben Session-Namen auf „(unbenannt)"?
- Fix und testen
🔴 Problem 6: OpenRouter DeepSeek-V4-Pro Provider-Routing (nicht wie erwartet)
Erstmals dokumentiert: 2026-05-24 Status: ❌ NICHT GELÖST
Symptom
OpenRouter listet den nativen DeepSeek-Provider für deepseek/deepseek-v4-pro (preis: $0.435/1M Input), aber Requests mit provider.only: ["deepseek"] oder provider.order: ["deepseek"] schlagen mit 404 fehl: "No endpoints available matching your guardrail restrictions and data policy."
Andere Provider (DeepInfra $1.30, SiliconFlow $0.858, Together) funktionieren.
Vermutete Ursache (Hypothesen)
- Privacy/Guardrail-Einstellungen auf https://openrouter.ai/settings/privacy blockieren den DeepSeek-Provider
- Geografische Einschränkung (DeepSeek-Provider nur in bestimmten Regionen)
- Account-Tier reicht nicht für diesen Provider
Workaround (aktiv)
openRouterRoutingaus der Model-Config entfernt → OpenRouter wählt automatisch den günstigsten verfügbaren Provider
Nächste Schritte
- OpenRouter Privacy-Einstellungen prüfen
- Im OpenRouter Dashboard nachsehen, ob DeepSeek-Provider für diesen Account verfügbar ist
- Ggf. OpenRouter-Support kontaktieren
🟡 Problem 7: Git-Remotes mit HTTPS-Tokens statt SSH (Hygiene)
Erstmals dokumentiert: 2026-05-24 Status: ❌ NICHT ERLEIDGT
Symptom
~35 Repos in /media/xray/NEU/Code/ nutzen HTTPS-Remotes mit eingebetteten Forgejo-Tokens:
https://xray:TOKEN@forgejo.ccpn.cc/xray/repo.git
Risiko
- Nicht akut (HTTPS verschlüsselt den Transport)
- Aber: Token liegt lesbar in
.git/config, könnte versehentlich committed werden - Cloudflare könnte HTTPS auf
forgejo.ccpn.ccblockieren wie bei Port 2220
Ziel
Alle Remotes auf SSH via forgejo-git umstellen:
ssh://git@forgejo-git/xray/repo.git
Nächste Schritte
- Skript schreiben, das alle HTTPS-Remotes erkennt und umstellt
- Nach der Umstellung Tokens in Forgejo rotieren
- Alte Tokens aus Infisical entfernen
🔴 Problem 9: Orchestrator startet eigenmächtig Änderungs-SubAgenten (NEU 2026-05-30)
Erstmals dokumentiert: 2026-05-30 Status: ❌ NICHT GELÖST (Regel eingeführt, muss sich bewähren)
Symptom
Der Orchestrator erkennt ein Problem an einem funktionierenden System (z.B. Spracherkennung läuft auf CPU statt CUDA) und startet eigenmächtig — ohne Rückfrage beim Benutzer — einen SubAgenten, der das System überschreiben/modifizieren soll.
Konkreter Vorfall (2026-05-30)
- System: CrowdNVIDIASpeech (Spracherkennung) — lief auf CPU statt CUDA nach Neustart
- Problem: ctranslate2 war als CPU-only-Version installiert, CUDA-Device-Count = 0
- Mein Fehler: Ich startete SubAgent "speech-cuda-fix" mit dem Auftrag, ctranslate2 neu zu installieren
- Warum falsch: Die Spracherkennung FUNKTIONIERTE (auf CPU, wenn auch langsam). Ein Eingriff riskierte eine funktionierende Lösung ohne Not
- Gestoppt: Der SubAgent wurde gestoppt, bevor er Änderungen vornahm
Ursache
- Keine klare Regel, wann der Orchestrator eigenständig handeln darf
- Falsche Priorisierung: "Läuft nicht optimal" ≠ "Muss sofort gefixt werden"
- Fehlende Reflexion: „Ist das System aktuell funktional und gebrauchsfähig?" wurde nicht gestellt
Regel (eingeführt 2026-05-30 in arbeitsweise.md §6)
Der Orchestrator startet NIEMALS eigenmächtig einen SubAgenten, der eine funktionierende Lösung überschreiben, ersetzen oder modifizieren soll.
Korrekter Ablauf:
- Diagnostizieren (erlaubt)
- Befund präsentieren (erlaubt)
- Benutzer entscheiden lassen (PFLICHT)
- Dann delegieren
Bewährungsprüfung
- Orchestrator fragt vor Änderungen an funktionierenden Systemen zurück
- Kein unerlaubter SubAgent-Start in dieser Session
- Regel ist im Arbeitsgedächtnis verankert (nicht nur in Datei)
🟡 Problem 8: Intercom-Rückmeldung von Subagenten schlägt fehl (Orchestrator-ID)
Erstmals dokumentiert: 2026-05-29 Status: ❌ NICHT GELÖST
Symptom
Subagenten versuchen, sich nach Abschluss per intercom an "orchestrator" zu melden.
Die Nachricht kommt nicht an, weil die echte Orchestrator-Session eine zufällige ID hat (z.B. 3c56b8b8).
Fehler: Message to "orchestrator" was not delivered: Session not found
Ursache
Der Subagent hat im instruktionstext kein Wissen über die aktuelle Orchestrator-Session-ID. Er rät "orchestrator" als Ziel, aber das ist kein gültiger Session-Name/ID.
Fix (2026-05-29)
- AGENTS.md aktualisiert: Jede Subagenten-Aufgabe MUSS die aktuelle Orchestrator-ID enthalten
- Template erweitert um INTERCOM-Abschnitt mit ID
subagent-startwird nicht geändert (bleibt generisch), stattdessen Aufgabe mit ID anreichern
Nächste Schritte
- Alle Subagenten-Aufgaben-Templates prüfen ob sie die Orchestrator-ID enthalten
- Ggf.
subagent-start-Skript erweitern, dass es automatisch die Orchestrator-ID in die Aufgabe einflicht - Bewährungszeit: 3 Subagenten-Durchläufe ohne Fehlschlag
Betroffene Stellen
- AGENTS.md — Abschnitt "Korrektes Sub-Agent-Muster" (aktualisiert)
SubAgenten-Skript (/home/xray/bin/SubAgenten)- Jede manuelle Subagenten-Start-Aufgabe
📋 Prozess bei Wiederauftreten eines Problems
- Dieses Dokument öffnen
- Datum des Wiederauftretens eintragen
- Symptome dokumentieren (Log-Auszüge, Fehlermeldungen)
- Nächsten Schritt definieren
- CrowdBrain
persistent-issues.mdsynchron aktualisieren