跳到主要内容

Watchers

通过水印去重机制轮询 RSS、JSON API 和 GitHub。

技能元数据

来源可选 — 使用 hermes skills install official/devops/watchers 安装
路径optional-skills/devops/watchers
版本1.0.0
作者Hermes Agent
许可证MIT
平台linux, macos
标签cron, polling, rss, github, http, automation, monitoring

参考:完整 SKILL.md

信息

以下是 Hermes 在触发此技能时加载的完整技能定义。这是技能激活时代理所看到的指令。

Watchers

按间隔轮询外部源,并仅对新项目做出反应。包含三个现成的脚本和一个共享的水印辅助工具;将它们接入 cron 作业(或从终端临时运行)。

何时使用

  • 用户希望监控 RSS/Atom 源并在有新条目时收到通知
  • 用户希望监控 GitHub 仓库的 issues / pulls / releases / commits
  • 用户希望轮询任意 JSON 端点并在新项目出现时收到通知
  • 用户请求“为 X 设置一个监控器”或“当 X 变化时通知我”

思维模型

监控器只是一个执行以下操作的脚本:

  1. 从外部源获取数据
  2. 与之前见过的 ID 的水印文件进行比较
  3. 写回新的水印
  4. 将新项目打印到 stdout(如果没有变化则不输出任何内容)

下面的脚本处理了所有这三个步骤。代理通过终端工具运行它们——无论是通过 cron 作业、webhook 还是交互式聊天——并报告新内容。

现成的脚本

一旦安装了该技能,所有三个脚本都位于 $HERMES_HOME/skills/devops/watchers/scripts/ 中。每个脚本都会读取 WATCHER_STATE_DIR(默认为 $HERMES_HOME/watcher-state/)以获取其状态文件,键由 --name 参数指定。

脚本监控对象去重键
watch_rss.pyRSS 2.0 或 Atom 源 URL<guid> / <id>
watch_http_json.py返回对象列表的任意 JSON 端点可配置的 id 字段
watch_github.py仓库的 GitHub issues / pulls / releases / commitsid / sha

所有三个脚本:

  • 首次运行会记录基线——绝不会重放现有的源内容
  • 水印是一个有界的 ID 集合(最大 500 个),以限制内存使用
  • 输出格式:每个项目为 ## <title>\n<url>\n\n<optional body>
  • 如果没有新项目,stdout 为空——调用者将其视为静默
  • 获取错误时退出码非零

用法

直接从终端工具运行监控器:

python $HERMES_HOME/skills/devops/watchers/scripts/watch_rss.py \
--name hn --url https://news.ycombinator.com/rss --max 5

监控 GitHub 仓库(在 ~/.hermes/.env 中设置 GITHUB_TOKEN 以避免匿名速率限制 60 次请求/小时):

python $HERMES_HOME/skills/devops/watchers/scripts/watch_github.py \
--name hermes-issues --repo NousResearch/hermes-agent --scope issues

轮询任意 JSON API:

python $HERMES_HOME/skills/devops/watchers/scripts/watch_http_json.py \
--name api --url https://api.example.com/events \
--id-field event_id --items-path data.events

接入 cron

通过类似以下的提示要求代理安排 cron 作业:

每 15 分钟,运行 watch_rss.py --name hn --url https://news.ycombinator.com/rss。如果它打印了任何内容,总结标题并交付它们。如果它没有打印任何内容,保持静默。

代理在 cron 作业的代理循环内通过终端工具调用脚本;无需更改 cron 内置的 --script 标志。

状态文件

每个监控器都会写入 $HERMES_HOME/watcher-state/<name>.json。检查方法:

cat $HERMES_HOME/watcher-state/hn.json

强制重放(下次运行被视为首次轮询):

rm $HERMES_HOME/watcher-state/hn.json

编写你自己的脚本

所有三个脚本都使用相同的模板:加载水印、获取、差异比较、保存、发出。scripts/_watermark.py 是共享辅助工具;导入它即可免费获得原子写入 + 有界 ID 集合 + 首次运行基线功能。请参阅任意三个参考脚本,了解所需的样板代码有多么少。

常见陷阱

  1. 每次轮询都打印“没有新项目”的标题。 调用者依赖于空 stdout = 静默。如果在空增量时打印任何内容,你会刷屏通道。附带的脚本已处理此问题;自定义脚本也必须如此。
  2. 期望首次运行会发出项目。 它不会——首次运行记录基线。如果你需要初始摘要,请在首次运行后删除状态文件,或者在你自己的脚本中添加 --prime-with-latest N 标志。
  3. 水印无限制增长。 共享辅助工具将上限设为 500 个 ID。对于高变动率的源可以提高此限制;在文件系统受限时降低此限制。
  4. 将状态目录放在代理沙箱无法写入的位置。 $HERMES_HOME/watcher-state/ 始终可写。Docker/Modal 后端可能无法看到任意主机路径。