来源 路径 / 方式 用途
Bundled Hermes 仓库内置 plugins/ 官方随 Hermes 发布的插件
User ~/.hermes/plugins/ 用户自己的本地插件
Project .hermes/plugins/ 当前工作目录插件;默认不扫描,需设置 HERMES_ENABLE_PROJECT_PLUGINS=true
pip hermes_agent.plugins entry points 通过 Python 包分发的插件
8.5 管理插件
hermes plugins # 交互式开关插件
hermes plugins list # 查看已安装插件
hermes plugins install user/repo # 从 GitHub 安装插件
hermes plugins update # 更新插件
hermes plugins remove # 移除插件
hermes plugins enable # 启用插件
hermes plugins disable # 禁用插件
新安装或捆绑的插件默认不启用,必须加入 ~/.hermes/config.yaml:
~/.hermes/config.yaml
plugins:
enabled:
- my-plugin
disabled:
- noisy-plugin
plugins.disabled 是拒绝列表,如果同一个插件同时出现在 enabled 和 disabled,禁用优先。
- Cron 定时任务
官方文档:https://hermes-agent.nousresearch.com/docs/user-guide/features/cron
Hermes 内置定时任务系统,可以用自然语言、cron 表达式安排任务。
定时任务通过 Gateway daemon 执行:Gateway 每 60 秒 tick 一次,检查到期任务。为每个到期任务启动一个新的 Agent 会话执行 prompt,然后投递最终结果。Cron 运行时会禁用 cron 管理工具,避免递归创建更多定时任务造成调度循环。
9.1 创建任务【重要,操作实用】
可在会话中通过 /cron,或使用 CLI 命令 hermes cron 来创建:
/cron add 30m “提醒我检查构建结果”
/cron add “every 2h” “检查服务器状态”
/cron add “every 1h” “总结新动态” --skill blogwatcher
/cron add “every 1h” “加载两个技能并合并结果” --skill blogwatcher --skill maps
hermes cron create “every 2h” “检查服务器状态”
hermes cron create “every 1h” “总结新动态” --skill blogwatcher
也可以直接用自然语言让 Hermes 创建:
每天早上 9 点检查 Hacker News 上的 AI 新闻,然后发一份摘要到 Telegram。
Hermes 会在内部调用 cronjob 工具完成创建:
cronjob(
action=“create”,
schedule=“every 1d at 09:00”,
prompt=“检查 Hacker News 上的 AI 新闻,筛选值得关注的条目,并写成中文摘要。”,
name=“HN AI daily”,
deliver=“telegram”,
)
9.2 调度格式
类型 示例 行为
相对延迟 30m、2h、1d 一次性运行
循环间隔 every 30m、every 2h、every 1d 持续重复运行
Cron 表达式 0 9 * * *、0 9 * * 1-5、0 */6 * * * 按 cron 规则重复运行
ISO 时间 2026-03-15T09:00:00 指定时间运行一次
Cron 表达式格式为 分 时 日 月 周:
0 9 * * * 每天 9:00 执行
0 9 * * 1-5 工作日每天 9:00 执行
0 */6 * * * 每 6 小时执行
30 8 1 * * 每月 1 日 8:30 执行
9.3 管理任务
/cron list # 查看定时任务
/cron list --all # 查看所有任务,包括已暂停的
/cron edit <job_id> --schedule “every 4h” # 修改调度时间
/cron edit <job_id> --prompt “使用新的任务说明” # 修改任务说明
/cron edit <job_id> --skill blogwatcher --skill maps # 替换技能列表
/cron edit <job_id> --add-skill maps # 追加技能
/cron edit <job_id> --remove-skill blogwatcher # 移除指定技能
/cron pause <job_id> # 暂停任务
/cron resume <job_id> # 恢复任务
/cron run <job_id> # 下一个 scheduler tick 触发任务
/cron remove <job_id> # 删除任务
hermes cron status # 查看调度器状态
hermes cron tick # 手动触发一次 scheduler tick
任务存储在 ~/.hermes/cron/jobs.json,运行输出保存到 ~/.hermes/cron/output/{job_id}/{timestamp}.md。
9.4 运行结果投递方式
deliver 控制定时任务运行完成后,把 Agent 的最终回复发送到哪里:
deliver 说明
origin 回到创建任务的聊天来源,消息平台默认值
local 只保存到本地文件,CLI 默认值
telegram、discord、slack 投递到对应平台的 home channel
telegram:123456 投递到指定 Telegram chat ID
discord:#engineering 投递到指定 Discord 频道
all 投递到所有已配置 home channel 的平台
telegram,discord 投递到多个指定平台
origin,all 投递到来源聊天 + 所有 home channel
ntfy v0.15+:推送通知,无需账号
示例:
hermes cron create “every 30m” “检查服务状态” --deliver telegram
hermes cron create “every 1d” “生成日报” --deliver telegram,discord
如果 Agent 的最终回复以 [SILENT] 开头,成功运行时会抑制投递,但输出仍会保存到本地。失败任务仍会投递错误信息。适合只有出现问题才需要报告的作业:
Check if nginx is running. If everything is healthy, respond with only [SILENT].
Otherwise, report the issue.
9.5 No-Agent 模式
对于不需要 LLM 推理的周期性任务(监控程序、磁盘/内存警报、心跳检测、CI ping 等),可传递 no_agent=True:
hermes cron create “every 5m”
–no-agent
–script memory-watchdog.sh
–deliver telegram
–name “memory-watchdog”
脚本必须放在 ~/.hermes/scripts/ 中。.sh / .bash 用 /bin/bash 执行,其他脚本用当前 Python 解释器执行。
脚本运行默认超时 120 秒,可调整:
~/.hermes/config.yaml
cron:
script_timeout_seconds: 300
9.6 使用 context_from 链接作业
Cron 任务彼此之间默认隔离。context_from 用来把一个任务的最新输出接到另一个任务的 prompt 前面。它只能由 Agent 通过 cronjob 工具设置,CLI 命令不支持。
典型流程:
Job 1:收集原始数据
Job 2:读取 Job 1 的最新输出,筛选 / 排序
Job 3:读取 Job 2 的最新输出,生成最终报告并投递
示例:
Job 1:收集 AI 新闻
cronjob(action=“create”, name=“ai-news-fetch”,
schedule=“0 7 * * *”,
prompt=“Fetch the top 10 AI/ML stories from Hacker News.”)
Job 2:使用 Job 1 的最新输出做筛选
cronjob(action=“create”, name=“ai-news-rank”,
schedule=“30 7 * * *”,
context_from=“<job1_id>”,
prompt=“Score each story for novelty and engagement. Keep the top 5.”)
Job 3:使用 Job 2 的最新输出生成日报
cronjob(action=“create”, name=“ai-news-brief”,
schedule=“0 8 * * *”,
context_from=“<job2_id>”,
prompt=“Write a concise daily brief and deliver it to Telegram.”)
context_from 支持单个或多个 job ID。多个上游输出会按列表顺序拼接,每个上游输出在注入前被截断至 8,000 字符。
注意:context_from 读取的是上游任务「最近一次已完成输出」,不会等待同一个 tick 中仍在运行的上游任务。需要强依赖同一批数据时,应把上下游任务错开足够长时间。
三、协作交互
- Gateway 消息网关
官方文档:https://hermes-agent.nousresearch.com/docs/user-guide/messaging/
Gateway 是 Hermes 的消息平台接入层,可以作为前台进程或后台服务运行。它负责连接 Telegram、Discord、Slack、微信等平台,接收消息,维护每个聊天对应的会话,把消息转发给 Hermes Agent 处理,再把回复发回原平台。
Gateway 和 CLI 模式使用同一套 Hermes 程序、配置、会话、记忆、技能和工具。区别在于:CLI 是终端里的单次交互入口,Gateway 是长期运行的消息平台适配进程。Gateway 还会运行 cron 调度循环,用来触发到期的计划任务。
1.1 命令
hermes gateway setup # 交互式配置消息平台
hermes gateway # 前台启动 Gateway
hermes gateway install # 安装为用户服务(Linux)/ launchd 服务(macOS)
sudo hermes gateway install --system # 仅 Linux:安装为开机启动的系统服务
hermes gateway start # 启动默认服务
hermes gateway restart # 重启网关
hermes gateway stop # 停止默认服务
hermes gateway status # 查看默认服务状态
hermes gateway status --system # 仅 Linux:检查系统服务状态
Telegram Bot 端到端搭建
以 Telegram 为例,完整的 Gateway 接入流程如下:
步骤 1:创建 Bot
在 Telegram 中搜索 @BotFather,发送 /newbot,按提示设置名称和用户名,获得 Bot Token(格式:1234567890:ABCdefGHIjklMNOpqrsTUVwxyz)。
步骤 2:配置 Hermes
将 Bot Token 写入 .env
echo “TELEGRAM_BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz” >> ~/.hermes/.env
交互式配置 Gateway(Telegram 选项)
hermes gateway setup
步骤 3:启动 Gateway
前台运行(调试用)
hermes gateway
安装为系统服务(推荐生产环境)
hermes gateway install
hermes gateway start
步骤 4:验证配对
首次与 Bot 私信时,Bot 会回复配对码。管理员在本机批准:
hermes pairing list # 查看待审批的配对请求
hermes pairing approve telegram XKGH5N7P
此后该用户即可与 Hermes 自由对话。
1.2 支持的消息平台【重要,操作实用】
(每次修改配置文件后需要重启网关,命令上面有 )
Hermes Gateway 支持 23 个以上的消息平台:
Telegram、Discord、Slack、WhatsApp、Signal、DingTalk、SMS (Twilio)、Mattermost、Matrix、Webhook、Email (IMAP/SMTP)、Home Assistant、Feishu/Lark、WeCom、Weixin(微信)、BlueBubbles (iMessage)、QQBot、Yuanbao、IRC、Microsoft Teams、Google Chat、LINE、SimpleX Chat、ntfy(v0.15+,无需账号的推送通知)
配置邮箱的步骤(只能手动修改配置文件):
打开邮箱的POP3/SMTP/IMAP (不同邮箱入口不同,自行百度)
开启服务:IMAP/SMTP服务、POP3/SMTP服务
记录SMTP服务器地址、IMAP服务器地址
找到自己邮箱平台的端口号(不同邮箱端口不同,自行百度)
进入到安装目录下hermes/.env文件,添加:
Hermes代理的邮箱配置 .env
EMAIL_PASSWORD=QHaqxxxxxxxxxxxxxxxxxxxxx
EMAIL_IMAP_HOST=imap.163.com
EMAIL_SMTP_HOST=smtp.163.com
EMAIL_SMTP_PORT=465
EMAIL_ADDRESS=yaohm7788@163.com
允许什么人发消息给你(桌面版:消息平台——email——Allowed users 填写 true 就是所有人,也可以填某个邮箱)
EMAIL_ALLOW_ALL_USERS=true
打开/重启网关:hermes gateway start / hermes gateway restart
测试:用自己邮箱A 发消息给 Hermes代理的邮箱B。B会回复一个邮箱。
(必须 EMAIL_ALLOW_ALL_USERS=true 或者 是A邮箱的地址)
配置微信的步骤:
cmd进入网关设置界面:hermes gateway setup
选择WeiXin,输入 y。出现二维码
手机个人微信扫描二维码即可登录
登录成功,后续设置配置自行决定(命令行会提供选项)
建议都使用默认,也就是它推荐的
自动询问是否要重启网关,确认重启(如果没出现就手动输入命令重启,不要关闭网关界面后续有用)
完成以上步骤基本配置完成,进入安装目录下hermes/.env文件查看
微信配置 https://hermes-agent.nousresearch.com/docs/zh-Hans/user-guide/messaging/weixin
WEIXIN_ACCOUNT_ID=c94b6aa27d45@im.bot
WEIXIN_TOKEN=c94b6aa27d45@im.bot:06xxxxxxxxxxxxxxxxxxxxx
WEIXIN_BASE_URL=https://ilinkai.weixin.qq.com
WEIXIN_CDN_BASE_URL=https://novac2c.cdn.weixin.qq.com/c2c
WEIXIN_DM_POLICY=pairing
WEIXIN_ALLOW_ALL_USERS=false
WEIXIN_ALLOWED_USERS=
WEIXIN_GROUP_POLICY=disabled
WEIXIN_GROUP_ALLOWED_USERS=
WEIXIN_HOME_CHANNEL=o9cq800SHCEm-xxxxxxxxxxxxxxxxxxxxx@im.wechat
微信会自动出现一个clawbot的对话框,发送消息给这个对话框,发送失败
此时网关界面会出现:有一个无权限的用户尝试访问,并指出给出会话id (以@im.wechat结尾的字符串)
授权
全部授权(所有人都可以和Hermes对话):WEIXIN_ALLOW_ALL_USERS=true
指定授权(指定会话才可以和Hermes对话):WEIXIN_ALLOWED_USERS=xxxxx@im.wechat
cmd重启网关:hermes gateway restart
现在可以开始对话了
1.3 网关配对
默认情况下,网关会拒绝所有不在允许列表中或未通过私信配对的用户。
允许列表
在 ~/.hermes/.env 中配置:(每次修改配置文件后需要重启网关,命令上面有 )
按平台限制用户
TELEGRAM_ALLOWED_USERS=123456789,987654321
WEIXIN_ALLOWED_USERS=123456789,987654321
或配置通用允许列表
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 <user_id> # 撤销配对
配对码 1 小时后过期,有速率限制,并使用加密随机数生成。
斜杠命令权限控制
权限分层只控制斜杠命令,不影响普通聊天。规则:
先判断用户是否被允许使用 Gateway
再判断当前作用域是否启用了命令权限分层
未配置 admin 列表时,所有已允许用户都可以运行斜杠命令
配置了 admin 列表时,管理员可运行所有命令,普通用户只能运行显式允许的命令(以及始终可用的 /help 和 /whoami)
~/.hermes/config.yaml
gateway:
platforms:
discord:
extra:
allow_from: [“111”, “222”, “333”]
allow_admin_from: [“111”]
user_allowed_commands: [status, model]
group_allow_admin_from: [“111”]
group_user_allowed_commands: [status]
用 /whoami 查看当前平台、作用域、权限层级和可运行的斜杠命令。