blogwatcher — Claude Code skill: what it does, how to install
Connects the blogwatcher-cli feed manager to your agent for RSS and Atom monitoring. Tracks new posts and maintains read status across blogs.
npx skills add NousResearch/hermes-agent --skill blogwatcher -a claude-codeWhat blogwatcher does
This skill turns blogwatcher-cli into a local feed tracking database for coding agents. It auto-discovers RSS and Atom feeds from homepages, falls back to HTML scraping with selectors when feeds fail, and imports subscriptions from OPML files. All state lives in a local SQLite database at ~/.blogwatcher-cli/blogwatcher-cli.db or the location set by BLOGWATCHER_DB.
You need the blogwatcher-cli binary installed on your system before running commands, as this skill does not package it. If you only need a quick one-off check of a single page or deep competitor analysis, this feed database is unnecessary. It focuses strictly on tracking read states and listing new entries without summarizing article bodies.
What it helps with
- monitor RSS and Atom feeds for new blog posts
- import existing feed subscriptions from OPML files
- extract articles using HTML selectors when feeds break
- track read and unread status across multiple feeds
Example prompts for the agent
- Scan all blogs with blogwatcher-cli and show unread articles.
- Add a new blog named Engineering using the scrape selector article h2 a.
- Import feed subscriptions from subscriptions.opml and list tracked blogs.
How to install blogwatcher
1Skills CLI (Vercel)
npx skills add NousResearch/hermes-agent --skill blogwatcher -a claude-code2Manually: put the files in place
~/.claude/skills/blogwatcher/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/blogwatcher/
1Skills CLI (Vercel)
npx skills add NousResearch/hermes-agent --skill blogwatcher -a codex2Manually: put the files in place
.agents/skills/blogwatcher/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add NousResearch/hermes-agent --skill blogwatcher -a cursor2Manually: put the files in place
.cursor/skills/blogwatcher/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install NousResearch/hermes-agent blogwatcher2Manually: put the files in place
.github/skills/blogwatcher/SKILL.md1Skills CLI (Vercel)
npx skills add NousResearch/hermes-agent --skill blogwatcher -a gemini-cli2Platform CLI
gemini skills install https://github.com/NousResearch/hermes-agent --path optional-skills/research/blogwatcherManually: put the files in place
.devin/skills/blogwatcher/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add NousResearch/hermes-agent --skill blogwatcher -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set42
The whole set →Similar
Questions about blogwatcher
How to install blogwatcher in Claude Code?
Run npx skills add NousResearch/hermes-agent --skill blogwatcher -a claude-code. Make sure the blogwatcher-cli command is already accessible in your PATH.
What does the blogwatcher skill do?
It lets your agent manage site subscriptions, trigger scans, and filter unread articles. All feed entries and read states are saved in a local SQLite database.
What prerequisites are needed?
The standalone blogwatcher-cli tool must be installed beforehand. You can install it via Go, run it through Docker, or download the compiled release binary.
Source text
SKILL.md · MIT
---
name: blogwatcher
description: "Monitor blogs and RSS/Atom feeds via blogwatcher-cli tool."
version: 2.0.0
author: JulienTant (fork of Hyaxia/blogwatcher)
license: MIT
platforms: [linux, macos, windows]
metadata:
hermes:
tags: [RSS, Blogs, Feed-Reader, Monitoring]
homepage: https://github.com/JulienTant/blogwatcher-cli
prerequisites:
commands: [blogwatcher-cli]
---
# Blogwatcher
Track blog and RSS/Atom feed updates with the `blogwatcher-cli` tool. Supports automatic feed discovery, HTML scraping fallback, OPML import, and read/unread article management.
## Working with Hermes tools (read this first)
`blogwatcher-cli` is the feed database; Hermes tools do the automation around it:
- **Recurring watch — use the cronjob tool's `monitor` field, not a bare schedule.** `monitor` runs a script each tick and only wakes the agent when output changes: set it to a script that runs `blogwatcher-cli scan >/dev/null 2>&1 && blogwatcher-cli articles` (deterministic output; new articles = changed output = agent wakes with the diff injected). Unchanged ticks cost zero LLM calls. Set `deliver` to route digests to a chat/channel; add `continuity: true` so consecutive digests can dedupe.
- **Reading an article the user asks about**: `web_extract([url])` on the article URL from `blogwatcher-cli articles` — do not re-scrape by hand.
- **One-off "watch this page for changes" without feed semantics**: skip this skill; the cronjob tool's `monitor` field accepts an http(s) URL directly.
- **One-off read of a feed or a site's latest posts, nothing to install**: the bundled `rss-feeds` skill (`scripts/feed.py read URL`); blogwatcher earns its install when you track many feeds with read/unread state.
- **Company/competitor tracking with analysis and citations**: prefer the `competitor-news-monitor` skill; blogwatcher is the lighter raw-feed layer it can sit on.
## Installation
Pick one method:
- **Go:** `go install github.com/JulienTant/blogwatcher-cli/cmd/blogwatcher-cli@latest`
- **Docker:** `docker run --rm -v blogwatcher-cli:/data ghcr.io/julientant/blogwatcher-cli`
- **Binary (Linux amd64):** `curl -sL https://github.com/JulienTant/blogwatcher-cli/releases/latest/download/blogwatcher-cli_linux_amd64.tar.gz | tar xz -C /usr/local/bin blogwatcher-cli`
- **Binary (Linux arm64):** `curl -sL https://github.com/JulienTant/blogwatcher-cli/releases/latest/download/blogwatcher-cli_linux_arm64.tar.gz | tar xz -C /usr/local/bin blogwatcher-cli`
- **Binary (macOS Apple Silicon):** `curl -sL https://github.com/JulienTant/blogwatcher-cli/releases/latest/download/blogwatcher-cli_darwin_arm64.tar.gz | tar xz -C /usr/local/bin blogwatcher-cli`
- **Binary (macOS Intel):** `curl -sL https://github.com/JulienTant/blogwatcher-cli/releases/latest/download/blogwatcher-cli_darwin_amd64.tar.gz | tar xz -C /usr/local/bin blogwatcher-cli`
All releases: https://github.com/JulienTant/blogwatcher-cli/releases
### Docker with persistent storage
By default the database lives at `~/.blogwatcher-cli/blogwatcher-cli.db`. In Docker this is lost on container restart. Use `BLOGWATCHER_DB` or a volume mount to persist it:
```bash
# Named volume (simplest)
docker run --rm -v blogwatcher-cli:/data -e BLOGWATCHER_DB=/data/blogwatcher-cli.db ghcr.io/julientant/blogwatcher-cli scan
# Host bind mount
docker run --rm -v /path/on/host:/data -e BLOGWATCHER_DB=/data/blogwatcher-cli.db ghcr.io/julientant/blogwatcher-cli scan
```
### Migrating from the original blogwatcher
If upgrading from `Hyaxia/blogwatcher`, move your database:
```bash
mv ~/.blogwatcher/blogwatcher.db ~/.blogwatcher-cli/blogwatcher-cli.db
```
The binary name changed from `blogwatcher` to `blogwatcher-cli`.
## Common Commands
### Managing blogs
- Add a blog: `blogwatcher-cli add "My Blog" https://example.com`
- Add with explicit feed: `blogwatcher-cli add "My Blog" https://example.com --feed-url https://example.com/feed.xml`
- Add with HTML scraping: `blogwatcher-cli add "My Blog" https://example.com --scrape-selector "article h2 a"`
- List tracked blogs: `blogwatcher-cli blogs`
- Remove a blog: `blogwatcher-cli remove "My Blog" --yes`
- Import from OPML: `blogwatcher-cli import subscriptions.opml`
### Scanning and reading
- Scan all blogs: `blogwatcher-cli scan`
- Scan one blog: `blogwatcher-cli scan "My Blog"`
- List unread articles: `blogwatcher-cli articles`
- List all articles: `blogwatcher-cli articles --all`
- Filter by blog: `blogwatcher-cli articles --blog "My Blog"`
- Filter by category: `blogwatcher-cli articles --category "Engineering"`
- Mark article read: `blogwatcher-cli read 1`
- Mark article unread: `blogwatcher-cli unread 1`
- Mark all read: `blogwatcher-cli read-all`
- Mark all read for a blog: `blogwatcher-cli read-all --blog "My Blog" --yes`
## Environment Variables
All flags can be set via environment variables with the `BLOGWATCHER_` prefix:
| Variable | Description |
|---|---|
| `BLOGWATCHER_DB` | Path to SQLite database file |
| `BLOGWATCHER_WORKERS` | Number of concurrent scan workers (default: 8) |
| `BLOGWATCHER_SILENT` | Only output "scan done" when scanning |
| `BLOGWATCHER_YES` | Skip confirmation prompts |
| `BLOGWATCHER_CATEGORY` | Default filter for articles by category |
## Example Output
```
$ blogwatcher-cli blogs
Tracked blogs (1):
xkcd
URL: https://xkcd.com
Feed: https://xkcd.com/atom.xml
Last scanned: 2026-04-03 10:30
```
```
$ blogwatcher-cli scan
Scanning 1 blog(s)...
xkcd
Source: RSS | Found: 4 | New: 4
Found 4 new article(s) total!
```
```
$ blogwatcher-cli articles
Unread articles (2):
[1] [new] Barrel - Part 13
Blog: xkcd
URL: https://xkcd.com/3095/
Published: 2026-04-02
Categories: Comics, Science
[2] [new] Volcano Fact
Blog: xkcd
URL: https://xkcd.com/3094/
Published: 2026-04-01
Categories: Comics
```
## Notes
- Auto-discovers RSS/Atom feeds from blog homepages when no `--feed-url` is provided.
- Falls back to HTML scraping if RSS fails and `--scrape-selector` is configured.
- Categories from RSS/Atom feeds are stored and can be used to filter articles.
- Import blogs in bulk from OPML files exported by Feedly, Inoreader, NewsBlur, etc.
- Database stored at `~/.blogwatcher-cli/blogwatcher-cli.db` by default (override with `--db` or `BLOGWATCHER_DB`).
- Use `blogwatcher-cli <command> --help` to discover all flags and options.
© JulienTant (fork of Hyaxia/blogwatcher) · MIT · NousResearch/hermes-agent