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.md、MEMORY.md、USER.md、AGENTS.md、スキル、モデル設定、MCP、メッセージング設定など 30 以上の分類を扱います。一方、cron、プラグイン、複雑なチャネル設定などは、手作業で確認するアーカイブへ回ります。
ここで先に本番適用すると、次の問題が同時に起きます。
- 同名の人格やスキルが競合します
- 古いセッション規則が新しい運用へ入ります
- bot token を移すと、2 つの gateway が同時接続する恐れがあります
- cron や plugin は直接変換されず、移行後の再設計が必要です
--dry-runは移行元を読みますが、移行先へ書きません。まず候補数と競合を出し、その後で適用範囲を決めます。
用語表
| 用語 | 今回の意味 |
|---|---|
| source | OpenClawのデータがあるディレクトリです |
| target | Hermes Agentのデータを書き込むHERMES_HOMEです |
| preset | 移行範囲です。user-dataかfullを選びます |
| dry-run | 変更せずに移行計画だけを表示する実行です |
| conflict | 同名の移行先がすでにあり、自動適用できない状態です |
| skipped | 対象がないか、presetで選ばれていない項目です |
| workspace target | OpenClawのAGENTS.mdを置く作業先です |
| secret | API 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で確認しました。latestは2026.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
ここで意図しない本番パスが見えたら中止します。特にTargetとSecretsは、候補一覧より先に確認します。
今回の移行候補は 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.md、USER.md、MEMORY.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 reference | hermes claw migrateのoptionと移行分類 |
| Hermes Agent公式repository | CLI実装と公開source |
| OpenClaw公式ドキュメント | 標準directory、gateway、導入要件 |
| OpenClaw Gateway architecture | gatewayの役割、default port、client接続 |
| OpenClaw Memory overview | USER.md、MEMORY.md、日次記憶の役割 |
| OpenClaw公式repository | npm packageと公開source |
