跳到主要内容

消息网关

通过 Telegram、Discord、Slack、WhatsApp、Signal、SMS、邮件、Home Assistant、Mattermost、Matrix、钉钉、飞书/Lark、企业微信、微信、BlueBubbles(iMessage)、QQ、元宝、Microsoft Teams 或浏览器与 Hermes 对话。网关是一个单一后台进程,连接所有已配置的平台、管理会话、运行定时任务并投递语音消息。

完整的语音功能——包括 CLI 麦克风模式、消息中的语音回复以及 Discord 语音频道对话——请参阅语音模式使用 Hermes 语音模式

平台能力对比

平台语音图片文件话题表情反应输入状态流式输出
Telegram
Discord
Slack
Google Chat
WhatsApp
Signal
SMS
邮件
Home Assistant
Mattermost
Matrix
钉钉
飞书/Lark
企业微信
企业微信回调
微信
BlueBubbles
QQ
元宝
Microsoft Teams

语音 = TTS 音频回复和/或语音消息转录。图片 = 发送/接收图片。文件 = 发送/接收附件。话题 = 话题式对话。表情反应 = 消息表情回应。输入状态 = 处理中的输入指示器。流式输出 = 通过编辑消息实现渐进式更新。

架构

每个平台适配器接收消息,通过每个聊天的会话存储路由,并分发到 AIAgent 进行处理。网关还运行定时任务调度器,每隔 60 秒触发一次,执行到期的任务。

快速配置

配置消息平台最简便的方式是使用交互式向导:

hermes gateway setup # 所有消息平台的交互式配置

该向导通过方向键选择,逐步引导配置每个平台,显示哪些平台已配置完成,并在完成后提示启动/重启网关。

网关命令

hermes gateway # 前台运行
hermes gateway setup # 交互式配置消息平台
hermes gateway install # 安装为用户服务(Linux)/launchd 服务(macOS)
sudo hermes gateway install --system # 仅 Linux:安装为开机启动的系统服务
hermes gateway start # 启动默认服务
hermes gateway stop # 停止默认服务
hermes gateway status # 检查默认服务状态
hermes gateway status --system # 仅 Linux:明确检查系统服务

聊天命令(消息内)

命令说明
/new/reset开始新对话
/model [provider:model]显示或切换模型(支持 provider:model 语法)
/personality [name]设置人格
/retry重试上一条消息
/undo撤销上一轮对话
/status显示会话信息
/stop停止正在运行的 Agent
/approve批准待执行的危险命令
/deny拒绝待执行的危险命令
/sethome将此聊天设为主频道
/compress手动压缩对话上下文
/title [name]设置或显示会话标题
/resume [name]恢复之前命名的会话
/usage显示本会话的 Token 用量
/insights [days]显示用量分析和统计
/reasoning [level|show|hide]调整推理强度或切换推理展示
/voice [on|off|tts|join|leave|status]控制消息语音回复和 Discord 语音频道行为
/rollback [number]列出或恢复文件系统检查点
/background <prompt>在独立后台会话中运行提示词
/reload-mcp从配置重新加载 MCP 服务器
/update更新 Hermes Agent 至最新版本
/help显示可用命令
/<skill-name>调用任意已安装的技能(Skill)

会话管理

会话持久化

会话在消息之间保持,直到被重置。Agent 会记住你的对话上下文。

重置策略

会话根据可配置的策略进行重置:

策略默认值说明
按天凌晨 4:00每天在指定时间重置
空闲1440 分钟无活动超过 N 分钟后重置
两者(组合)先触发的策略生效

~/.hermes/gateway.json 中配置各平台的独立策略:

{
"reset_by_platform": {
"telegram": { "mode": "idle", "idle_minutes": 240 },
"discord": { "mode": "idle", "idle_minutes": 60 }
}
}

安全

默认情况下,网关拒绝所有不在白名单中或未通过私信配对的用户。 这是具有终端访问权限的机器人的安全默认设置。

# 限制特定用户(推荐):
TELEGRAM_ALLOWED_USERS=123456789,987654321
DISCORD_ALLOWED_USERS=123456789012345678
SIGNAL_ALLOWED_USERS=+155****4567,+155****6543
SMS_ALLOWED_USERS=+155****4567,+155****6543
EMAIL_ALLOWED_USERS=trusted@example.com,colleague@work.com
MATTERMOST_ALLOWED_USERS=3uo8dkh1p7g1mfk49ear5fzs5c
MATRIX_ALLOWED_USERS=@alice:matrix.org
DINGTALK_ALLOWED_USERS=user-id-1
FEISHU_ALLOWED_USERS=ou_xxxxxxxx,ou_yyyyyyyy
WECOM_ALLOWED_USERS=user-id-1,user-id-2
WECOM_CALLBACK_ALLOWED_USERS=user-id-1,user-id-2
TEAMS_ALLOWED_USERS=aad-object-id-1,aad-object-id-2

