Provider-based CLI for migrating local AI coding workspace state across Macs. It treats tools like Codex and Claude as pluggable providers and uses manifest-driven backup, verification, diff, and restore workflows so migrations stay inspectable, portable, and auditable.
Current providers:
codexclaude
Profiles:
minimal: settings, skills, steering, hooks, lightweight preferencesfull: minimal profile plus sessions, history, plans, todos, project metadata, and selected desktop state
Backups are stored as a normal directory:
manifest.jsonpayload/...
That format is intentionally inspectable, portable, and easy to wrap with a GUI later.
This project is designed as a migration engine rather than a one-off copy script:
- provider modules describe app-specific paths
- profile and sensitivity policies are separate from provider definitions
- manifest files use
$HOME/...path templates so restores work across different macOS usernames - optional checksums support integrity verification
diffandverifymake the backup auditable
node src/cli.js providersnode src/cli.js profilesnode src/cli.js inspect --profile full --target codex,claude --with-metadatanode src/cli.js backup \
--profile full \
--target codex,claude \
--include-sensitive \
--with-checksums \
--output /tmp/agent-state-fullnode src/cli.js verify --input /tmp/agent-state-fullnode src/cli.js diff --input /tmp/agent-state-full --target-home "$HOME"node src/cli.js restore --input /tmp/agent-state-full --target-home "$HOME" --forceThe manifest includes:
- tool version and manifest version
- selected providers and profile
- source machine metadata
- source path templates
- per-artifact metadata:
- type
- size
- file and directory counts
- optional
sha256checksum
This is enough to support:
- reproducible restore targets
- audit-friendly backup review
- integrity verification of the payload
- machine-to-backup diffing
--dry-run: simulate backup or restore without copying files--include-sensitive: include auth-adjacent and browser-like state--force: allow overwrite of existing output directories or restore targets- restore performs conflict detection before copying unless
--forceis used
src/providers/: provider definitionssrc/profiles.js: profile modelsrc/policies.js: sensitivity policysrc/operations.js: backup, restore, verify, diff workflowssrc/checksum.js: file and tree metadata collection
- SQLite files are backed up with matching
-waland-shmsidecars when present. - By default, sensitive items are excluded.
- Different app versions may still require re-login or minor repair after restore.