Openclaw Migration
目次
OpenClaw の設定(記憶や skill)を Hermes に取り込みます。
skill の情報
| 提供元 | 追加インストール — hermes skills install official/migration/openclaw-migration で導入します |
| パス | optional-skills/migration/openclaw-migration |
| バージョン | 1.0.0 |
| 作者 | Hermes Agent (Nous Research) |
| ライセンス | MIT |
| 対応プラットフォーム | linux, macos, windows |
| タグ | Migration, OpenClaw, Hermes, Memory, Persona, Import |
| 関連 skill | hermes-agent |
参考: SKILL.md 全文
OpenClaw -> Hermes Migration
OpenClaw の設定を、手作業での後片付けを最小限にして Hermes Agent へ移したいときに、この skill を使います。
CLI コマンド
対話なしで手早く移したいときは、組み込みの CLI コマンドを使います。
hermes claw migrate # Full interactive migration
hermes claw migrate --dry-run # Preview what would be migrated
hermes claw migrate --preset user-data # Migrate without secrets
hermes claw migrate --overwrite # Overwrite existing conflicts
hermes claw migrate --source /custom/path/.openclaw # Custom sourceこの CLI コマンドは、以下で説明する移行スクリプトと同じものを走らせます。試し実行で中身を確認しながら、ぶつかった項目を一つずつ決めていきたいときは、(エージェント経由で)この skill を使ってください。
初回の設定について: hermes setup のウィザードは ~/.openclaw を自動で見つけ、設定を始める前に移行するかどうかを尋ねます。
この skill がすること
scripts/openclaw_to_hermes.py を使って、次のことを行います。
SOUL.mdを Hermes のホームディレクトリへSOUL.mdとして取り込みます- OpenClaw の
MEMORY.mdとUSER.mdを Hermes の記憶の項目に変換します - OpenClaw のコマンド承認パターンを Hermes の
command_allowlistに統合します TELEGRAM_ALLOWED_USERSのような Hermes でも使えるメッセージ設定を移し、OpenClaw のワークスペース設定を Hermes の作業ディレクトリの設定へ対応づけます- OpenClaw の skill を
~/.hermes/skills/openclaw-imports/へコピーします - 必要であれば、OpenClaw のワークスペース指示ファイルを、選んだ Hermes のワークスペースへコピーします
workspace/tts/のように移せるワークスペースの資産を~/.hermes/tts/へ写します- Hermes 側に直接の置き場がない、秘密情報ではない文書を保管します
- 移せたもの、ぶつかったもの、飛ばしたものとその理由を並べた、構造のあるレポートを出します
スクリプトの場所
補助スクリプトは、この skill のディレクトリの次の場所にあります。
scripts/openclaw_to_hermes.py
Skills Hub からこの skill を入れた場合、通常は次の場所になります。
~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py
~/.hermes/skills/openclaw-migration/... のような短いパスを当て推量で使わないでください。
補助スクリプトを走らせる前に、次の順で確かめます。
- まず
~/.hermes/skills/migration/openclaw-migration/の下にある、導入時のパスを使います。 - そのパスで失敗したら、導入された skill のディレクトリを見て、導入された
SKILL.mdからの相対でスクリプトの場所を割り出します。 findを使うのは、導入先が見当たらないときや、skill が手作業で移されていたときの最後の手段だけにします。- terminal ツールを呼ぶときは
workdir: "~"を渡さないでください。ユーザーのホームディレクトリのような絶対パスを使うか、workdirそのものを省きます。
--migrate-secrets を付けると、Hermes でも使える秘密情報を、許可された小さな範囲だけ取り込みます。現時点では次のものです。
TELEGRAM_BOT_TOKEN
基本の進め方
- まず試し実行で中身を確認します。
- 移せるもの、移せないもの、保管されるものを、簡潔にまとめて示します。
clarifyツールが使えるなら、自由な文章で答えてもらう代わりに、それを使って判断を仰ぎます。- 試し実行で、取り込む skill のディレクトリがぶつかると分かったら、実行前にどう扱うか尋ねます。
- 実行の前に、対応している 2 つの移行モードのどちらにするかをユーザーに選んでもらいます。
- 移行先のワークスペースのパスは、ワークスペース指示ファイルを持ってきたい場合だけ尋ねます。
- 選ばれたプリセットとフラグで移行を実行します。
- 結果をまとめます。とくに次の点を伝えます。
- 何が移せたか
- 手作業で確認するために何が保管されたか
- 何が、なぜ飛ばされたか
ユーザーとのやりとりの決まり
Hermes CLI は対話用に clarify ツールを備えていますが、次の制限があります。
- 一度に選べるのは 1 つだけ
- あらかじめ用意できる選択肢は最大 4 つ
- 自由入力の
Otherが自動で付く
1 回のやりとりで複数を選ぶチェックボックスには対応していません。
clarify を呼ぶときは、毎回次を守ります。
questionは必ず中身のあるものにするchoicesは、本当に選ばせる場面でだけ付けるchoicesは 2〜4 個の素直な文字列にとどめる...のような、仮置きや途中で切れた選択肢を出さない- 選択肢を余分な空白で埋めたり飾ったりしない
enter directory hereのような偽の入力欄、空行、_____のような下線を質問に入れない- パスを自由に答えてもらう質問は、素の一文だけを書く。ユーザーはパネルの下にある通常の CLI の入力欄に打ち込みます
clarify の呼び出しがエラーを返したら、エラーの文面を読み、中身を直して、正しい question と整った選択肢で一度だけやり直します。
clarify が使える状態で、試し実行によってユーザーの判断が必要だと分かったときは、次の行動を必ず clarify の呼び出しにします。次のような通常のメッセージでターンを終えないでください。
- "Let me present the choices"
- "What would you like to do?"
- "Here are the options"
ユーザーの判断が必要なら、文章を続ける前に clarify で答えを集めます。 未解決の判断が複数残っているときは、その間に説明のメッセージを挟まないでください。clarify の答えを受け取ったら、次の行動はたいてい次に必要な clarify の呼び出しになります。
試し実行が次を報告したときは、workspace-agents を未解決の判断として扱います。
kind="workspace-agents"status="skipped"- 理由に
No workspace target was providedを含む
その場合は、実行の前にワークスペース指示について必ず尋ねます。黙って「飛ばすと決まった」ことにしないでください。
この制限があるので、判断の流れは次のように簡素にします。
SOUL.mdがぶつかったときは、次のような選択肢でclarifyを使います。
keep existingoverwrite with backupreview first
- 試し実行で
kind="skill"の項目がstatus="conflict"として 1 つ以上出たときは、次のような選択肢でclarifyを使います。
keep existing skillsoverwrite conflicting skills with backupimport conflicting skills under renamed folders
- ワークスペース指示については、次のような選択肢で
clarifyを使います。
skip workspace instructionscopy to a workspace pathdecide later
- ワークスペース指示をコピーすると選ばれたら、続けて自由入力の
clarifyで 絶対パス を尋ねます。 skip workspace instructionsかdecide laterが選ばれたら、--workspace-targetを付けずに進めます。- 移行モードについては、次の 3 つの選択肢で
clarifyを使います。
user-data onlyfull compatible migrationcancel
user-data onlyは、ユーザーのデータと移せる設定は移すが、許可された秘密情報は取り込まないという意味です。full compatible migrationは、同じ範囲のユーザーのデータに加えて、許可された秘密情報があればそれも移すという意味です。clarifyが使えないときは、同じ質問を普通の文章で尋ねますが、答えはuser-data only、full compatible migration、cancelのいずれかに限ります。
実行してよいかの境目:
No workspace target was providedによるworkspace-agentsの skip が未解決のあいだは、実行しないでください。- 解決したと言えるのは、次の場合だけです。
- ユーザーがはっきりと
skip workspace instructionsを選んだ - ユーザーがはっきりと
decide laterを選んだ copy to a workspace pathを選んだうえで、ユーザーがワークスペースのパスを示した
- ユーザーがはっきりと
- 試し実行にワークスペースの移行先が出てこないこと自体は、実行してよいという意味にはなりません。
- 必要な
clarifyの判断が 1 つでも残っているあいだは、実行しないでください。
clarify に渡す中身は、次の形をそのまま基本形として使います。
{"question":"Your existing SOUL.md conflicts with the imported one. What should I do?","choices":["keep existing","overwrite with backup","review first"]}{"question":"One or more imported OpenClaw skills already exist in Hermes. How should I handle those skill conflicts?","choices":["keep existing skills","overwrite conflicting skills with backup","import conflicting skills under renamed folders"]}{"question":"Choose migration mode: migrate only user data, or run the full compatible migration including allowlisted secrets?","choices":["user-data only","full compatible migration","cancel"]}{"question":"Do you want to copy the OpenClaw workspace instructions file into a Hermes workspace?","choices":["skip workspace instructions","copy to a workspace path","decide later"]}{"question":"Please provide an absolute path where the workspace instructions should be copied."}
判断とコマンドの対応
ユーザーの判断は、次のとおり正確にフラグへ対応させます。
SOUL.mdについてkeep existingが選ばれたら、--overwriteを付けません。overwrite with backupが選ばれたら、--overwriteを付けます。review firstが選ばれたら、実行の前で止めて、該当するファイルを確認します。keep existing skillsが選ばれたら、--skill-conflict skipを付けます。overwrite conflicting skills with backupが選ばれたら、--skill-conflict overwriteを付けます。import conflicting skills under renamed foldersが選ばれたら、--skill-conflict renameを付けます。user-data onlyが選ばれたら、--preset user-dataで実行し、--migrate-secretsは付けません。full compatible migrationが選ばれたら、--preset full --migrate-secretsで実行します。--workspace-targetは、ユーザーがはっきりと絶対パスを示したときだけ付けます。skip workspace instructionsかdecide laterが選ばれたら、--workspace-targetは付けません。
実行の前に、これから走らせるコマンドの中身を平たい言葉で言い直し、ユーザーの選択と食い違っていないか確かめます。
実行後の報告の決まり
実行が終わったら、スクリプトが出した JSON を正しい記録として扱います。
- 件数はすべて
report.summaryに合わせます。 - 「移せたもの」として並べてよいのは、
statusがちょうどmigratedの項目だけです。 - その項目がレポートで
migratedになっていない限り、ぶつかりが解消したとは言わないでください。 kind="soul"の項目がstatus="migrated"になっていない限り、SOUL.mdを上書きしたとは言わないでください。report.summary.conflict > 0のときは、うまくいったかのように黙って流さず、ぶつかった項目の節を必ず設けます。- 件数と並べた項目が食い違うときは、答える前に並びのほうをレポートに合わせて直します。
- レポートに
output_dirのパスがあれば、それも書き添えます。ユーザーがreport.json、summary.md、バックアップ、保管されたファイルを見に行けるようにするためです。 - 記憶やユーザープロフィールがあふれた場合、レポートに保管先のパスがはっきり出ていない限り、「保管しました」と言わないでください。
details.overflow_fileがあるときは、あふれた分の一覧をそこへ書き出したと伝えます。 - skill が名前を変えたフォルダーとして取り込まれたときは、最終的な置き場を報告し、
details.renamed_fromにも触れます。 report.skill_conflict_modeがあるときは、取り込む skill のぶつかりをどう扱ったかについて、それを正しい記録として使います。status="skipped"の項目を、上書きした・バックアップした・移せた・解消したと説明しないでください。kind="soul"がstatus="skipped"で、理由がTarget already matches sourceのときは、そのままにしたと伝え、バックアップには触れないでください。- 名前を変えて取り込んだ skill の
details.backupが空のときは、もとからあった Hermes の skill の名前を変えたり控えを取ったりしたかのように書かないでください。取り込んだほうを新しい置き場に入れたとだけ伝え、details.renamed_fromは、そのまま残っている既存のフォルダーとして示します。
移行のプリセット
普段は次の 2 つのプリセットを使ってください。
user-datafull
user-data に含まれるもの:
soulworkspace-agentsmemoryuser-profilemessaging-settingscommand-allowlistskillstts-assetsarchive
full には、user-data のすべてに加えて次が含まれます。
secret-settings
補助スクリプトは分類ごとの --include / --exclude にも対応していますが、これは普段の使い方ではなく、込み入った場合の逃げ道として扱ってください。
コマンド
すべてを対象にした試し実行:
python3 ~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.pyterminal ツールから呼ぶときは、次のように絶対パスで書く形をおすすめします。
{"command":"python3 /home/USER/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py","workdir":"/home/USER"}user-data プリセットでの試し実行:
python3 ~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py --preset user-datauser-data の移行を実行する:
python3 ~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py --execute --preset user-data --skill-conflict skip移せるものをすべて含めた移行を実行する:
python3 ~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py --execute --preset full --migrate-secrets --skill-conflict skipワークスペース指示も含めて実行する:
python3 ~/.hermes/skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py --execute --preset user-data --skill-conflict rename --workspace-target "/absolute/workspace/path"ワークスペースの移行先に $PWD やホームディレクトリを既定で使わないでください。まず、はっきりしたワークスペースのパスを尋ねます。
大事な決まり
- ユーザーがすぐ進めてほしいとはっきり言わない限り、書き込む前に試し実行をします。
- 秘密情報は既定では移しません。トークン、認証情報のかたまり、端末の資格情報、素のゲートウェイ設定は、ユーザーがはっきり求めない限り Hermes に入れないでください。
- ユーザーがはっきり望まない限り、中身のある Hermes 側のファイルを黙って上書きしないでください。上書きを有効にした場合、補助スクリプトはバックアップを残します。
- 飛ばした項目のレポートは必ずユーザーに渡します。あれは移行の一部であって、おまけではありません。
workspace.default/よりも、主となる OpenClaw のワークスペース(~/.openclaw/workspace/)を優先します。既定のワークスペースは、主となるファイルが見当たらないときの控えとしてだけ使います。- 秘密情報を移すモードでも、Hermes 側に問題のない置き場があるものだけを移します。対応していない認証情報のかたまりは、飛ばしたものとして必ず報告してください。
- 試し実行で、大きな資産のコピー、ぶつかっている
SOUL.md、あふれた記憶の項目が出てきたときは、実行の前にそれらを別立てで伝えます。 - ユーザーが迷っているときは
user-data onlyを既定にします。 workspace-agentsを含めるのは、ユーザーが移行先のワークスペースのパスをはっきり示したときだけです。- 分類ごとの
--include/--excludeは、普段の流れではなく、込み入った場合の逃げ道として扱います。 clarifyが使えるなら、試し実行のまとめを漠然とした「What would you like to do?」で終えないでください。代わりに、形の決まった問いかけを使います。- 本当に選ばせる問いで済む場面で、自由入力の
clarifyを使わないでください。まず選択肢のある形を優先し、自由入力は絶対パスやファイルの確認を求めるときだけにします。 - 試し実行のあと、未解決の判断が残っているのに、まとめただけで止まらないでください。いちばん先に決めるべき、進行を妨げている判断について、すぐ
clarifyを使います。 - 続けて尋ねる順番:
SOUL.mdのぶつかり- 取り込む skill のぶつかり
- 移行モード
- ワークスペース指示の移行先
- 同じメッセージの中で「あとで選択肢を出します」と約束しないでください。実際に
clarifyを呼んで示します。 - 移行モードの答えを得たら、
workspace-agentsがまだ未解決かどうかをはっきり確かめます。未解決なら、次の行動はワークスペース指示についてのclarifyの呼び出しです。 clarifyの答えを得たあと、必要な判断がまだ残っているなら、いま決まったことを言い直さず、すぐ次の質問に進みます。
終わったときの状態
うまくいくと、ユーザーの手元は次のようになります。
- Hermes の人格の状態が取り込まれている
- Hermes の記憶ファイルに、OpenClaw から変換された知識が入っている
- OpenClaw の skill が
~/.hermes/skills/openclaw-imports/から使える - ぶつかり、移せなかったもの、対応していないデータを示す移行レポートがある