wigolo-watch
GitHub用于监控网页内容变化。支持创建、批量注册URL监听任务,通过CSS选择器限定差异范围,并可在检测到变更时通过SSRF防护的Webhook发送通知。采用惰性执行模型,需手动或自动触发检查。
触发场景
安装
npx skills add KnockOutEZ/wigolo --skill wigolo-watch -g -y
SKILL.md
Frontmatter
{
"name": "wigolo-watch",
"license": "AGPL-3.0-only",
"metadata": {
"author": "KnockOutEZ",
"version": "0.1.43-beta.2",
"homepage": "https:\/\/github.com\/KnockOutEZ\/wigolo",
"repository": "https:\/\/github.com\/KnockOutEZ\/wigolo"
},
"description": "Monitor a page for changes over time. Create lazy watch jobs on one or many URLs, list them, and check for changes on demand — with optional SSRF-guarded webhook delivery when a change is detected. Use when the user says \"monitor this page\", \"watch this URL for changes\", \"tell me when this updates\", \"track this changelog\", \"notify me if this changes\", or wants recurring change detection on web content.\n"
}
wigolo watch
Track a page over time. Register a watch job on a URL (or many), then check it to see whether the content changed since the last snapshot. Optionally deliver a webhook when a change fires.
Lazy execution model — there is no background daemon. A job's check runs when you call action: "check", or opportunistically when another tool runs and the job is overdue. Set realistic interval_seconds (minimum 60).
Quick Reference
// Create a single-URL watch (checks no more than once every 6 hours)
{ "action": "create", "url": "https://nodejs.org/en/blog", "interval_seconds": 21600 }
// Batch create across several URLs
{ "action": "create", "urls": ["https://a.example.com", "https://b.example.com"], "interval_seconds": 3600 }
// Scope the diff to a subtree
{ "action": "create", "url": "https://example.com/pricing", "interval_seconds": 86400, "selector": "#pricing-table" }
// Deliver a webhook on change (SSRF-guarded)
{ "action": "create", "url": "https://example.com/status", "interval_seconds": 300, "notification": "https://hooks.example.com/wigolo" }
// List all jobs
{ "action": "list" }
// Check one job now
{ "action": "check", "job_id": "job_abc123" }
// Pause / resume / delete
{ "action": "pause", "job_id": "job_abc123" }
{ "action": "resume", "job_id": "job_abc123" }
{ "action": "delete", "job_id": "job_abc123" }
Parameters
| Parameter | Type | Default | When to use |
|---|---|---|---|
action |
string | required | "create", "list", "check", "pause", "resume", "delete" |
url |
string | none | Single-URL create. Mutually exclusive with urls |
urls |
string[] | none | Batch create. Response carries jobs[] only |
interval_seconds |
number | none | Required for create. Minimum check interval (min 60) |
selector |
string | none | Create-only CSS selector to scope the diff to a subtree |
notification |
string | "inline" | "inline" (return on next check) or a webhook URL |
job_id |
string | none | Required for check, pause, resume, delete |
Single-URL create returns job (singular) plus jobs: [job] (legacy). Batch create returns jobs[] only.
How It Works
- create — registers the job and takes a baseline snapshot of the page (or the
selectorsubtree). - check — re-fetches, diffs against the last snapshot, and reports changed/unchanged. On change it advances the snapshot and, if a webhook is configured, delivers it.
- list / pause / resume / delete — manage the job set.
Webhook delivery is SSRF-guarded: the server validates the destination before posting, so a job cannot be pointed at internal or loopback addresses.
Anti-Patterns
- DON'T set
interval_secondsbelow 60 — the minimum is enforced. - DON'T expect checks to fire on their own — this is a lazy model; call
check(or rely on overdue opportunistic runs). - DON'T pass both
urlandurls— they are mutually exclusive.
When NOT to use wigolo-watch
- One-off comparison of two versions — use
diffinstead. - Bulk change detection across the whole cache on demand — use
cachewithcheck_changes: true.
See Also
- wigolo-diff — one-shot version comparison
- wigolo-cache — on-demand bulk change detection
- wigolo-fetch — the fetch each check runs under the hood
版本历史
- a15277b 当前 2026-07-19 08:59


