watchers

Poll RSS feeds, JSON APIs, and GitHub repositories with watermark-based deduplication.

Updated Jun 5, 2026
One-click install
npx skills add https://github.com/xu1713/openhorse --skill watchers-xu1713
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: watchers
Source: https://github.com/xu1713/openhorse/tree/main/openhorse/openhorse/optional-skills/devops/watchers
Command: npx skills add https://github.com/xu1713/openhorse --skill watchers-xu1713

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) components.

What problem does it solve? Manually checking RSS feeds, GitHub repos, and JSON APIs for updates is repetitive and error-prone. This Skill polls external sources on an interval, tracks previously-seen items in a watermark state file, and emits only genuinely new items so cron jobs and agents never re-report old content. ## Core Features & Use Cases - Three ready-made watcher scripts: watch_rss.py for RSS 2.0/Atom feeds, watch_github.py for GitHub issues/pulls/releases/commits, and watch_http_json.py for arbitrary JSON endpoints with configurable ID fields and dotted item paths. - Shared watermark helper: _watermark.py provides atomic state writes, a bounded 500-ID seen set, and first-run baseline recording so existing feed content is never replayed. - Silent-on-empty output contract: scripts print Markdown only when new items exist, letting cron jobs treat empty stdout as silent and avoid notification spam. - Use Case: Schedule a cron job every 15 minutes to poll the Hacker News RSS feed; when new stories appear, the agent summarizes the headlines and delivers them, otherwise it stays silent. ## Quick Start Ask the agent to run the RSS watcher script with a name and feed URL, for example to watch https://news.ycombinator.com/rss, and report any new items it prints.

Frequently Asked Questions about watchers

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I watch an RSS feed for new items from the command line?

Run watch_rss.py with a --name for the state file and --url for the feed, for example python watch_rss.py --name hn --url https://news.ycombinator.com/rss. The first run records a baseline silently; later runs print only new entries as Markdown.

How to monitor GitHub issues or releases with a script?

Use watch_github.py with --repo owner/name and --scope set to issues, pulls, releases, or commits. Set GITHUB_TOKEN or GH_TOKEN in the environment to avoid the 60 requests-per-hour anonymous rate limit.

Why does the watcher print nothing on its first run?

The first run records a baseline of all current item IDs in the watermark file and intentionally emits nothing, so existing feed content is never replayed. Delete the state file to force a fresh baseline on the next run.

Can I poll a JSON API that nests its list inside an object?

Yes, watch_http_json.py accepts --items-path with a dotted path like data.events to locate the list, and --id-field to choose the dedup key. Repeatable --header flags pass custom HTTP headers such as authorization tokens.

What are the limitations of the watermark dedup approach?

The watermark stores a bounded set of at most 500 seen IDs, so very high-churn feeds may evict old IDs and risk re-emitting items. It also dedups only by ID, so edited items with unchanged IDs are not re-reported.