New to Claude Skills? Learn how to install them →

nousresearch on GitHub

Watchers

Free

Monitor feeds and APIs for new updates efficiently.

Get this skill

Free · Opens the source repo

What Watchers does

Watchers is a skill designed for users who need to monitor external sources such as RSS feeds, JSON APIs, and GitHub repositories for new content. It operates by polling these sources at specified intervals and only reacting when new items are detected, which minimizes unnecessary notifications and optimizes resource usage. The skill includes three ready-made scripts that can be easily integrated into your workflow, whether run ad-hoc from the terminal or scheduled as cron jobs.

The core functionality of Watchers revolves around the concept of a watermark, which helps track previously seen items. Each script fetches data from the specified source, compares it against the watermark file to identify new entries, and then updates the watermark accordingly. This ensures that users are only notified of fresh content, avoiding clutter from repeated alerts. The output format is straightforward, making it easy to parse the results programmatically or manually.

Watchers is particularly useful for developers and designers who want to stay updated on changes in specific repositories, monitor news from their favorite blogs, or keep an eye on JSON APIs for new events. The simplicity of its design allows users to set it up quickly without extensive configuration, making it accessible even for those with minimal scripting experience.

The skill's modular approach allows users to customize their monitoring needs further. By leveraging the shared watermark helper, users can create their own watchers with minimal boilerplate code. This flexibility makes Watchers a powerful tool for anyone needing to automate the monitoring of external data sources without getting bogged down in complexity.

When to use it

Use this skill when you want to receive updates from RSS feeds, GitHub repositories, or JSON APIs without constant manual checks.

When not to use it

This skill may not be suitable for real-time monitoring needs or for sources that require immediate response upon changes.

What you can build with it

Monitor a News Feed

Set up a watcher for an RSS feed to receive notifications whenever new articles are published.

Track GitHub Repository Changes

Use the GitHub watcher to get notified of new issues or pull requests in a specific repository.

Poll a JSON API for Events

Configure a watcher to check a JSON API for new events and notify you when they occur.

How to install Watchers

View source

1. Install with the skills CLI

npx skills add nousresearch/hermes-agent/watchers --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by nousresearch

Watchers

Poll external sources on an interval and react only to new items. Three ready-made scripts plus a shared watermark helper; wire them into a cron job (or run them ad-hoc from the terminal).

When to Use

  • User wants to watch an RSS/Atom feed and be notified of new entries
  • User wants to watch a GitHub repo's issues / pulls / releases / commits
  • User wants to poll an arbitrary JSON endpoint and get notified on new items
  • User asks for "a watcher for X" or "notify me when X changes"

Mental model

A watcher is just a script that:

  1. Fetches data from the external source
  2. Compares against a watermark file of previously-seen IDs
  3. Writes the new watermark back
  4. Prints new items to stdout (or nothing on no-change)

The scripts below handle all three. The agent runs them via the terminal tool — from a cron job, a webhook, or an interactive chat — and reports what's new.

Ready-made scripts

All three live in $HERMES_HOME/skills/devops/watchers/scripts/ once the skill is installed. Each reads WATCHER_STATE_DIR (defaults to $HERMES_HOME/watcher-state/) for its state file, keyed by the --name argument.

ScriptWhat it watchesDedup key
watch_rss.pyRSS 2.0 or Atom feed URL<guid> / <id>
watch_http_json.pyAny JSON endpoint returning a list of objectsConfigurable id field
watch_github.pyGitHub issues / pulls / releases / commits for a repoid / sha

All three:

  • First run records a baseline — never replays existing feed
  • Watermark is a bounded ID set (max 500) to cap memory
  • Output format: ## <title>\n<url>\n\n<optional body> per item
  • Empty stdout on no-new — the caller treats that as silent
  • Non-zero exit on fetch errors

Usage

Run a watcher directly from the terminal tool:

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

Watch a GitHub repo (set GITHUB_TOKEN in ${HERMES_HOME:-~/.hermes}/.env to avoid the 60 req/hr anonymous rate limit):

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

Poll an arbitrary 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

Wiring into cron

Ask the agent to schedule a cron job with a prompt like:

Every 15 minutes, run watch_rss.py --name hn --url https://news.ycombinator.com/rss. If it prints anything, summarize the headlines and deliver them. If it prints nothing, stay silent.

The agent invokes the script via the terminal tool inside the cron job's agent loop; no changes to cron's built-in --script flag are needed.

State files

Every watcher writes $HERMES_HOME/watcher-state/<name>.json. Inspect:

cat $HERMES_HOME/watcher-state/hn.json

Force a replay (next run treated as first poll):

rm $HERMES_HOME/watcher-state/hn.json

Writing your own

All three scripts use the same template: load watermark, fetch, diff, save, emit. scripts/_watermark.py is the shared helper; import it to get atomic writes + bounded ID set + first-run baseline for free. See any of the three reference scripts for how little boilerplate it takes.

Common Pitfalls

  1. Printing a "no new items" header every tick. Callers rely on empty stdout = silent. If you print anything on an empty delta, you spam the channel. The shipped scripts handle this; custom scripts must too.
  2. Expecting the first run to emit items. It won't — first run records a baseline. If you need an initial digest, delete the state file after the first run or add a --prime-with-latest N flag in your own script.
  3. Unbounded watermark growth. The shared helper caps at 500 IDs. Raise it for high-churn feeds; lower it on constrained filesystems.
  4. Putting the state dir where the agent's sandbox can't write. $HERMES_HOME/watcher-state/ is always writable. Docker/Modal backends may not see arbitrary host paths.

Frequently asked questions about Watchers

Similar skills