Skip to content

Hermes Agent 的更新和卸载指南

使用单行命令即可更新至最新版本:

Terminal window
hermes update

该命令会拉取最新代码、更新依赖项,并提示你配置自上次更新以来新增的任何选项。

PyPI 发布版本会跟踪带标签的版本(主版本和次版本发布),而不是 main 分支上的每一次提交。检查更新并升级:

Terminal window
hermes update --check # 查看 PyPI 上是否有更新版本
hermes update # 运行 pip install --upgrade hermes-agent

或者手动执行:

Terminal window
pip install --upgrade hermes-agent # 或者:uv pip install --upgrade hermes-agent

更新期间会发生什么(git installs)

Section titled “更新期间会发生什么(git installs)”

运行 hermes update 时,将执行以下步骤:

  1. 配对数据快照 (Pairing-data snapshot) —— 保存一个轻量级的更新前状态快照(涵盖 ~/.hermes/pairing/、飞书评论规则以及其他在运行时修改的状态文件)。可以通过 快照与回滚 中描述的流进行恢复,或者解压 Hermes 在 ~/.hermes/ 目录旁生成的最新快速快照 zip 文件。
  2. Git 拉取 (Git pull) —— 从 main 分支拉取最新代码并更新子模块。
  3. 安装依赖 (Dependency install) —— 运行 uv pip install -e ".[all]" 以获取新增或变更的依赖项。
  4. 配置迁移 (Config migration) —— 检测自当前版本以来新增的配置选项,并提示你进行设置。
  5. 网关自动重启 (Gateway auto-restart) —— 更新完成后会刷新正在运行的网关,使新代码立即生效。通过服务管理器管理的网关(Linux 上的 systemd,macOS 上的 launchd)将通过服务管理器重启。手动启动的网关在 Hermes 能够将运行中的 PID 映射回配置文件时会自动重新启动。

想在实际拉取前知道自己是否落后于 origin/main?运行 hermes update --check —— 它会获取更新,并排对比本地提交和最新的远程提交;如果已同步则退出码为 0,如果落后则为 1。此操作不会修改文件,也不会重启网关。适用于需要判断“是否有更新”的脚本和 cron 任务。

对于高价值的配置文件(生产网关、团队共享安装),你可以选择在拉取前对 HERMES_HOME(配置、认证、会话、技能、配对信息)进行完整备份:

Terminal window
hermes update --backup

或者将其设置为每次运行的默认行为:

~/.hermes/config.yaml
updates:
pre_update_backup: true

在早期版本中,--backup 是始终开启的行为,但对于庞大的主目录,它会增加数分钟的更新时间,因此现在改为可选开启。上述轻量级的配对数据快照仍会无条件运行。

预期的输出如下:

$ hermes update
Updating Hermes Agent...
📥 Pulling latest code...
Already up to date. (或: Updating abc1234..def5678)
📦 Updating dependencies...
✅ Dependencies updated
🔍 Checking for new config options...
✅ Config is up to date (或: Found 2 new options — running migration...)
🔄 Restarting gateways...
✅ Gateway restarted
✅ Hermes Agent updated successfully!

hermes update 处理了主要的更新路径,但进行快速验证可以确保一切正常:

  1. git status --short —— 如果工作树意外变动,请在继续前检查。
  2. hermes doctor —— 检查配置、依赖项和服务健康状况。
  3. hermes --version —— 确认版本已按预期升级。
  4. 如果你使用了网关:hermes gateway status
  5. 如果 doctor 报告 npm 审计问题:在标记的目录中运行 npm audit fix

hermes update 具备防止意外丢失终端的保护机制:

  • 更新过程会忽略 SIGHUP 信号,因此关闭 SSH 会话或终端窗口不再会导致安装中途夭折。pipgit 子进程也会继承此保护,因此 Python 环境不会因连接掉线而处于半安装状态。
  • 更新运行期间,所有输出都会同步记录到 ~/.hermes/logs/update.log。如果终端消失,请重新连接并检查日志,查看更新是否完成以及网关重启是否成功: tail -f ~/.hermes/logs/update.log
  • Ctrl-C (SIGINT) 和系统关机 (SIGTERM) 信号仍会被响应 —— 这些属于刻意的取消操作,而非意外。

你不再需要将 hermes update 放在 screentmux 中来防止终端掉线。

Terminal window
hermes version

可以前往 GitHub Releases 页面 对比最新发布版本。

你也可以直接从 Telegram、Discord、Slack、WhatsApp 或 Teams 发送以下指令进行更新:

/update

这将拉取最新代码、更新依赖项并重启运行中的网关。机器人会在重启期间短暂下线(通常为 5–15 秒),随后恢复运行。

如果你是手动安装的(而非通过快速安装程序):

Terminal window
cd /path/to/hermes-agent
export VIRTUAL_ENV="$(pwd)/venv"
# Pull latest code
git pull origin main
# Reinstall (picks up new dependencies)
uv pip install -e ".[all]"
# Check for new config options
hermes config check
hermes config migrate # Interactively add any missing options

如果更新引入了问题,你可以回滚到之前的版本:

Terminal window
cd /path/to/hermes-agent
# 列出最近的 10 个版本
git log --oneline -10
# 回滚到特定提交
git checkout <commit-hash>
git submodule update --init --recursive
uv pip install -e ".[all]"
# 如果网关正在运行,请重启它
hermes gateway restart

要回滚到特定的发布标签 (Release Tag):

Terminal window
git checkout v0.6.0
git submodule update --init --recursive
uv pip install -e ".[all]"

如果你是通过 Nix flake 安装的,更新由 Nix 包管理器管理:

Terminal window
# 更新 flake 输入
nix flake update hermes-agent
# 或者使用最新版本升级
nix profile upgrade hermes-agent

Nix 安装是不可变的 —— 回滚通过 Nix 的世代 (generation) 系统处理:

nix profile rollback

详见 Nix 设置

Terminal window
hermes uninstall

卸载程序会询问你是否保留配置文件(~/.hermes/)以便将来重新安装。

Terminal window
pip uninstall hermes-agent
rm -rf ~/.hermes # Optional — keep if you plan to reinstall
Terminal window
rm -f ~/.local/bin/hermes
rm -rf /path/to/hermes-agent
rm -rf ~/.hermes # 可选 —— 如果计划重装则保留
-
0:000:00