OpenClawからHermes Agentへ移行する前にdry-runで確認する

OpenClawからHermes Agentへ移行する前にdry-runで確認する

移行コマンドを実行する前に、何がコピーされ、何が残るのかを一覧で見たいです。AI エージェントの記憶や人格は、設定ファイルより戻しにくいからです。

2026 年 8 月 28 日、Hermes Agent v0.20.5 のhermes claw migrate --dry-runを検証用ディレクトリへ向けました。結果は、移行候補 10 件、競合 1 件、スキップ 25 件でした。ファイルは 1 つも変更されていません。

Summary: 10 would migrate, 1 conflict(s), 25 skipped

私は AI エージェントの引っ越しを、コピー作業ではなく棚卸しとして扱います。記憶、人格、スキル、秘密情報を一度に運ぶと、移行後に問題の出所を追いにくくなるためです。

前回の比較から移行手順へ進む

前回のOpenClawとHermes Agentの比較では、両者の設計思想と用途を比べました。今回は、OpenClaw 側のデータを壊さずに移行計画だけを確認します。

前回完了時今回完了後
OpenClawとHermes Agentの違いを選定材料にできました自分のOpenClaw環境で移行対象を数えられます
移行コマンドがあることを確認しました--dry-runで書き込み前の競合を確認できます
設計思想を比較しました記憶、スキル、設定、秘密情報の境界を分けられます

すでにhermes claw migrate --dry-runを実行し、競合の意味まで確認できている場合は、「実行後に見る 3 か所」まで飛ばせます。

なぜ本番ディレクトリへ直接適用しないのか

OpenClaw の標準データは~/.openclaw/にあります。Hermes Agent は、通常~/.hermes/を使います。移行コマンドは、OpenClaw の元ファイルを読み、Hermes 側へ変換して配置します。

扱う対象は単純な設定だけではありません。公式ガイドでは、SOUL.mdMEMORY.mdUSER.mdAGENTS.md、スキル、モデル設定、MCP、メッセージング設定など 30 以上の分類を扱います。一方、cron、プラグイン、複雑なチャネル設定などは、手作業で確認するアーカイブへ回ります。

ここで先に本番適用すると、次の問題が同時に起きます。

  • 同名の人格やスキルが競合します
  • 古いセッション規則が新しい運用へ入ります
  • bot token を移すと、2 つの gateway が同時接続する恐れがあります
  • cron や plugin は直接変換されず、移行後の再設計が必要です

--dry-runは移行元を読みますが、移行先へ書きません。まず候補数と競合を出し、その後で適用範囲を決めます。

用語表

用語今回の意味
sourceOpenClawのデータがあるディレクトリです
targetHermes Agentのデータを書き込むHERMES_HOMEです
preset移行範囲です。user-datafullを選びます
dry-run変更せずに移行計画だけを表示する実行です
conflict同名の移行先がすでにあり、自動適用できない状態です
skipped対象がないか、presetで選ばれていない項目です
workspace targetOpenClawのAGENTS.mdを置く作業先です
secretAPI keyやbot tokenなどの認証情報です

移行の流れを先に見る

~/.openclaw または --source


┌─────────────────────────────┐
│ 記憶・人格・設定・スキルを解析 │
└──────────────┬──────────────┘


┌─────────────────────────────┐
│ presetとsecret指定で対象を絞る │
└──────────────┬──────────────┘


┌─────────────────────────────┐
│ 移行候補・競合・skipをpreview  │
└──────────────┬──────────────┘

        --dry-runなら終了

        適用時だけ書き込み

~/.hermes と workspace target

fullという名前でも、秘密情報は自動で入りません。秘密情報を含めるには--migrate-secretsが別に必要です。この分離は重要です。記憶やスキルの移行確認と、認証情報の移行判断を別の日にできます。

まずversionとoptionを確認する

手元では次の 2 コマンドを実行しました。

hermes --version
hermes claw migrate --help

version は次のとおりです。

Hermes Agent v0.20.5 (2026.8.19) · upstream 261a4efb

migrateには、移行を適用しない--dry-runと、対象を分ける--presetがありました。

--dry-run
--preset {user-data,full}
--migrate-secrets
--workspace-target WORKSPACE_TARGET
--skill-conflict {skip,overwrite,rename}

OpenClaw の npm 版は同日にnpm view openclaw version dist-tags --jsonで確認しました。latest2026.7.1-2でした。製品の更新が速いため、移行前に両方の version を記録します。

検証用のOpenClawデータを作る

本番の~/.openclaw~/.hermesを触らないよう、今回は/tmpに 3 つの固定ディレクトリを作りました。

