Create and Restore Snapshots

View as Markdown

NemoClaw snapshots preserve manifest-defined sandbox state before destructive or state-changing operations. They are the preferred backup and restore path.

When to Create a Snapshot

  • Before running nemoclaw <name> destroy.
  • Before major NemoClaw version upgrades.
  • Periodically, if you have invested time customizing your agent.

Understand Snapshot Contents

Snapshots capture the manifest-declared snapshot state directories and store them in ~/.nemoclaw/rebuild-backups/<name>/. Agent manifests can also declare durable top-level state files. Treat snapshot directories as private local data.

Inside an OpenClaw sandbox, ~ expands to /sandbox, not to the OpenClaw workspace. Files such as ~/USER.md and ~/SOUL.md are therefore outside OpenClaw’s managed state and are not included in snapshots. Store them as $OPENCLAW_WORKSPACE_DIR/USER.md and $OPENCLAW_WORKSPACE_DIR/SOUL.md so snapshot and restore operations preserve them.

Before NemoClaw marks a snapshot complete, it strips recognized credential values from copied JSON, YAML, and .env files. It preserves recognized dependency lockfiles byte for byte when they contain only dependency metadata. This behavior includes installed npm .package-lock.json files. It omits a recognized lockfile when the file is invalid or contains any of these values:

  • A credential field.
  • A provider-shaped secret outside a dependency URL.
  • URL user information.
  • A credential-bearing query parameter.

Dependency names in lockfile maps do not count as credential fields. NemoClaw also preserves valid, credential-free node_modules/**/package.json manifests byte for byte because dependency names can match credential field names. It omits an installed package manifest when the file contains invalid JSON, a credential or authentication field, a provider-shaped secret, or a credential-bearing URL. It continues to sanitize configuration and .env files inside installed dependency trees. It preserves OpenShell credential placeholders so rebuild can reattach the host-side provider. If NemoClaw cannot sanitize a copied configuration or environment file, it omits that file from the snapshot. If it cannot remove the unsafe file, snapshot creation returns an error. It deletes the incomplete backup when cleanup succeeds and reports when the backup remains. This sanitization uses an isolated python3 helper on POSIX hosts to keep reads, replacements, and removals anchored to opened directory descriptors. If a copied file or parent directory changes identity during the operation, snapshot creation fails closed instead of following the changed path.

Snapshots preserve sandbox registry metadata that affects rebuild behavior, including custom policy presets applied with policy add --from-file or policy add --from-dir and baseline network policy entries excluded with policy exclude. When you restore a snapshot, NemoClaw replays those recorded custom presets with their stored YAML content, so you do not need the original preset files on disk, and rebuild continues to apply the recorded baseline exclusions.

The target sandbox’s current agent manifest remains authoritative for directory and state-file restore behavior. NemoClaw rejects the restore when the snapshot’s agent, config directory, any snapshot directory, state-file path, or state-file strategy conflicts with that manifest. Restore limits directory cleanup to state directories authorized by both the snapshot and the current manifest. It preserves target-only directories and directories whose backup failed.

For managed images, NemoClaw applies the current manifest’s managed config merge rules by default and does not fall back to whole-file replacement. For Deep Agents targets, whole-file config replacement is limited to sandboxes created from a custom Dockerfile.

Create and List Snapshots

$nemoclaw my-assistant snapshot create
$nemoclaw my-assistant snapshot list

snapshot list prints a table of version, name, timestamp, and path. NemoClaw computes versions (v1, v2, through vN) from timestamp order, so vN is always the newest snapshot.

snapshot create requires shields to be down. Snapshot creation and restore share the per-sandbox transition lock with the shields auto-restore timer.

If a timed shields-down window expires during snapshot work, the deadline gate blocks new mutations and waits for the exact snapshot owner to finish without signaling it. Snapshot work does not bypass recovery for an expired shields-down window. Follow Timed Shields Windows to correct state-directory failures or complete exact-generation recovery before you rerun nemoclaw <name> snapshot create.

Tag a snapshot with a human-readable label:

$nemoclaw my-assistant snapshot create --name before-upgrade

When a directory or state file cannot be captured, snapshot create reports the failed items, removes the incomplete snapshot, and exits nonzero. snapshot list shows no new entry, so a later restore cannot select a capture that never completed. If removal fails, the command reports the listed snapshot path. Remove that directory manually before you run snapshot restore because the incomplete capture remains selectable.

Restore a Snapshot

Restore the latest snapshot:

$nemoclaw my-assistant snapshot restore

Pass an exact version, name, or timestamp to select a specific snapshot. Use the exact timestamp from snapshot list; a timestamp prefix does not select a snapshot.

$nemoclaw my-assistant snapshot restore v3
$nemoclaw my-assistant snapshot restore before-upgrade
$nemoclaw my-assistant snapshot restore 2026-04-14T09-40-09-760Z

Post-restore policy reconciliation is best-effort. NemoClaw warns and continues the remaining restore steps in these cases:

  • NemoClaw cannot verify whether a custom policy owns the live observability-otlp-local policy entry.
  • The built-in observability-otlp-local policy preset has drifted or cannot be inspected.
  • NemoClaw cannot add or remove a recorded policy preset.

The live network policy can then retain unwanted egress or omit expected egress until you repair the named preset. After a warning, run nemoclaw <name> policy list. Confirm that the named preset is recorded in the sandbox registry and active on the gateway, or absent from both.

