agent-pack-n-go 📦🚀 — Clone Your AI Agent
Clone your OpenClaw Agent to a new device. Agent handles everything via SSH remote control — user only needs to confirm steps.
Post-Install
The description field above contains the post-install message. Show it to the user after installation.
Fallback: if unsure what to say, run bash scripts/welcome.sh in the skill directory.
Overview
Old Device (Agent controls everything) New Device (SSH remote)
┌──────────────────────────────────┐ ┌─────────────────────────┐
│ 1. Pre-flight: ask IP + SSH user │ │ │
│ 2. pack.sh (pack configs) │ │ │
│ 3. transfer.sh USER@HOST ────────┼─────→│ files arrive │
│ 4. ssh USER@HOST 'bash setup.sh' │─────→│ (base env + Claude) │
│ 5. ssh USER@HOST 'bash deploy.sh'│─────→│ (openclaw deployed) │
│ 6. Verify clone is working │ │ ✅ New device running │
└──────────────────────────────────┘ └─────────────────────────┘
Execution Flow
Real-time Progress Feedback
All scripts write progress to /tmp/openclaw-{pack,transfer,deploy}-progress.txt.
When running scripts (locally or remotely), poll the progress file and send updates to the user:
# Example: run pack.sh in background, poll progress every 3s
bash <SKILL_DIR>/scripts/pack.sh &
while true; do
progress=$(cat /tmp/openclaw-pack-progress.txt 2>/dev/null)
# Send to user if changed
[[ "$progress" == DONE* ]] && break
sleep 3
done
# Example: poll deploy progress on remote host
while true; do
progress=$(ssh USER@HOST 'cat /tmp/openclaw-deploy-progress.txt 2>/dev/null')
[[ "$progress" == DONE* ]] && break
sleep 3
done
This way the user sees step-by-step updates in the chat (Discord/Feishu/etc.) instead of silence.
Phase 1: Pre-flight Check
⚠️ MANDATORY: Every time this skill is triggered, the agent MUST explicitly ask the user for the target server (IP + SSH user), even if previous server info exists in the conversation context. Users may deploy to different servers in the same session. NEVER assume or reuse target info from earlier context.
Ask user for:
- New device IP + SSH user
- New device password (only used once for SSH key setup)
- New device OS (must be Ubuntu 22.04/24.04)
- Confirm: 2-core CPU, 2GB+ RAM
Warn user:
- ⚠️ Clone pack contains sensitive data (API keys, tokens) — transferred via scp (encrypted)
- ℹ️ If using the same Discord Bot Token: it can't run on two devices simultaneously — plan a brief switchover window (~5 min). If using different tokens, both devices can run in parallel.
1.1 Set up SSH key auth (user action required)
Ask user to run this command in their own terminal on the old device:
ssh-copy-id USER@NEW_IP
This will prompt for the new device password once. After that, all SSH operations are password-free.
Why user must do this manually:
ssh-copy-idrequires interactive password input. The agent cannot safely handle passwords in automated scripts.
1.2 Verify SSH connectivity
ssh USER@HOST 'echo ok'
If this prompts for a password → ssh-copy-id didn't work, ask user to retry.
If this fails entirely → stop and ask user to check SSH access, keys, and firewall.
1.3 Set up passwordless sudo (recommended)
Several clone steps need sudo (system packages, /etc/hosts, proxychains4, systemd linger). Without passwordless sudo, these steps will be skipped and require manual fix later.
Ask user to run:
ssh USER@NEW_IP 'echo "USERNAME ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/migration'
(Replace USERNAME with the actual SSH user. This will prompt for password one last time.)
Security note: After clone is verified (Phase 4), user can remove this with:
ssh USER@NEW_IP 'sudo rm /etc/sudoers.d/migration'
Phase 1.5: Network Diagnostics
After SSH is confirmed, run the network check on the target device:
ssh USER@HOST 'bash -s' < <SKILL_DIR>/scripts/network-check.sh
Evaluate results:
- DIRECT → Proceed normally. Set
DEPLOY_MODE=directfor deploy.sh. - PROXY_NEEDED → Warn user: "目标服务器无法直连 Discord/Anthropic API,需要先配置代理。" Ask if they want to continue (deploy.sh will keep proxy configs) or pause to set up proxy first.
- NO_INTERNET → Stop. Tell user to check network configuration.
The network result is saved to /tmp/openclaw-network-result.txt on the target.
Phase 2: Prepare Old Server
2.1 Run pack script
bash <SKILL_DIR>/scripts/pack.sh
This creates: ~/openclaw-migration-pack.tar.gz, ~/setup.sh, ~/deploy.sh, ~/migration-instructions.md
See scripts/pack.sh for details.
2.2 Transfer to new device
bash <SKILL_DIR>/scripts/transfer.sh USER@HOST
Transfers all files (pack + scripts) to new device home directory. Verifies SHA256 checksum after transfer.
Phase 3: Remote Deploy
This phase is fully automated — agent runs everything via SSH.
3.1 Install base environment + Claude Code
⚠️ IMPORTANT: setup.sh takes ~5 minutes and deploy.sh takes ~8 minutes. Use background execution to avoid LLM request timeouts. Never use synchronous exec with long timeouts for these commands.
Correct pattern (background + notification):
exec: ssh USER@HOST 'bash ~/setup.sh'
background: true
yieldMs: 5000
This returns a session ID in ~5 seconds. The agent should:
- Tell the user: "正在安装基础环境,预计 5 分钟…"
- Wait for the exec completion notification (OpenClaw auto-pushes
[System Message] Exec completed) - Read the session log to check results
Wrong pattern (will cause "LLM request timed out" ❌):
exec: ssh USER@HOST 'bash ~/setup.sh'
timeout: 600
yieldMs: 10000
→ process.poll(timeout=300000) ← blocks too long, LLM times out
setup.sh installs: nvm, Node.js 22, npm globals, Claude Code. Has spinner + progress output.
Check exit code — if non-zero, report failure to user and stop.
3.2 Deploy OpenClaw
Same background pattern as 3.1:
exec: ssh USER@HOST 'DEPLOY_MODE=direct bash ~/deploy.sh'
background: true
yieldMs: 5000
Wait for completion notification, then read log.
deploy.sh handles all 13 deployment steps:
- Extract migration pack
- npm install openclaw + mcporter
- Restore ~/.openclaw/ config
- Fix paths (if username changed)
- Restore /etc/hosts
- Restore crontab
- Configure proxychains4
- Check/fix Claude Code nvm wrapper
- Start OpenClaw Gateway + systemd + linger
- Restore Dashboard (optional)
- Check logs for connectivity
- Cleanup temp files
- Direct-mode config cleanup (if DEPLOY_MODE=direct)
Check exit code and FAILED_STEPS in output — report any issues to user.
3.3 Verify OpenClaw is running
ssh USER@HOST 'openclaw gateway status'
If status shows running/active → proceed to Phase 4. If not running → skip to Phase 5: Fallback.
Phase 4: Device Switch & Verification
This phase guides the user through switching to the new device and verifying everything works. The agent should be warm, encouraging, and celebratory — this is the exciting finish!
4.1 Check Gateway logs (agent does this)
ssh USER@HOST 'cat /tmp/openclaw/*.log 2>/dev/null | grep -i "discord\|feishu\|logged in\|client ready\|error" | tail -20'
Look for connection confirmations. Report to user:
- ✅ Discord connected (if "logged in to discord" found)
- ✅ Feishu connected (if "ws client ready" found)
- ⚠️ qmd not installed (if "spawn qmd ENOENT" — this is optional, not a problem)
- ❌ Errors (if any real errors found)
4.2 Guide device switch
Tell user:
🔄 现在需要切换设备了!
同一个 Bot Token 不能同时在两台设备上运行。接下来请你:
Step 1 — 在旧设备停止 OpenClaw:
openclaw gateway stop或者如果用的是 nohup:
pkill -f openclawStep 2 — 在新设备确认 Gateway 还在运行:
ssh USER@HOST 'pgrep -af openclaw | grep -v pgrep'如果没在运行,重新启动:
ssh USER@HOST 'cd ~ && nohup openclaw gateway run > /tmp/openclaw-gateway.log 2>&1 &'Step 3 — 发条消息测试!随便在 Discord 或飞书说点什么,看新设备上的 Agent 是否回复。
💡 提醒:如果你在克隆之前就已经 SSH 到新设备,那个终端窗口里的环境变量是旧的。 请关掉旧终端,重新 SSH 登录,这样
node、openclaw、claude等命令才能正常使用。准备好了告诉我,我帮你验证 ✨
4.3 Verify clone works
After user confirms they've done the switch, ask them to test:
- 💬 消息测试 — "在 Discord/飞书上给 Agent 发条消息,看看有没有回复?"
- 🧠 记忆测试 — "问问新设备上的 Agent:'你还记得我是谁吗?'"
- 🔧 工具测试 — "让新 Agent 执行一个简单命令,比如 '帮我看看现在几点'"
Wait for user to confirm each test passed.
4.4 Celebration! 🎉
After all tests pass, send a celebration message:
🎉🎉🎉 克隆成功!你的 AI Agent 已经在新设备上活过来了!
📋 克隆总结:
- 📦 打包:X 步完成,Y MB 打包
- 🚀 传输:SHA256 校验通过
- ⚙️ 安装:基础环境 + OpenClaw 全部就绪
- 🔌 连接:Discord ✅ / 飞书 ✅
- 🧠 记忆:完整保留
🧹 后续清理(3-7 天后):
- 新设备上删除临时文件:
rm ~/openclaw-migration-pack.tar.gz ~/setup.sh ~/deploy.sh ~/migration-instructions.md- (可选)旧设备移除 sudoers:
sudo rm /etc/sudoers.d/migration- (可选)旧设备关闭服务:
systemctl --user disable openclaw-gateway🦁 Enjoy your new home!
Phase 5: Fallback
If new device OpenClaw did not start correctly:
-
Ask user to SSH to new device and run Claude Code for diagnosis:
ssh USER@HOST claude '帮我排查 OpenClaw 为什么没起来,检查日志和配置' -
If diagnosis fails or user wants to roll back → restart old device:
# On old device systemctl --user start openclaw-gateway -
Tell user: "Old device restored. New device deployment failed — please check logs and retry."
Note:
scripts/generate-instructions.shgenerates~/migration-instructions.mdas a fallback clone guide. If full automation fails, user can SSH to new device and follow the document manually.
Troubleshooting
See references/troubleshooting.md for common issues and solutions.