Das Problem
Mit Remote Control lässt sich eine Claude-Code-Session, die auf einem Server
läuft, über claude.ai/code oder die Claude-App auf dem Handy fortsetzen.
Startet der Server neu oder wird der Session-Prozess beendet, zeigt die
Web-Session "Can't reach claude remote-control kommt als systemd-Dienst zurück,
übernimmt die vorher laufenden Sessions aber nicht zuverlässig.
Alle folgenden Issues sind offen (Reaktionen Stand 2026-10-21):
- anthropics/claude-code#30447,
"
claude remote-control --headless, daemonizable remote control without TTY dependency", 48 Reaktionen. - anthropics/claude-code#33041, "Remote Control disconnects frequently", 30 Reaktionen.
- #98310 (3), #98504 (2), #101190 (2), #91592 (1) und #94049 (0) beschreiben verwandte Fälle von Sessions, die verloren gehen oder sich nicht wieder verbinden.
Wie es funktioniert
Claude Code schreibt für jede laufende Session eine Datei
~/.claude/sessions/<pid>.json mit der lokalen Session-ID, dem Ordner und,
wenn Remote Control aktiv ist, der ID der Web-Session (bridgeSessionId). Die
Datei wird gelöscht, wenn der Prozess endet.
claude-rc-keep läuft jede Minute
über einen systemd-User-Timer und kopiert diese Einträge in ein eigenes
Register unter ~/.local/state/claude-rc-keep/. Eine erfasste Session, die
nicht mehr läuft, wird als claude --resume <id> --remote-control in einem
abgekoppelten tmux in ihrem ursprünglichen Ordner neu gestartet. Eine
interaktive Session verbindet sich wieder mit derselben Web-Session. Der offene
Tab auf dem Handy oder im Browser verbindet sich dann neu und zeigt den
vollständigen Verlauf.
Sessions, die der Server claude remote-control gestartet hat, werden anders
behandelt. Nach einem Neustart übernimmt der Server manchmal selbst eine alte
Web-Session, und sein Worker überschreibt das lokale Transkript mit der Kopie
vom Server. Die README hält einen Fall fest, in dem das Transkript von 77 MB
auf 14 MB schrumpfte und alles vor dem letzten /compact aus der Datei
verschwunden war. claude-rc-keep stellt eine Server-Session deshalb einmalig
mit --fork-session wieder her: als Kopie mit neuer lokaler ID und neuer
Web-URL, die das ursprüngliche Transkript unverändert lässt. Danach ist die
Kopie eine interaktive Session und behält ihre URL.
Eine Session ohne neue Nachricht seit mehr als 3 Tagen wird gestoppt und aus
dem Register entfernt. Ihr Transkript bleibt erhalten, claude --resume
funktioniert also weiter. CLAUDE_RC_KEEP_MAX_IDLE_DAYS ändert die Grenze,
0 schaltet sie ab. claude-rc-keep rm stoppt eine Session dauerhaft.
Das ist die Ausgabe von claude-rc-keep ls für ein Register mit drei
Beispieleinträgen:
$ claude-rc-keep ls
4f1c09ab running 10-21 16:42 ~/projects/app https://claude.ai/code/session_01EXAMPLEA
9b72d4e0 stopped 10-21 16:42 ~/projects/app https://claude.ai/code/session_01EXAMPLEB
c35e8a17 running (server) 10-21 16:42 ~/projects/app https://claude.ai/code/session_01EXAMPLEC
Tests
Die Tests laufen gegen temporäre Konfigurations- und Zustandsverzeichnisse und
nutzen kurzlebige echte Prozesse als Sessions. Sie prüfen, dass tote PIDs
ignoriert werden und dass eine von einem anderen Prozess wiederverwendete PID
über die Startzeit des Prozesses in /proc erkannt wird. Die Neustart-Logik
wird mit einem eingeschleusten Starter getestet: Eine fehlende Session wird
mit dem erwarteten Befehl gestartet und innerhalb einer Schonfrist von 300
Sekunden nicht erneut, eine Server-Session wird nur einmal geforkt, und
Sessions mit leerem Transkript oder gelöschtem Ordner werden übersprungen.
Weitere Tests stoppen und entfernen eine inaktive Session nach 3 Tagen,
behalten sie bei der Grenze 0 und ignorieren beim Bestimmen der letzten
Aktivität die Einträge, die Claude Code beim Neustart schreibt. Ein Test
startet echte tmux-Fenster und prüft, dass der Neustart einer Session ihr
vorhandenes Fenster ersetzt.
Das CI führt die Tests auf Python 3.10 bis 3.13 aus, prüft mit ruff und ruft
tick und ls gegen ein leeres Profil auf. Laut README ist das Werkzeug mit
Claude Code 2.1.306 getestet.
Grenzen
- Es braucht Linux mit systemd-User-Diensten und tmux.
- Die Session-Dateien sind nicht dokumentiert und können sich mit jeder Version von Claude Code ändern.
- Jede neu gestartete Session ist ein vollständiger Claude-Code-Prozess mit etwa 270 MB Speicher.
- Eine wiederhergestellte Server-Session bekommt eine neue Web-URL. Der alte Tab bleibt offline oder zeigt die Kopie des Servers, falls dieser die Session übernommen hat.
- Eine Session, die im tmux-Fenster mit
/exitbeendet wird, startet innerhalb einer Minute neu. Dauerhaft stoppt man sie mitclaude-rc-keep rm. - Eine Session, die mitten in einer Aufgabe unterbrochen wurde, wird wiederhergestellt, arbeitet aber erst nach einer neuen Nachricht weiter.
Code und Installationsanleitung liegen unter github.com/Jwrede/claude-rc-keep.