Personality Backup
Encrypted backup of agent identity, memory, and workspace data.
Prerequisites
p7zip-full(7-zip CLI)- Python 3 with
smtplib(for email delivery) - A backup password stored in a file
Configuration
Create ~/.openclaw/secrets/backup-config.json:
{
"password_file": "/home/jan/.openclaw/secrets/backup-password.txt",
"password_field": "Password",
"delivery": "email",
"email": {
"to": "user@example.com",
"from": "agent@example.com",
"smtp_host": "mail.example.com",
"smtp_port": 465,
"smtp_user": "agent@example.com",
"smtp_pass_env": "BACKUP_SMTP_PASS"
},
"local": {
"dir": "/home/jan/backups"
},
"workspace": "/home/jan/.openclaw/workspace",
"secrets_dir": "/home/jan/.openclaw/secrets",
"config_file": "/home/jan/.openclaw/openclaw.json",
"agent_name": "Agent",
"agent_emoji": "",
"personality_files": ["SOUL.md", "IDENTITY.md", "USER.md", "AGENTS.md", "MEMORY.md", "TOOLS.md"],
"backup_memory": true,
"backup_secrets": true,
"backup_config": true,
"backup_projects": true,
"backup_scripts": true,
"project_excludes": ["node_modules", ".git", "__pycache__", "*.mp4", "*.mp3", "*.wav"],
"generate_restore_guide": true
}
All fields have sensible defaults. Only password_file and delivery settings are required.
Password File Format
The password file should contain a line: Password: YOUR_SECRET_KEY
Or set password_field to null and the entire file content is used as the password.
Usage
Run a backup
bash scripts/backup.sh /path/to/backup-config.json
Set up daily cron
echo "0 3 * * * bash $(pwd)/scripts/backup.sh /path/to/backup-config.json" | crontab -
Delivery Methods
- email — Sends encrypted archive as email attachment via SMTP
- local — Saves archive to a local directory
SMTP password: set via the environment variable named in smtp_pass_env, or put it directly in smtp_pass (less secure).
Restore
The backup includes a generated RESTORE.md with step-by-step instructions for restoring onto a fresh OpenClaw installation. The restore guide is customized with the agent's name and configuration.