返回博客
HermesSelf-HostingTroubleshooting

将 Hermes Agent 迁移到新机器:完整流程

把一台正在跑的 Hermes Agent 迁移到新的笔记本、VPS 或 Docker 主机,不丢失记忆、技能、定时任务或 Telegram 会话。备份、导入、验证。

作者:Hermify Team||阅读约 3 分钟
左侧一台深色服务器机架逐渐熄灭,右侧另一台亮起,两者之间由一根绿色数据线相连,象征一次 Hermes Agent 迁移

为什么 Hermes 迁移只有一次机会

一台正在跑的 Hermes Agent,远不止那个可执行文件。它包含数月积累的记忆条目、一份定制过的 SOUL.md、一小组你自己写的技能、一张塞满你真正依赖的日报的 cron 表、一个由代理默默构建的 ChromaDB 向量索引,以及一段早就认识你的 Telegram 会话。你在新机器上重装 Hermes,这些东西不会跟着走,结果就是得到一个和你共用同一个用户名的陌生人。

这份指南就是为了对付这种失败场景。无论是笔记本快要报废、你要从桌面 Docker 迁到正规 VPS、你要把 Hetzner 实例升级到更高档位,还是磁盘故障后做一次干净的还原,流程都一样:在旧机器上把整个 ~/.hermes/ 目录树完整打包,转到新机器,运行 hermes import,然后做验证。顺序正确,十五分钟就能收工;顺序错乱,要么丢数据,要么一整晚都在重新认证 provider、IMAP 和 Telegram。

如果你还在 self-hosting 和托管方案之间犹豫,建议先读 self-hosting 与托管版 Hermes Agent 对比,因为 Hermify 会帮你处理迁移,这篇指南就用不上了。如果你确定要自己跑,那么继续往下看。

hermes backup 究竟打包了什么

hermes backup 命令会生成一个带时间戳的归档,形如 hermes-backup-2026-06-01-101955.zip。它抓取的是 ~/.hermes/ 里的所有内容,也就是 Hermes 存放"让你的代理成为你的代理"的一切的地方。在一台成熟的安装里,这棵目录树包含:

  • 状态数据库state.db 及相关文件):会话、工具调用历史与任务队列的真相来源。
  • ChromaDB 向量存储:代理每次需要回忆时都会查询的语义记忆索引。它是一个包含二进制文件的目录,不是单独的 JSON,必须整体一起搬。
  • SOUL.mdAGENTS.mdUSER.mdMEMORY.md:代理的性格、家规、用户档案与长期记忆散文。它们只是普通 markdown,但代理会在固定路径上寻找。
  • skills/ 目录:所有你写过或安装过的自定义 skill。一个 skill 只是一个包含 SKILL.md 及其依赖文件的文件夹,但缺少一个 skill 就等于代理悄悄失去一项能力。
  • identity/ 目录:人设配置、头像以及语音模式的预设。
  • cron 表:定时任务住在 ~/.hermes/ 里,而不是宿主的 crontab 中。丢掉它们,你的早间日报就会毫无声息地停发。
  • 密钥与配置config.yaml、各 provider 的 API 密钥、Telegram 机器人令牌、IMAP/SMTP 凭据、webhook 签名密钥,以及代理消费过的任何加密 .env 片段。

有两个 flag 值得留意。hermes backup --quick 会跳过全量文件扫描,只包含 config、会话、密钥和认证。它更快也更小,但既不带记忆也不带 skill,因此只适合把代理的身份克隆到一台准备从零开始重建记忆的新机器。真正的迁移请直接跑 hermes backup,不加任何 flag,给它一点时间。

步骤 1 - 冻结源机器

在做备份之前先让代理安静下来。如果 Hermes 正在写 state.db,你可能会在 zip 里得到一份损坏的数据库。

# 如果 Hermes 作为 systemd 服务运行
sudo systemctl stop hermes

# 或者通过 Docker 运行
docker compose stop hermes

# 或者你是交互式启动的,请在运行它的 shell 中用 Ctrl+C 干净退出

当没有进程再持有状态数据库后,执行备份:

hermes backup
# 写入 ~/.hermes/backups/hermes-backup-2026-07-18-102301.zip

记下它打印的完整路径,那就是你要搬走的文件。

步骤 2 - 安全地移动归档

备份里装着密钥。请像对待 SSH 私钥那样处理它。

  • 不要上传到公开分享链接、Discord 附件,或者发给自己的 Slack DM。
  • 优先使用 scprsync 通过 SSH 传输,或者你已经信任的 syncthing 文件夹。
  • 如果不得不用一台笔记本做中转,在传输完成的当下就删掉本地副本。

从旧 VPS 到新 VPS 的干净传输大致是这样:

# 在新机器上执行
scp old-vps:~/.hermes/backups/hermes-backup-2026-07-18-102301.zip ~/

