Skip to main content

从 OpenClaw 迁移

hermes claw migrate 可以把你的 OpenClaw 配置导入 Hermes,也兼容旧版 Clawdbot / Moltbot 目录。本指南会说明哪些内容能自动迁移、配置项如何映射,以及迁移完成后该重点检查什么。

快速开始

# 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 --yes

迁移过程始终会先显示完整的预览,展示即将导入的内容,之后才执行实际操作。请仔细审查列表,确认无误后再继续。

默认读取 ~/.openclaw/ 目录。系统会自动检测旧版 ~/.clawdbot/~/.moltbot/ 目录。同样地,旧版配置文件名(clawdbot.jsonmoltbot.json)也会被自动识别。

选项

选项描述
--dry-run仅预览 —— 显示将要迁移的内容后停止,不进行任何更改。
--preset <name>full(默认,包含密钥)或 user-data(不包含 API 密钥)。
--overwrite发生冲突时覆盖现有 Hermes 文件(默认:跳过)。
--migrate-secrets包含 API 密钥(在启用 --preset full 时默认开启)。
--source <path>自定义 OpenClaw 目录路径。
--workspace-target <path>指定 AGENTS.md 的存放位置。
--skill-conflict <mode>skip(默认)、overwriterename
--yes跳过预览后的确认提示。

迁移内容

人物设定、记忆与指令

内容OpenClaw 来源Hermes 目标位置说明
人物设定workspace/SOUL.md~/.hermes/SOUL.md直接复制
工作区指令workspace/AGENTS.mdAGENTS.md 中的 --workspace-target需启用 --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.modelconfig.yamlmodel可为字符串或 {primary, fallbacks} 对象
自定义提供者models.providers.*config.yamlcustom_providers映射 baseUrlapiType/api —— 支持短名称(如 "openai"、"anthropic")和连字符形式(如 "openai-completions"、"anthropic-messages"、"google-generative-ai")
提供者 API 密钥models.providers.*.apiKey~/.hermes/.env需启用 --migrate-secrets。详见下方 API 密钥解析

代理行为

内容OpenClaw 配置路径Hermes 配置路径映射规则
最大轮次agents.defaults.timeoutSecondsagent.max_turnstimeoutSeconds / 10,上限为 200
详细模式agents.defaults.verboseDefaultagent.verbose"off" / "on" / "full"
推理努力程度agents.defaults.thinkingDefaultagent.reasoning_effort"always"/"high"/"xhigh" → "high";"auto"/"medium"/"adaptive" → "medium";"off"/"low"/"none"/"minimal" → "low"
压缩功能agents.defaults.compaction.modecompression.enabled"off" → false,其余值 → true
压缩模型agents.defaults.compaction.modelcompression.summary_model直接复制字符串
人类延迟agents.defaults.humanDelay.modehuman_delay.mode"natural" / "custom" / "off"
人类延迟时间agents.defaults.humanDelay.minMs / .maxMshuman_delay.min_ms / .max_ms直接复制
时区agents.defaults.userTimezonetimezone直接复制字符串
执行超时tools.exec.timeoutSecterminal.timeout直接复制(字段名为 timeoutSec,而非 timeout
Docker 沙箱agents.defaults.sandbox.backendterminal.backend"docker" → "docker"
Docker 镜像agents.defaults.sandbox.docker.imageterminal.docker_image直接复制字符串

会话重置策略

OpenClaw 配置路径Hermes 配置路径说明
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 服务器

OpenClaw 字段Hermes 字段说明
mcp.servers.*.commandmcp_servers.*.command标准输入输出传输
mcp.servers.*.argsmcp_servers.*.args
mcp.servers.*.envmcp_servers.*.env
mcp.servers.*.cwdmcp_servers.*.cwd
mcp.servers.*.urlmcp_servers.*.urlHTTP/SSE 传输
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}.*(备用位置)
  3. 旧版扁平键 messages.tts.{provider}.*(最老格式)
