Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help


从 OpenClaw 迁移

hermes claw migrate 会把你的 OpenClaw(或旧版 Clawdbot/Moldbot)配置导入 Hermes。这篇指南会说明究竟会迁移哪些内容、配置 key 如何映射,以及迁移后应该检查什么。

快速开始

# 先预览再迁移(总是先显示预览,然后请求确认)
hermes claw migrate

# 只预览,不做任何修改
hermes claw migrate --dry-run

# 完整迁移,包括 API keys,并跳过确认
hermes claw migrate --preset full --yes

迁移命令在真正写入前,总会先显示一份完整预览,告诉你将导入哪些内容。请先检查列表,再确认继续。

默认从 ~/.openclaw/ 读取。旧版 ~/.clawdbot/~/.moltbot/ 目录会被自动识别。旧版配置文件名(clawdbot.jsonmoltbot.json)也会被识别。

选项

选项说明
--dry-run只预览,显示将迁移什么后停止。
--preset <name>full(默认,包含 secrets)或 user-data(不包含 API keys)。
--overwrite冲突时覆盖已有 Hermes 文件(默认:跳过)。
--migrate-secrets包含 API keys(使用 --preset full 时默认开启)。
--source <path>自定义 OpenClaw 目录。
--workspace-target <path>AGENTS.md 的放置位置。
--skill-conflict <mode>skip(默认)、overwriterename
--yes预览后跳过确认提示。

会迁移哪些内容

Persona、memory 和指令

内容OpenClaw 来源Hermes 目标备注
Personaworkspace/SOUL.md~/.hermes/SOUL.md直接复制
Workspace instructionsworkspace/AGENTS.md--workspace-target 下的 AGENTS.md需要 --workspace-target
Long-term memoryworkspace/MEMORY.md~/.hermes/memories/MEMORY.md解析成条目,与现有内容合并并去重,使用 § 分隔符。
User profileworkspace/USER.md~/.hermes/memories/USER.md和 memory 使用相同的条目合并逻辑。
Daily memory filesworkspace/memory/*.md~/.hermes/memories/MEMORY.md所有每日 memory 文件都会合并进主 memory。

Workspace 文件也会在 workspace.default/workspace-main/ 中作为 fallback 检查。OpenClaw 在近期版本中曾把 workspace/ 改名为 workspace-main/,并使用 workspace-{agentId} 支持多 agent 设置。

Skills(4 个来源)

来源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 后缀的副本。

模型和 provider 配置

内容OpenClaw config pathHermes 目标备注
默认模型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 resolution

Agent 行为

内容OpenClaw config pathHermes config path映射方式
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 config pathHermes config path备注
session.reset.modesession_reset.mode“daily”、“idle” 或两者
session.reset.atHoursession_reset.at_hour每日重置小时(0-23)
session.reset.idleMinutessession_reset.idle_minutes空闲分钟数

注意:OpenClaw 还可能有 session.resetTriggers(例如 ["daily", "idle"] 这样的字符串数组)。如果没有结构化的 session.reset,迁移会回退到从 resetTriggers 推断。

MCP servers

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.include工具过滤
mcp.servers.*.tools.excludemcp_servers.*.tools.exclude

TTS(文本转语音)

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

  1. messages.tts.providers.{provider}.*(标准位置)
  2. 顶层 talk.providers.{provider}.*(fallback)
  3. 旧版扁平 key: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/(文件复制)

消息平台

平台OpenClaw config pathHermes .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_USERSBaileys QR 配对认证,迁移后需要重新配对
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 pathHermes path备注
Approval modeapprovals.exec.modeconfig.yamlapprovals.mode“auto”→“off”,“always”→“manual”,“smart”→“smart”
Command allowlistexec-approvals.jsonconfig.yamlcommand_allowlist合并并去重 patterns
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 等价物)

这些内容会保存到 ~/.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使用上下文文件或 skills
Cron jobsarchive/cron-config.jsonhermes cron create 重建
Pluginsarchive/plugins-config.jsonplugins 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 命令
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手动配置平台

API key resolution

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

  1. 配置值openclaw.json 中的 models.providers.*.apiKey 和 TTS provider keys
  2. 环境文件~/.openclaw/.env(例如 OPENROUTER_API_KEYANTHROPIC_API_KEY
  3. 配置中的 env 子对象openclaw.json"env""env"."vars"(有些安装会把 key 放这里)
  4. Auth profiles~/.openclaw/agents/main/agent/auth-profiles.json(按 agent 存储的凭据)

配置值优先级最高,后续来源只会填补还缺失的 key。

支持的 key 目标

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

不在这个 allowlist 中的 key 不会被复制。

SecretRef handling

OpenClaw 配置中的 token 和 API key 可能有三种形式:

// 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 template 和 source: "env" 的 SecretRef 对象,它会从 ~/.openclaw/.envopenclaw.json 的 env 子对象中查找真实值。source: "file"source: "exec" 的 SecretRef 无法自动解析,迁移会给出警告,你需要之后用 hermes config set 手动补到 Hermes。

迁移后检查

  1. 检查迁移报告:完成后会打印迁移、跳过和冲突项数量。

  2. 检查归档文件~/.hermes/migration/openclaw/<timestamp>/archive/ 中的内容都需要你手动确认。

  3. 开启新会话:导入的 skills 和 memory 条目会在新会话中生效,不会影响当前会话。

  4. 验证 API keys:运行 hermes status 检查 provider 认证状态。

  5. 测试消息平台:如果迁移了平台 token,请重启 gateway:systemctl --user restart hermes-gateway

  6. 检查会话策略:确认 hermes config get session_reset 与预期一致。

  7. 重新配对 WhatsApp:WhatsApp 使用 QR code 配对(Baileys),无法直接迁移 token。运行 hermes whatsapp 重新配对。

  8. 清理归档:确认一切正常后,运行 hermes claw cleanup,把剩余 OpenClaw 目录重命名为 .pre-migration/,避免状态混淆。

故障排查

“OpenClaw directory not found”

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

“No provider API keys found”

根据 OpenClaw 版本不同,keys 可能存放在多个位置:openclaw.json 中的 models.providers.*.apiKey~/.openclaw/.envopenclaw.json"env" 子对象,或 agents/main/agent/auth-profiles.json。迁移会检查这四处。如果 key 使用 source: "file"source: "exec" 的 SecretRef,就无法自动解析,需要通过 hermes config set 手动添加。

迁移后看不到 Skills

导入的 skills 会放到 ~/.hermes/skills/openclaw-imports/。请开启新会话让它们生效,或运行 /skills 检查是否已加载。

TTS voice 没有迁移

OpenClaw 会把 TTS 设置放在两个位置:messages.tts.providers.* 和顶层 talk 配置。迁移会检查两处。如果你的 voice ID 是通过 OpenClaw UI 设置并保存在其他路径,可能需要手动设置:hermes config set tts.elevenlabs.voice_id YOUR_VOICE_ID