如果你是从个人笔记本迁往 VPS,反过来从源端 push 即可。无论哪种方式,都把文件放在目标用户的 home 目录下,不要放到 /tmp 或任何共享路径里。

步骤 3 - 在目标上安装 Hermes

在新机器上按干净安装的方式装好 Hermes。这里的正式支持目标是 Linux、macOS、Windows 上的 WSL2,或者手机上的 Termux。根据你打算长期跑代理的方式选择安装路径,可以是 Docker 下的 Hermes Agent、Linux 原生安装,或 Windows 通过 WSL2

先别启动代理。如果它在空的 ~/.hermes/ 上跑过一次,就会写出一份全新的 state.db 和默认配置,进而与下一步的导入产生冲突。装好二进制、确认 hermes --version 与源机器的主版本一致,然后就停在这里。

步骤 4 - 导入并重建索引

归档到位、二进制已装但尚未运行时,执行:

hermes import ~/hermes-backup-2026-07-18-102301.zip

导入器会把归档解压到 ~/.hermes/,恢复状态数据库,并把 skill、记忆、cron、identity 和密钥各归各位。完成后重建向量索引,这样语义搜索就会按当前模型排序,而不是按源机器上一次使用的模型:

hermes memory reindex

如果备份是在很旧的 Hermes 版本上做的,记忆载荷可能使用老格式。这种情况下,用 JSON export 单独导出记忆再显式重新导入:

hermes memory import --legacy ~/memories.json

--legacy flag 会让 Hermes 接受老 schema 并在导入过程中就地升级。在源端 hermes memory export --output ~/memories.json 就是它的姐妹命令,适合只迁移记忆、其余部分从干净安装重建的场景。

步骤 5 - 先验证再信任

这里有两个命令值得让它们发挥作用:

hermes doctor   # 配置、依赖、provider 可达性、磁盘权限
hermes status   # gateway 健康、记忆条目数、当前生效的集成

hermes doctor 应该在配置、数据库、ChromaDB 与 provider 凭据上都返回绿色。hermes status 应显示接近源端数量的记忆条目、已连接的 Telegram 集成,以及任何长时排队的定时任务。任一命令报错,都要先修好再重新开启 gateway。

然后启动代理,从 Telegram 发一条需要调用记忆的消息。"我们对 Q3 上线是怎么决定的?"就是一个不错的探针。如果代理带着上下文回答,说明记忆确实迁过来了。如果它说不知道,可以在 CLI 里跑 hermes memory search "Q3 上线":记忆可能已经在,只是向量索引还没完全重建完。

那些没人提醒你的细节

即便是一次干净的导入,也会留下几处毛边。请在把迁移当作完成之前走一遍这份清单。

  • 加密的密钥需要它自己的解密密钥。 如果源机器使用了加密的 secret store(Hermes 支持 pass、gnome-keyring 或 keyfile),归档里装的是密文,不包含密钥。请单独传输 keyfile,或在新机器上让 secret store 解锁后再启动代理。
  • IMAP 与 SMTP 凭据可能需要重新认证。 绑定了设备指纹的 app password 有时会拒绝从新 IP 认证。Google Workspace 和 Fastmail 就是常见的踩坑点。导入后如果邮件集成沉默,就重新生成一份 app password。
  • Telegram 会话可能会漂移。 Telegram bot token 是可移植的,但如果你还用过用户模式的会话来读取聊天,那份会话文件可能绑在旧设备上。删掉 ~/.hermes/telegram/session.session,让代理在下次启动时重新认证。
  • cron 任务会在下一次预定 tick 才重启,而不是立刻。 如果你的 daily-digest 排在 07:00,而你在 07:05 完成迁移,它要到明天才会再跑。用 hermes cron run daily-digest 手动触发一次,确认它还能正常工作。
  • 归档接触过的所有凭据都值得轮换。 即便传输很小心,装有 bot token 和 provider 密钥的归档也已经在超过两端的机器上出现过。如果这次迁移是应对入侵,或者归档经过共享存储,请轮换 OpenAI/Anthropic/OpenRouter 的密钥,并让 BotFather 重新发放 bot token。

如果你不想自己走这一整套

整套仪式(冻结、备份、传输、安装、导入、重建索引、验证、轮换)就是托管方案在幕后自动做的事情。Hermify 在我们运维的 VPS 上运行托管的 Hermes Agent,每天做加密备份,需要更换 VPS 时提供一键还原。在用户的日常里根本没有"迁移到新机器"这一步,因为机器是我们的问题,不是你的问题。

如果你觉得这比每一两年重跑一次这份迁移更合适,免费体验 Hermify:你的代理约一分钟就能在 Telegram 上线,记忆始终属于你,下一次硬件更换对你完全无感。

Sources

运行你自己的 Hermes Agent

自带 API 密钥,连接 Telegram,60 秒内即可上线一个自我改进的 AI 智能体。

立即开始