/tmp/hibanas-openclaw-migration-demo
/tmp/hibanas-hermes-migration-demo
/tmp/hibanas-workspace-target

移行元には、次のファイルを置きました。

/tmp/hibanas-openclaw-migration-demo/
├── openclaw.json
└── workspace/
    ├── AGENTS.md
    ├── MEMORY.md
    ├── SOUL.md
    ├── USER.md
    ├── memory/
    │   └── 2026-08-27.md
    └── skills/
        └── log-review/
            └── SKILL.md

openclaw.jsonには、default model、thinking level、timezone、workspace、セッション reset、approval mode だけを入れました。API key や bot token は入れていません。

{
  "agents": {
    "defaults": {
      "model": "openrouter/anthropic/claude-sonnet-4.6",
      "thinkingDefault": "medium",
      "userTimezone": "Asia/Tokyo",
      "workspace": "/tmp/hibanas-openclaw-migration-demo/workspace"
    }
  },
  "approvals": {
    "exec": {
      "mode": "smart"
    }
  },
  "session": {
    "reset": {
      "mode": "idle",
      "idleMinutes": 120
    }
  }
}

検証用データでも、実在する秘密情報は置きません。移行 preview へ token の値が出る設計変更や、terminal log の保存範囲まで確認できていないためです。

user-data presetでdry-runする

次のコマンドを実行しました。HERMES_HOME/tmpへ向けるため、普段の Hermes 設定へ書く余地を減らせます。

HERMES_HOME=/tmp/hibanas-hermes-migration-demo \
  hermes claw migrate \
  --source /tmp/hibanas-openclaw-migration-demo \
  --workspace-target /tmp/hibanas-workspace-target \
  --preset user-data \
  --dry-run

最初に、source、target、preset、secret の有無が表示されました。

Source:      /tmp/hibanas-openclaw-migration-demo
Target:      /tmp/hibanas-hermes-migration-demo
Preset:      user-data
Overwrite:   no (skip conflicts)
Secrets:     no
Workspace:   /tmp/hibanas-workspace-target

ここで意図しない本番パスが見えたら中止します。特にTargetSecretsは、候補一覧より先に確認します。

今回の移行候補は 10 件でした。

workspace-agents       → /tmp/hibanas-workspace-target/AGENTS.md
memory                 → /tmp/hibanas-hermes-migration-demo/memories/MEMORY.md
user-profile           → /tmp/hibanas-hermes-migration-demo/memories/USER.md
model-config           → /tmp/hibanas-hermes-migration-demo/config.yaml
skill                  → /tmp/hibanas-hermes-migration-demo/skills/openclaw-imports/log-review
skill-category         → /tmp/hibanas-hermes-migration-demo/skills/openclaw-imports/DESCRIPTION.md
daily-memory           → /tmp/hibanas-hermes-migration-demo/memories/MEMORY.md
agent-config           → config.yaml agent/compression/terminal
session-config         → config.yaml session_reset
approvals-config       → config.yaml approvals.mode

長期記憶と日次記憶は、どちらも Hermes 側のmemories/MEMORY.mdへ集約される計画です。skill はskills/openclaw-imports/の下へ分けられます。OpenClaw のディレクトリ構造をそのまま複製する処理ではありません。

終了部分は次のとおりでした。

Summary: 10 would migrate, 1 conflict(s), 25 skipped

To execute the migration, run without --dry-run:
  hermes claw migrate --preset user-data

No files were modified.も表示されました。終了コードは 0 です。ただし、終了コード 0 は「競合なし」ではありません。preview を正常に作れたという意味です。今回も競合は 1 件残っています。

conflictとskipを読む

競合はSOUL.mdでした。

Conflicts (skipped — use --overwrite to force):
  soul  Target exists and overwrite is disabled

検証用のHERMES_HOMEでも、Hermes 起動時に移行先を初期化する場合があります。そのため、新しい一時ディレクトリなら必ず競合 0 件になるとは限りません。

私はここで--overwriteを足しません。人格の上書きは、設定値の上書きより影響が大きいからです。既存のSOUL.mdと移行元を読み比べ、統合する内容を人が決めます。

skip には、存在しない設定と、今回選ばなかった秘密情報が混ざっていました。

messaging-settings  No Hermes-compatible messaging settings found
secret-settings     Not selected for this run
provider-keys       Not selected for this run
cron-jobs           No cron configuration found
plugins-config      No plugins configuration found
mcp-servers         No MCP servers found in OpenClaw config

