openclaw-backup

openclaw-backup

OpenClaw Agent 工作區檔案(SOUL.md、MEMORY.md、IDENTITY.md、AGENTS.md、TOOLS.md)的加密備份與還原工具。使用 tar + openssl(AES-256-CBC)加密及 soul-upload.com API。每次備份會自動產生新的隨機密碼(請勿重複使用密碼)。適用於使用者需要:(1) 備份或上傳代理工作區檔案、(2) 還原或下載先前的備份、(3) 從遠端儲存刪除備份,或 (4) 管理加密的代理持久化資料。

0星標
0分支
更新於 2026/2/15
SKILL.md
唯讀
名稱
openclaw-backup
描述

OpenClaw Agent 工作區檔案(SOUL.md、MEMORY.md、IDENTITY.md、AGENTS.md、TOOLS.md)的加密備份與還原工具。使用 tar + openssl(AES-256-CBC)加密及 soul-upload.com API。每次備份會自動產生新的隨機密碼(請勿重複使用密碼)。適用於使用者需要:(1) 備份或上傳代理工作區檔案、(2) 還原或下載先前的備份、(3) 從遠端儲存刪除備份,或 (4) 管理加密的代理持久化資料。

OpenClaw 備份技能

使用 Claude Code 自動化加密備份與還原 OpenClaw Agent 工作區檔案。

概述

本技能提供三項核心功能:

  1. 上傳備份 - 將工作區檔案加密並上傳至 soul-upload.com,自動產生密碼
  2. 下載備份 - 從 soul-upload.com 下載並解密備份,使用儲存的密碼
  3. 刪除備份 - 從遠端儲存刪除備份

所有備份均使用 AES-256-CBC 加密(透過 openssl)搭配自動產生的隨機密碼。每次備份會獲得一個獨一無二的密碼,並儲存在復原檔案中。

系統需求

執行備份操作前,請確保已安裝下列工具:

  • Python 3.7+(腳本執行環境)
  • requests 函式庫pip install requests
  • tar(檔案封存)
  • openssl(加密/解密)
  • curl(HTTP 請求,系統內建)

預設備份檔案

若使用者未指定檔案,預設會備份下列 OpenClaw 工作區檔案:

  • SOUL.md - 代理核心身份與目標
  • MEMORY.md - 代理記憶與上下文
  • IDENTITY.md - 代理身份定義
  • AGENTS.md - 代理設定
  • TOOLS.md - 工具設定

工作流程 1:上傳備份

觸發情境

當使用者要求備份工作區檔案時執行:

  • 「備份我的工作區檔案」
  • 「將 SOUL.md 上傳到 soul-upload」
  • 「為我的代理檔案建立加密備份」
  • 「備份 SOUL.mdMEMORY.md

