$npx -y skills add adityahimaone/hermes-agent-rtk-caveman --skill blogwatcherMonitor blogs and RSS/Atom feeds for updates using the blogwatcher-cli tool. Add blogs, scan for new articles, track read status, and filter by category.
| 1 | # Blogwatcher |
| 2 | |
| 3 | 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. |
| 4 | |
| 5 | ## Installation |
| 6 | |
| 7 | Pick one method: |
| 8 | |
| 9 | - **Go:** `go install github.com/JulienTant/blogwatcher-cli/cmd/blogwatcher-cli@latest` |
| 10 | - **Docker:** `docker run --rm -v blogwatcher-cli:/data ghcr.io/julientant/blogwatcher-cli` |
| 11 | - **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` |
| 12 | - **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` |
| 13 | - **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` |
| 14 | - **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` |
| 15 | |
| 16 | All releases: https://github.com/JulienTant/blogwatcher-cli/releases |
| 17 | |
| 18 | ### Docker with persistent storage |
| 19 | |
| 20 | 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: |
| 21 | |
| 22 | ```bash |
| 23 | # Named volume (simplest) |
| 24 | docker run --rm -v blogwatcher-cli:/data -e BLOGWATCHER_DB=/data/blogwatcher-cli.db ghcr.io/julientant/blogwatcher-cli scan |
| 25 | |
| 26 | # Host bind mount |
| 27 | docker run --rm -v /path/on/host:/data -e BLOGWATCHER_DB=/data/blogwatcher-cli.db ghcr.io/julientant/blogwatcher-cli scan |
| 28 | ``` |
| 29 | |
| 30 | ### Migrating from the original blogwatcher |
| 31 | |
| 32 | If upgrading from `Hyaxia/blogwatcher`, move your database: |
| 33 | |
| 34 | ```bash |
| 35 | mv ~/.blogwatcher/blogwatcher.db ~/.blogwatcher-cli/blogwatcher-cli.db |
| 36 | ``` |
| 37 | |
| 38 | The binary name changed from `blogwatcher` to `blogwatcher-cli`. |
| 39 | |
| 40 | ## Common Commands |
| 41 | |
| 42 | ### Managing blogs |
| 43 | |
| 44 | - Add a blog: `blogwatcher-cli add "My Blog" https://example.com` |
| 45 | - Add with explicit feed: `blogwatcher-cli add "My Blog" https://example.com --feed-url https://example.com/feed.xml` |
| 46 | - Add with HTML scraping: `blogwatcher-cli add "My Blog" https://example.com --scrape-selector "article h2 a"` |
| 47 | - List tracked blogs: `blogwatcher-cli blogs` |
| 48 | - Remove a blog: `blogwatcher-cli remove "My Blog" --yes` |
| 49 | - Import from OPML: `blogwatcher-cli import subscriptions.opml` |
| 50 | |
| 51 | ### Scanning and reading |
| 52 | |
| 53 | - Scan all blogs: `blogwatcher-cli scan` |
| 54 | - Scan one blog: `blogwatcher-cli scan "My Blog"` |
| 55 | - List unread articles: `blogwatcher-cli articles` |
| 56 | - List all articles: `blogwatcher-cli articles --all` |
| 57 | - Filter by blog: `blogwatcher-cli articles --blog "My Blog"` |
| 58 | - Filter by category: `blogwatcher-cli articles --category "Engineering"` |
| 59 | - Mark article read: `blogwatcher-cli read 1` |
| 60 | - Mark article unread: `blogwatcher-cli unread 1` |
| 61 | - Mark all read: `blogwatcher-cli read-all` |
| 62 | - Mark all read for a blog: `blogwatcher-cli read-all --blog "My Blog" --yes` |
| 63 | |
| 64 | ## Environment Variables |
| 65 | |
| 66 | All flags can be set via environment variables with the `BLOGWATCHER_` prefix: |
| 67 | |
| 68 | | Variable | Description | |
| 69 | |---|---| |
| 70 | | `BLOGWATCHER_DB` | Path to SQLite database file | |
| 71 | | `BLOGWATCHER_WORKERS` | Number of concurrent scan workers (default: 8) | |
| 72 | | `BLOGWATCHER_SILENT` | Only output "scan done" when scanning | |
| 73 | | `BLOGWATCHER_YES` | Skip confirmation prompts | |
| 74 | | `BLOGWATCHER_CATEGORY` | Default filter for articles by category | |
| 75 | |
| 76 | ## Example Output |
| 77 | |
| 78 | ``` |
| 79 | $ blogwatcher-cli blogs |
| 80 | Tracked blogs (1): |
| 81 | |
| 82 | xkcd |
| 83 | URL: https://xkcd.com |
| 84 | Feed: https://xkcd.com/atom.xml |
| 85 | Last scanned: 2026-04-03 10:30 |
| 86 | ``` |
| 87 | |
| 88 | ``` |
| 89 | $ blogwatcher-cli scan |
| 90 | Scanning 1 blog(s)... |
| 91 | |
| 92 | xkcd |
| 93 | Source: RSS | Found: 4 | New: 4 |
| 94 | |
| 95 | Found 4 new article(s) total! |
| 96 | ``` |
| 97 | |
| 98 | ``` |
| 99 | $ blogwatcher-cli articles |
| 100 | Unread articles (2): |
| 101 | |
| 102 | [1] [new] Barrel - Part 13 |
| 103 | Blog: xkcd |
| 104 | URL: https://xkcd.com/3095/ |
| 105 | Published: 2026-04-02 |
| 106 | Categories: Comics, Science |
| 107 | |
| 108 | [2] [new] Volcano Fact |
| 109 | Blog: xkcd |
| 110 | URL: https://xkcd.com/3094/ |
| 111 | Published: 2026-04-01 |
| 112 | Categories: Comics |
| 113 | ``` |
| 114 | |
| 115 | ## Notes |
| 116 | |
| 117 | - Auto-discovers RSS/Atom feeds from blog homepages when no `--feed-url` is provided. |
| 118 | - Falls back to HTML scraping if RSS fails and `--scrape-selector` is configured. |
| 119 | - Categories from RSS/Atom feeds are stored and can be used to filter articles. |
| 120 | - Import blogs in bulk from OPML files exported by Feedly, Inoreader, NewsBlur, etc. |
| 121 | - Database stored at `~ |