Not selected for this runは、移行元に何もないという断定ではありません。preset や flag で除外した結果です。反対にNo ... foundは、今回の source から対象を検出しなかった結果です。この 2 つを分けて読みます。

実行後に見る3か所

sourceとtarget

Sourceが移行したい OpenClaw 環境かを確認します。古い.clawdbot.moltbotが自動検出される環境では、明示的な--sourceの方が安全です。

Targetには現在のHERMES_HOMEが出ます。複数 profile を使う場合は、どの Hermes へ移すのかを先に固定します。

conflict

SOUL.mdUSER.mdMEMORY.md、同名 skill は、既存内容との関係を読みます。--overwriteは最後の選択肢です。skill だけなら--skill-conflict renameで別名コピーを作り、差分を確認できます。

archived item

Hermes へ直接対応しない cron、plugin、hook、複雑な channel 設定は、適用時に移行 report の archive へ回ります。これらは完了ではなく、移行後の作業一覧です。

cron は時刻だけで移しません。作業ディレクトリ、権限、通知先、失敗時の再実行を Hermes 側で組み直します。

秘密情報は別工程にする

--preset fullだけでは API key を移しません。--migrate-secretsが必要です。私は最初の dry-run で、この flag を使いません。

OpenClaw の公式ガイドでは、API key や bot token が config、.env、auth profile などに分かれる場合があります。Hermes の移行ガイドも複数の探索元を扱います。移行候補へ秘密情報が含まれる回は、preview の保存先と閲覧者まで決めてから実行します。

メッセージングでは、古い gateway と新しい gateway を同時に動かさないことも必要です。今回の dry-run では、次の警告が出ました。

OpenClaw appears to be running
Recommendation: stop OpenClaw before migrating.
Non-interactive session — continuing to preview only.

検証コマンドの文字列にopenclawが含まれた process も検出候補になるため、実際の daemon かどうかを PID と service で確認します。ただし、本番適用時に警告を無視する理由にはしません。bot token を移す前は、OpenClaw と Hermes の gateway を止め、接続の所有者を 1 つにします。

よくあるエラー

症状原因対応
OpenClaw directory not foundと出ます標準の~/.openclawにデータがありません--sourceで実際のディレクトリを指定します
新しいtargetなのにSOUL.mdが競合しますHermes側の初期化でtargetが作られています両方の内容を読み、安易に--overwriteしません
secretが候補に出ませんpresetだけを指定しています意図を確認してから--migrate-secretsを別工程で使います
skillが移行後に見えませんimport先がopenclaw-imports配下か、現在のセッションを継続しています配置先を確認し、新しいセッションを開始します
cronが移行候補にありませんcronは直接変換ではなくarchive対象ですHermesのcronとして権限と通知先を再設計します
OpenClaw起動中の警告が出ますserviceかprocess名を検出していますPIDとserviceを確認し、本番適用前にgatewayを停止します
dry-runが終了コード0でしたpreview生成には成功しましたsummaryのconflict数とskipped理由も読みます
WhatsAppが接続できませんtoken移行ではなく再pairingが必要です移行後にHermes側でQR pairingを行います

適用前の停止条件を決める

dry-run の次に、そのまま--yesを付ける必要はありません。私は次のどれかが残れば停止します。

  • source か target が想定と違います
  • 人格、記憶、skill の競合内容を読んでいません
  • secret を含む preview の扱いが決まっていません
  • OpenClaw か Hermes の gateway が接続中です
  • archive へ回る cron や plugin の担当が決まっていません
  • 移行前 backup の保存先と復元手順を確認していません

適用時の default では、Hermes 側の migration 前 backup が作られます。--no-backupで省けますが、最初の移行では省きません。backup があることと、戻せることは別です。適用前にhermes importの復元手順まで確認します。

今回の検証で、本番データは移していません。それでも 10 件の移行先と 1 件の競合を具体的に確認できました。移行の成功条件は、コマンドが 0 で終わることではありません。記憶、人格、秘密情報、定期処理の所有先を説明できることです。

出典

一次情報確認した内容
Hermes Agent公式ガイド: Migrate from OpenClaw移行対象、preset、秘密情報、archive、移行後の確認
Hermes Agent公式CLI referencehermes claw migrateのoptionと移行分類
Hermes Agent公式repositoryCLI実装と公開source
OpenClaw公式ドキュメント標準directory、gateway、導入要件
OpenClaw Gateway architecturegatewayの役割、default port、client接続
OpenClaw Memory overviewUSER.mdMEMORY.md、日次記憶の役割
OpenClaw公式repositorynpm packageと公開source
この記事をシェア