内容Hermes 目标位置
提供商名称config.yamltts.provider
ElevenLabs 语音 IDconfig.yamltts.elevenlabs.voice_id
ElevenLabs 模型 IDconfig.yamltts.elevenlabs.model_id
OpenAI 模型config.yamltts.openai.model
OpenAI 语音config.yamltts.openai.voice
Edge TTS 语音config.yamltts.edge.voice(OpenClaw 将 "edge" 重命名为 "microsoft" —— 两者均被识别)
TTS 资源文件~/.hermes/tts/(文件复制)

消息平台

平台OpenClaw 配置路径Hermes .env 变量说明
Telegramchannels.telegram.botToken.accounts.default.botTokenTELEGRAM_BOT_TOKENToken 可为字符串或 SecretRef。支持扁平结构和账户分层结构。
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 二维码配对认证 — 迁移后需重新配对
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 路径说明
审批模式approvals.exec.modeconfig.yamlapprovals.mode"auto"→"off", "always"→"manual", "smart"→"smart"
命令白名单exec-approvals.jsonconfig.yamlcommand_allowlist模式合并并去重
浏览器 CDP URLbrowser.cdpUrlconfig.yamlbrowser.cdp_url
浏览器无头模式browser.headlessconfig.yamlbrowser.headless
Brave 搜索密钥tools.web.search.brave.apiKey.envBRAVE_API_KEY需要 --migrate-secrets
网关认证令牌gateway.auth.token.envHERMES_GATEWAY_TOKEN需要 --migrate-secrets
工作目录agents.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使用上下文文件或技能
定时任务(cron jobs)archive/cron-config.json使用 hermes cron create 重建
插件archive/plugins-config.json参见 构建 Hermes 插件
钩子/Webhookarchive/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.jsonconfig.yaml 的日志部分设置
多代理列表archive/agents-list.json使用 Hermes 配置文件
通道绑定archive/bindings.json按平台手动设置
复杂通道archive/channels-deep-config.json手动平台配置

API 密钥解析

当启用 --migrate-secrets 时,API 密钥将按优先级从 四个来源 获取:

  1. 配置值models.providers.*.apiKeyopenclaw.json 中的 TTS 提供商密钥
  2. 环境文件~/.openclaw/.env(如 OPENROUTER_API_KEYANTHROPIC_API_KEY 等)
  3. 配置 env 子对象openclaw.json"env""env"."vars"(某些部署将密钥存储于此而非独立的 .env 文件)
  4. 认证配置文件~/.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 密钥的值可采用三种格式:

// 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" } } }

迁移过程会自动处理这三种格式。对于包含 source: "env" 的环境模板和 SecretRef 对象,系统会查找 ~/.openclaw/.envopenclaw.json 环境子对象中的值。而使用 source: "file"source: "exec" 的 SecretRef 对象无法自动解析——迁移将发出警告,这些值必须通过 hermes config set 手动添加至 Hermes。

迁移后操作

  1. 检查迁移报告 — 迁移完成后打印,包含已迁移、跳过和冲突项的数量。
  2. 审查归档文件~/.hermes/migration/openclaw/<timestamp>/archive/ 中的内容需手动处理。
  3. 启动新会话 — 导入的技能和记忆条目仅在新会话中生效,当前会话不受影响。
  4. 验证 API 密钥 — 运行 hermes status 以检查提供方认证状态。
  5. 测试消息功能 — 若已迁移平台令牌,请重启网关:systemctl --user restart hermes-gateway
  6. 检查会话策略 — 确保 hermes config get session_reset 符合预期。
  7. 重新配对 WhatsApp — WhatsApp 使用二维码配对(Baileys),不支持令牌迁移。运行 hermes whatsapp 完成配对。
  8. 清理归档 — 确认一切正常后,运行 hermes claw cleanup 将遗留的 OpenClaw 目录重命名为 .pre-migration/(防止状态混淆)。

故障排除

“未找到 OpenClaw 目录”

迁移工具会依次检查 ~/.openclaw/~/.clawdbot/~/.moltbot/。若安装位置不同,请使用 --source /path/to/your/openclaw 指定路径。

“未找到提供方 API 密钥”

根据 OpenClaw 版本,密钥可能存储于以下位置之一:openclaw.json 内的 models.providers.*.apiKey 下方、~/.openclaw/.envopenclaw.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