To clone a snapshot into a different sandbox name, pass --to <name>. If the destination sandbox already exists, NemoClaw refuses to overwrite it unless you pass --force:

$nemoclaw my-assistant snapshot restore before-upgrade --to my-assistant-clone
$nemoclaw my-assistant snapshot restore before-upgrade --to my-assistant-clone --force --yes

Cross-sandbox restore from a stopped source is available for Docker- and VM-driver sandboxes. For a stopped source, its registry entry must record both the sandbox image and a complete inference route; NemoClaw creates the destination from the recorded image. NemoClaw stops before creating or replacing the destination when either record is missing, and directs you to run nemoclaw onboard when no image is recorded. For a Kubernetes-driver source, the pod image must remain resolvable through its gateway.

For a new destination, NemoClaw waits for the owning gateway to report the sandbox as Ready with a valid live identity. It checks that identity again immediately before registration. NemoClaw assigns the destination a new lifecycle generation instead of copying the source sandbox’s generation.

If the destination is not Ready with the same valid identity, the restore exits nonzero before registration or state restore. The OpenShell sandbox remains created but unregistered, so --force cannot select it for deletion. Run the exact owner-scoped deletion command printed by the failure:

$openshell sandbox delete -g '<owning-gateway>' '<destination>'

After OpenShell deletes the destination, rerun the original snapshot restore --to command.

For dashboard-enabled agents, NemoClaw allocates the destination sandbox its own dashboard port instead of reusing the source port. If no port is available, restore stops before deleting an existing --force destination.

After NemoClaw creates the destination, it waits for the managed OpenClaw supervisor to pass a bounded readiness check before it applies snapshot state. If the check fails, the command leaves the destination registered without restored snapshot state and exits nonzero. Correct the reported supervisor failure, then run nemoclaw <destination> destroy or rerun the restore with --force.

The force-overwrite path restores and verifies lockdown on a destination with an active shields timer, then revokes that timer before it deletes the destination. It clears the remaining local shields state only after deletion succeeds, before a same-name replacement is created.

Restore Agent Configuration Safely

The nemoclaw <name> rebuild command uses the same snapshot mechanism automatically. NemoClaw rejects unsafe symlinks and special files inside sandbox state during backup creation. It records multiply-linked regular files and archives each path as a separate regular file.

Snapshot restore performs a targeted repair for legacy .openclaw-data symlinks that older images created. Snapshots also preserve user-owned openclaw.json settings.

During rebuild or restore, NemoClaw merges those settings with the freshly generated runtime config so current provider placeholders, messaging enablement, and gateway state win over stale snapshot values. If the restored config cannot be parsed or applied safely, NemoClaw stops the restore instead of replacing the generated config with an unsafe fallback.

OpenClaw’s device identity keys and paired-device tokens are intentionally excluded from snapshots because backup sanitization scrubs them beyond use. Snapshot state replacement does not overwrite the destination sandbox’s gateway pairing files, even when an older snapshot still contains them. After a cross-sandbox restore creates the destination, NemoClaw establishes gateway pairing and verifies it with an authenticated agent run. If verification fails, the restored state remains in the destination and the command exits nonzero. Run nemoclaw <destination> connect to retry pairing before you run an agent. OpenClaw regenerates its device identity on demand.

Back Up Every Registered Sandbox

Run nemoclaw backup-all before broad maintenance such as nemoclaw update, nemoclaw upgrade-sandboxes, or an OpenShell gateway migration.

$nemoclaw backup-all

backup-all walks the sandboxes registered on the host, creates a snapshot for each eligible running or temporarily started sandbox, and stores the snapshot bundles under ~/.nemoclaw/rebuild-backups/<name>/. If a registered docker-driver sandbox’s container is stopped, backup-all starts the container for the duration of the backup and returns it to its stopped state afterward. If the container cannot be returned to the stopped state, the backup run fails and reports that the container was left running. If a sandbox is not running and its container cannot be started this way, start the sandbox or its container and rerun nemoclaw backup-all.

For each eligible sandbox, backup-all holds one lifecycle transaction through the complete backup. Within that transaction, it starts a stopped container when required, opens a 30-minute shields-down window when the sandbox starts with Shields up, copies sandbox state, restores the previous Shields state, and returns any container it started to the stopped state. A sandbox that starts with Shields down remains down. If the timer expires during the transaction, the deadline gate blocks new mutations and waits for the exact backup owner to finish without signaling it. An initial lock or unlock failure marks that sandbox as failed, and backup-all continues with the next sandbox. NemoClaw attempts to restore the previous Shields state before it processes the next sandbox, including when the backup fails. If lockdown cannot be restored, backup-all stops and does not process the remaining sandboxes. For an ordinary relock failure, correct the reported issue and follow the printed recovery command before rerunning nemoclaw backup-all. If NemoClaw reports that Backup Shields policy recovery failed, do not retry Shields up from the mutable live policy. Restore a trusted backup, recreate the sandbox, and then rerun nemoclaw backup-all.

When a backup fails, NemoClaw identifies the affected state item and reports permission denied, tar read error, or absent after extraction when available. Use nemoclaw <name> snapshot list and nemoclaw <name> snapshot restore to inspect or restore one sandbox’s bundles later.