换 Agent 最贵的不是安装,是你那一年攒下的规矩

你有一份改了一年的 CLAUDE.md,一半是真规范,一半是写给过去的自己看的检讨。你有一串已经想不起当初为什么要加的 Bash(...) 允许规则,四个给副业项目接的 MCP server,还有十几个每个都对应一次踩坑教训的 skill。Hermes 的文章你看了不少,也确实想试试。然后你算了一下把这些重打一遍要多久,又想到自己肯定会漏掉那条“不然它一天问你四十次权限”的规则,于是关掉了标签页。
hermes import-agent 就是冲着这个下午来的:它读另一个 Agent 的配置目录,算出哪些能搬,然后在写入任何一个字节之前,把计划逐项摆给你看。
先统一三个词。MCP server 是一个可以被 Agent 调用的工具服务(数据库、浏览器、issue 跟踪器之类),用一小段配置描述。允许清单(allowlist) 是“这些命令不用问我、直接跑”的集合。skill 在这里指一个包含 SKILL.md 的目录,教 Agent 做一件具体的事。
装只花一分钟,值钱的是那一堆配置
没人因为装 Hermes 难而犹豫。真正让人犹豫的是:价值不在二进制里,而在攒下来的配置里——那份花了几个月“不,别这么干”才调对的指令文件,那套编码了你个人风险偏好的审批规则,那几个搭了一个晚上才对上 header 的 MCP server。它们在每个 Agent 里的文件格式都不一样,默认谁也不能直接给谁用。
手抄的代价不只是时间。你会漏掉自己已经忘记存在的配置——因为你没法凭记忆重写一件从未刻意写下过的东西。在这一点上,机械复制的工具比认真的人更可靠,不是因为它更聪明,而是它抄到第九项也不会走神。
hermes import-agent 支持四个来源:OpenClaw(~/.openclaw,也认旧名 ~/.clawdbot 和 ~/.moltbot)、Claude Code(~/.claude)、OpenAI Codex CLI(~/.codex)、Cursor(~/.cursor)。
先装上搬运工,再让它交计划
这个命令不是内建的,它来自官方插件 agent-importers,由 Nous Research 维护,放在 hermes-official-plugins 仓库的 agent-importers 目录里。插件是按 profile 装的,所以每个 profile 都要装一次:
hermes plugins install agent-importers
这件事最近才定型:v0.22.4(2026-10-21)把它从 core 移到了插件目录,同时新增 Cursor 作为来源;v0.22.5(2026-10-23)的发布说明里又提到 hermes import-agent,以及 setup 在发现机器上还有别的 Agent 时会提供导入器。
不带参数时,它会去探测那四个目录;带参数时就直接进那一个来源:
hermes import-agent # 自动探测 ~/.openclaw、~/.claude、~/.codex、~/.cursor
hermes import-agent openclaw # 从 ~/.openclaw 导入
hermes import-agent claude-code # 从 ~/.claude 导入
hermes import-agent codex # 从 ~/.codex 导入
hermes import-agent cursor # 从 ~/.cursor 导入
hermes import-agent claude-code --dry-run # 只看计划
hermes import-agent codex --source /path/to/.codex # 自定义位置
hermes import-agent claude-code --overwrite --yes # 覆盖冲突项、跳过确认
注意第一种写法不会干的事:它不会把四个 Agent 揉成一堆然后赌一把。它按来源、按条目报告——发现了什么、准备写什么、跳过什么、为什么。--dry-run 出的是同一份报告,但完全不碰磁盘,先读它再决定要不要信任。--overwrite 让冲突以导入方为准,--yes 跳过确认提示;写脚本初始化 profile 时很好用,但如果你已经手动改过目标文件就危险了。
如果你不想单独跑命令,新装时 hermes setup 会先扫同样的四个目录。发现了东西,它会问一句 “Import your setup from Claude Code?” 并说出找到了什么;发现多个,就给你一张全勾选的清单。你答应之后,如果这个 profile 还没有 agent-importers,setup 会从插件目录装上,再走一遍同样的流程——出计划、预览、确认。拒绝,或者一个都没找到,那就什么都不装。
OpenClaw 在这条路径上多一步:setup 会自动带上 --migrate-secrets,沿用原来内建的 OpenClaw 迁移步骤,于是 API key 和 bot token 一起过来,后面 provider 和消息平台那几段也已经填好。之后如果你选了 Quick Setup,而导入又带过来一个模型和它的 key,setup 会问你是保留这个模型(默认)还是切到 Nous Portal。
四种来源分别搬走什么
四类内容每个来源都会读:指令文件、审批规则、MCP server、skill;但文件结构差得不小,动手前值得先看一遍映射。
| 来源 | 读什么 | 落到哪里 |
|---|---|---|
| Claude Code | CLAUDE.md 全局指令 |
~/.hermes/memories/MEMORY.md 里的记忆条目 |
| Claude Code | settings.json 的 permissions.allow |
config.yaml 的 command_allowlist |
| Claude Code | settings.json 的 permissions.deny |
config.yaml 的 approvals.deny |
| Claude Code | ~/.claude.json 与 settings.json 里的 mcpServers |
config.yaml 的 mcp_servers |
| Claude Code | 含 SKILL.md 的 skills/ 目录 |
~/.hermes/skills/claude-code-imports/ |
| Claude Code | commands/*.md 斜杠命令 |
跳过并提示,建议改写成 skill |
| Codex CLI | AGENTS.md 全局指令 |
记忆条目 |
| Codex CLI | config.toml 的 [mcp_servers.*] |
mcp_servers |
| Codex CLI | memories/*.md |
记忆条目 |
| Codex CLI | skills/ 目录 |
~/.hermes/skills/codex-imports/ |
| Cursor | AGENTS.md |
记忆条目 |
| Cursor | rules/*.md 与 rules/*.mdc(User Rules) |
记忆条目 |
| Cursor | mcp.json 的 mcpServers |
mcp_servers |
| Cursor | skills/**/ 技能目录 |
~/.hermes/skills/cursor-imports/ |
| OpenClaw | ~/.openclaw(含 ~/.clawdbot、~/.moltbot) |
更完整的映射,见下文 |
有两行值得单独说,因为导入最容易在这里让人意外。
Cursor 的 .mdc 文件带 frontmatter——description、globs、alwaysApply——那是给 Cursor 自己的规则引擎做路由用的。这些键会被剥掉,只导入正文:它们对 Hermes 没有意义,硬搬过去只会造出一批看起来生效、实际永远不会触发的规则。Cursor 的 skill 还允许放在分类目录里,所以 skills/shipping/land-it/ 会导入成 cursor-imports/land-it/——叶子目录才是 skill,因为 skill 就是那个含 SKILL.md 的目录。不同目录里同名的两个 skill 会被报成冲突,而不是悄悄合并。
Claude Code 的斜杠命令则是另一种诚实的拒绝。commands/*.md 会被跳过并给出提示,建议你自己改写成 skill。因为斜杠命令和 skill 的调用方式不同,自动转换只会得到一个“看着像能用”的东西。
权限规则不是一对一翻译
映射是机械的,但并不对称,这一段值得在计划里读慢一点。
Claude 的 Bash(...) 前缀规则会变成 glob:Bash(npm run test:*) 到 Hermes 这边是 npm run test*。意图保住了——“这一族命令,不用问”——但写法没保住。如果你想收紧搬过来的东西,审批模型本身的说明在智能审批配置里。
非 Bash 的规则走另一条路。Read(...)、WebFetch 这些管的是 Claude Code 有、Hermes 没有的工具,所以它们会被报告为未映射,而不是硬塞进一个长得像的东西里。报告里写着“未映射”,比配置里多一个行为和你本意不同的键要有用得多。
凭据永远不在货单上
API key 和凭据从不导入——这是它能放心在企业发的笔记本上跑的原因。凭据文件本身(~/.claude/.credentials.json、~/.codex/auth.json、~/.cursor/cli-config.json)根本不会被读。而 MCP server 配置里的环境变量或请求头,只要名字看起来像机密(*_TOKEN、*_API_KEY、Authorization),值就会被剥掉并列进报告,让你自己一条一条有意识地补回去,并且清楚哪些离开过。
补回去有两条路:为 provider 配置跑 hermes setup,或者把密钥写进 ~/.hermes/.env。不想让明文密钥躺在 dotfile 里,可以走密钥加密里的 keychain 方案。
唯一的例外是 OpenClaw,而且是显式选择:只有你明确给 --migrate-secrets,白名单内的 API key 与 bot token 才会一起过来。
搬完必须自己补的三件事
导入器搬的是结构,收尾它做不了。
把密钥补回去。 请求头被剥掉的 MCP server,没有 token 就连不上;而缺凭据不会报成导入错误,它表现为第一次调用工具时失败。MCP server 怎么接、context 变量怎么解析,MCP 配置与 context 变量里有完整说明。
把斜杠命令改写成 skill。 你的 /review 或 /ship 被跳过了,替代品是 skill,一个命令大概二十分钟——按你实际使用的频率依次做。
重新读一遍审批规则。 导入的允许清单和拒绝清单,是一个从没见过你风险偏好的工具写出的初稿。确认每个 glob 匹配的确实是你以为的东西,也别让重要的规则悄悄落在“未映射”报告里。如果指令文件搬过来的内容比你预期的多,AGENTS.md 目录链讲了这些文件在 Hermes 里是怎么叠起来的。
动手前注意这几点
- 插件是按 profile 装的。 主 profile 装了
agent-importers,第二个 profile 里它不存在,要再装一次。 - 冲突会被报告,不会静默解决。 两个同名的 Cursor skill,或目标位置已有同名文件,都会列成冲突,
--overwrite让导入方胜出。 - OpenClaw 有自己的指南和参数。 那份迁移指南给了完整映射(persona、记忆、skill、模型 provider、消息平台、agent 行为、MCP server 等),还有
--preset、--migrate-secrets、--workspace-target、--skill-conflict这几个参数、迁移前备份,以及迁移完的hermes claw cleanup。旧的hermes claw migrate写法仍然可用,跑的是同一个导入。 - 非标准安装位置要给
--source。 Codex 不在~/.codex的话,探测是找不到的。
搬运工能替你做的,是纯粹的抄写那一半,而且不带错别字——同时对每一件它不肯碰的东西给你一张回执。判断留给你,本来也该留给你。