Unified AI coding session transfer — cross-tool AND cross-machine.
Transfer sessions between Cursor, Windsurf, Claude Code, Codex, Copilot CLI, Cline, and Continue. Sync encrypted sessions across machines via a self-hosted server.
The easiest way to use MoveZ is through the desktop app — no terminal needed.
Download MoveZ Setup 1.0.0.exe from Releases and run the installer.
The installer bundles PHP and the CLI automatically — no extra dependencies required.
Launch MoveZ from the Start Menu. You'll see a sidebar with these sections:
| Section | What it does |
|---|---|
| Dashboard | Overview of detected AI tools and session counts |
| Sessions | Browse all sessions from all your AI tools |
| Migrate | Transfer sessions from one tool to another |
| Sync | Push/pull encrypted sessions to a sync server |
| Doctor | Check that everything is working |
| Settings | Configure CLI path, PHP path, sync server |
- Go to Sessions
- Select a tool tab (e.g. Cursor, Claude Code)
- Check the sessions you want to export
- Click Export Selected → choose a save location
- A
.cbzbundle file is created — this is your portable backup
- Go to Sessions
- Click Import
- Select your
.cbzbundle file - Choose the target tool (e.g. Cursor, Windsurf)
- Optionally remap project paths if your folder structure changed
- Click Import — sessions appear in the target tool
- Go to Migrate
- Select From tool (e.g. Cursor) and To tool (e.g. Claude Code)
- Set the project directory
- Click Start Migration
- Sessions are read from the source and written to the target tool
Click Doctor to verify:
- PHP is available and the right version
- All AI tool storage directories are detected
- SQLite extensions are loaded
- Encryption key exists
For power users who prefer the terminal.
# Download the PHAR
curl -L https://github.com/kv4u/MoveZ/releases/latest/download/movez.phar -o movez
chmod +x movez
sudo mv movez /usr/local/bin/movez
# Verify installation
movez doctorOn Windows (with PHP installed):
# Download movez.phar to a folder in your PATH
php movez.phar doctorBackup all Cursor sessions:
movez export --tool=cursor --output=cursor-backup.cbzRestore to a new machine:
movez import --input=cursor-backup.cbz --tool=cursorTransfer Cursor sessions to Claude Code:
movez transfer --from=cursor --to=claude-code --project=/path/to/projectRemap paths when restoring on a different machine:
movez import --input=backup.cbz --tool=cursor \
--from-path=/old/machine/projects \
--to-path=/new/machine/projectsEncrypted backup:
movez export --tool=cursor --output=backup.cbz --encrypt
# Encryption key is auto-generated at ~/.movez/keyList sessions without exporting:
movez list-sessions --tool=cursor
movez list-sessions --tool=claude-code --jsonSync across machines (requires self-hosted server):
# On machine A — push
movez sync:push --token=YOUR_TOKEN --server=https://your-server.com
# On machine B — pull
movez sync:pull --token=YOUR_TOKEN --server=https://your-server.com --tool=cursor| Command | Description |
|---|---|
movez export |
Export sessions to a .cbz bundle |
movez import |
Import sessions from a .cbz bundle |
movez transfer |
Export + import in one step |
movez package |
Package raw session files into a .cbz |
movez unpack |
Extract a .cbz bundle |
movez list-sessions |
List detected sessions |
movez sync:push |
Push encrypted sessions to sync server |
movez sync:pull |
Pull sessions from sync server |
movez doctor |
Check system requirements |
Use --help on any command for full options:
movez export --help| Tool | Read | Write | Format |
|---|---|---|---|
| Cursor | Yes | Yes | SQLite + JSONL (3-layer) |
| Windsurf | Yes | Yes | SQLite |
| Claude Code | Yes | Yes | JSONL |
| Codex | Yes | Yes | JSONL |
| Copilot CLI | Yes | Yes | JSON |
| Cline | Yes | — | JSON |
| Continue | Yes | — | SQLite |
Cursor uses a 3-layer storage system. MoveZ writes to all three so imported sessions appear correctly in the sidebar with full conversation history.
You must open each project in Cursor at least once before importing. Cursor creates a workspace storage directory the first time you open a project — MoveZ needs this directory to register sessions in the sidebar.
- Close Cursor completely (File → Exit, not just close window)
- Open each project folder you want to import sessions for in Cursor — just open it briefly, then close Cursor again. This creates the workspace storage entry.
- Run the import:
Or use the desktop app: Sessions → Import → select your
movez import --input=backup.cbz --tool=cursor
.cbzfile → choose Cursor as target. - Reopen Cursor on any project — your imported sessions will appear in the chat history sidebar.
| Layer | Location | Purpose |
|---|---|---|
| 1. JSONL transcript | ~/.cursor/projects/<path>/agent-transcripts/<id>/ |
Raw conversation text |
| 2. Global SQLite | %APPDATA%/Cursor/User/globalStorage/state.vscdb |
Session metadata + individual messages (composerData + bubbleId entries) |
| 3. Workspace SQLite | %APPDATA%/Cursor/User/workspaceStorage/<hash>/state.vscdb |
Sidebar registration (makes session clickable) |
- Session not in sidebar? → You didn't open the project in Cursor before importing. Open it once, close Cursor, re-run the import.
- Session shows but content is empty? → Close Cursor fully and reopen. Cursor caches session state in memory.
- Sessions from a different machine? → Use
--from-pathand--to-pathto remap project paths:movez import --input=backup.cbz --tool=cursor \ --from-path="D:/Projects" \ --to-path="C:/Work/Projects"
- AI won't remember context — Cursor uses an internal protobuf blob (
conversationState) to feed conversation history to the model. MoveZ can't generate this format, so the AI won't "remember" imported conversations. You get full visual history of all messages, but to continue the conversation with context, start a new chat and reference the history. - Workspace hash is opaque — Cursor generates workspace directory hashes using an internal algorithm. MoveZ can only register sessions for projects that have been opened (and thus have an existing hash). There's no way to pre-create workspace directories.
MoveZ uses .cbz (Compressed Bundle Zip) files as a portable bundle format:
bundle.cbz (ZIP archive)
└── bundle.json
├── version: 1
├── source_tool: "cursor"
├── exported_at: "2026-03-26T..."
└── sessions: [
{ id, title, project, turns: [{role, content, timestamp}...] }
]
Bundles can optionally be encrypted with AES-256-GCM.
contextbridge/ ← Laravel Zero CLI (builds to movez.phar)
electron-app/ ← Electron + Vue 3 desktop app
vscode-extension/ ← VS Code extension (TypeScript)
web/ ← Laravel 12 + Inertia.js web dashboard
.github/ ← GitHub Actions CI/CD
See AGENTS.md for the full engineering specification.
- PHP 8.2+ with extensions: pdo_sqlite, openssl, zip, mbstring
- Composer 2.x
- Node 20+
# 1. Install dependencies
cd contextbridge && composer install && cd ..
cd electron-app && npm install && cd ..
# 2. Download PHP runtime (Windows)
# Place php.exe + DLLs in electron-app/resources/php/
# 3. Build PHAR
cd contextbridge
php -d phar.readonly=0 box.phar compile
cp contextbridge.phar ../electron-app/resources/movez.phar
cd ..
# 4. Build Electron installer
cd electron-app
npm run package
# Output: electron-app/dist/MoveZ Setup 1.0.0.exeOr use the included build script (Windows):
build.bat# CLI tests
cd contextbridge && php vendor/bin/pest
# Web tests
cd web && php artisan test
# TypeScript check
cd vscode-extension && npx tsc --noEmit- All synced data is encrypted with AES-256-GCM before leaving your machine
- Encryption key stored at
~/.movez/keywith 0600 permissions - API tokens stored as SHA-256 hashes in the database
- No telemetry, no external calls except to your configured sync server
MIT — see LICENSE