competitor-watch
Skill1 starsChanged 29 days agoMITView on GitHub
Monitor public sources (GitHub releases, RSS/Atom feeds, changelog and pricing pages, public JSON APIs) for changes, diff them against the last snapshot, and produce a plain-language technical brief of what a competitor actually shipped. Use when the user asks to track competitors, watch a changelog or release feed, get a "what changed" digest, or periodically summarize feature updates from public web sources. Only ever reads public, no-login pages — never authenticated or private interfaces.
8 other projects use a version of this.
Adopted by
Most recently taken up by
- TrueScrape/truescrapetheir own version, first seen Nov 8, 2026
- heypastel/pastel-outbound-systemtheir own version, first seen Nov 8, 2026
- CatCatUncle/openworkbuddytheir own version, first seen Nov 5, 2026
- claude-world/cf-browsertheir own version, first seen Nov 1, 2026
- legioncodeinc/littlebird-skillstheir own version, first seen Oct 20, 2026
- calven-ai/marketing-as-codetheir own version, first seen Oct 7, 2026
Other versions8 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 8
- CatCatUncle/openworkbuddy★ 398same name
- calven-ai/marketing-as-code★ 10same name
- claude-world/cf-browser★ 9same name
- legioncodeinc/littlebird-skills★ 8same name
- roeibh/morning-briefing-claude-plugin★ 3same name
- heypastel/pastel-outbound-system★ 2same name
- localoy-ai/localstack★ 2same name
- TrueScrape/truescrape★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 5 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 19
Do not use it for anything that requires logging in, an API key, or scraping a mobile app's private backend.
- Very specific: line 51
Every source entry takes an optional "name" used in the report, and an optional "notes" string for your own context.
- Distinctive: line 59
After the script runs, don't dump the diff.
- Distinctive: line 71
Respect robots/rate limits: Default per-request delay is applied.
- Distinctive: line 72
No private or gated data: No financial accounts, no logged-in dashboards, no "just find a way in".
- Distinctive: line 73
Attribute: Every reported change carries its URL.
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
competitor-watch
Turn "what has competitor X done lately?" into a repeatable, diffable job. You point it at the public pages a company already publishes for humans — release feeds, changelogs, docs, pricing tables, status pages — and it snapshots them, detects what changed since last run, and hands you the raw material for a feature brief.
It does the boring, deterministic part (fetch, snapshot, diff, cite). You write the brief.
When to use this skill
- "Track these 5 competitors and tell me what shipped this week."
- "Watch the changelog of X and ping me when pricing changes."
- "Give me a feature-diff brief on Y vs. last month."
- Any recurring "what's new in <project/company>" request.
Do not use it for anything that requires logging in, an API key, or scraping a mobile app's private backend. See Guardrails.
How it works
- Describe sources in a JSON config (see
examples/sources.example.json). - Fetch + snapshot each source with
scripts/watch.py. First run records a baseline; later runs diff against it. - Read the report the script writes (markdown). New/changed items are called out with links and dates.
- You synthesize the brief: group the raw changes into themes, decide what actually matters, write the 3-sentence "so what".
The script is deliberately dumb and honest: it never invents a change it didn't see, and it always carries the source URL + timestamp so the brief is auditable.
Running it
# first run — creates the baseline, report shows everything as "new"
python3 scripts/watch.py --config examples/sources.example.json --state .cw-state --out brief.md
# later runs — only shows what changed since the snapshot
python3 scripts/watch.py --config my-sources.json --state .cw-state --out brief.mdZero third-party dependencies — standard library only (urllib, xml, difflib). Runs anywhere Python 3.8+ does.
Source types
type | Fields | What it watches |
github_releases | repo (e.g. owner/name) | Release/tag feed via the public GitHub REST API |
rss | url | Any RSS 2.0 or Atom feed |
page | url | A changelog / pricing / docs page — hashes the visible text and shows a line diff |
json | url, optional label | A public, no-auth JSON endpoint — shows a key-level diff |
Every source entry takes an optional "name" used in the report, and an optional "notes" string for your own context.
Output
brief.md contains, per source: a status line (NEW ITEMS, CHANGED, UNCHANGED, or ERROR), the new items with title/date/URL, and for page/JSON sources a unified diff of what actually changed. The raw snapshot lives in --state as JSON so runs are reproducible and diffable in git if you want.
Writing the brief (the part that matters)
After the script runs, don't dump the diff. Do this:
- Triage — mark each change as feature / pricing / docs-only / noise.
- Cluster — roll related items under one heading ("they shipped an agent runtime").
- So what — one line per cluster on why it matters to your product, not theirs.
- Cite — link the source item for every claim. If the script didn't see it, don't claim it.
See references/brief-template.md for a fill-in structure.
Guardrails
- Public only. Everything this skill touches must be reachable without a login and without an API key. If a page needs auth, a session cookie, or you'd have to reverse-engineer an app's backend to get it — stop. That's out of scope and often against terms of service.
- Respect robots/rate limits. Default per-request delay is applied; keep source lists small and poll no more than daily.
- No private or gated data. No financial accounts, no logged-in dashboards, no "just find a way in".
- Attribute. Every reported change carries its URL. The brief is only as good as its citations.
Files
scripts/watch.py— fetch / snapshot / diff engine (stdlib only)examples/sources.example.json— a ready-to-edit configreferences/brief-template.md— the brief structure to fill in
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

