Developers and small teams who already run OpenClaw on a local Mac and must move Gateway plus agent memory to a KVMNODE dedicated cloud Mac—or who plan a region change, M4 Pro upgrade, or node rebuild and need MEMORY and skills to survive hit a familiar 2026 failure mode: the install script succeeds but the agent feels brand new because the workspace path moved from ~/.openclaw/workspace to workspace-main or another per-agent directory without a rollback tarball. This article gives a four-root “post-migration amnesia” table, a must-pack versus do-not-copy directory list, six steps from local tarball to openclaw doctor on the cloud host, and a tier decision tree when a large workspace shares the machine with Xcode side builds. Read it with the official install-daemon, diagnostic ladder, channels probe, persistence baseline, and headless SSH walkthrough so you do not repeat “config only, no memory” on the cloud.
01

2026 OpenClaw feels like a fresh agent after migration: four roots you can paste into a change record

OpenClaw keeps configuration and credentials under ~/.openclaw/ and long-term memory, persona, and skills in the workspace tree (default ~/.openclaw/workspace; multi-agent setups may use workspace-{agentId}). Community reports around 2026.3.x describe moves from a single workspace to per-agent paths where MEMORY.md and memory/YYYY-MM-DD.md were not auto-copied: Gateway still starts, but curated memory reads an empty directory—hence “the upgrade wiped the brain.” If you have not separated “config loss” from “workspace loss,” you will burn time swapping models or re-wiring channels.

The second root is scp of openclaw.json only, without credentials/, sessions/, and workspace files such as skills/, AGENTS.md, and SOUL.md; the dashboard may load while tools behave like first onboard. The third is launchd environment drift versus an interactive shell: plist WorkingDirectory or OPENCLAW_* still point at old paths after the cloud move. The fourth is skipping openclaw doctor across a large version gap, leaving schema migration half-done and fields silently reverting to defaults. Align with persistence baseline first—state directories must not live on team sync folders—or high-frequency small writes will amplify lock contention on sync layers.

01

