跳到主要內容

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 後端可能無法看到任意主機路徑。