你想要一个可以在手机上发消息的 AI Agent,一个在你合上笔记本电脑后仍在运行、重启后还能自动回来的 Agent?Hermes Agent 就能做到:它作为一个网关运行,你可以通过 Telegram 与它对话,一旦正确配置,它就能在崩溃或断电后自动重启。
我在两台机器上搭建了相同的环境:一台便宜的云 VPS 和桌面上的 Mac Mini,这样我就能完整地记录下整个过程,不遗漏任何步骤。这是一条固定的路线。你只需要在两个地方根据机器类型修改命令:安装命令,以及保持网关运行的部分。中间的所有步骤都是完全相同的。
以下所有内容都在我自己的硬件上运行过。Linux 路径使用的是 Hetzner CX23(x86,2 vCPU,4GB RAM,40GB 磁盘),运行 Ubuntu 24.04.4 LTS;Mac 路径使用的是 Mac Mini M4,运行 macOS 15。两者都运行 Hermes Agent v0.16.0。
最终你将拥有
- 已安装的 Hermes Agent,以普通用户身份运行,而非 root
- 一个你可以通过手机发送消息的 Telegram 机器人,仅限你的账户使用
- 作为托管服务运行的网关,因此能在崩溃或重启后自动恢复
- 在 VPS 上,一个加固的服务器:仅密钥 SSH 登录,禁止 root 登录,配置了防火墙
选择你的服务器
VPS 是最便宜的入门方式。任何拥有 4GB RAM 和大约 20GB 可用磁盘的 x86 机器都能运行;我使用的是 Hetzner CX23,每月 7.79 美元(Hetzner 美国定价,2026-06-18)。租用它,它就能始终保持在线。
另一种选择是你已经拥有的 Mac。任何保持通电的 Apple Silicon Mac 都能工作,除了机器本身外,运行成本为零。代价是 macOS 上的持久化层配置更繁琐,我会在最后部分介绍。
你需要在自己机器上有一个 SSH 密钥(如果没有,运行 ssh-keygen -t ed25519),一个 Telegram 账户,以及一个供 Agent 使用的模型。本指南指向 Nous Portal,它使用 OAuth 认证,因此无需在文件中保存 API 密钥。Hermes 需要一个至少拥有 64k 上下文的模型。
步骤 1:准备服务器
在 VPS 上
在你的服务商处创建服务器:Ubuntu 24.04,一个 x86 实例(不要用 Arm,参见成本说明),并在创建时粘贴你的 SSH 公钥。
一个全新的公网服务器在部署 Agent 之前需要几分钟的加固。本指南中的 secure-box.sh 脚本可以一次性完成:apt 升级、创建 2GB 交换文件、创建一个带有你密钥的非 root sudo 用户、仅密钥 SSH 登录并禁止 root 登录,以及一个仅允许 SSH 的防火墙。编辑脚本顶部的两个变量,将其复制到服务器,然后以 root 身份运行:
1scp secure-box.sh root@<你的VPS-IP>:2ssh root@<你的VPS-IP> 'bash secure-box.sh'
这个 Ubuntu 镜像默认启用了密码认证,尽管我在创建服务器时使用了 SSH 密钥。脚本会将其关闭。在关闭 root 会话之前,打开第二个终端并确认新用户可以登录,这样即使出错也不会把你锁在外面:
1ssh hermes@<你的VPS-IP>
从现在开始,你将以 hermes 用户身份操作,而不是 root。
在 Mac 上
无需加固步骤。这是你自己网络上的机器,不是公网服务器。如果你还没有安装 Homebrew,请先安装(安装程序在下一步会用到它),然后就可以开始了。
步骤 2:安装 Hermes
安装只需一条命令,在两台机器上相同,以普通用户身份运行:
1curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash2source ~/.bashrc3hermes --version
安装程序会检测你的操作系统,并将自己的工具链(uv、Python 3.11、Node.js 22、ripgrep、ffmpeg、用于浏览器工具的 Playwright Chromium)下载到 ~/.hermes 目录中,因此它绝不会影响你的系统 Python。在我的 Hetzner 服务器上,它安装了 Hermes Agent v0.16.0 和 Python 3.11.15。
这是最耗时的步骤。在 VPS 上,磁盘使用量从 1.2GB 增加到 7.8GB,大约增加了 6.6GB,其中大部分是浏览器引擎和 Node。计划预留 20GB 的可用空间,就不用担心了。如果通过没有终端的纯 SSH 命令运行,安装程序会显示“设置向导已跳过(无可用终端)”,这没问题,设置是下一步。
在 Mac 上运行相同的命令,但有一个小问题:先安装 Homebrew。有了 Homebrew,安装程序会拉取 git 及其依赖项,无需提示。如果没有 Homebrew,它会回退到 Apple 的命令行工具,这可能会弹出一个需要你点击的 macOS 对话框,而对话框在 SSH 会话中是无法处理的(这是安装程序 macOS 分支中的情况)。之后,流程与上面相同。
步骤 3:指向一个模型
1hermes setup --portal
这是针对 Nous Portal 的 OAuth 认证:它会打印一个 URL 和一个代码,你在浏览器中批准后,服务器就能与模型通信,而无需将 API 密钥保存在文件中。Nous Portal 有免费套餐,我整个操作都在免费模型上运行。如果你想使用自己的提供商,运行 hermes model 并选择一个;密钥随后会保存在 ~/.hermes/.env 中。
步骤 4:与它对话
在 VPS 上
一旦你的 SSH 连接断开,前台会话也会随之终止。tmux 可以保持会话存活:在 tmux 中启动,分离后,它就会持续运行。
1sudo apt-get install -y tmux2tmux new -s hermes # 然后,在 tmux 内部:hermes
使用 Ctrl-b 然后按 d 分离,之后可以从任何地方重新连接:
1ssh hermes@<你的VPS-IP>2tmux attach -t hermes
交互式 Agent 首次启动需要一些时间。我的大约花了 30 秒加载模型和技能,然后才出现提示符。一旦启动,斜杠命令就可以使用了。
/goal 是一个值得展示的命令:它设置一个长期目标,Agent 会在多次对话中持续努力,并且每次对话后都会有一个评判模型检查目标是否完成。
1/goal 使用 shell 工具检查这台机器的总 RAM 和可用磁盘空间,然后在一行中报告两者,并标记目标完成
我的 Agent 自己运行了 shell 命令,并在大约 15 秒后返回了结果:VPS 总 RAM:3.7Gi,可用磁盘空间:28G。这就是 Agent 使用自身工具的能力。
请区分两个概念:tmux 可以在 SSH 连接断开后保持交互式会话,但不能在重启后保持。对于需要重启后仍然存活的无值守网关,你需要一个托管服务,也就是步骤 6。
在 Mac 上
你正坐在机器前,所以可以直接在终端中运行 hermes。如果你通过笔记本电脑 SSH 连接,tmux 仍然有用,但在这里是可选的。
步骤 5:Telegram 网关
这部分在两台机器上是完全相同的。创建一个机器人:在 Telegram 上给 @BotFather 发消息,发送 /newbot,然后复制令牌。从 @userinfobot 获取你的数字用户 ID。然后配置网关:
1hermes gateway setup
选择 Telegram,粘贴令牌,并将允许的用户设置为你自己的数字 ID,这样只有你能与它对话。令牌会保存在 ~/.hermes/.env 中,其余配置保存在 ~/.hermes/gateway.json 中。
设置只写入配置,不会启动任何东西,所以机器人保持静默,这常常让人困惑:此时还没有任何东西在轮询 Telegram。先在前台启动一次,检查它是否能连接:
1hermes gateway run
你需要在日志中看到:
1gateway.run: Connecting to telegram...2[Telegram] Connected to Telegram (polling mode)3gateway.run: ✓ telegram connected
轮询模式意味着网关主动连接 Telegram;没有任何东西会连接到你的服务器,这就是为什么防火墙除了 SSH 之外不需要开放任何入站端口。给你的机器人发消息;它应该会回复。然后按 Ctrl-C 停止前台网关,因为你不能同时有两个东西轮询同一个令牌,下一步会把它作为服务运行。
步骤 6:让它能在重启后存活
这是两台机器唯一不同的地方。
在 VPS 上:systemd
hermes gateway install 将网关注册为一个 systemd 服务,这样它就能在崩溃后重启,并在重启后自动恢复。在这个版本中,安装程序会询问两个 [Y/n] 问题,并且没有跳过它们的标志。如果通过非交互式 SSH 命令运行(这在编写脚本时很常见),它得不到回答,就会中止,什么也不安装。通过标准输入提供答案:
1printf 'n\nY\n' | hermes gateway install
这两个问题是“现在启动网关吗?”和“在登录/启动时自动启动?”。n 然后 Y 的意思是:现在不要启动,但要在启动时启用它。安装程序还会启用用户会话驻留,这允许用户服务在你登录之前运行。确认一下,因为这是实现“重启后存活”而不是仅仅“注销后存活”的关键:
1loginctl show-user $USER -p Linger # 期望:Linger=yes
启动它并检查状态:
1hermes gateway start2systemctl --user status hermes-gateway
你期望看到 active (running) 和 NRestarts=0。在我的服务器上,网关使用了大约 280MB,整个机器大约使用了 556MB,在 4GB 内存下很轻松。
现在进行真正的测试。重启,然后不要碰它:
1sudo reboot
我的服务器大约在 15 秒后恢复,网关自动启动,重新连接到 Telegram,并回复了下一条消息,且保留了重启前的完整对话历史。这就是全部意义所在。
在 Mac 上:launchd 和看门狗
macOS 使用 launchd,而不是 systemd,并且有一个陷阱。在 macOS 15 和 Hermes v0.16.0 上,hermes gateway start 可能无法注册 launchd 服务,并会静默回退到一个无人监管的后台进程。你会看到:
1Bootstrap failed: 5: Input/output error2⚠ launchd cannot manage the gateway on this macOS version (launchctl exit 5)3✓ Started gateway as a background process instead4 It will NOT auto-start at login or auto-restart on crash.
如果你之前有一个正常工作的 launchd 任务,这个命令会卸载它,而回退方案在第一次崩溃或重启之前都能正常运行,之后你的 Agent 就会消失,没有任何通知。原始的 launchctl 命令在 CLI 失败时仍然有效,包括通过 SSH:
1launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.hermes.gateway.plist2launchctl print gui/$(id -u)/ai.hermes.gateway | grep state # 期望:state = running
plist 文件会在登录时启动网关,但不会在崩溃后重启。一个 cron 看门狗可以弥补这两个缺陷,而且 cron 可以在无需登录的情况下在启动时运行。本指南提供了 gateway-watchdog.sh 脚本;它每 5 分钟检查一次网关进程是否存活,如果不在就重新启动它。将其安装到计划任务中:
1(crontab -l 2>/dev/null; echo '*/5 * * * * $HOME/scripts/gateway-watchdog.sh >/dev/null 2>&1') | crontab -
我亲眼目睹了这个流程在我自己的 Mac Mini 上恢复了一个降级的网关。重启它,并确认网关在五分钟内无需登录就能恢复。
验证你的设置
- 服务已启动:在 Linux 上运行
systemctl --user status hermes-gateway(应显示active (running)),或在 macOS 上运行launchctl print gui/$(id -u)/ai.hermes.gateway | grep state(应显示state = running) - 给你的机器人发消息:它会回复你,并忽略任何不在你允许用户列表中的人
- 在 Linux 上,运行
loginctl show-user [$USER](https://x.com/search?q=%24USER&src=cashtag_click) -p Linger应显示Linger=yes - 重启服务器,等待,然后在不重新登录的情况下再次给你的机器人发消息:它应该会回复
成本
在 VPS 上,服务器是唯一的开销。我的是 Hetzner CX23,每小时 0.012 美元,每月上限 7.79 美元(Hetzner 美国定价,2026-06-18;欧盟的 CX22 配置相同且更便宜)。
在 Mac 上,这是你已经拥有的机器,无需额外服务。在这两种情况下,模型都可以免费使用 Nous Portal 的免费套餐。
这里,内存不是限制因素:网关使用了大约 280MB,整个服务器大约 556MB,所以 1GB 内存绰绰有余。磁盘才是真正的限制:安装大约需要 6.6GB,所以 1GB 或 10GB 的镜像会很紧张,给它 20GB。并且使用 x86,这是最安全的选择。
自己动手运行,以及下一步
两台机器都有完整的指南和确切的脚本,可以直接运行:
- VPS 路径:cheap-vps
- Mac 路径:mac-mini-24-7
现在,你拥有了一个在 Telegram 上始终在线、并且能在重启后存活的 Agent。
下一个 Flightplan 将在此基础上构建:定时任务,只在有重要事情时才给你发消息;一个由 Agent 读写、并通过 Git 同步的工作区;以及一个草稿与审批流程,确保每个公开操作都有人类参与。
感谢阅读





