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 變化時通知我”
思維模型
監控器只是一個執行以下操作的腳本:
- 從外部源獲取數據
- 與之前見過的 ID 的水印文件進行比較
- 寫回新的水印
- 將新項目打印到 stdout(如果沒有變化則不輸出任何內容)
下面的腳本處理了所有這三個步驟。代理通過終端工具運行它們——無論是通過 cron 作業、webhook 還是交互式聊天——並報告新內容。
現成的腳本
一旦安裝了該技能,所有三個腳本都位於 $HERMES_HOME/skills/devops/watchers/scripts/ 中。每個腳本都會讀取 WATCHER_STATE_DIR(默認為 $HERMES_HOME/watcher-state/)以獲取其狀態文件,鍵由 --name 參數指定。
| 腳本 | 監控對象 | 去重鍵 |
|---|---|---|
watch_rss.py | RSS 2.0 或 Atom 源 URL | <guid> / <id> |
watch_http_json.py | 返回對象列表的任意 JSON 端點 | 可配置的 id 字段 |
watch_github.py | 倉庫的 GitHub issues / pulls / releases / commits | id / 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 集合 + 首次運行基線功能。請參閱任意三個參考腳本,瞭解所需的樣板代碼有多麼少。
常見陷阱
- 每次輪詢都打印“沒有新項目”的標題。 調用者依賴於空 stdout = 靜默。如果在空增量時打印任何內容,你會刷屏通道。附帶的腳本已處理此問題;自定義腳本也必須如此。
- 期望首次運行會發出項目。 它不會——首次運行記錄基線。如果你需要初始摘要,請在首次運行後刪除狀態文件,或者在你自己的腳本中添加
--prime-with-latest N標誌。 - 水印無限制增長。 共享輔助工具將上限設為 500 個 ID。對於高變動率的源可以提高此限制;在文件系統受限時降低此限制。
- 將狀態目錄放在代理沙箱無法寫入的位置。
$HERMES_HOME/watcher-state/始終可寫。Docker/Modal 後端可能無法看到任意主機路徑。