Migrate a local agent
Move an agent you run on your own machine into Sokko — its keys, memory, and files — in one command.
If you already run an agent locally, sokko migrate moves it into a Sokko-hosted
agent so it keeps running in the cloud. It brings three things across: your
secrets, your memory, and your files.
🍪 sokko migrate
🥠 secrets 12 vars from .env
🧠 memory 8 items
📦 files 34 files · 1.2 MB
✅ your agent is fully bakedRun it
sokko migrateWith no flags, the CLI walks you through it:
Pick or create the target agent
Choose one of your existing agents, or pick Create a new agent and go through the create flow.
It finds your local folder
Based on the agent's runtime, it looks in the usual spot
(~/.openclaw, ~/.hermes, ~/.paperclip, ~/.opensre). Point it somewhere
else with --path.
It sends three lanes
Secrets, memory, and files each go over separately (see below).
The three lanes
🥠 Secrets
Your root .env becomes per-key secrets.
🧠 Memory
MEMORY.md, USER.md, IDENTITY.md, and the memory/ folder go into
Sokko Memory.
📦 Files
Everything else is bundled and uploaded to your agent's storage.
Try it safely first
Do a dry run to see exactly what would move — counts and the file list — with no network writes at all:
sokko migrate --dry-runUseful flags
| Flag | Meaning |
|---|---|
--instance <id> | Migrate into a specific agent without the picker. |
--path <dir> | Use this local folder instead of the default. |
--only secrets,memory,files | Move just the lanes you name. |
--on-conflict skip|replace | For secrets that already exist: keep or overwrite (default skip). |
--create | Create a new agent instead of picking one. |
--dry-run | Preview only. Writes nothing. |
--yes | Skip prompts (for scripts). |
What it will not upload
The files lane skips things that should not travel: private keys and certificates
(*.pem, *.key, id_rsa*), anything that looks like a token or secret, .git/,
node_modules/, caches, and very large files. Add a .sokkoignore file (same
syntax as .gitignore) to skip more. Your .env is handled by the secrets lane,
so it is never treated as a plain file.
Memory needs the add-on
Memory travels only if the memory add-on is on. If you have
memory files but the add-on is off, migrate offers to turn it on rather than
dropping them quietly. Turning it on costs money, so it always asks first — even
with --yes — or you can pass --subscribe-memory monthly or
--subscribe-memory annual. If you are not an owner, it prints a dashboard link
and continues, reporting memory as skipped.