Skip to main content

Portable Claude Code workspace archives

Project description

claude-portage

Portable Claude Code workspace archives.

Claude Code stores per-project session history, file snapshots, and metadata in ~/.claude/ using a path-encoding scheme (e.g., /Users/alice/src/foo-Users-alice-src-foo). This data is tightly coupled to absolute paths, making it impossible to move a project to another machine or directory and use claude --continue or claude --resume.

claude-portage bundles a project + its Claude metadata into a portable archive that can be unpacked anywhere with automatic path rewriting. It also supports in-place renaming when you move a project directory locally.

Installation

# Homebrew
brew tap ebowman/claude-portage
brew install claude-portage

# pip
pip install claude-portage

# Or run directly (zero dependencies)
python3 claude_portage.py <command>

Usage

Pack a project

claude-portage pack /path/to/my-project
# Creates my-project.portage.tar.gz

claude-portage pack /path/to/my-project -o /tmp/backup.portage.tar.gz
claude-portage pack /path/to/my-project --no-project-files  # metadata only
claude-portage pack /path/to/my-project --include-debug -v   # include debug logs

Inspect an archive

claude-portage inspect my-project.portage.tar.gz
claude-portage inspect my-project.portage.tar.gz -v  # show individual files

Unpack to a new location

claude-portage unpack my-project.portage.tar.gz /new/path/to/my-project
# Project files extracted to /new/path/to/my-project
# Claude metadata placed in ~/.claude/ with all paths rewritten

Then:

cd /new/path/to/my-project
claude --resume  # Sessions from the original machine appear

Rename a project directory

After moving/renaming a project directory, update Claude's metadata to match:

mv ~/src/foo ~/src/bar
claude-portage rename ~/src/foo ~/src/bar

This rewrites all paths in the session JSONL, subagent logs, todos, etc. and renames the metadata directory in ~/.claude/projects/. Sessions will work seamlessly with claude --resume from the new location.

How It Works

  1. Pack discovers all Claude metadata for a project: session JSONL files, subagent logs, tool results, file-history snapshots, session environments, todos, plans, and memory.
  2. The archive includes a manifest.json recording the source absolute paths.
  3. Unpack extracts project files and places Claude metadata into ~/.claude/ on the target machine, performing line-by-line string replacement of all source paths with target paths.
  4. Path rewriting handles the project path, the Claude config directory path, and the encoded directory name, applied longest-first to avoid partial matches.

Known Limitations

  • Path rewriting is string-based, not JSON-aware. This works because paths appear in many contexts (command strings, tool outputs, file paths) where structured rewriting would miss them.
  • File-history snapshots (source code versions) are copied as-is without path rewriting, since they are project source code, not metadata.
  • The archive does not include Claude's global config (settings.json, API keys, etc.) — only project-specific session data.
  • Session UUIDs are preserved; if the same session ID already exists at the target, files will be overwritten.

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_portage-0.2.1.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

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

claude_portage-0.2.1-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file claude_portage-0.2.1.tar.gz.

File metadata

  • Download URL: claude_portage-0.2.1.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for claude_portage-0.2.1.tar.gz
Algorithm Hash digest
SHA256 5861ec0a1fc38a2e9ab8f3808cc740d451378af93354f6b67143e528331c49ae
MD5 40c50903d0a43a62729a9bf4bd8b7a36
BLAKE2b-256 2c27e05e9bebdc71b1a93b97d9f87a5a9d8677e8f91451466e44eec759b599cd

See more details on using hashes here.

File details

Details for the file claude_portage-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: claude_portage-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for claude_portage-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fefba13f440be358d350b1d587b491fb6ab512ed0fd970363b2078f82eb5fc0a
MD5 8f2be2511eb7ea4536cf8b0999c1d70b
BLAKE2b-256 bd81306e6817546f456d2f9811bffe262eebd45ac40c8bebc34e53aaa9e63943

See more details on using hashes here.

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