Hintergrundprozesse werden beim Exit von Hermes/Claude Code/opencode gekillt #15
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/Iris#15
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Wenn Iris (via Hermes, Claude Code oder opencode) einen Prozess startet (z.B. ein Spiel, einen Server), wird der Prozess beendet sobald der Agent-Job abgeschlossen ist.
Ursache: Hermes läuft als One-Shot-Prozess (
hermes chat -Q --yolo -q). Nach der Antwort exitiert Hermes. Kindprozesse, die nicht korrekt vom Bash-Subshell abgetrennt wurden, sterben mit.Dasselbe gilt für Claude Code und opencode — die Agenten-Jobs laufen als Subprozesse von Iris und beenden sich nach Abschluss.
Teilfix (Hermes)
In
~/.hermes/SOUL.mdneue Pflicht-Direktive hinzugefügt:iris-background-process-directiveHermes muss ab sofort für alle Hintergrundprozesse:
nohup ... &verwenden (ignoriert SIGHUP)disown $PIDausführen (entfernt aus Bash-Jobtabelle)~/.hermes/processes.jsonspeichern (für spätere Verwaltung)Offen
setsid/ eigener Process-Group, sodass Child-Prozesse beim Agent-Exit nicht automatisch beendet werdenArchitektonischer Fix implementiert — Commit
2c8ec57Neuer Helper wrapProcessInNewSession() in AgentJob.swift. Alle drei Agenten (Hermes, Claude Code, opencode) werden via Python3 in einer neuen Unix-Session gestartet: os.setsid() trennt den Agenten von Iris, os.execvp() ersetzt Python3 mit dem Agenten (gleiche PID, alle Pipes bleiben intakt). Kindprozesse des Agenten erben die neue Session und werden beim Exit des Agenten zu launchd-Waisen — sie laufen weiter.
Gelöst
Das Problem wurde mit einem zweiteiligen Ansatz behoben:
1. POST /notify Endpunkt im IrisRemoteServer (
abab531)IrisRemoteServerhat einen neuenPOST /notify-Endpunkt (localhost-only, kein Auth) bekommen. Hintergrundprozesse können dort eine Completion-Notification einstellen.RemoteServerClientpollt alle 15 s viaGET /notifyund zeigt eingehende Signale als macOS-UNNotification an.2. notify-iris.sh + watch_local.py (
3256416)Ein generelles Shell-Hilfsskript
skills/notify-iris.shwurde angelegt, das beliebige Skills viaPOST /notifyan Iris melden können.watch_local.py(videowatch) sendet am Ende automatisch eine solche Notification.Warum dieser Ansatz
Der ursprüngliche Versuch, Agenten-Prozesse in einer eigenen Unix-Session zu starten (
setsid,2c8ec57), musste wieder rückgängig gemacht werden (be43fcd), weilsetsiddie macOS-TCC-Vererbung bricht und Skills dann keine Screenshots oder Dateizugriffe mehr durchführen konnten.Statt die Prozessgruppe zu entkoppeln, werden Hintergrundprozesse nun via HTTP-Notification gemeldet. Skills starten ihre Langläufer mit
nohup/disownund rufen am Endenotify-iris.shauf — Iris bekommt eine Benachrichtigung, sobald der Job fertig ist.