Per-agent path change without copy: old workspace/* remains on disk while Gateway points at an empty workspace-main.

02

Config without workspace: openclaw.json present, MEMORY.md missing.

03

Daemon working directory drift: launchd still references a laptop path or a released mount on the old node.

04

Version gap without doctor: schema and binary mismatch; fields fall back quietly.

05

Treating device tokens as portable files: copy fails; re-pair on the target and log it separately.

After official install-daemon on the cloud host, migration acceptance should freeze four lines: workspace absolute path, openclaw version, doctor exit code, first business message id or timestamp. Any region or tier change must update one of those lines and retain the previous tarball hash for rollback—not “we probably backed up.” If channels misbehave post-migration, run the channels probe on listen ports and token truth before blaming memory directories.

Platform owners should split “migration” and “greenfield install” templates: greenfield may start from an empty workspace; migration must attach tarball checksums and doctor output. Mixing templates makes “accept empty memory” look like the default in review and leaves no story for stakeholders when curated memory vanishes.

02

Pre-migration backup list: must pack, nice to pack, and never raw-copy

The goal is not “tar the entire home directory” but Gateway on the target reading the same memory and skill boundaries after doctor. Must-pack items: ~/.openclaw/openclaw.json, credentials/, sessions/ when you rely on session continuity, and the full workspace tree including at least MEMORY.md, memory/, skills/, and USER.md as your team actually uses them. Optionally include seven days of rotated logs from your persistent log sink for alignment with the diagnostic ladder, but do not bloat the production migration tarball with giant logs.

Paste the table below into the change record “migration package contents” field and run it beside PATH checks from the headless SSH walkthrough: prove what is inside the tarball, then prove what the target read.

Path / objectRequiredCloud Mac notes
openclaw.json + credentialsYesTighten permissions after extract; never team sync folders
Full workspace (MEMORY, memory/, skills/)YesMatch target agentId directory names
sessions/PolicyLarge trees: migrate active subset only
Device tokens / keychain itemsDo not copyRe-pair on target
LaunchAgent plist overwriteCautionFix paths and Label, reinstall daemon

No MEMORY.md in the tarball means reinstalling Gateway, not migrating.

Record shasum -a 256 on the source and attach it to the change record to catch truncated SCP transfers. Move archives over approved encrypted channels (bastion rsync) rather than long-lived public object buckets holding API credentials. When workspace exceeds a few gigabytes—large skill assets or memory logs—size the target SSD tier before transfer; that ties directly to the M4 Pro decision tree below.

03

Command block: local tarball, upload, and path checks before doctor

Replace versions with your frozen openclaw build and attach tarball shasum -a 256 to the change record. Confirm matching Node major versions on source and target; otherwise install on the target first, then unpack workspace, avoiding “new binary, old memory” half-states. If CLI is not installed on the cloud host, finish official install before unpack—do not reverse the order.

bash
openclaw --version
ls -la ~/.openclaw/workspace*
tar -czf openclaw-migrate-$(date +%Y%m%d).tgz \
  -C "$HOME" .openclaw/openclaw.json \
  -C "$HOME" .openclaw/credentials \
  -C "$HOME" .openclaw/workspace
shasum -a 256 openclaw-migrate-*.tgz
scp openclaw-migrate-*.tgz user@cloud-mac:~/
ssh user@cloud-mac 'openclaw gateway stop || true'
ssh user@cloud-mac 'tar -xzf openclaw-migrate-*.tgz -C $HOME && openclaw doctor'

Tip: For workspace-main or other per-agent folders, change tar -C paths to your real workspace-* names; keep non-interactive PATH checks aligned with the headless SSH walkthrough.

Do not gateway start immediately after extract: run openclaw doctor, save full stdout to the change record, and compare MEMORY.md timestamps with the source. When doctor suggests a workspace path migration, merge rather than overwrite unless the record explicitly accepts empty memory. Run install-daemon only after doctor passes so plist paths do not point at empty directories mid-merge.

04

Six steps: rollback-friendly path from local pack to first message on cloud Mac

01

Freeze versions and record workspace paths: capture openclaw --version and ls ~/.openclaw/workspace* on the change record.

02

Stop source Gateway and build tarball: json, credentials, full workspace; write sha256.

03

Prepare non-sync target paths: root free space at least 1.5× unpacked size.

04

Upload and stop target Gateway: avoid dual-writing sessions during extract.

05

Doctor then install-daemon: align plist truth with the official path.

06

First-message acceptance: MEMORY snippet, channels probe if wired, one-line gateway health JSON.

When the six steps complete, the ticket should answer which lever moved: tarball contents, workspace path, doctor result, or tier. Even KVMNODE region-only moves should archive a tarball in artifact storage—region changes often shift IP and egress policy; rollback needs memory plus config, not a blank Gateway. During acceptance week, snapshot openclaw doctor daily and map fields to L1/L2 on the diagnostic ladder.

05

Region and tier: M4 versus M4 Pro when workspace, skills, and Xcode share one host

Workspace growth often hits disk before CPU: many memory/*.md files, skill repos, and parallel downloads stress disk IOPS and unified memory page cache. If Xcode or Flutter archive runs on the same dedicated host after migration, track root utilization after unpack, Gateway health P95, and memory pressure during parallel builds during acceptance week.

A

Unpacked workspace size: above 30GB or weekly growth above 5GB—rotate memory and skill assets before tier jumps.

B

Unified memory pressure: log memory pressure events when builds and Gateway peak together; attach counts to procurement.

C

Region and RTT: tarball arrival is not data-plane colocation—align Git and artifacts before locking M4 Pro.

ProfileM4 16GB/25624GB/512M4 Pro high unified memory
Light workspace + single GatewayOKSaferOften excess
Large MEMORY + many skills + daily memory logsRiskPreferredDepends on parallelism
Migration week with iOS CI and AgentNot recommendedMediumPreferred

Note: “Moved to cloud” is not backup—rebuilds and region moves can wipe local disks; tarball retention must be team policy.

A personal Mac as the only backup source yields unpredictable backup windows with lid-close sleep and no contractible 7×24 acceptance; cron on laptops breaks on user switches and permission prompts. Sleep-heavy notebooks are poor hosts for ongoing memory log writes after migration. For teams that need auditable, region-flexible, tier-upgradable dedicated hosts for OpenClaw memory plus Gateway, KVMNODE Mac Mini cloud rental is usually the better fit: dedicated Apple Silicon, six regions, day-through-month terms, and the same placement language for “pack—unpack—doctor” and CI. Order via order page, runbooks in the Help Center, SKUs on pricing.