執行步驟

  1. 收集檔案清單

    • 若使用者指定了檔案,則使用使用者指定的檔案
    • 否則使用預設清單:SOUL.md MEMORY.md IDENTITY.md AGENTS.md TOOLS.md
    • 使用 Read 工具確認檔案存在
  2. 執行備份腳本(密碼自動產生)

    • 找到腳本路徑(通常在技能目錄的 scripts/backup.py
    • 執行指令時不帶 --password 參數(腳本會自動產生):
      python3 scripts/backup.py upload \
        --files "SOUL.md MEMORY.md IDENTITY.md"
      
    • 腳本會自動產生 32 字元的隨機密碼
    • 擷取 stdout(JSON 回應)和 stderr(進度資訊,包含產生的密碼)
  3. 處理回應

    • 成功時,腳本輸出 JSON:
      {
        "backupId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "downloadUrl": "https://soul-upload.com/backup/...",
        "sizeBytes": 12345,
        "sha256": "abc123...",
        "password": "auto-generated-32-char-random-password"
      }
      
    • 解析 JSON 並擷取關鍵資訊,包含自動產生的密碼
  4. 儲存復原資訊

    • 使用 Write 工具建立/更新 .openclaw-backup-recovery.txt
    • 關鍵:將自動產生的密碼包含在復原檔案中
    • 格式:
      Backup ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      Password: auto-generated-32-char-random-password
      Download URL: https://soul-upload.com/backup/...
      Created: 2024-01-15 10:30:00 UTC
      Size: 12.05 KB
      SHA256: abc123...
      Files: SOUL.md, MEMORY.md, IDENTITY.md
      ---
      
    • 附加到檔案末尾(保留歷史記錄)
  5. 顯示成功訊息

    • 通知使用者備份完成
    • 顯示備份 ID 與檔案大小
    • 重要:告知使用者密碼已自動產生並儲存至 .openclaw-backup-recovery.txt
    • 警告使用者:復原檔案至關重要 - 沒有它,備份將無法還原

錯誤處理

錯誤情境 偵測方式 使用者指引
找不到檔案 腳本回傳錯誤:「Files not found: ...」 列出缺少的檔案,詢問使用者是否要繼續備份其他檔案
檔案過大 腳本回傳錯誤:「Backup size ... exceeds limit ...」 顯示實際大小,建議移除大檔案或拆分備份
網路錯誤 腳本回傳錯誤:「Network error: ...」 建議檢查網路連線,詢問是否要重試
413 過大 腳本回傳錯誤:「File too large (413 Payload Too Large)」 表示超過 20MB 限制,建議縮小備份大小
加密失敗 腳本回傳錯誤:「openssl encryption failed: ...」 檢查 openssl 是否正確安裝

對話範例

使用者:備份我的 SOUL.md 和 MEMORY.md
Claude:我將使用自動產生的加密來備份這些檔案。
       [執行備份腳本]
       備份完成!
       - 備份 ID:3f8a2b1c-...
       - 大小:45.2 KB
       - 密碼:自動產生(32 字元)
       - 復原資訊已儲存至 .openclaw-backup-recovery.txt

       重要:請妥善保管 .openclaw-backup-recovery.txt!
       其中包含還原此備份所需的密碼。

工作流程 2:下載備份

觸發情境

當使用者要求還原備份時執行:

  • 「還原我的備份」
  • 「下載我最後的備份」
  • 「復原備份 [backup-id]」
  • 「從 [download-url] 還原」

執行步驟

  1. 取得備份 ID 與密碼

    • 檢查使用者是否提供了備份 ID 或下載 URL
    • 若未提供,使用 Read 工具讀取 .openclaw-backup-recovery.txt
    • 從檔案中擷取最新的備份 ID 密碼
    • 若檔案不存在或為空,則無法繼續(密碼未知)
  2. 決定輸出目錄

    • 預設:目前工作目錄(.
    • 若使用者指定了目錄,則使用使用者指定的目錄
    • 警告使用者:現有檔案可能會被覆寫
  3. 執行還原腳本

    • 使用復原檔案中的密碼執行指令:
      python3 scripts/backup.py download \
        --backup-id "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
        --password "password-from-recovery-file" \
        --output-dir "."
      
    • 擷取 stdout(JSON 回應)和 stderr(進度資訊)
  4. 處理回應

    • 成功時,腳本輸出 JSON:
      {
        "success": true,
        "extractedFiles": ["SOUL.md", "MEMORY.md", "IDENTITY.md"],
        "outputDir": "/path/to/output"
      }
      
    • 解析解壓縮的檔案清單
  5. 驗證還原結果

    • 使用 Read 工具讀取還原檔案的前幾行
    • 顯示檔案預覽,讓使用者確認內容正確
    • 提醒使用者檢查完整內容
  6. 顯示成功訊息

    • 列出已還原的檔案
    • 顯示輸出目錄
    • 建議使用者驗證檔案內容

錯誤處理

錯誤情境 偵測方式 使用者指引
備份 ID 不存在 腳本回傳錯誤:「Backup not found: ...」 檢查備份 ID 是否正確,可能已被刪除
復原檔案遺失 找不到 .openclaw-backup-recovery.txt 無法還原 - 沒有復原檔案就不知道密碼
密碼錯誤 腳本回傳錯誤:「Decryption failed - wrong password ...」 復原檔案可能已損毀或來自不同的備份
網路錯誤 腳本回傳錯誤:「Network error: ...」 建議檢查網路連線,詢問是否要重試
解壓縮失敗 腳本回傳錯誤:「tar extraction failed: ...」 檔案可能已損毀,請嘗試重新下載

對話範例

使用者:還原我最後的備份
Claude:我在 .openclaw-backup-recovery.txt 中找到最近的備份
       - 備份 ID:3f8a2b1c-...
       - 建立時間:2024-01-15 10:30:00 UTC
       正在下載並解密備份...
       還原完成!已解壓縮下列檔案:
       - SOUL.md
       - MEMORY.md
       - IDENTITY.md
       檔案已儲存至目前目錄,請確認內容是否正確。

工作流程 3:刪除備份

觸發情境

當使用者要求刪除遠端備份時執行:

  • 「刪除我的備份」
  • 「移除備份 [backup-id]」
  • 「從 soul-upload 刪除備份」

執行步驟

  1. 取得備份 ID

    • 檢查使用者是否提供了備份 ID
    • 若未提供,使用 Read 工具讀取 .openclaw-backup-recovery.txt
    • 顯示可用的備份清單供使用者選擇
    • 若檔案不存在或為空,請使用者提供備份 ID
  2. 要求確認

    • 警告:此操作不可逆,備份將永久刪除
    • 顯示要刪除的備份 ID 與建立時間
    • 請使用者確認刪除
  3. 執行刪除腳本

    • 使用者確認後,執行指令:
      python3 scripts/backup.py delete \
        --backup-id "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      
    • 擷取 stdout(JSON 回應)和 stderr(進度資訊)
  4. 處理回應

    • 成功時,腳本輸出 JSON:
      {
        "success": true,
        "backupId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
      
  5. 更新復原資訊檔案

    • 使用 Read 工具讀取 .openclaw-backup-recovery.txt
    • 移除已刪除的備份記錄(包含其密碼)
    • 使用 Write 工具儲存更新後的檔案
    • 若檔案變為空白,可刪除該檔案
  6. 顯示成功訊息

    • 確認備份已刪除
    • 顯示已刪除的備份 ID
    • 提醒使用者:若再次需要備份,必須建立新的備份並使用新密碼

錯誤處理

錯誤情境 偵測方式 使用者指引
備份 ID 不存在 腳本回傳錯誤:「Backup not found: ...」 備份可能已被刪除或 ID 不正確
網路錯誤 腳本回傳錯誤:「Network error: ...」 建議檢查網路連線,詢問是否要重試
使用者取消 使用者拒絕確認 操作已取消,備份未被刪除

對話範例

使用者:刪除我的備份
Claude:我在 .openclaw-backup-recovery.txt 中找到下列備份:
       1. 備份 ID:3f8a2b1c-...(2024-01-15 10:30:00)
       2. 備份 ID:7b2c9d4e-...(2024-01-14 08:20:00)
       請問要刪除哪一個備份?(1 或 2)
使用者:1
Claude:警告:這將永久刪除備份 3f8a2b1c-...
       此操作無法復原。請確認刪除?(yes/no)
使用者:yes
Claude:備份已刪除。
       - 備份 ID:3f8a2b1c-...
       若要再次備份,請建立新的備份,系統會自動產生新密碼。

安全注意事項

密碼政策(新增)

  • 自動產生密碼:每次備份會獲得一個獨一無二的 32 字元隨機密碼
  • 請勿重複使用密碼:根據 soul-upload.com 政策,請勿跨備份重複使用密碼
  • 密碼儲存:密碼儲存在 .openclaw-backup-recovery.txt(解密時必要)
  • 使用者責任:使用者必須妥善保管復原檔案 - 沒有它,備份將無法還原

復原檔案安全性

  • 檔案位置.openclaw-backup-recovery.txt(工作區根目錄)
  • 內容:備份 ID、密碼(關鍵)、下載 URL、時間戳、SHA256
  • 關鍵:復原檔案是唯一儲存密碼的地方
  • 建議
    • 若涉及敏感資訊,請加入 .gitignore
    • 或提交至版本控制以便團隊存取
    • 考慮將復原檔案本身備份到另一個安全位置

加密演算法

  • 演算法:AES-256-CBC(對稱加密)
  • 加鹽:openssl 會自動加鹽以增強安全性
  • 相容性:與 soul-upload.com 官方文件一致

暫存檔案清理

  • 腳本使用 try-finally 確保暫存檔案被清理
  • 避免在磁碟上留下未加密的敏感資料

檔案大小限制

  • 最大備份大小:20 MB(壓縮並加密後)
  • 檢查時機:上傳前自動檢查
  • 超過限制處理:顯示實際大小,建議使用者:
    • 移除大檔案(如日誌、快取)
    • 拆分備份(分批備份不同檔案)

API 參考

soul-upload.com 備份 API:

端點 方法 功能 回應
/backup POST 上傳備份 {backupId, downloadUrl, sizeBytes, sha256}
/backup/:backupId GET 下載備份 302 重新導向至 R2 儲存 URL
/backup/:backupId DELETE 刪除備份 {success: true, backupId}

常見狀態碼:

  • 200 - 成功
  • 404 - 找不到備份
  • 413 - 檔案過大(超過 20MB)
  • 415 - 不支援的檔案類型
  • 500 - 伺服器錯誤

疑難排解

缺少相依套件

問題:腳本錯誤「Missing required tools: tar, openssl」

解決方法

  • macOS:brew install openssl(tar 為內建)
  • Ubuntu/Debian:sudo apt-get install tar openssl
  • 驗證安裝:tar --versionopenssl version

缺少 Python requests 函式庫

問題:腳本錯誤「Error: 'requests' library not found」

解決方法

pip install requests
# 或
pip3 install requests

復原檔案遺失

問題:無法還原備份 - 復原檔案遺失

解決方法

  • 復原檔案至關重要 - 包含唯一的密碼副本
  • 沒有復原檔案,備份無法還原
  • 建議將復原檔案備份到另一個安全位置
  • 若遺失,備份將永久無法存取

網路逾時

問題:上傳/下載時逾時

解決方法

  • 檢查網路連線
  • 縮小備份檔案大小(移除不必要的檔案)
  • 腳本預設逾時為 5 分鐘,通常足夠

檔案已存在

問題:還原時覆寫現有檔案

解決方法

  • 還原前先備份現有檔案
  • 指定不同的輸出目錄
  • 手動將現有檔案移至其他位置

使用範例

範例 1:備份所有預設檔案

使用者:備份我的工作區檔案
Claude:[使用預設檔案清單執行上傳工作流程]
       [自動產生密碼並儲存至復原檔案]

範例 2:備份特定檔案

使用者:只備份 SOUL.md 和 MEMORY.md
Claude:[執行上傳工作流程,僅備份指定檔案]
       [自動產生密碼並儲存至復原檔案]

範例 3:還原最新備份

使用者:還原我最後的備份
Claude:[從 .openclaw-backup-recovery.txt 讀取最新的備份 ID 與密碼]
       [執行下載工作流程]

範例 4:還原特定備份

使用者:還原備份 3f8a2b1c-1234-5678-90ab-cdef12345678
Claude:[從復原檔案讀取此備份 ID 的密碼]
       [執行下載工作流程]

範例 5:刪除舊備份

使用者:刪除我的舊備份
Claude:[從復原檔案顯示可用的備份清單]
       [使用者選擇要刪除的備份]
       [執行刪除工作流程]
       [從復原檔案中移除該筆記錄]

最佳實務

  1. 定期備份:建議每週備份一次,或在重要變更後備份
  2. 復原檔案管理:妥善保管 .openclaw-backup-recovery.txt 並另行備份
  3. 驗證還原:定期測試備份還原流程,確保備份可用
  4. 清理舊備份:定期刪除不需要的舊備份以節省儲存空間
  5. 多重副本:考慮將復原檔案存放在多個安全位置

腳本路徑

腳本檔案位於技能目錄的 scripts/backup.py

執行 Bash 指令時,請確保使用正確的相對或絕對路徑。通常:

  • 若目前在技能目錄中:python3 scripts/backup.py ...
  • 若在其他目錄:使用絕對路徑或先 cd 到技能目錄

參考文件


版本:2.0.0
作者:Claude Code
授權:MIT
密碼政策:每次備份自動產生唯一密碼(v2.0.0 新增)