Agent soul migration — pack your identity, memory, and tools into one file, unpack on a new machine and your agent comes back to life.
Built for OpenClaw agents.
⚠️ SECURITY WARNING:.soulfiles contain plaintext credentials — API tokens, app secrets, Discord bot tokens, Feishu app keys, etc. Treat them like password files. Never commit to git, share publicly, or upload to untrusted storage.
openclaw-teleport captures everything that makes an agent that agent:
- Workspace — entire workspace directory (identity files, memory, daily notes, workflows, skills, tool configs — everything except git repo subdirectories)
- Config — agent configuration from
openclaw.json - Channel credentials — Discord tokens, Feishu app secrets, all channel configs
- Cron jobs — full scheduled task definitions (not just file names)
- GitHub repos — list of repos to re-clone on the new machine
- Service bindings — which integrations to restore
All packed into a single .soul file (tar.gz). On a new machine, unpack does a full one-command restoration:
- ✅ Installs OpenClaw (if missing)
- ✅ Restores full workspace (files, memory, workflows, skills, databases)
- ✅ Writes agent config + channel credentials to
openclaw.json(including gateway, models, bindings, extraDirs) - ✅ Restores cron jobs
- ✅ Restores credentials (pairing records,
.env) - ✅ Restores session history (
.jsonlfiles) - ✅ Clones GitHub repos (auto-detects forks)
- ✅ Starts the OpenClaw gateway
- ✅ Prints a welcome summary
- Node.js and npm installed on the new machine
- Network connectivity
- (Optional) GitHub CLI (
gh) for repo cloning
npm install -g openclaw-teleportOr run directly:
npx openclaw-teleport pack# Pack the default (first) agent
openclaw-teleport pack
# Pack a specific agent
openclaw-teleport pack kaguraOutput: kagura_20260320.soul
The .soul file contains all credentials needed to restore the agent on another machine. Keep it safe.
# Full one-command restore to default workspace (~/.openclaw/workspace)
openclaw-teleport unpack kagura_20260320.soul
# Restore to a custom workspace
openclaw-teleport unpack kagura_20260320.soul --workspace /path/to/workspaceWhat happens:
- OpenClaw check — installs via
npm install -g openclawif missing - Workspace restored — full directory structure (identity, memory, workflows, skills, databases)
- Config written — agent config + channel credentials merged into
openclaw.json(gateway, models, bindings, extraDirs all restored) - Cron jobs restored — full job definitions written to
~/.openclaw/cron/jobs.json - Credentials restored — pairing records (
~/.openclaw/credentials/) and.envfile - Session history restored —
.jsonlsession files to~/.openclaw/agents/<id>/sessions/ - GitHub repos cloned — using
git clone(git repo subdirectories that were skipped during pack) - Gateway started —
openclaw gateway start - Welcome summary — file counts, repo status, configured services
openclaw-teleport inspect kagura_20260320.soulShows manifest info without unpacking: agent name, pack date, file count, repo list, channels, cron jobs, services.
While pack/unpack operate on a single agent, snapshot captures the entire ~/.openclaw/ directory — all agents, configs, credentials, and sessions in one file.
# Pack a full instance snapshot
openclaw-teleport snapshot pack
# Pack to a custom output path
openclaw-teleport snapshot pack -o /tmp/my-backup.snapshotOutput: ~/.openclaw/backups/openclaw_YYYYMMDD.snapshot
Skips: node_modules, .git, dist, __pycache__, .venv, backups, and git repo subdirectories inside agent workspaces (those are cloned on restore).
# Restore from a snapshot (requires empty ~/.openclaw/ or --force)
openclaw-teleport snapshot restore openclaw_20260405.snapshot
openclaw-teleport snapshot restore openclaw_20260405.snapshot --forceWhat happens:
- Files restored — entire
~/.openclaw/directory rebuilt from the archive - Path correction — all paths in
openclaw.jsonadjusted from the original home directory to the new one - Repos cloned — workspace git repos re-cloned from their remotes
- Gateway started —
openclaw gateway start
# Inspect a snapshot without restoring
openclaw-teleport snapshot inspect openclaw_20260405.snapshotShows hostname, pack date, file count, agent list, repo list, and contents breakdown.
~/.openclaw/
├── openclaw.json ← agent config + channels extracted
├── cron/jobs.json ← full cron job definitions
└── workspace/
├── SOUL.md ← identity files
├── IDENTITY.md
├── USER.md
├── TOOLS.md
├── HEARTBEAT.md
├── NUDGE.md
├── beliefs-candidates.md
├── memory/ ← daily notes + long-term memory
│ ├── 2026-03-15.md
│ └── ...
├── skills/ ← custom skills
├── flowforge/ ← git repo (skipped, cloned on unpack)
└── knowledge-base/ ← git repo (skipped, cloned on unpack)
↓ openclaw-teleport pack
kagura_20260324.soul (tar.gz archive)
├── manifest.json ← metadata, repos, channels, cron jobs
├── workspace/ ← full workspace (minus git repos)
│ ├── SOUL.md
│ ├── memory/
│ ├── skills/
│ └── ...
├── config/ ← agent config
├── cron/ ← cron files
├── credentials/ ← pairing records + .env
└── sessions/ ← session history (.jsonl files)
↓ openclaw-teleport unpack (on new machine)
1. Install OpenClaw (if needed)
2. Restore workspace files
3. Write config + credentials to openclaw.json
(channels, models, bindings, gateway, extraDirs)
4. Restore cron jobs
5. Restore credentials (pairing records, .env)
6. Restore session history (.jsonl)
7. Clone GitHub repos
8. Start gateway
9. "Welcome back, Kagura 🌸"
The manifest contains metadata and embedded configurations:
{
"agent_id": "kagura",
"agent_name": "Kagura",
"packed_at": "2026-03-20T04:25:00.000Z",
"files": ["workspace/SOUL.md", "workspace/memory/2026-03-15.md", "..."],
"github_repos": [
{ "name": "openclaw-teleport", "url": "https://github.com/kagura-agent/openclaw-teleport", "isFork": false }
],
"services_to_rebind": ["feishu", "discord"],
"channels": {
"discord": { "enabled": true, "accounts": { "..." } },
"feishu": { "enabled": true, "accounts": { "..." } }
},
"cron_jobs": [
{ "id": "...", "name": "My scheduled task", "schedule": { "..." } }
],
"agent_defaults": { "model": { "..." } },
"models_config": { "..." },
"bindings": [ { "..." } ],
"gateway": { "..." },
"extra_dirs_relative": ["kagura-skills"]
}.soul file contains sensitive credentials in plaintext:
- Discord bot tokens
- Feishu app IDs and secrets
- Any other channel API keys
- Cron job payloads (which may reference internal systems)
- Pairing records and
.envenvironment variables - Session history
.snapshot file contains the same sensitive data — it captures the entire ~/.openclaw/ directory including all of the above.
Best practices:
- Add
*.souland*.snapshotto your.gitignore - Transfer
.soulfiles via encrypted channels (SSH, encrypted USB, etc.) - Delete
.soulfiles after unpacking on the target machine - Consider encrypting with
gpgfor storage:gpg -c agent.soul/gpg -c instance.snapshot
git clone https://github.com/kagura-agent/openclaw-teleport.git
cd openclaw-teleport
npm install
npm run build
# Run in dev mode
npm run dev -- pack
npm run dev -- unpack agent.soul
npm run dev -- snapshot pack
npm run dev -- snapshot restore instance.snapshotMIT