2026-05-28 租用 Mac mini M4 配置 Hermes Agent Telegram 网关(港/日/韩/新/美)
可在已通过 SSH 构建 iOS 应用的同一台 Mac mini M4 上,将 Hermes Agent 配置为 Telegram 机器人。网关进程(hermes gateway)保存 BotFather 令牌、执行数字用户 ID 白名单,并把聊天消息转发进 Hermes 工具循环——无需常开笔记本,也能在手机上审批 CI 修复或询问架构问题。
若需 Modal/Daytona 无服务器终端后端与近零算力方案,请参阅Hermes Serverless Modal/Daytona 冬眠指南。
为何在构建机上用 Telegram
Telegram 适合无头租用主机:网关默认使用出站长轮询,由 Mac 主动发起对 Telegram API 的 HTTPS 连接,无需在共享构建机上暴露入站端口(与需要公网 HTTPS 入口的 webhook 模式相对)。
团队在租用主机上为 Hermes 接入 Telegram 的常见原因:
- 值班排障——GitHub Actions 或
xcodebuild夜间失败时,在手机上回复,由 agent 在 NVMe 上读取日志。 - 职责分离——用 OpenClaw 做仓库自动化、Hermes 做个人/运维聊天;仅当你接受两个网关进程(RAM 与令牌隔离)时再并行。
- 从 OpenClaw 消息能力迁移——上游 README 记载
hermes claw migrate;在同一台 16 GB 主机上同时跑两个网关前,请先阅读我们的 Hermes 对比 OpenClaw 与 OpenHuman 选型矩阵。
Apple Mac mini 规格 为 16–24 GB 统一内存。在叠加 Xcode 并行测试前,请为 hermes gateway 与模型工作集预留约 1–2 GB。港/日/韩/新/美节点出口带宽可稳定承载 Telegram 轮询;勿将 bot token 提交到 git。租用约 ¥730/月 起(视节点与配置而定)。
Telegram 网关如何协同工作
Hermes 将 CLI 对话(hermes TUI)与消息网关(hermes gateway)分离。Telegram 配置写入 ~/.hermes/.env(或向导输出),日志位于 ~/.hermes/logs/gateway.log,macOS 上可选 launchd 服务。
| 组件 | 路径 / 命令 | 作用 |
|---|---|---|
| 安装 | curl -fsSL …/install.sh | bash | Python 3.11 + hermes CLI |
| 模型 / 认证 | hermes setup | 模型服务商 API 密钥(自带或 Nous Portal) |
| Telegram 配置 | hermes gateway setup | Bot 令牌 + + TELEGRAM_ALLOWED_USERS |
| 前台测试 | hermes gateway | 长轮询 bot,直至 Ctrl+C |
| 系统服务 | hermes gateway install → hermes gateway start | macOS launchd, 登出后仍运行 |
| 健康检查 | hermes doctor, hermes gateway status | 配置与进程检查 |
数据流(轮询模式):
- 你在 Telegram 中向 bot 发消息。
- 网关通过 Telegram Bot API(出站轮询)接收更新。
- Hermes agent 在已配置的终端后端(本地、Docker 或 SSH 至同主机)上执行工具。
- 回复文本(及可选
MEDIA:/path附件)经网关返回 Telegram。
重要安全默认值: 上游在 TELEGRAM_ALLOWED_USERS 中使用数字用户 ID,而非 @用户名。任何持有 bot 令牌 者均可冒充该 bot——请将令牌视同 API 密钥,泄露后通过 BotFather /revoke 轮换。
官方参考:Hermes Telegram 文档(BotFather、隐私模式、webhook)。
BotFather 与访问控制
创建 bot
- 打开 @BotFather →
/newbot。 - 设置显示名(如
Builder Hermes)和以bot结尾的用户名。 - 复制形如
123456789:ABCdefGHIjklMNOpqrs…的令牌——存入密码管理器,勿写入 git。
将用户 ID 加入白名单
向 @userinfobot 发消息获取数字 ID(如 123456789)。设置 TELEGRAM_ALLOWED_USERS 后,Hermes 会拒绝陌生人。
共享租用主机上的可选加固:
- 仅单用户白名单——在理解工具作用域前勿使用通配“团队” ID。
- 环境隔离 bot(预发 vs 生产租用)——避免预发令牌泄露影响生产 workspace。
- 在验证私聊行为前禁用群组访问。
为 Telegram 配置 Hermes
交互式(推荐)
hermes setup # 全新安装时先配置模型服务商
hermes gateway setup # 选择 Telegram → 粘贴令牌 → 填写允许的用户 ID
手动编辑 ~/.hermes/.env
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrSTUvwxYZ
TELEGRAM_ALLOWED_USERS=123456789
# 可选团队: TELEGRAM_ALLOWED_USERS=111111111,222222222
确认文件权限为 600,且勿同步到不可信的 dotfile 备份。
前台冒烟测试:
hermes gateway
在 Telegram 发送 hello,数秒内应收到回复。安装 launchd 前用 Ctrl+C 停止。
Mac mini M4 无头部署八步清单
- 安装 Hermes — 在租用用户账户(非 root)执行官方 install.sh。
- 运行 hermes setup — 配置模型服务商;确认
hermes doctor无报错。 - 创建 BotFather 令牌 — 并获取数字用户 ID(见上文)。
- 运行 hermes gateway setup — 选择 Telegram;确认
~/.hermes/.env含令牌与白名单。 - 前台测试 —
hermes gateway,向 bot 发消息,触发无害工具(如 agent 执行pwd);Ctrl+C 停止。 - 安装服务 —
hermes gateway install后hermes gateway start(macOS launchd)。 - 为守护进程持久化环境 — 确保
~/.hermes/.env中的 API 密钥对 launchd 可读(与安装同一用户);若仅后台失败,可参考 OpenClaw launchd PATH 说明。 - 监控 —
hermes gateway status、tail -f ~/.hermes/logs/gateway.log,配置变更后用 Telegram/new重置异常会话。
可引用运维规则:一个网关进程可服务多平台(Telegram、Discord、Slack 等)——无需为每个聊天应用单独起守护进程。
launchd 与仅 SSH 租用
在 macOS 租用上,hermes gateway install 会注册用户级 launchd 任务——与本站介绍的 OpenClaw openclaw onboard --install-daemon 模式类似。
hermes gateway install
hermes gateway start
hermes gateway status
tail -f ~/.hermes/logs/gateway.log
SSH 断开后,网关应在执行 install 的同一 Unix 用户下保持运行。若任务停止,请检查:
launchctl list | grep -i hermes- 日志中是否有
TELEGRAM_BOT_TOKEN/ 认证错误 - 租用策略是否在登出时终止长时间用户 agent(专用 M4 少见;共享 shell 较常见)
Docker 后端说明: 若 terminal.backend: docker,经 MEDIA:/path 发送的文件须存在于网关可读的主机路径——不能仅在容器内。请按上游 telegram.md 挂载主机可见卷。
群组聊天(可选)
Telegram 隐私模式 默认开启——群内 bot 通常仅见 /commands、回复 bot 的消息或管理员可见流量。要扩大上下文,在 BotFather 关闭隐私(Bot Settings → Group Privacy → Turn off),并对每个群移除后重新添加 bot,或将 bot 设为群管理员。
若需“观察但不 @ 不回复”,上游提供 TELEGRAM_OBSERVE_UNMENTIONED_GROUP_MESSAGES 与允许的 chat ID——请先阅读 telegram.md 群组章节。
故障排查
症状:bot 无回复(轮询静默)
| 检查项 | 命令 / 修复 |
|---|---|
| 网关是否在运行? | hermes gateway status; 重启 hermes gateway start |
| 令牌是否有效? | 从 BotFather 重新粘贴;若泄露则 /revoke 旧令牌 |
| 用户未在白名单? | 将数字 ID 加入 TELEGRAM_ALLOWED_USERS 并重启网关 |
| 模型/认证失败? | hermes doctor; 先本地测试 hermes CLI |
| 日志 | grep -i error ~/.hermes/logs/gateway.log | tail -20 |
症状:401 Unauthorized 或 Conflict: terminated by other getUpdates
- 401: 错误的或已撤销的
TELEGRAM_BOT_TOKEN。 - Conflict: 两个进程轮询同一 bot——停止重复的前台
hermes gateway或第二台使用同一令牌的主机。
hermes gateway stop
pkill -f "hermes gateway" 2>/dev/null || true
hermes gateway start
症状:前台正常、launchd 下失败
- launchd 环境变量极少——确认
~/.hermes/.env可读且含服务商密钥。 - 对比 SSH 与
launchctl print gui/$(id -u)的PATH(macOS);若插件调用 shell,对齐 Node 等路径。
症状:群内仅见 /commands
- BotFather 隐私模式仍为 ON——关闭或设 bot 为管理员;重新将 bot 加入群组。
常见问题
hermes claw migrate 迁移设置,但在同一主机同时运行两个 bot 会重复占用 RAM 并可能冲突自动化。每个租用主机建议只选一个消息网关。memory_pressure;必要时在大规模 xcodebuild 矩阵期间暂停网关。无头 M4 承载 Hermes Telegram 网关
港/日/韩/新/美 SSH 优先 Apple Silicon—Telegram 长轮询与 launchd 可 24/7 运行。