hermes claw migrate 將你的 OpenClaw(或舊版 Clawdbot/Moldbot)設定匯入 Hermes。本指南涵蓋確切遷移的內容、設定鍵對應,以及遷移後需要驗證的事項。
提示
如果你的 OpenClaw 設定是多供應商的,
hermes setup --portal會將其壓縮為一個 OAuth — 300 多個模型加上 Tool Gateway 在一個登入中。參見 Nous Portal。
快速開始
# 預覽然後遷移(總是先顯示預覽,然後要求確認)
hermes claw migrate
# 僅預覽,不做任何變更
hermes claw migrate --dry-run
# 完整遷移包括 API 金鑰,跳過確認
hermes claw migrate --preset full --migrate-secrets --yes
遷移總是先顯示將匯入內容的完整預覽,然後才進行任何變更。檢視清單,然後確認繼續。
預設從 ~/.openclaw/ 讀取。舊版 ~/.clawdbot/ 或 ~/.moltbot/ 目錄會被自動偵測。舊版設定檔名稱(clawdbot.json、moltbot.json)也是如此。
選項
| 選項 | 描述 |
|---|---|
--dry-run | 僅預覽 — 顯示將被遷移的內容後停止。 |
--preset <name> | full(所有相容設定)或 user-data(排除基礎設施設定)。兩個預設都不匯入密鑰 — 需要明確傳遞 --migrate-secrets。 |
--overwrite | 衝突時覆寫現有的 Hermes 檔案(預設:當計畫有衝突時拒絕套用)。 |
--migrate-secrets | 包含 API 金鑰。即使在 --preset full 下也需要 — 沒有預設會靜默匯入密鑰。 |
--no-backup | 跳過遷移前的 ~/.hermes/ zip 快照(預設在套用前寫入一個還原點壓縮檔,位於 ~/.hermes/backups/pre-migration-*.zip;可透過 hermes import 還原)。 |
--source <path> | 自訂 OpenClaw 目錄。 |
--workspace-target <path> | 放置 AGENTS.md 的位置。 |
--skill-conflict <mode> | skip(預設)、overwrite 或 rename。 |
--yes | 預覽後跳過確認提示。 |
遷移內容
人物、記憶和指令
| 內容 | OpenClaw 來源 | Hermes 目的地 | 備註 |
|---|---|---|---|
| 人物 | workspace/SOUL.md | ~/.hermes/SOUL.md | 直接複製 |
| 工作區指令 | workspace/AGENTS.md | --workspace-target 中的 AGENTS.md | 需要 --workspace-target 參數 |
| 長期記憶 | workspace/MEMORY.md | ~/.hermes/memories/MEMORY.md | 解析為條目,與現有內容合併,去重。使用 § 分隔符。 |
| 使用者設定檔 | workspace/USER.md | ~/.hermes/memories/USER.md | 與記憶相同的條目合併邏輯。 |
| 每日記憶檔案 | workspace/memory/*.md | ~/.hermes/memories/MEMORY.md | 所有每日檔案合併到主記憶中。 |
工作區檔案也會在 workspace.default/ 和 workspace-main/ 作為備用路徑被檢查(OpenClaw 在最近版本中將 workspace/ 重新命名為 workspace-main/,並使用 workspace-{agentId} 用於多代理設定)。
技能(4 個來源)
| 來源 | OpenClaw 位置 | Hermes 目的地 |
|---|---|---|
| 工作區技能 | workspace/skills/ | ~/.hermes/skills/openclaw-imports/ |
| 管理/共享技能 | ~/.openclaw/skills/ | ~/.hermes/skills/openclaw-imports/ |
| 個人跨專案 | ~/.agents/skills/ | ~/.hermes/skills/openclaw-imports/ |
| 專案級共享 | workspace/.agents/skills/ | ~/.hermes/skills/openclaw-imports/ |
技能衝突由 --skill-conflict 處理:skip 保留現有的 Hermes 技能,overwrite 替換它,rename 建立 -imported 副本。
模型和供應商設定
| 內容 | OpenClaw 設定路徑 | Hermes 目的地 | 備註 |
|---|---|---|---|
| 預設模型 | agents.defaults.model | config.yaml → model | 可以是字串或 {primary, fallbacks} 物件 |
| 自訂供應商 | models.providers.* | config.yaml → custom_providers | 對應 baseUrl、apiType/api — 處理簡短(「openai」、「anthropic」)和連字元(「openai-completions」、「anthropic-messages」、「google-generative-ai」)值 |
| 供應商 API 金鑰 | models.providers.*.apiKey | ~/.hermes/.env | 需要 --migrate-secrets。參見下方的 API 金鑰解析。 |
代理程式行為
| 內容 | OpenClaw 設定路徑 | Hermes 設定路徑 | 對應 |
|---|---|---|---|
| 最大回合數 | agents.defaults.timeoutSeconds | agent.max_turns | timeoutSeconds / 10,上限 200 |
| 詳細模式 | agents.defaults.verboseDefault | agent.verbose | "off" / "on" / "full" |
| 推理 effort | agents.defaults.thinkingDefault | agent.reasoning_effort | "always"/"high"/"xhigh" → "high","auto"/"medium"/"adaptive" → "medium","off"/"low"/"none"/"minimal" → "low" |
| 壓縮 | agents.defaults.compaction.mode | compression.enabled | "off" → false,其他 → true |
| 壓縮模型 | agents.defaults.compaction.model | compression.summary_model | 直接字串複製 |
| 人類延遲 | agents.defaults.humanDelay.mode | human_delay.mode | "natural" / "custom" / "off" |
| 人類延遲計時 | agents.defaults.humanDelay.minMs / .maxMs | human_delay.min_ms / .max_ms | 直接複製 |
| 時區 | agents.defaults.userTimezone | timezone | 直接字串複製 |
| 執行逾時 | tools.exec.timeoutSec | terminal.timeout | 直接複製(欄位是 timeoutSec,不是 timeout) |
| Docker 沙箱 | agents.defaults.sandbox.backend | terminal.backend | "docker" → "docker" |
| Docker 映象 | agents.defaults.sandbox.docker.image | terminal.docker_image | 直接複製 |
工作階段重設策略
| OpenClaw 設定路徑 | Hermes 設定路徑 | 備註 |
|---|---|---|
session.reset.mode | session_reset.mode | "daily"、"idle" 或兩者 |
session.reset.atHour | session_reset.at_hour | 每日重設的小時 (0–23) |
session.reset.idleMinutes | session_reset.idle_minutes | 不活動的分鐘數 |
注意:OpenClaw 還有 session.resetTriggers(像 ["daily", "idle"] 這樣的簡單字串陣列)。如果結構化的 session.reset 不存在,遷移會從 resetTriggers 退回推斷。
MCP 伺服器
| OpenClaw 欄位 | Hermes 欄位 | 備註 |
|---|---|---|
mcp.servers.*.command | mcp_servers.*.command | Stdio 傳輸 |
mcp.servers.*.args | mcp_servers.*.args | |
mcp.servers.*.env | mcp_servers.*.env | |
mcp.servers.*.cwd | mcp_servers.*.cwd | |
mcp.servers.*.url | mcp_servers.*.url | HTTP/SSE 傳輸 |
mcp.servers.*.tools.include | mcp_servers.*.tools.include | 工具過濾 |
mcp.servers.*.tools.exclude | mcp_servers.*.tools.exclude |
TTS(文字轉語音)
TTS 設定從兩個 OpenClaw 設定位置讀取,優先順序如下:
messages.tts.providers.{provider}.*(規範位置)- 頂層
talk.providers.{provider}.*(備用) - 舊版扁平鍵
messages.tts.{provider}.*(最舊格式)
| 內容 | Hermes 目的地 |
|---|---|
| 提供者名稱 | config.yaml → tts.provider |
| ElevenLabs 語音 ID | config.yaml → tts.elevenlabs.voice_id |
| ElevenLabs 模型 ID | config.yaml → tts.elevenlabs.model_id |
| OpenAI 模型 | config.yaml → tts.openai.model |
| OpenAI 語音 | config.yaml → tts.openai.voice |
| Edge TTS 語音 | config.yaml → tts.edge.voice(OpenClaw 將「edge」重新命名為「microsoft」— 兩者都被識別) |
| TTS 資源 | ~/.hermes/tts/(檔案複製) |
訊息平台
| 平台 | OpenClaw 設定路徑 | Hermes .env 變數 | 備註 |
|---|---|---|---|
| Telegram | channels.telegram.botToken 或 .accounts.default.botToken | TELEGRAM_BOT_TOKEN | 代碼可以是字串或 SecretRef。支援扁平和帳戶佈局。 |
| Telegram | credentials/telegram-default-allowFrom.json | TELEGRAM_ALLOWED_USERS | 從 allowFrom[] 陣列逗號連接 |
| Discord | channels.discord.token 或 .accounts.default.token | DISCORD_BOT_TOKEN | |
| Discord | channels.discord.allowFrom 或 .accounts.default.allowFrom | DISCORD_ALLOWED_USERS | |
| Slack | channels.slack.botToken 或 .accounts.default.botToken | SLACK_BOT_TOKEN | |
| Slack | channels.slack.appToken 或 .accounts.default.appToken | SLACK_APP_TOKEN | |
| Slack | channels.slack.allowFrom 或 .accounts.default.allowFrom | SLACK_ALLOWED_USERS | |
channels.whatsapp.allowFrom 或 .accounts.default.allowFrom | WHATSAPP_ALLOWED_USERS | 透過 Baileys QR 配對認證 — 遷移後需要重新配對 | |
| Signal | channels.signal.account 或 .accounts.default.account | SIGNAL_ACCOUNT | |
| Signal | channels.signal.httpUrl 或 .accounts.default.httpUrl | SIGNAL_HTTP_URL | |
| Signal | channels.signal.allowFrom 或 .accounts.default.allowFrom | SIGNAL_ALLOWED_USERS | |
| Matrix | channels.matrix.accessToken 或 .accounts.default.accessToken | MATRIX_ACCESS_TOKEN | 使用 accessToken(非 botToken) |
| Mattermost | channels.mattermost.botToken 或 .accounts.default.botToken | MATTERMOST_BOT_TOKEN |
其他設定
| 內容 | OpenClaw 路徑 | Hermes 路徑 | 備註 |
|---|---|---|---|
| 核准模式 | approvals.exec.mode | config.yaml → approvals.mode | "auto"→"off","always"→"manual","smart"→"smart" |
| 指令允許清單 | exec-approvals.json | config.yaml → command_allowlist | 模式合併並去重 |
| 瀏覽器 CDP URL | browser.cdpUrl | config.yaml → browser.cdp_url | |
| 瀏覽器無頭模式 | browser.headless | config.yaml → browser.headless | |
| Brave 搜尋金鑰 | tools.web.search.brave.apiKey | .env → BRAVE_API_KEY | 需要 --migrate-secrets |
| 閘道認證代碼 | gateway.auth.token | .env → HERMES_GATEWAY_TOKEN | 需要 --migrate-secrets |
| 工作目錄 | agents.defaults.workspace | config.yaml → terminal.cwd | 舊版遷移可能仍會發出 MESSAGING_CWD 作為相容備用 |
已封存(無直接 Hermes 對應)
這些會儲存到 ~/.hermes/migration/openclaw/<timestamp>/archive/ 供手動檢視:
| 內容 | 封存檔案 | 如何在 Hermes 中重建 |
|---|---|---|
IDENTITY.md | archive/workspace/IDENTITY.md | 合併到 SOUL.md |
TOOLS.md | archive/workspace/TOOLS.md | Hermes 有內建工具指令 |
HEARTBEAT.md | archive/workspace/HEARTBEAT.md | 使用定時任務處理定期任務 |
BOOTSTRAP.md | archive/workspace/BOOTSTRAP.md | 使用上下文檔案或技能 |
| 定時任務 | archive/cron-config.json | 使用 hermes cron create 重建 |
| 外掛 | archive/plugins-config.json | 參見外掛指南 |
| 鉤子/Webhook | archive/hooks-config.json | 使用 hermes webhook 或閘道鉤子 |
| 記憶後端 | archive/memory-backend-config.json | 透過 hermes honcho 設定 |
| 技能註冊表 | archive/skills-registry-config.json | 使用 hermes skills config |
| UI/身分 | archive/ui-identity-config.json | 使用 /skin 指令 |
| 日誌記錄 | archive/logging-diagnostics-config.json | 在 config.yaml 的 logging 部分設定 |
| 多代理清單 | archive/agents-list.json | 使用 Hermes 設定檔 |
| 頻道綁定 | archive/bindings.json | 按平台手動設定 |
| 複雜頻道 | archive/channels-deep-config.json | 手動平台設定 |
API 金鑰解析
當 --migrate-secrets 啟用時,API 金鑰按優先順序從四個來源收集:
- 設定值 —
openclaw.json中的models.providers.*.apiKey和 TTS 供應商金鑰 - 環境檔案 —
~/.openclaw/.env(如OPENROUTER_API_KEY、ANTHROPIC_API_KEY等金鑰) - 設定 env 子物件 —
openclaw.json→"env"或"env"."vars"(某些設定將金鑰儲存在這裡而非獨立的.env檔案) - 認證設定檔 —
~/.openclaw/agents/main/agent/auth-profiles.json(每個代理程式的憑證)
設定值優先。每個後續來源填補剩餘的空白。
支援的金鑰目標
OPENROUTER_API_KEY、OPENAI_API_KEY、ANTHROPIC_API_KEY、DEEPSEEK_API_KEY、GEMINI_API_KEY、ZAI_API_KEY、MINIMAX_API_KEY、ELEVENLABS_API_KEY、TELEGRAM_BOT_TOKEN、VOICE_TOOLS_OPENAI_KEY
不在此允許清單中的金鑰不會被複製。
SecretRef 處理
OpenClaw 的代碼和 API 金鑰設定值可以是三種格式之一:
// 純字串
"channels": { "telegram": { "botToken": "123456:ABC-DEF..." } }
// 環境模板
"channels": { "telegram": { "botToken": "${TELEGRAM_BOT_TOKEN}" } }
// SecretRef 物件
"channels": { "telegram": { "botToken": { "source": "env", "id": "TELEGRAM_BOT_TOKEN" } } }
遷移解析所有三種格式。對於環境模板和 source: "env" 的 SecretRef 物件,它在 ~/.openclaw/.env 和 openclaw.json env 子物件中查找值。source: "file" 或 source: "exec" 的 SecretRef 物件無法自動解析 — 遷移會發出警告,這些值必須透過 hermes config set 手動新增到 Hermes。
遷移後
-
檢查遷移報告 — 完成時列印,包含遷移、跳過和衝突項目的計數。
-
檢視封存檔案 —
~/.hermes/migration/openclaw/<timestamp>/archive/中的任何內容都需要手動處理。 -
開始新的工作階段 — 匯入的技能和記憶條目在新工作階段中生效,而非當前工作階段。
-
驗證 API 金鑰 — 執行
hermes status檢查供應商認證。 -
測試訊息 — 如果你遷移了平台代碼,重啟閘道:
systemctl --user restart hermes-gateway -
檢查工作階段策略 — 執行
hermes config show並驗證session_reset值符合你的預期。 -
重新配對 WhatsApp — WhatsApp 使用 QR 碼配對(Baileys),而非代碼遷移。執行
hermes whatsapp進行配對。 -
封存清理 — 確認一切正常後,執行
hermes claw cleanup將殘留的 OpenClaw 目錄重新命名為.pre-migration/(防止狀態混淆)。
疑難排解
「OpenClaw directory not found」
遷移檢查 ~/.openclaw/,然後 ~/.clawdbot/,然後 ~/.moltbot/。如果你的安裝在其他地方,使用 --source /path/to/your/openclaw。
「No provider API keys found」
根據你的 OpenClaw 版本,金鑰可能儲存在多個位置:openclaw.json 中 models.providers.*.apiKey 下的內聯值、~/.openclaw/.env 中、openclaw.json 的 "env" 子物件中,或 agents/main/agent/auth-profiles.json 中。遷移檢查所有四個位置。如果金鑰使用 source: "file" 或 source: "exec" SecretRef,它們無法自動解析 — 透過 hermes config set 新增它們。
遷移後技能未出現
匯入的技能存放在 ~/.hermes/skills/openclaw-imports/ 中。開始新的工作階段以使它們生效,或執行 /skills 驗證它們已載入。
TTS 語音未遷移
OpenClaw 在兩個位置儲存 TTS 設定:messages.tts.providers.* 和頂層 talk 設定。遷移檢查兩者。如果你的語音 ID 是透過 OpenClaw UI 設定的(儲存在不同路徑),你可能需要手動設定:hermes config set tts.elevenlabs.voice_id YOUR_VOICE_ID。