Безпечна міграція OpenClaw на новий Mac без втрати памʼяті та налаштувань
Короткий висновок
Безпечна міграція OpenClaw на новий Mac — це не копіювання однієї папки ~/.openclaw. Правильний підхід: розділити систему на declarative layer, memory layer, secrets layer і runtime state, а потім переносити їх контрольовано.
Для мого сетапу оптимальна модель така:
- macOS baseline через Nix —
~/Projects/mac-config,nix-darwin,home-manager, Homebrew bundle. - OpenClaw runtime/config —
~/.openclaw/openclaw.json, агенти, workspace, cron, LaunchAgents. - Памʼять і knowledge base —
~/Projects/knowledge-baseяк canonical encrypted Obsidian/knowledge vault;~/.openclaw/workspace/MEMORY.mdіmemory/*.mdяк локальна operational memory. - Secrets —
.env, provider keys, git-crypt key, OAuth/session state, SSH/GPG/age keys; переносити окремо, не комітити в репозиторії. - Validation gates —
openclaw status, web search, memory recall, Telegram, Hugo build, cron inventory, local Hugo servers.
Головне правило: спочатку backup і inventory, потім Nix bootstrap, потім OpenClaw restore, потім validation, і тільки після цього cutover.
Що саме потрібно зберегти
1. Declarative system config
Це має бути основа нового Mac:
~/Projects/mac-configflake.nixhosts/openclaw.nixmodules/home/*.nixBrewfilejustfile.sops.yaml
У цьому сетапі openclaw host вже описаний як multi-user Mac:
- admin user:
user - day-to-day OpenClaw user:
openclaw - OpenClaw package встановлюється через official
nix-openclawflake - firewall вмикається declaratively
- home-manager налаштовує shell, git, tmux, direnv, obsidian skeleton, dev tooling
Це правильний pattern: новий Mac не налаштовується вручну кліками; він відтворюється з Git.
2. OpenClaw config and runtime
Критичні файли й директорії:
~/.openclaw/openclaw.json
~/.openclaw/.env
~/.openclaw/cron/jobs.json
~/.openclaw/plugins/
~/.openclaw/identity/
~/.openclaw/agents/
~/.openclaw/workspace/
~/.openclaw/workspace/MEMORY.md
~/.openclaw/workspace/memory/
~/.openclaw/workspace/AGENTS.md
~/.openclaw/workspace/SOUL.md
~/.openclaw/workspace/USER.md
~/.openclaw/workspace/TOOLS.md
Не все з цього однаково переносити.
| Path | Переносити? | Коментар |
|---|---|---|
openclaw.json |
так | основна конфігурація gateway, tools, plugins, channels |
.env |
так, але encrypted/manual | provider keys; не в Git plaintext |
cron/jobs.json |
так | автоматизації, daily jobs, Hugo publishing |
workspace/MEMORY.md |
так | curated long-term memory |
workspace/memory/*.md |
так | daily operational memory |
workspace/AGENTS.md, SOUL.md, USER.md |
так | persona, user prefs, operating rules |
agents/main/sessions/ |
бажано snapshot | корисно для continuity/debug, але не primary source of truth |
cache/ |
ні | можна відновити автоматично |
logs/ |
optional | тільки якщо потрібна forensic/debug історія |
exec-approvals.json |
ні/обережно | runtime approvals не повинні сліпо переноситись |
3. Canonical memory / Obsidian / knowledge vault
Для довгої памʼяті canonical source має бути не chat history, а vault:
~/Projects/knowledge-base
Важливі частини:
~/Projects/knowledge-base/openclaw/_index.md
~/Projects/knowledge-base/openclaw/CLAUDE.md
~/Projects/knowledge-base/openclaw/_shared/conventions.md
~/Projects/knowledge-base/openclaw/publishing/
~/Projects/knowledge-base/openclaw/sessions/
Цей repo має бути encrypted через git-crypt. На новому Mac потрібно мати ключ для unlock, наприклад:
~/Documents/git-crypt-knowledge-base.key
Правило: OpenClaw workspace memory — це runtime memory; knowledge-base — це canonical portable memory.
Якщо є конфлікт між старою chat памʼяттю і vault — виграє vault.
4. Publishing/Hugo repos
Для Hugo-публікацій потрібні локальні репозиторії:
~/Projects/devsecops-hugo
~/Projects/study-hugo
~/Projects/health-fitness
~/Projects/aleksom.com
Ключові очікування:
devsecops-hugoпушиться вorigin/main, Cloudflare Pages деплоїть автоматично.study-hugoлокально працює на1314.devsecops-hugoлокально працює на1313.health-fitnessлокально працює на1315.
Для OpenClaw host є LaunchAgents:
~/Library/LaunchAgents/ai.openclaw.hugo.devsecops.plist
~/Library/LaunchAgents/ai.openclaw.hugo.studdy.plist
~/Library/LaunchAgents/ai.openclaw.hugo.health-fitness.plist
Їх можна переносити, але краще з часом зробити declarative через Nix/home-manager. Ручні LaunchAgents — це acceptable runtime state, але не ідеальний long-term pattern.
Pre-migration checklist на старому Mac
Крок 1. Зафіксувати поточний стан
openclaw status > ~/Desktop/openclaw-status-before-migration.txt
openclaw config validate > ~/Desktop/openclaw-config-validate-before-migration.txt
Додатково:
git -C ~/Projects/mac-config status --short
git -C ~/Projects/knowledge-base status --short
git -C ~/Projects/devsecops-hugo status --short
git -C ~/Projects/study-hugo status --short
Якщо є uncommitted зміни — або commit, або свідомо включити в backup. Не починати міграцію з dirty state, якщо це не вимушено.
Крок 2. Зробити inventory OpenClaw
find ~/.openclaw -maxdepth 3 -type f \
| sed "s#$HOME#~#" \
| sort \
> ~/Desktop/openclaw-file-inventory.txt
Окремо зберегти список cron jobs:
jq '.jobs // .' ~/.openclaw/cron/jobs.json \
> ~/Desktop/openclaw-cron-jobs-before-migration.json
Якщо структура jobs.json інша — не страшно, головне мати readable snapshot.
Крок 3. Перевірити Git remotes
for repo in mac-config knowledge-base devsecops-hugo study-hugo aleksom.com; do
echo "--- $repo"
git -C ~/Projects/$repo remote -v || true
git -C ~/Projects/$repo branch --show-current || true
git -C ~/Projects/$repo status --short || true
done
Ціль: знати, що можна відновити з Git, а що є тільки локально.
Крок 4. Зробити encrypted backup OpenClaw state
Не варто робити plaintext tarball з secrets. Мінімально — створити archive і зашифрувати age/GPG або покласти в 1Password/secure storage.
Приклад із age:
mkdir -p ~/Backups/openclaw-migration
cd ~
tar --exclude='.openclaw/cache' \
--exclude='.openclaw/logs' \
--exclude='.openclaw/tmp' \
-czf ~/Backups/openclaw-migration/openclaw-state-$(date +%Y%m%d-%H%M).tar.gz \
.openclaw
age -r '<AGE_PUBLIC_KEY>' \
-o ~/Backups/openclaw-migration/openclaw-state-$(date +%Y%m%d-%H%M).tar.gz.age \
~/Backups/openclaw-migration/openclaw-state-*.tar.gz
Після encryption plaintext archive краще видалити через trash, не rm:
trash ~/Backups/openclaw-migration/openclaw-state-*.tar.gz
Якщо trash недоступний — встановити або видаляти тільки після перевірки encrypted archive.
Крок 5. Зробити окремий backup secrets
Секрети не змішувати з operational files.
Перевірити наявність:
ls -la ~/.openclaw/.env
ls -la ~/.ssh
ls -la ~/.config/sops/age/keys.txt
ls -la ~/Documents/git-crypt-knowledge-base.key
Що треба перенести окремо:
~/.openclaw/.env— API keys, provider secrets.~/.ssh/id_ed25519*або новий SSH key + GitHub registration.~/.config/sops/age/keys.txt— якщо використовується sops-nix.~/Documents/git-crypt-knowledge-base.key— unlock knowledge-base.- GPG keys, якщо потрібні для commits/signing/decryption.
- 1Password/Vault recovery матеріали.
Best practice: краще згенерувати нові SSH keys на новому Mac і додати їх у GitHub, ніж бездумно переносити старі. Але git-crypt/SOPS keys треба мати доступними, інакше encrypted vault не відкриється.
Крок 6. Commit and push canonical repos
cd ~/Projects/mac-config
git status --short
# якщо є важливі зміни:
git add -A && git commit -m "Update mac OpenClaw migration baseline" && git push
cd ~/Projects/knowledge-base
git status --short
# якщо є важливі зміни:
git add -A && git commit -m "Update OpenClaw migration notes" && git push
Для Hugo:
cd ~/Projects/devsecops-hugo
hugo --minify
git status --short
# commit/push якщо є зміни
Bootstrap нового Mac через Nix
Крок 1. Підготувати macOS
На новому Mac:
- Встановити macOS updates.
- Увійти в admin account
user. - Увімкнути FileVault.
- Увімкнути firewall.
- Встановити Xcode Command Line Tools:
xcode-select --install
Крок 2. Запустити mac-config bootstrap
Для OpenClaw host:
curl -fsSL https://raw.githubusercontent.com/omitsalex/mac-config/main/bootstrap.sh \
| bash -s -- --hostname openclaw
Або вручну:
git clone https://github.com/omitsalex/mac-config.git ~/mac-config
cd ~/mac-config
./install.sh --hostname openclaw
Це має:
- встановити Nix;
- застосувати
nix-darwinconfig; - створити day-to-day user
openclaw, якщо його ще немає; - встановити OpenClaw package через Nix;
- налаштувати home-manager для
openclaw; - застосувати базові macOS defaults.
Після цього логінитись як openclaw для щоденної роботи.
Крок 3. Перевірити Nix baseline
cd ~/mac-config
just sysinfo
just build openclaw
Якщо треба застосувати зміни:
sudo darwin-rebuild switch --flake .#openclaw
Або з admin account згідно з поточним mac-config flow.
Restore OpenClaw
Крок 1. Встановити базову директорію
Під user openclaw:
mkdir -p ~/.openclaw
Крок 2. Відновити encrypted backup
mkdir -p ~/Restore/openclaw
age -d -i ~/.config/sops/age/keys.txt \
-o ~/Restore/openclaw/openclaw-state.tar.gz \
~/Backups/openclaw-migration/openclaw-state-YYYYMMDD-HHMM.tar.gz.age
tar -xzf ~/Restore/openclaw/openclaw-state.tar.gz -C ~
Перевірити permissions:
chmod 700 ~/.openclaw
chmod 600 ~/.openclaw/.env 2>/dev/null || true
chmod 600 ~/.openclaw/openclaw.json
Крок 3. Не переносити blind runtime state, якщо версія OpenClaw суттєво змінилась
Якщо новий Mac має новішу OpenClaw версію, обережно з такими директоріями:
~/.openclaw/cache
~/.openclaw/tmp
~/.openclaw/exec-approvals.json
Їх краще не переносити або видалити після restore.
Для session history можна зберегти:
~/.openclaw/agents/main/sessions/
Але operational truth має бути у:
~/.openclaw/workspace/MEMORY.md
~/.openclaw/workspace/memory/
~/Projects/knowledge-base
Restore knowledge-base / Obsidian memory
Крок 1. Clone canonical vault
mkdir -p ~/Projects
cd ~/Projects
git clone https://github.com/omitsalex/knowledge-base.git
cd knowledge-base
Крок 2. Unlock git-crypt
git-crypt unlock ~/Documents/git-crypt-knowledge-base.key
Перевірити, що файли readable:
sed -n '1,80p' openclaw/_index.md
sed -n '1,120p' openclaw/_shared/conventions.md
Крок 3. Перевірити Obsidian path
У mac-config/modules/home/obsidian.nix зараз skeleton орієнтований на iCloud Obsidian path:
~/Library/Mobile Documents/com~apple~CloudDocs/Obsidian
Але для OpenClaw canonical shared vault використовується:
~/Projects/knowledge-base
Best practice: не змішувати ці дві ролі.
~/Projects/knowledge-base— portable encrypted shared source of truth.- iCloud Obsidian vault — UI/convenience layer, якщо потрібен Obsidian на Apple devices.
- OpenClaw має читати/оновлювати canonical repo, коли знання повинне пережити міграцію.
Якщо хочеться бачити knowledge-base в Obsidian — додати його як окремий vault, а не копіювати вручну в iCloud без sync strategy.
Restore projects and Hugo publishing
cd ~/Projects
git clone https://github.com/omitsalex/devsecops-hugo.git
git clone https://github.com/omitsalex/study-hugo.git
git clone https://github.com/omitsalex/aleksom.com.git
Для health-fitness, якщо він ще не в GitHub, треба або:
- додати repo і пушнути перед міграцією;
- або включити його в encrypted backup;
- або перенести через
rsync.
Перевірка Hugo:
cd ~/Projects/devsecops-hugo
hugo --minify
cd ~/Projects/study-hugo
hugo --minify
cd ~/Projects/health-fitness
hugo --minify
Якщо Hugo не встановлений — він має прийти через Nix/Homebrew config. Якщо ні:
brew install hugo
Але краще додати Hugo в mac-config, якщо він є required dependency.
Restore LaunchAgents / local services
OpenClaw gateway зазвичай встановлюється як LaunchAgent через OpenClaw setup. Перевірка:
openclaw status
launchctl list | grep -i openclaw || true
Для Hugo local services:
ls -la ~/Library/LaunchAgents | grep hugo
Очікувані сервіси:
ai.openclaw.hugo.devsecops
ai.openclaw.hugo.studdy
ai.openclaw.hugo.health-fitness
Перезапуск:
launchctl kickstart -k gui/$(id -u)/ai.openclaw.hugo.devsecops
launchctl kickstart -k gui/$(id -u)/ai.openclaw.hugo.studdy
launchctl kickstart -k gui/$(id -u)/ai.openclaw.hugo.health-fitness
Перевірка портів:
curl -I http://127.0.0.1:1313/
curl -I http://127.0.0.1:1314/
curl -I http://127.0.0.1:1315/
Якщо треба доступ з домашньої мережі — Hugo має bind-итись не на 127.0.0.1, а на 0.0.0.0, а baseURL має містити LAN IP:
hugo server --bind 0.0.0.0 --baseURL http://192.168.1.x:1315/ --port 1315 --disableFastRender
Security note: LAN exposure — це не public internet, але все одно exposure. Не піднімати admin/debug endpoints на 0.0.0.0 без потреби.
Restore OpenClaw providers and tools
Config validation
openclaw config validate
openclaw status
Web search / Gemini
Поточний бажаний стан:
{
"tools": {
"web": {
"search": {
"enabled": true,
"provider": "gemini"
}
}
},
"plugins": {
"entries": {
"google": {
"enabled": true,
"config": {
"webSearch": {
"model": "gemini-2.5-flash"
}
}
}
}
}
}
Секрет має бути в:
~/.openclaw/.env
Наприклад:
GEMINI_API_KEY=...
Не комітити .env. Не вставляти ключі в Hugo notes, Obsidian plaintext або GitHub issues.
Telegram
Перевірити Telegram channel у openclaw status. Якщо bot token перенесений через .env/config, channel має бути OK.
Якщо session binding змінився, не відновлювати blind старі pairing tokens без розуміння. Краще пройти re-pairing, ніж переносити зламаний auth state.
Memory validation після міграції
Це критичний етап. Не достатньо, що OpenClaw “запустився”. Треба перевірити, що він памʼятає правильно.
1. Перевірити workspace memory
ls -la ~/.openclaw/workspace
ls -la ~/.openclaw/workspace/memory
sed -n '1,120p' ~/.openclaw/workspace/USER.md
sed -n '1,120p' ~/.openclaw/workspace/MEMORY.md
2. Перевірити canonical vault
cd ~/Projects/knowledge-base
git status --short
sed -n '1,120p' openclaw/_index.md
sed -n '1,120p' openclaw/_shared/conventions.md
3. Запитати OpenClaw контрольні питання
Після запуску в чаті:
- “Як мене звати і яка моя timezone?”
- “Де canonical knowledge vault?”
- “Які Hugo сайти в мене є і на яких портах?”
- “Які правила для cron/Hugo publishing?”
- “Який мій підхід до Terraform/Terragrunt команд?”
Правильні відповіді мають включати:
- Aleksandr, Europe/Lisbon;
~/Projects/knowledge-base;devsecops-hugo,study-hugo,health-fitness;- Hugo jobs: validate/build, commit, push to
origin main; - Terraform/Terragrunt/OpenTofu — у named
tmuxsessions.
Якщо відповіді неправильні — не продовжувати automation, спочатку виправити memory/vault.
Cutover strategy
Варіант A — conservative parallel run
Найбезпечніше:
- Старий Mac лишається включеним, але cron/automation pause або read-only.
- Новий Mac запускає OpenClaw без production-like changes.
- Перевіряються Telegram, web search, memory, Hugo builds.
- Після validation cron переноситься/активується на новому Mac.
- Старий Mac лишається backup ще 3–7 днів.
Це найкращий варіант, якщо OpenClaw керує публікаціями, reminders, Telegram або infra workflows.
Варіант B — fast cutover
Можна, але ризик вище:
- Full encrypted backup.
- Restore на новому Mac.
- Одразу зупинити OpenClaw на старому.
- Запустити на новому.
Ризик: якщо щось не перенеслось — cron може мовчки зламатися, Telegram binding може бути неправильний, або memory буде неповна.
Рекомендація: для OpenClaw краще conservative parallel run.
Security best practices
1. Не переносити secrets без ревізії
Міграція — хороший момент для rotation:
- GitHub PATs;
- OpenAI/OpenRouter/Gemini keys;
- Telegram bot token, якщо є підозра exposure;
- AWS credentials;
- SSH keys, якщо старий Mac більше не буде trusted.
2. Новий Mac = нова trust boundary
Перед тим як давати OpenClaw доступ до cloud/infra:
- FileVault on;
- firewall on;
- OS updated;
- admin user відділений від day-to-day
openclawuser; - SSH keys protected;
- 1Password/Vault доступ налаштований;
- no plaintext secret archives залишені в
Downloads/Desktop.
3. Не робити rsync ~ без фільтрів
Поганий pattern:
rsync -a ~ newmac:~
Чому погано:
- переносить cache, logs, stale sockets;
- може зламати permissions;
- переносить secrets без інвентаризації;
- змішує declarative і accidental state.
Краще переносити named artifacts:
~/.openclaw selected backup
~/Projects repos via Git
selected secrets via secure channel
LaunchAgents if needed
Documents/git-crypt key via secure storage
4. Secrets у notes — заборонено
У Hugo/Obsidian можна писати:
GEMINI_API_KEY має бути в ~/.openclaw/.env
Не можна писати:
GEMINI_API_KEY=AIza...
5. Automation після міграції вмикати поступово
Порядок:
- OpenClaw gateway.
- Telegram receive/send.
- Memory recall.
- Web search.
- Hugo local build.
- Git push to GitHub.
- Cloudflare Pages deploy.
- Cron jobs.
- Infra/Terraform tooling.
Не навпаки.
Post-migration validation checklist
OpenClaw
openclaw status
openclaw config validate
openclaw status --deep
Очікування:
- Gateway running.
- Telegram channel OK.
- Memory enabled.
- web_search provider correct.
- No plugin compatibility issues.
Git
git -C ~/Projects/mac-config status --short
git -C ~/Projects/knowledge-base status --short
git -C ~/Projects/devsecops-hugo status --short
Очікування: clean або тільки свідомі локальні зміни.
Hugo
cd ~/Projects/devsecops-hugo && hugo --minify
cd ~/Projects/study-hugo && hugo --minify
cd ~/Projects/health-fitness && hugo --minify
Cloudflare publishing path
Тестовий safe flow:
cd ~/Projects/devsecops-hugo
hugo --minify
git status --short
# якщо є тестовий або реальний пост:
git add content/notes/example.md
git commit -m "Add migration validation note"
git push origin main
Потім перевірити Cloudflare Pages deployment у UI або через публічний сайт.
Cron
jq '.jobs // .' ~/.openclaw/cron/jobs.json | head
Після першого дня перевірити:
- чи DevSecOps digest створюється;
- чи OpenClaw ideas створюються;
- чи routine jobs не спамлять Telegram;
- чи статуси пишуться у vault/notes.
Rollback plan
До остаточного cutover старий Mac не стирати.
Мінімальний rollback:
- Зупинити OpenClaw на новому Mac.
- Запустити OpenClaw на старому Mac.
- Відкотити DNS/Telegram/session expectation, якщо треба.
- Зафіксувати в knowledge-base, що cutover failed і чому.
Не робити factory reset старого Mac, доки:
- новий Mac не відпрацював хоча б 3–7 днів;
- cron jobs не пройшли повний цикл;
- Hugo publishing не зробив успішний commit/push/deploy;
- memory recall перевірений;
- secrets rotation завершена або явно відкладена.
Що варто покращити в майбутньому
1. Зробити OpenClaw LaunchAgents declarative
Зараз частина Hugo local services може бути ручними plist у ~/Library/LaunchAgents. Краще перенести їх у mac-config як home-manager launchd agents.
Перевага:
- новий Mac автоматично підніме Hugo servers;
- менше manual restore;
- конфіг портів і bind адрес буде reviewed у Git.
2. Винести backup script у mac-config
Додати команду типу:
just backup-openclaw
Вона має:
- робити inventory;
- архівувати selected OpenClaw state;
- exclude cache/logs;
- encrypt через age;
- писати manifest;
- перевіряти, що archive decryptable.
3. Регулярний restore drill
Раз на місяць корисно робити dry-run:
- decrypt backup у temp dir;
- перевірити наявність
openclaw.json,.env, memory; - перевірити
knowledge-baseunlock; - не запускати production automation.
Backup, який ніхто не restore-ив, — це припущення, не backup.
4. Окремий migration runbook у knowledge-base
Цю Hugo note варто продублювати або послати з:
~/Projects/knowledge-base/openclaw/_shared/conventions.md
~/Projects/knowledge-base/openclaw/_index.md
Бо Hugo — це published/readable knowledge, а knowledge-base — operational source of truth для майбутнього OpenClaw instance.
Final runbook: коротко
На старому Mac:
openclaw status > ~/Desktop/openclaw-status-before-migration.txt
openclaw config validate
cd ~/Projects/mac-config && git status --short
cd ~/Projects/knowledge-base && git status --short
cd ~/Projects/devsecops-hugo && hugo --minify
# encrypted backup ~/.openclaw
# secure copy .env, git-crypt key, age key, SSH/GPG material
# commit/push canonical repos
На новому Mac:
xcode-select --install
curl -fsSL https://raw.githubusercontent.com/omitsalex/mac-config/main/bootstrap.sh \
| bash -s -- --hostname openclaw
# log in as openclaw
# restore ~/.openclaw from encrypted backup
# clone ~/Projects/knowledge-base and git-crypt unlock
# clone Hugo/project repos
openclaw config validate
openclaw status
cd ~/Projects/devsecops-hugo && hugo --minify
cd ~/Projects/study-hugo && hugo --minify
Після цього:
- Перевірити Telegram.
- Перевірити memory recall.
- Перевірити Gemini/web search.
- Перевірити Hugo local servers.
- Перевірити Cloudflare deploy через push.
- Увімкнути/перевірити cron.
- Тримати старий Mac як rollback 3–7 днів.
Це не найшвидший спосіб. Це спосіб, який не втрачає памʼять, не розмазує secrets і не перетворює OpenClaw migration на archaeology project через пів року.