mcpField
O
openclaw-backup

openclaw-backup

github.com/theagentserviceクラウド・DevOps03.1k 回インストール36 週間前に更新
リポジトリ

openclaw-backup について

OpenClaw エージェントのワークスペースファイルを暗号化してバックアップ、復元する Claude Code スキルです。アップロード、ダウンロード、削除に対応し、復元情報をローカルファイルに保存します。

主な機能

  1. 01ワークスペースファイルを暗号化してアップロード
  2. 02バックアップのダウンロードと復号
  3. 03リモートバックアップの削除
  4. 04バックアップごとにランダムパスワードを生成
  5. 05復元情報をローカルファイルに保存

活用シーン

  1. 01OpenClaw の設定やメモリファイルをバックアップ
  2. 02保存済みバックアップをワークスペースに復元
  3. 03不要になったリモートバックアップを削除

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/theagentservice/skills --skill openclaw-backup

インストール後、Claude Code で/openclaw-backupを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.gitignore
README.md
scripts/
backup.py

詳細

OpenClaw バックアップスキル

Claude Code を使用して、OpenClaw エージェントのワークスペースファイルを暗号化して自動バックアップおよび復元します。

概要

このスキルでは、次の3つの主要な機能を提供します。

  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.md と MEMORY.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文字のランダムパスワードを自動生成します
    • 標準出力(JSON レスポンス)と標準エラー出力(生成されたパスワードを含む進行状況情報)を取得します
  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 が正しくインストールされているか確認します
会話例
User: Back up my SOUL.md and MEMORY.md
Claude: I'll backup these files with auto-generated encryption.
       [Executes backup script]
       Backup complete!
       - Backup ID: 3f8a2b1c-...
       - Size: 45.2 KB
       - Password: Auto-generated (32 chars)
       - Recovery info saved to .openclaw-backup-recovery.txt

       IMPORTANT: Keep .openclaw-backup-recovery.txt safe!
       It contains the password needed to restore this backup.

ワークフロー 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: ..."ファイルが破損している可能性があります。もう一度ダウンロードしてみてください
会話例
User: Restore my last backup
Claude: I found the most recent backup in .openclaw-backup-recovery.txt
       - Backup ID: 3f8a2b1c-...
       - Created: 2024-01-15 10:30:00 UTC
       Downloading and decrypting backup...
       Restoration complete! Extracted the following files:
       - SOUL.md
       - MEMORY.md
       - IDENTITY.md
       Files saved to current directory, please verify content is correct.

ワークフロー 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: ..."ネットワーク接続を確認するよう案内し、再試行するか尋ねます
ユーザーがキャンセルしたユーザーが確認を拒否します操作はキャンセルされ、バックアップは削除されません
会話例
User: Delete my backup
Claude: I found the following backups in .openclaw-backup-recovery.txt:
       1. Backup ID: 3f8a2b1c-... (2024-01-15 10:30:00)
       2. Backup ID: 7b2c9d4e-... (2024-01-14 08:20:00)
       Which backup would you like to delete? (1 or 2)
User: 1
Claude: Warning: This will permanently delete backup 3f8a2b1c-...
       This action cannot be undone. Confirm deletion? (yes/no)
User: yes
Claude: Backup deleted.
       - Backup ID: 3f8a2b1c-...
       To backup again, create a new backup with a new auto-generated password.

セキュリティに関する注意事項

パスワードポリシー(新規)
  • 自動生成パスワード:各バックアップには、固有の 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:

エンドポイントメソッド機能レスポンス
/backupPOSTバックアップをアップロード{backupId, downloadUrl, sizeBytes, sha256}
/backup/:backupIdGETバックアップをダウンロードR2 ストレージ URL へ 302 リダイレクト
/backup/:backupIdDELETEバックアップを削除{success: true, backupId}

一般的なステータスコード:

  • 200 - 成功
  • 404 - バックアップが見つかりません
  • 413 - ファイルが大きすぎます(20MB を超過)
  • 415 - サポートされていないファイル形式です
  • 500 - サーバーエラー

トラブルシューティング

依存関係の不足

問題: スクリプトエラー「必要なツールがありません:tar、openssl」

解決方法:

  • macOS:brew install openssl(tar は標準搭載)
  • Ubuntu/Debian:sudo apt-get install tar openssl
  • インストールの確認:tar --version と openssl version
Python requests ライブラリの不足

問題: スクリプトエラー「エラー:'requests' ライブラリが見つかりません」

解決方法:

pip install requests
# or
pip3 install requests
リカバリーファイルの紛失

問題: バックアップを復元できない — リカバリーファイルがありません

解決方法:

  • リカバリーファイルは非常に重要です。パスワードの唯一のコピーが含まれています
  • リカバリーファイルがないと、バックアップを復元できません
  • リカバリーファイルは、別の安全な場所にバックアップすることをおすすめします
  • 紛失した場合、バックアップには永久にアクセスできなくなります
ネットワークのタイムアウト

問題: アップロード/ダウンロード中にタイムアウトが発生する

解決方法:

  • ネットワーク接続を確認します
  • バックアップファイルのサイズを小さくします(不要なファイルを削除します)
  • スクリプトのデフォルトのタイムアウトは5分で、通常は十分です
ファイルがすでに存在する

問題: 復元中に既存のファイルが上書きされる

解決方法:

  • 復元前に既存のファイルをバックアップします
  • 別の出力ディレクトリを指定します
  • 既存のファイルを手動で別の場所に移動します

使用例

例1:すべてのデフォルトファイルをバックアップする
User: Back up my workspace files
Claude: [Execute upload workflow using default file list]
       [Auto-generate password and save to recovery file]
例2:特定のファイルをバックアップする
User: Back up only SOUL.md and MEMORY.md
Claude: [Execute upload workflow, backup only specified files]
       [Auto-generate password and save to recovery file]
例3:最新のバックアップを復元する
User: Restore my last backup
Claude: [Read latest Backup ID and password from .openclaw-backup-recovery.txt]
       [Execute download workflow]
例4:特定のバックアップを復元する
User: Restore backup 3f8a2b1c-1234-5678-90ab-cdef12345678
Claude: [Read password for this Backup ID from recovery file]
       [Execute download workflow]
例5:古いバックアップを削除する
User: Delete my old backups
Claude: [Show available backup list from recovery file]
       [User selects backup to delete]
       [Execute delete workflow]
       [Remove entry from recovery file]

ベストプラクティス

  1. 定期的なバックアップ:毎週、または重要な変更を行った後にバックアップすることをおすすめします
  2. リカバリーファイルの管理:.openclaw-backup-recovery.txt を安全に保管し、別途バックアップします
  3. 復元の確認:バックアップが使用可能であることを確かめるため、定期的に復元プロセスをテストします
  4. 古いバックアップの整理:ストレージ容量を節約するため、不要な古いバックアップを定期的に削除します
  5. 複数のコピー:リカバリーファイルを複数の安全な場所に保管することを検討します

スクリプトのパス

スクリプトファイルは Skill ディレクトリの scripts/backup.py にあります。

Bash コマンドを実行する際は、正しい相対パスまたは絶対パスを使用してください。通常は次のとおりです。

  • 現在のディレクトリが Skill ディレクトリの場合:python3 scripts/backup.py ...
  • 別のディレクトリにいる場合:絶対パスを使用するか、先に Skill ディレクトリへ cd します

参考ドキュメント


バージョン: 2.0.0 作成者: Claude Code ライセンス: MIT パスワードポリシー: バックアップごとに一意のパスワードを自動生成(v2.0.0 の新機能)

コメント