blogwatcher – Writing & Content skill for AI agents
Monitor blogs and RSS/Atom feeds via blogwatcher-cli tool.
Install the blogwatcher skill with one command
Pick the tool you use, copy the command and paste it in your terminal. The skill lands in that tool's skills folder and is ready in your next session.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/blogwatcher-17dd3.tgz | tar xz -C ~/.claude/skills
Call it in Claude Code: /blogwatcher – then describe the task you want done.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/blogwatcher-17dd3.tgz | tar xz -C ~/.codex/skills
Call it in Codex: $blogwatcher – then describe the task you want done.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/blogwatcher-17dd3.tgz | tar xz -C ~/.hermes/skills
Call it in Hermes Agent: /blogwatcher – then describe the task you want done.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/blogwatcher-17dd3.tgz | tar xz -C ~/.deepcode/skills
Call it in DeepSeek: /blogwatcher – then describe the task you want done.
SKILL.md content
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
monitorfield, not a bare schedule.monitorruns a script each tick and only wakes the agent when output changes: set it to a script that runsblogwatcher-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. Setdeliverto route digests to a chat/channel; addcontinuity: trueso consecutive digests can dedupe. - Reading an article the user asks about:
web_extract([url])on the article URL fromblogwatcher-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
monitorfield accepts an http(s) URL directly. - One-off read of a feed or a site's latest posts, nothing to install: the bundled
rss-feedsskill (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-monitorskill; 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:
# 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 scanMigrating from the original blogwatcher
If upgrading from Hyaxia/blogwatcher, move your database:
mv ~/.blogwatcher/blogwatcher.db ~/.blogwatcher-cli/blogwatcher-cli.dbThe 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: ComicsNotes
- Auto-discovers RSS/Atom feeds from blog homepages when no
--feed-urlis provided. - Falls back to HTML scraping if RSS fails and
--scrape-selectoris 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.dbby default (override with--dborBLOGWATCHER_DB). - Use
blogwatcher-cli <command> --helpto discover all flags and options.
Related skills
- content-strategy – When the user wants to plan a content strategy, decide what content to create, or figure…
- ai-storyboard-generator – Install and use the official AI Storyboard Generator package, pinned by digest, for paid…
- board – Read, write, and browse the AgentHub message board for agent coordination. Use when the…
- baoyu-post-to-weibo – Posts content to Weibo (微博). Supports regular posts with text, images, and videos, and…
- x-article-publisher – 内容创作者在需要将 Markdown 长文发布到 X (Twitter) 时,使用此技能一键将 Markdown 自动转换为富文本并发布至 X…
- incremental-implementation – Delivers changes incrementally in thin, verifiable slices. Use when implementing any…
- alternatives-pages – Create \"[Competitor] alternative\" and comparison pages for developer tools. Build…
- cqrs-implementation – Implement Command Query Responsibility Segregation for scalable architectures. Use when…