# 或允许
GATEWAY_ALLOWED_USERS=123456789,987654321

# 或明确允许所有用户(不推荐用于具有终端访问权限的机器人):
GATEWAY_ALLOW_ALL_USERS=true

私信配对(白名单的替代方案)

无需手动配置用户 ID,未知用户私信机器人时会收到一次性配对码:

# 用户看到:"Pairing code: XKGH5N7P"
# 你通过以下命令批准:
hermes pairing approve telegram XKGH5N7P

# 其他配对命令:
hermes pairing list # 查看待审核和已批准的用户
hermes pairing revoke telegram 123456789 # 撤销访问权限

配对码 1 小时后过期,有频率限制,使用密码学随机数生成。

中断 Agent

在 Agent 工作时发送任意消息可以中断它。主要行为:

  • 正在执行的终端命令立即终止(先发 SIGTERM,1 秒后发 SIGKILL)
  • 工具调用被取消——只有当前正在执行的工具会运行,其余的跳过
  • 多条消息合并——中断期间发送的消息合并为一条提示词
  • /stop 命令——中断而不排队后续消息

排队、中断与引导(忙碌输入模式)

默认情况下,向忙碌的 Agent 发消息会中断它。还有另外两种模式:

  • queue——后续消息等待当前任务完成后作为下一轮运行。
  • steer——后续消息通过 /steer 注入当前运行,在下一次工具调用后到达 Agent。不中断,不新开轮次。若 Agent 尚未启动则回退为 queue 模式。
display:
busy_input_mode: steer # 或 queue,或 interrupt(默认)
busy_ack_enabled: true # 设为 false 可关闭 ⚡/⏳/⏩ 的聊天回复

当你第一次在任何平台向忙碌的 Agent 发消息时,Hermes 会在忙碌确认消息末尾附上一行提示说明("💡 第一次提示——…")。该提示在每次安装中只显示一次——由 onboarding.seen.busy_input_prompt 标记控制。删除该键可再次触发提示。

如果你觉得忙碌确认消息太嘈杂——尤其是语音输入或频繁发消息时——可设置 display.busy_ack_enabled: false。你的输入仍然会按配置排队/引导/中断,只是不再显示聊天回复。

工具进度通知

~/.hermes/config.yaml 中控制显示多少工具活动信息:

display:
tool_progress: all # off | new | all | verbose
tool_progress_command: false # 设为 true 可在消息中启用 /verbose

启用后,机器人会在工作时发送状态消息:

💻 `ls -la`...
🔍 web_search...
📄 web_extract...
🐍 execute_code...

后台会话

在独立的后台会话中运行提示词,让 Agent 独立处理,同时主聊天保持响应:

/background Check all servers in the cluster and report any that are down

Hermes 立即确认:

🔄 Background task started: "Check all servers in the cluster..."
Task ID: bg_143022_a1b2c3

工作原理

每个 /background 提示词会生成一个独立的 Agent 实例异步运行:

  • 隔离会话——后台 Agent 有自己的会话和对话历史。它不了解当前聊天上下文,只接收你提供的提示词。
  • 相同配置——继承当前网关配置中的模型、提供商、工具集、推理设置和提供商路由。
  • 非阻塞——主聊天保持完全响应。后台任务运行期间,你可以发消息、运行其他命令或启动更多后台任务。
  • 结果投递——任务完成后,结果发送回发出命令的同一聊天或频道,前缀为"✅ Background task complete"。失败时显示"❌ Background task failed"及错误信息。

后台进程通知

当运行后台会话的 Agent 使用 terminal(background=true) 启动长时间运行的进程(服务器、构建等)时,网关可以将状态更新推送到你的聊天。通过 ~/.hermes/config.yaml 中的 display.background_process_notifications 控制:

display:
background_process_notifications: all # all | result | error | off
模式你收到的内容
all运行时输出更新最终完成消息(默认)
result仅最终完成消息(无论退出码)
error仅退出码非零时的最终消息
off不接收任何进程监视消息

