Skip to main content

Migrate Claude Code project state when your project folder moves — rewires cwd paths across sessions, ~/.claude.json, and worktrees.

Project description

claude-repath

Rewire Claude Code's local state when your project folder moves.

When you move or rename a project directory, Claude Code loses track of its sessions, memory, todos, and worktrees — because the absolute path is hardcoded in four different places. claude-repath patches all of them in one shot.


Why this exists

Claude Code stores per-project state under ~/.claude/projects/<encoded-cwd>/, where the folder name is derived from the project's absolute path. Moving the project folder breaks:

  1. ~/.claude/projects/<encoded>/ — the encoded folder name no longer matches
  2. ~/.claude/projects/<encoded>/*.jsonl — each session file has "cwd" hardcoded inside
  3. ~/.claude.json — the projects key is indexed by absolute path
  4. Git worktree sub-projects — each has its own encoded folder AND internal cwd fields

Anthropic has no official migration command (as of 2026-04), and existing community tools cover at most 6 of the needed layers. claude-repath aims to handle all of them, with special care for Windows paths and worktrees.


Quick start

# Install (coming soon via PyPI)
pip install claude-repath

# INTERACTIVE mode — pick from a list, no path typing needed
claude-repath move

# Explicit mode — preview changes first (ALWAYS recommended)
claude-repath move D:\dev_code\time-blocks D:\dev_code\Life\time-blocks --dry-run

# Actually perform the migration (auto-backs-up first)
claude-repath move D:\dev_code\time-blocks D:\dev_code\Life\time-blocks

# Broader scan — also rewrite cross-project references (use with care)
claude-repath move <old> <new> --scope broad

# If you already moved the folder manually, just rewire state
claude-repath rewire D:\dev_code\time-blocks D:\dev_code\Life\time-blocks

# Health check a project's Claude Code state
claude-repath doctor D:\dev_code\time-blocks

# List all projects Claude Code knows about
claude-repath list

# Roll back a previous migration
claude-repath rollback 20260419-155331

What gets migrated

# Layer Handled
1 Physical project folder (mv)
2 ~/.claude/projects/<encoded>/ directory name
3 .jsonl session files — inline "cwd" fields
4 ~/.claude.jsonprojects key
5 Worktree-derived project folders (auto-discovered)
6 ~/.claude/git-worktrees.json (if present)
7 Chromium Local Storage/leveldb entries (Desktop app) ⏳ v0.3+ backlog

Safety

  • Dry-run by default logic: destructive commands require either --dry-run preview first or explicit confirmation
  • Auto-backup: every mutation is snapshotted to ~/.claude/.repath-backups/<timestamp>/
  • Process guard: refuses to run if any claude process is holding the state files
  • Rollback: claude-repath rollback <timestamp> restores a previous snapshot

Platform support

OS CLI state (~/.claude/) Desktop state (Local Storage/leveldb)
Windows 11 (Git Bash / PowerShell / cmd) ✅ auto-migrated 🔍 diagnosed
macOS ✅ auto-migrated 🔍 diagnosed
Linux ✅ auto-migrated 🔍 diagnosed

Windows paths with drive letters (D:\...) and backslashes are first-class — they were the primary motivation for writing this tool. The path matcher accepts both \ and / separators and automatically aligns with ~/.claude.json's forward-slash-stored keys.

About Claude Code Desktop

Claude Code Desktop stores additional session state in Chromium's Local Storage LevelDB:

  • Windows: %LOCALAPPDATA%\claude\Local Storage\leveldb\
  • macOS: ~/Library/Application Support/claude/Local Storage/leveldb/
  • Linux: ~/.config/claude/Local Storage/leveldb/

claude-repath doctor reports whether this directory exists on your machine but does not migrate it automatically — see Roadmap for planned v0.3+ support. If you use Desktop exclusively and move a project, the Desktop UI's "recent projects" list may show a stale path. Remedy: open the new folder via Desktop's File menu to re-register it.


Comparison to existing tools

At the time of writing (April 2026) there is no official Anthropic migration command. A handful of community tools exist — claude-repath is designed to close their gaps:

Tool Layers covered Windows Worktrees ~/.claude.json Separator tolerance
arak-git/claude-code-project-mover-py 6 partial partial
justinstimatze/claude-mv 9
lovstudio/cc-mv (npm) 4 ?
skydiver/claude-code-project-mover 2
claude-repath 6 + rollback ✅ auto ✅ both

Development

# Clone & enter
git clone https://github.com/xPeiPeix/claude-repath.git
cd claude-repath

# Install with uv (creates .venv, installs typer + dev deps)
uv sync --all-groups

# Run tests
uv run pytest

# Lint
uv run ruff check

# Run CLI locally
uv run claude-repath --help

Layout:

src/claude_repath/
├── cli.py              # typer app (move/rewire/doctor/list/rollback)
├── migrate.py          # orchestrator
├── encoder.py          # path → folder-name encoding
├── backup.py           # manifest-based backup & LIFO rollback
├── utils.py            # shared path rewrite helpers
└── layers/
    ├── projects_dir.py    # ~/.claude/projects/<encoded>/ renaming
    ├── jsonl_cwd.py       # .jsonl cwd field rewriting
    ├── global_json.py     # ~/.claude.json projects key
    └── worktrees_json.py  # ~/.claude/git-worktrees.json

Roadmap

  • v0.2 (current) — Interactive TUI picker, --scope narrow|broad flag, Desktop Local Storage diagnostic, cross-platform path handling (Win/macOS/Linux)
  • v0.3+ (backlog) — Chromium Local Storage/leveldb auto-migration for Claude Code Desktop users (requires closing Desktop first + plyvel-ci bindings + META-protobuf maintenance); interactive TUI variants for rollback / doctor; shell-completion auto-install (typer's built-in)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

claude_repath-0.2.0.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claude_repath-0.2.0-py3-none-any.whl (23.1 kB view details)

Uploaded Python 3

File details

Details for the file claude_repath-0.2.0.tar.gz.

File metadata

  • Download URL: claude_repath-0.2.0.tar.gz
  • Upload date:
  • Size: 16.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for claude_repath-0.2.0.tar.gz
Algorithm Hash digest
SHA256 eeebd6872d6ea00f0baa9326404eb15c961f6611d921223de21a7fd7b07c31d9
MD5 250cf11ada82df225dbf0e585ec1ad35
BLAKE2b-256 aeb1bdee50f5b0690850c3b75cbcb4cdbbba130ae6263e733bae51031d39ce90

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_repath-0.2.0.tar.gz:

Publisher: publish.yml on xPeiPeix/claude-repath

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file claude_repath-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: claude_repath-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 23.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for claude_repath-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d5acb5ed3d1cb1db56b3ed5ccd88baed9367d952483ca5b6cab54af54194c928
MD5 ff1d2bb344f2933cfda278efa7579123
BLAKE2b-256 f1ee3b2335c8f2db5a4da071f1c1942fd4f86105337333c26475c75a7d14c072

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_repath-0.2.0-py3-none-any.whl:

Publisher: publish.yml on xPeiPeix/claude-repath

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page