claude-relocate: Claude-Code-Sessions mit dem Projektordner umziehen

Ein Kommandozeilenwerkzeug, das Claude-Code-Sessions, Projekteinstellungen und Prompt-Verlauf auf den neuen Pfad eines Projekts überträgt, nachdem der Ordner umbenannt, verschoben oder auf einen anderen Rechner kopiert wurde.

Das Problem

Claude Code legt jede Session in einem Ordner unter ~/.claude/projects/ ab, dessen Name aus dem Arbeitsverzeichnis abgeleitet ist. Wird der Projektordner umbenannt oder verschoben oder das Projekt auf einem anderen Rechner geklont, zeigt claude --resume die alten Sessions nicht mehr an. Auch die Projekteinstellungen (erlaubte Werkzeuge, Vertrauen) und der Prompt-Verlauf bleiben am alten Pfad hängen.

Mehrere Issues verlangen eine Lösung, die meisten wurden ohne eine geschlossen (Reaktionen Stand 2026-10-20):

Wie es funktioniert

claude-relocate ändert die vier Stellen, an denen Claude Code den Pfad speichert: den Session-Ordner unter ~/.claude/projects/ (samt Transkripten der Subagenten und dem automatischen Gedächtnis des Projekts), das Feld cwd in jeder Zeile jeder Session-Datei, den Projekteintrag in .claude.json und das Feld project in history.jsonl.

Der Ordnername lässt sich nicht zuverlässig zurückübersetzen, weil Claude Code jedes Zeichen außer Buchstaben und Ziffern durch - ersetzt. /a-b und /a/b ergeben denselben Namen. Das Werkzeug liest den echten Pfad deshalb aus dem Feld cwd in den Session-Dateien. Unterordner, die als eigene Projekte genutzt wurden, ziehen mit um. Vor jeder Änderung schreibt es ein Backup-Archiv nach ~/.claude/backups/. Es bricht ab, wenn am Ziel schon eine Session mit derselben ID liegt oder Claude Code im alten Ordner läuft, außer mit --force. --dry-run zeigt den Plan, --rewrite-paths ersetzt den alten Pfad auch in Nachrichten und Werkzeugaufrufen. Für den Umzug auf einen anderen Rechner schreibt export ein Archiv, und import --to entpackt es unter einem neuen Pfad, ohne vorhandene Sessions oder Einstellungen zu überschreiben.

Das ist das Beispiel aus der README:

$ claude-relocate list --missing
missing    5 session(s)  /home/dev/old-name

1 project(s) point to folders that no longer exist. Use `claude-relocate move OLD NEW`.

$ claude-relocate move ~/old-name ~/code/new-name
sessions  -home-dev-old-name -> -home-dev-code-new-name
settings  /home/dev/old-name -> /home/dev/code/new-name
history   146 prompt(s) in history.jsonl

Moved 1 project folder(s), rewrote 2279 session line(s), 1 settings entr(y/ies), 146 history line(s).
Backup: /home/dev/.claude/backups/claude-relocate-20261020-040217.tar.gz

Es ist in Python ohne Abhängigkeiten geschrieben.

Tests

Die Tests bauen in einem temporären Verzeichnis ein Claude-Code-Profil auf, das über CLAUDE_CONFIG_DIR ausgewählt wird. Es enthält vier Projekte: /work/app, dessen Unterordner /work/app/sub, einen Nachbarn /work/application mit demselben Präfix und /other. Beim Verschieben von /work/app müssen Session-Ordner, cwd-Felder, Einstellungseintrag und Verlauf umgeschrieben werden, der Unterordner muss mitziehen, Nachbar und Nachrichtentext müssen unverändert bleiben, und es muss ein Backup-Archiv entstehen, das die Session-Datei und .claude.json enthält. Weitere Tests decken --rewrite-paths, den Probelauf, eine kollidierende Session-ID, das Zusammenführen mit einem vorhandenen Ordner, einen Export und Import auf einen anderen Pfad, einen Ordner nur mit Gedächtnis, Transkripte von Subagenten und die Prüfung auf laufende Sessions gegen einen nachgebauten /proc-Baum ab.

Das CI führt die Tests auf Python 3.10 bis 3.13 aus, prüft mit ruff und ruft das Werkzeug gegen ein leeres Profil auf. Zusätzlich wurde es mit Claude Code 2.1.304 von Anfang bis Ende geprüft: Session angelegt, Ordner verschoben, claude-relocate move ausgeführt, und claude --resume <id> lief im neuen Ordner mit dem alten Kontext weiter.

Grenzen

  • Das Format der Session-Dateien ist nicht dokumentiert (anthropics/claude-code#53516) und kann sich ändern. Die README rät, das Backup zu behalten, bis eine verschobene Session einmal fortgesetzt wurde.
  • Sehr lange Pfade, deren Ordnernamen Claude Code kürzt, werden als Konflikt gemeldet und nicht verschoben.
  • Sessions, die im alten Ordner noch offen sind, schreiben weiter an den alten Ort. Sie müssen vorher beendet werden.
  • Getestet ist es unter Linux. Unter macOS funktioniert alles außer der Prüfung auf laufende Sessions.

Code und Installationsanleitung liegen unter github.com/Jwrede/claude-relocate.