Skip to main content

How Backup Works

One Script, One Place

~/.ldm/bin/ldm-backup.sh runs daily at midnight via LDM Dev Tools.app. It backs up everything to ~/.ldm/backups/, then compresses it to iCloud for offsite.

What Gets Backed Up

SourceMethodWhat’s in it
~/.ldm/memory/crystal.dbsqlite3 .backupYour irreplaceable memories (all AIs)
~/.ldm/agents/cp -aPersonality files, journals, daily logs
~/.ldm/state/cp -aConfig, version, registry
~/.ldm/config.jsoncpWorkspace pointer, org
~/.openclaw/memory/main.sqlitesqlite3 .backupOpenClaw conversations
~/.openclaw/memory/context-embeddings.sqlitesqlite3 .backupEmbeddings
~/.openclaw/workspace/tarShared context, daily logs
~/.openclaw/agents/main/sessions/tarOpenClaw session JSONL
~/.openclaw/openclaw.jsoncpOpenClaw config
~/.claude/CLAUDE.mdcpClaude Code instructions
~/.claude/settings.jsoncpClaude Code settings
~/.claude/projects/tarClaude Code auto-memory + transcripts
Workspace directorytar (excludes node_modules, .git/objects)Entire workspace
NOT backed up: node_modules/, .git/objects/ (reconstructable), tools (reinstallable), ~/.claude/cache.

Backup Structure

~/.ldm/backups/2026-03-24--09-50-22/
  ldm/
    memory/crystal.db
    agents/
    state/
    config.json
  openclaw/
    memory/main.sqlite
    memory/context-embeddings.sqlite
    workspace.tar
    sessions.tar
    openclaw.json
  claude/
    CLAUDE.md
    settings.json
    projects.tar
  wipcomputerinc.tar

iCloud Offsite

After local backup, the entire dated folder is compressed and copied to iCloud. One file per backup. iCloud syncs it across devices. Rotates to 7 days.

How to Run

~/.ldm/bin/ldm-backup.sh                    # run backup now
~/.ldm/bin/ldm-backup.sh --dry-run          # preview what would be backed up
~/.ldm/bin/ldm-backup.sh --keep 14          # keep 14 days instead of 7
~/.ldm/bin/ldm-backup.sh --include-secrets   # include ~/.ldm/secrets/

How to Restore

~/.ldm/bin/ldm-restore.sh                           # list available backups
~/.ldm/bin/ldm-restore.sh 2026-03-24--09-50-22      # restore everything
~/.ldm/bin/ldm-restore.sh --only ldm <backup>       # restore only crystal.db + AI data
~/.ldm/bin/ldm-restore.sh --only openclaw <backup>  # restore only OpenClaw data
~/.ldm/bin/ldm-restore.sh --from-icloud <file>      # restore from iCloud tar
~/.ldm/bin/ldm-restore.sh --dry-run <backup>        # preview
After restore: openclaw gateway restart then crystal status to verify.

Schedule

WhatWhenHow
BackupMidnightcron -> LDM Dev Tools.app -> ~/.ldm/bin/ldm-backup.sh
One cron entry. One script. One app. Verification is built into the script (exit code + log).

Config

Backup reads from two config files:
  • ~/.ldm/config.json … workspace path, org name
  • Workspace settings/config.json … backup.keep (retention days), paths.icloudBackup

Logs

~/.ldm/logs/cron.log (via LDM Dev Tools.app stdout)