Skip to content

从 OpenClaw 迁移

hermes agent 从 OpenClaw 迁移

hermes claw migrate 会将你的 OpenClaw(或旧版 Clawdbot / Moldbot)设置导入 Hermes。本指南将说明具体会迁移哪些内容、配置 key 的映射关系,以及迁移后需要验证哪些内容。

Terminal window
# Preview then migrate (always shows a preview first, then asks to confirm)
hermes claw migrate
# Preview only, no changes
hermes claw migrate --dry-run
# Full migration including API keys, skip confirmation
hermes claw migrate --preset full --migrate-secrets --yes

迁移始终会在进行任何更改之前显示完整预览,列出将要导入的内容。请查看列表,然后确认继续。

默认从 ~/.openclaw/ 读取。旧版 ~/.clawdbot/~/.moltbot/ 目录会被自动检测到。旧版配置文件名(clawdbot.jsonmoltbot.json)也是如此。

选项描述
--dry-run仅预览 —— 显示将要迁移的内容后停止。
--preset <name>full(所有兼容设置)或 user-data(排除基础设施配置)。两个 preset 默认都不会导入 secrets —— 必须显式传入 --migrate-secrets
--overwrite在发生冲突时覆盖现有 Hermes 文件(默认:当迁移计划存在冲突时拒绝应用)。
--migrate-secrets包含 API keys。即使使用 --preset full 也需要该参数 —— 没有任何 preset 会静默导入 secrets。
--no-backup跳过迁移前对 ~/.hermes/ 的 zip 快照(默认情况下,会在应用迁移前写入一个单独的 restore-point archive,位于 ~/.hermes/backups/pre-migration-*.zip;可用 hermes import 恢复)。
--source <path>自定义 OpenClaw 目录。
--workspace-target <path>放置 AGENTS.md 的位置。
--skill-conflict <mode>skip(默认)、overwriterename
--yes预览后跳过确认提示。
内容OpenClaw 来源Hermes 目标位置备注
Personaworkspace/SOUL.md~/.hermes/SOUL.md直接复制
Workspace instructionsworkspace/AGENTS.md--workspace-target 中的 AGENTS.md需要 --workspace-target flag
长期 memoryworkspace/MEMORY.md~/.hermes/memories/MEMORY.md解析为 entries,与现有内容合并并去重。使用 § 分隔符。
用户 profileworkspace/USER.md~/.hermes/memories/USER.md与 memory 使用相同的 entry 合并逻辑。
每日 memory 文件workspace/memory/*.md~/.hermes/memories/MEMORY.md所有每日文件都会合并到主 memory 中。

Workspace 文件也会在 workspace.default/workspace-main/ 中作为 fallback 路径进行检查(OpenClaw 在最近版本中将 workspace/ 重命名为 workspace-main/,并且在多 agent 设置中使用 workspace-{agentId})。

来源OpenClaw 位置Hermes 目标位置
Workspace skillsworkspace/skills/~/.hermes/skills/openclaw-imports/
Managed/shared skills~/.openclaw/skills/~/.hermes/skills/openclaw-imports/
Personal cross-project~/.agents/skills/~/.hermes/skills/openclaw-imports/
Project-level sharedworkspace/.agents/skills/~/.hermes/skills/openclaw-imports/

Skill 冲突由 --skill-conflict 处理:skip 会保留现有 Hermes skill,overwrite 会替换它,rename 会创建一个 -imported 副本。

内容OpenClaw 配置路径Hermes 目标位置备注
默认模型agents.defaults.modelconfig.yamlmodel可以是字符串,或 {primary, fallbacks} 对象
自定义 providersmodels.providers.*config.yamlcustom_providers映射 baseUrlapiType / api —— 同时处理短值("openai""anthropic")和带连字符的值("openai-completions""anthropic-messages""google-generative-ai"
Provider API keysmodels.providers.*.apiKey~/.hermes/.env需要 --migrate-secrets。参见下面的 API key 解析。
内容OpenClaw 配置路径Hermes 配置路径映射
Max turnsagents.defaults.timeoutSecondsagent.max_turnstimeoutSeconds / 10,上限为 200
Verbose modeagents.defaults.verboseDefaultagent.verbose"off" / "on" / "full"
Reasoning effortagents.defaults.thinkingDefaultagent.reasoning_effort"always" / "high" / "xhigh""high""auto" / "medium" / "adaptive""medium""off" / "low" / "none" / "minimal""low"
Compressionagents.defaults.compaction.modecompression.enabled"off"false,其他任何值 → true
Compression modelagents.defaults.compaction.modelcompression.summary_model直接复制字符串
Human delayagents.defaults.humanDelay.modehuman_delay.mode"natural" / "custom" / "off"
Human delay timingagents.defaults.humanDelay.minMs / .maxMshuman_delay.min_ms / .max_ms直接复制
Timezoneagents.defaults.userTimezonetimezone直接复制字符串
Exec timeouttools.exec.timeoutSecterminal.timeout直接复制(字段是 timeoutSec,不是 timeout
Docker sandboxagents.defaults.sandbox.backendterminal.backend"docker""docker"
Docker imageagents.defaults.sandbox.docker.imageterminal.docker_image直接复制
OpenClaw 配置路径Hermes 配置路径备注
session.reset.modesession_reset.mode"daily""idle",或两者
session.reset.atHoursession_reset.at_hour每日 reset 的小时数(0–23)
session.reset.idleMinutessession_reset.idle_minutes不活跃分钟数

注意:OpenClaw 也有 session.resetTriggers(一个简单的字符串数组,例如 ["daily", "idle"])。如果不存在结构化的 session.reset,迁移会回退为从 resetTriggers 推断。

OpenClaw 字段Hermes 字段备注
mcp.servers.*.commandmcp_servers.*.commandStdio transport
mcp.servers.*.argsmcp_servers.*.args
mcp.servers.*.envmcp_servers.*.env
mcp.servers.*.cwdmcp_servers.*.cwd
mcp.servers.*.urlmcp_servers.*.urlHTTP/SSE transport
mcp.servers.*.tools.includemcp_servers.*.tools.includeTool filtering
mcp.servers.*.tools.excludemcp_servers.*.tools.exclude

TTS 设置会从两个 OpenClaw 配置位置读取,优先级如下:

  1. messages.tts.providers.{provider}.*(规范位置)
  2. 顶层 talk.providers.{provider}.*(fallback)
  3. 旧版扁平 keys:messages.tts.{provider}.*(最老格式)
内容Hermes 目标位置
Provider nameconfig.yamltts.provider
ElevenLabs voice IDconfig.yamltts.elevenlabs.voice_id
ElevenLabs model IDconfig.yamltts.elevenlabs.model_id
OpenAI modelconfig.yamltts.openai.model
OpenAI voiceconfig.yamltts.openai.voice
Edge TTS voiceconfig.yamltts.edge.voice(OpenClaw 将 "edge" 重命名为 "microsoft" —— 两者都会被识别)
TTS assets~/.hermes/tts/(文件复制)
PlatformOpenClaw 配置路径Hermes .env 变量备注
Telegramchannels.telegram.botToken.accounts.default.botTokenTELEGRAM_BOT_TOKENToken 可以是字符串或 SecretRef。支持 flat 和 accounts 两种布局。
Telegramcredentials/telegram-default-allowFrom.jsonTELEGRAM_ALLOWED_USERSallowFrom[] 数组用逗号拼接
Discordchannels.discord.token.accounts.default.tokenDISCORD_BOT_TOKEN
Discordchannels.discord.allowFrom.accounts.default.allowFromDISCORD_ALLOWED_USERS
Slackchannels.slack.botToken.accounts.default.botTokenSLACK_BOT_TOKEN
Slackchannels.slack.appToken.accounts.default.appTokenSLACK_APP_TOKEN
Slackchannels.slack.allowFrom.accounts.default.allowFromSLACK_ALLOWED_USERS
WhatsAppchannels.whatsapp.allowFrom.accounts.default.allowFromWHATSAPP_ALLOWED_USERS通过 Baileys QR pairing 认证 —— 迁移后需要重新 pairing
Signalchannels.signal.account.accounts.default.accountSIGNAL_ACCOUNT
Signalchannels.signal.httpUrl.accounts.default.httpUrlSIGNAL_HTTP_URL
Signalchannels.signal.allowFrom.accounts.default.allowFromSIGNAL_ALLOWED_USERS
Matrixchannels.matrix.accessToken.accounts.default.accessTokenMATRIX_ACCESS_TOKEN使用 accessToken(不是 botToken
Mattermostchannels.mattermost.botToken.accounts.default.botTokenMATTERMOST_BOT_TOKEN
内容OpenClaw 路径Hermes 路径备注
Approval modeapprovals.exec.modeconfig.yamlapprovals.mode"auto""off""always""manual""smart""smart"
Command allowlistexec-approvals.jsonconfig.yamlcommand_allowlistPatterns 合并并去重
Browser CDP URLbrowser.cdpUrlconfig.yamlbrowser.cdp_url
Browser headlessbrowser.headlessconfig.yamlbrowser.headless
Brave search keytools.web.search.brave.apiKey.envBRAVE_API_KEY需要 --migrate-secrets
Gateway auth tokengateway.auth.token.envHERMES_GATEWAY_TOKEN需要 --migrate-secrets
Working directoryagents.defaults.workspace.envMESSAGING_CWD

已归档(没有直接对应的 Hermes 等价物)

Section titled “已归档(没有直接对应的 Hermes 等价物)”

这些会保存到 ~/.hermes/migration/openclaw/<timestamp>/archive/,供手动查看:

内容归档文件如何在 Hermes 中重新创建
IDENTITY.mdarchive/workspace/IDENTITY.md合并到 SOUL.md
TOOLS.mdarchive/workspace/TOOLS.mdHermes 有内置工具说明
HEARTBEAT.mdarchive/workspace/HEARTBEAT.md使用 cron jobs 处理周期任务
BOOTSTRAP.mdarchive/workspace/BOOTSTRAP.md使用 context files 或 skills
Cron jobsarchive/cron-config.json使用 hermes cron create 重新创建
Pluginsarchive/plugins-config.json参见 plugins guide
Hooks/webhooksarchive/hooks-config.json使用 hermes webhook 或 gateway hooks
Memory backendarchive/memory-backend-config.json通过 hermes honcho 配置
Skills registryarchive/skills-registry-config.json使用 hermes skills config
UI/identityarchive/ui-identity-config.json使用 /skin command
Loggingarchive/logging-diagnostics-config.jsonconfig.yaml 的 logging section 中设置
Multi-agent listarchive/agents-list.json使用 Hermes profiles
Channel bindingsarchive/bindings.json按平台手动设置
Complex channelsarchive/channels-deep-config.json手动配置平台

当启用 --migrate-secrets 时,API keys 会按优先级从四个来源收集:

  1. Config values —— openclaw.json 中的 models.providers.*.apiKey 和 TTS provider keys
  2. Environment file —— ~/.openclaw/.env(例如 OPENROUTER_API_KEYANTHROPIC_API_KEY 等 key)
  3. Config env sub-object —— openclaw.json"env""env"."vars"(有些设置会把 keys 存在这里,而不是单独的 .env 文件)
  4. Auth profiles —— ~/.openclaw/agents/main/agent/auth-profiles.json(每个 agent 的 credentials)

Config values 优先级最高。后续每个来源会填补剩余缺失项。

OPENROUTER_API_KEYOPENAI_API_KEYANTHROPIC_API_KEYDEEPSEEK_API_KEYGEMINI_API_KEYZAI_API_KEYMINIMAX_API_KEYELEVENLABS_API_KEYTELEGRAM_BOT_TOKENVOICE_TOOLS_OPENAI_KEY

不在此 allowlist 中的 keys 永远不会被复制。

OpenClaw 配置中的 tokens 和 API keys 可以有三种格式:

// Plain string
"channels": { "telegram": { "botToken": "123456:ABC-DEF..." } }
// Environment template
"channels": { "telegram": { "botToken": "${TELEGRAM_BOT_TOKEN}" } }
// SecretRef object
"channels": { "telegram": { "botToken": { "source": "env", "id": "TELEGRAM_BOT_TOKEN" } } }

迁移会解析这三种格式。对于 env templates 和带有 source: "env" 的 SecretRef objects,它会在 ~/.openclaw/.envopenclaw.json 的 env sub-object 中查找对应值。带有 source: "file"source: "exec" 的 SecretRef objects 无法自动解析 —— 迁移会对此发出警告,这些值必须通过 hermes config set 手动添加到 Hermes。

  1. 检查迁移报告 —— 完成时会打印出来,其中包含 migrated、skipped 和 conflicting items 的数量。
  2. 查看归档文件 —— ~/.hermes/migration/openclaw/<timestamp>/archive/ 中的任何内容都需要手动处理。
  3. 启动新 session —— 导入的 skills 和 memory entries 会在新 sessions 中生效,而不是当前 session。
  4. 验证 API keys —— 运行 hermes status 检查 provider authentication。
  5. 测试 messaging —— 如果你迁移了平台 tokens,请重启 gateway:systemctl --user restart hermes-gateway
  6. 检查 session policies —— 确认 hermes config get session_reset 与你的预期一致。
  7. 重新配对 WhatsApp —— WhatsApp 使用 QR code pairing(Baileys),不是 token migration。运行 hermes whatsapp 进行配对。
  8. 清理归档 —— 确认一切正常后,运行 hermes claw cleanup,将剩余的 OpenClaw 目录重命名为 .pre-migration/(防止状态混淆)。

迁移会依次检查 ~/.openclaw/~/.clawdbot/~/.moltbot/。如果你的安装在其他位置,请使用 --source /path/to/your/openclaw

根据你的 OpenClaw 版本,keys 可能存储在多个地方:openclaw.jsonmodels.providers.*.apiKey 下的 inline 值、~/.openclaw/.envopenclaw.json"env" sub-object,或 agents/main/agent/auth-profiles.json 中。迁移会检查这四个位置。如果 keys 使用 source: "file"source: "exec" SecretRefs,则无法自动解析 —— 请通过 hermes config set 添加。

导入的 skills 会放在 ~/.hermes/skills/openclaw-imports/ 中。启动一个新 session 让它们生效,或者运行 /skills 验证它们是否已加载。

OpenClaw 会在两个位置存储 TTS 设置:messages.tts.providers.* 和顶层 talk config。迁移会检查两者。如果你的 voice ID 是通过 OpenClaw UI 设置的(存储在不同路径中),可能需要手动设置:hermes config set tts.elevenlabs.voice_id YOUR_VOICE_ID

-
0:000:00