也可通过环境变量设置:

HERMES_BACKGROUND_NOTIFICATIONS=result

使用场景

  • 服务器监控——"/background Check the health of all services and alert me if anything is down"
  • 长时间构建——"/background Build and deploy the staging environment",同时继续聊天
  • 研究任务——"/background Research competitor pricing and summarize in a table"
  • 文件操作——"/background Organize the photos in ~/Downloads by date into folders"
提示

消息平台上的后台任务是触发即忘——你不需要等待或主动查询。任务完成后结果会自动出现在同一聊天中。

服务管理

Linux(systemd)

hermes gateway install # 安装为用户服务
hermes gateway start # 启动服务
hermes gateway stop # 停止服务
hermes gateway status # 检查状态
journalctl --user -u hermes-gateway -f # 查看日志

# 启用 lingering(注销后保持运行)
sudo loginctl enable-linger $USER

# 或安装开机启动的系统服务,仍以你的用户身份运行
sudo hermes gateway install --system
sudo hermes gateway start --system
sudo hermes gateway status --system
journalctl -u hermes-gateway -f

在笔记本和开发机上使用用户服务。在需要开机自启且不依赖 systemd linger 的 VPS 或无头主机上使用系统服务。

除非确有必要,避免同时安装用户和系统网关单元。如果 Hermes 检测到两者都存在,会发出警告,因为 start/stop/status 行为会变得不明确。

多个安装实例

如果你在同一台机器上运行多个 Hermes 安装实例(不同的 HERMES_HOME 目录),每个实例有各自的 systemd 服务名称。默认的 ~/.hermes 使用 hermes-gateway;其他安装使用 hermes-gateway-<hash>hermes gateway 命令会自动定位当前 HERMES_HOME 对应的服务。

macOS(launchd)

hermes gateway install # 安装为 launchd agent
hermes gateway start # 启动服务
hermes gateway stop # 停止服务
hermes gateway status # 检查状态
tail -f ~/.hermes/logs/gateway.log # 查看日志

生成的 plist 位于 ~/Library/LaunchAgents/ai.hermes.gateway.plist。包含三个环境变量:

  • PATH——安装时你的完整 shell PATH,并预置 venv bin/node_modules/.bin。确保网关子进程(如 WhatsApp 桥接)可以使用用户安装的工具(Node.js、ffmpeg 等)。
  • VIRTUAL_ENV——指向 Python 虚拟环境,使工具能正确解析包。
  • HERMES_HOME——将网关限定到你的 Hermes 安装目录。
安装后 PATH 变更

launchd plist 是静态的——如果你在配置网关后安装了新工具(如通过 nvm 安装新版 Node.js,或通过 Homebrew 安装 ffmpeg),请重新运行 hermes gateway install 以捕获更新后的 PATH。网关会检测到过期的 plist 并自动重新加载。

多个安装实例

与 Linux systemd 服务类似,每个 HERMES_HOME 目录有各自的 launchd label。默认的 ~/.hermes 使用 ai.hermes.gateway;其他安装使用 ai.hermes.gateway-<suffix>

各平台工具集

每个平台有其独立的工具集:

平台工具集能力
CLIhermes-cli完整访问权限
Telegramhermes-telegram完整工具,含终端
Discordhermes-discord完整工具,含终端
WhatsApphermes-whatsapp完整工具,含终端
Slackhermes-slack完整工具,含终端
Google Chathermes-google-chat完整工具,含终端
Signalhermes-signal完整工具,含终端
SMShermes-sms完整工具,含终端
邮件hermes-email完整工具,含终端
Home Assistanthermes-homeassistant完整工具 + HA 设备控制(ha_list_entities、ha_get_state、ha_call_service、ha_list_services)
Mattermosthermes-mattermost完整工具,含终端
Matrixhermes-matrix完整工具,含终端
钉钉hermes-dingtalk完整工具,含终端
飞书/Larkhermes-feishu完整工具,含终端
企业微信hermes-wecom完整工具,含终端
企业微信回调hermes-wecom-callback完整工具,含终端
微信hermes-weixin完整工具,含终端
BlueBubbleshermes-bluebubbles完整工具,含终端
QQBothermes-qqbot完整工具,含终端
元宝hermes-yuanbao完整工具,含终端
Microsoft Teamshermes-teams完整工具,含终端
API 服务器hermes(默认)完整工具,含终端
Webhookhermes-webhook完整工具,含终端

下一步