Watch a list of blogs or web pages for new content and report changes. Runs automatically on every heartbeat. Trigger on: watch blog, blogwatcher, überwache diese Seite, check for new articles, new posts, blog updates.
Scanned 9/12/2026
Install to Claude Code
npx -y skills add gkvoelkl/python-selma --skill blogwatcher --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Blogwatcher?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/gkvoelkl-blogwatcher)More formats (shields.io, HTML) on the badges page.
---
name: blogwatcher
description: "Watch a list of blogs or web pages for new content and report changes. Runs automatically on every heartbeat. Trigger on: watch blog, blogwatcher, überwache diese Seite, check for new articles, new posts, blog updates."
user-invocable: true
---
# Blogwatcher
## Overview
Blogwatcher checks a list of URLs at every heartbeat for new content.
It stores a content hash per URL in a state file and reports changes since the last check.
## Configuration
Blogs to watch are listed in `skills/blogwatcher/blogs.md` in the workspace.
Format — one URL per line, optional label after a space:
```
https://example.com/blog Example Blog
https://news.ycombinator.com Hacker News
```
Blank lines and lines starting with `#` are ignored.
## State file
State is stored in `skills/blogwatcher/state.json` in the workspace.
Format:
```json
{
"https://example.com/blog": {
"last_checked": "2026-01-01T12:00:00",
"content_hash": "a1b2c3d4"
}
}
```
## Steps (manual trigger or heartbeat)
1. **Read config** — `read` `skills/blogwatcher/blogs.md`.
If the file does not exist, reply with setup instructions (see Setup below).
2. **Read state** — `read` `skills/blogwatcher/state.json`.
If missing, start with an empty state object `{}`.
3. **Check each URL** — for each URL in blogs.md:
a. `web_fetch` the URL.
b. Compute a short hash: take the first 4000 characters, count words, build a fingerprint string `len:<chars>|words:<n>|head:<first100chars>`.
c. Compare with stored hash.
d. Mark as **new** if hash differs or URL is not in state yet.
4. **Write state** — update `last_checked` and `content_hash` for every checked URL, then `write` `skills/blogwatcher/state.json`.
5. **Report**:
- If new content found → list each changed URL with label and a 1-sentence summary of what changed.
- If nothing changed → reply `HEARTBEAT_OK` (heartbeat mode) or "No new content since last check." (manual).
- If a URL could not be fetched → note it but continue with the others.
## Heartbeat
On every heartbeat run, execute the full Steps 1–5 above silently.
Only send a message to the user when at least one URL has new content.
Otherwise reply `HEARTBEAT_OK`.
## Setup instructions (when blogs.md is missing)
Reply:
"Blogwatcher is not configured yet. Please create `skills/blogwatcher/blogs.md` in your workspace and add one URL per line:
```
https://your-blog.com/feed My Blog
https://example.com/news Example News
```
Then trigger blogwatcher again or wait for the next heartbeat."
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!