更新与卸载
更新
使用单条命令更新到最新版本:
hermes update
此命令会拉取最新代码、更新依赖,并提示您配置自上次更新以来新增的选项。
hermes update 会自动检测新的配置选项并提示您添加。如果您跳过了该提示,可以手动运行 hermes config check 查看缺失的选项,然后运行 hermes config migrate 进行交互式添加。
更新过程中发生了什么
运行 hermes update 时,会依次执行以下步骤:
- 配对数据快照 — 保存一个轻量级的更新前状态快照(涵盖
~/.hermes/pairing/、Feishu 评论规则以及其他在运行时被修改的状态文件)。可通过hermes backup restore --state pre-update回滚。 - Git 拉取 — 从
main分支拉取最新代码并更新子模块 - 依赖安装 — 运行
uv pip install -e ".[all]"以获取新增或更改的依赖 - 配置迁移 — 检测自您当前版本以来新增的配置选项,并提示您设置
- 网关自动重启 — 更新完成后刷新正在运行的网关,使新代码立即生效。由服务管理的网关(Linux 上的 systemd、macOS 上的 launchd)通过服务管理器重启。手动网关在 Hermes 能将运行中的 PID 映射回配置文件时自动重启。
仅预览:hermes update --check
想在实际拉取之前了解是否落后于 origin/main?运行 hermes update --check——它会获取并并排打印您的本地提交和最新远程提交,如果同步则退出 0,如果落后则退出 1。不修改任何文件,不重启网关。适用于需要判断"是否有更新"的脚本和定时任务。
完整更新前备份:--backup
对于高价值配置文件(生产网关、共享团队安装),您可以选择对 HERMES_HOME 进行完整的拉取前备份(配置、认证、会话、技能、配对):
hermes update --backup
或将其设置为每次运行的默认值:
# ~/.hermes/config.yaml
update:
backup: true
--backup 在早期版本中是始终启用的,但它会在大型 home 目录上增加每次更新数分钟的时间,因此现在改为可选。上述轻量级配对数据快照仍会无条件运行。
预期输出如下:
$ 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 处理主要更新流程,但快速验证可确认一切正确落地:
git status --short— 如果工作树意外有变动,请在继续之前检查hermes doctor— 检查配置、依赖和服务健康状态hermes --version— 确认版本如预期升级- 如果您使用网关:
hermes gateway status - 如果
doctor报告 npm 审计问题:在标记的目录中运行npm audit fix
如果 hermes update 后 git status --short 显示意外的变更,请在继续之前停下来检查。这通常意味着本地修改被应用在了更新后的代码之上,或者依赖步骤刷新了锁文件。
如果终端在更新过程中断开
hermes update 能防范意外的终端丢失:
- 更新会忽略
SIGHUP,因此关闭 SSH 会话或终端窗口不再会在安装到一半时将其终止。pip和git子进程继承此保护,因此 Python 环境不会因断开连接而处于半安装状态。 - 更新运行期间,所有输出都会镜像到
~/.hermes/logs/update.log。如果您的终端消失,重新连接后检查该日志,查看更新是否完成以及网关重启是否成功:
tail -f ~/.hermes/logs/update.log
Ctrl-C(SIGINT)和系统关机(SIGTERM)仍然有效——这些是有意为之的取消,而非意外。
您不再需要将 hermes update 包装在 screen 或 tmux 中来防止终端断开。
查看当前版本
hermes version
与 GitHub 发布页面上的最新版本进行比较。
从消息平台更新
您也可以直接从 Telegram、Discord、Slack、WhatsApp 或 Teams 发送以下命令进行更新:
/update
此命令会拉取最新代码、更新依赖并重启正在运行的网关。机器人在重启期间会短暂离线(通常为 5–15 秒),然后恢复。
手动更新
如果您手动安装(未使用快速安装程序):
cd /path/to/hermes-agent
export VIRTUAL_ENV="$(pwd)/venv"
# 拉取最新代码
git pull origin main
# 重新安装(获取新的依赖)
uv pip install -e ".[all]"
# 检查新的配置选项
hermes config check
hermes config migrate # 交互式添加任何缺失的选项
回滚说明
如果更新引入了问题,可以回滚到之前的版本:
cd /path/to/hermes-agent
# 列出最近的版本
git log --oneline -10
# 回滚到特定提交
git checkout <commit-hash>
git submodule update --init --recursive
uv pip install -e ".[all]"
# 如果正在运行网关,重启它
hermes gateway restart
回滚到特定发布标签:
git checkout v0.6.0
git submodule update --init --recursive
uv pip install -e ".[all]"
如果添加了新选项,回滚可能导致配置不兼容。回滚后运行 hermes config check,如果遇到错误,请从 config.yaml 中删除任何无法识别的选项。
Nix 用户注意事项
如果您通过 Nix flake 安装,更新通过 Nix 包管理器管理:
# 更新 flake 输入
nix flake update hermes-agent
# 或使用最新版本重建
nix profile upgrade hermes-agent
Nix 安装是不可变的——回滚通过 Nix 的生成系统处理:
nix profile rollback
详情请参阅 Nix 配置。
卸载
hermes uninstall
卸载程序会询问是否保留您的配置文件(~/.hermes/)以备将来重新安装。
手动卸载
rm -f ~/.local/bin/hermes
rm -rf /path/to/hermes-agent
rm -rf ~/.hermes # 可选——如果计划重新安装则保留
如果您将网关安装为系统服务,请先停止并禁用它:
hermes gateway stop
# Linux:systemctl --user disable hermes-gateway
# macOS:launchctl remove ai.hermes.gateway