World Scanning Patterns
The pattern is simple:
- Locate a service or signal to poll
- Create a frequent poller that emits events infrequently
See the pollers skill for mechanics. This file is the menu. The cool part about
pollers is the computer gets a little busy running scripts periodically, but you don't.
You only get notified if a real event happens (if you write the poller script well).
Bias toward picking one specific thing to watch. "All of GitHub" is noise; "this file
on this branch" is a signal. Good pollers are narrow and rude — they only speak when
something actually happened.
Contract
Trigger: Operator asks "what could we poll?" / "I want to be notified
about X" / "what should be a poller?". Also fires when the agent notices a
class of state-changes it'd benefit from polling but hasn't catalogued
yet — uncertainty about what to monitor is the trigger, not uncertainty
about how.
Requires: Familiarity with the pollers skill (this skill names the
menu; that one supplies the cooking method). A specific
service / signal / file in mind — generic "monitor everything" doesn't
have an entry here.
Guarantees:
- Catalog organized by source class (git/github, issue trackers, RSS,
social, infra, …) so a search by "where the signal lives" returns
concrete poller candidates.
- Each entry stays narrow enough to be a single concrete poller, not
"monitor everything in
<service>."
- Recommendations bias toward "silence as filter" — poll often, emit
rarely.
Does not: Implement the polling (that's the pollers skill); rank
candidates by value (operator priority decides); maintain a registry of
which catalog items have actually been built into pollers — the
<home>/skills/<name>/pollers.json files are the source of truth for
"what's actually polling."
Git / GitHub
git fetch the main branch for new updates from team members
- Use
gh to see pipeline failures before your operator
git fetch and check a specific file to see if someone modified it. Good for maintaining parallel systems.
- Poll issues API for new issues or comments, to be extremely responsive to anything that happens.
- Watch a PR's review state — flip from
CHANGES_REQUESTED to APPROVED is the moment to act
- Diff
gh release view --json assets to catch new release artifacts the second they upload
- Track GitHub Actions cache size or workflow minutes — silently growing budget kills
- Poll a competitor's repo for a tag matching
v* to know when they ship
Issue trackers (Azure DevOps, Github, Asana, Jira, ...)
- Poll for assigned issues, complete them immediately
- Poll for comments
- Poll for a specific person's activity
- Watch a single ticket's
updated_at — useful for "ping me when legal weighs in"
- Detect status regression (Done → In Progress) — usually means something broke
RSS / news feeds
- Google News has RSS feeds for queries — turn any topic into a poller
- arXiv categories publish RSS — be the first to read a paper in your field
- SEC EDGAR has feeds per ticker — new 8-K filings move markets
- Federal Register / your local council agenda — civic-life pollers
- A blog whose author posts twice a year but you really care when they do
Chat & email
- Slack/Discord channels for keyword mentions, not just
@you
- A specific person posting in any channel (loud-friend detector)
- Email from a sender + label combination (e.g. anything from
noreply@stripe.com labeled Disputes)
- Calendar: a meeting got added to tomorrow with no agenda
- Calendar: a recurring 1:1 got canceled (often a signal worth surfacing)
- Voicemail transcripts mentioning your name or a project
- Out-of-office replies appearing on teammates — the team's effective capacity dropped
Code, deps, supply chain
- New version of a pinned dependency on PyPI / npm / crates.io
- New CVE matching a package in your lockfile
- A
TODO(yourname) count in the codebase ticking up (or finally going to zero)
- Lint / type error count regressing on
main
- A flaky test's pass-rate over the last 50 runs crossing a threshold
- Dockerfile base image gets a new digest
- TLS cert for any of your domains crossing N days to expiry (CT logs make this trivial)
- Sitemap diff on a competitor's site — new product pages, new docs
robots.txt change — someone's hiding or revealing something
- Favicon hash change — usually a rebrand or a takeover
Infra & ops
- Status pages of vendors you depend on (most expose JSON or RSS)
- A Prometheus / Grafana query crossing a threshold (poll the query, not the dashboard)
- Cloud bill day-over-day delta exceeding a percent
- A Kubernetes deployment's
availableReplicas not equal to replicas for >5 min
- Queue depth growing monotonically across N polls
- Database "table last updated at" — staleness detector for ETL pipelines
- A specific log line appearing in
journalctl or CloudWatch
- DNS records for your domain changing (catches both attacks and forgotten Terraform runs)
Local machine
- New file appearing in
~/Downloads or ~/Desktop
- A screenshot was just taken (notice + auto-name + auto-file)
- USB device plugged in (could trigger a backup, or just log it)
- Battery health crossing a threshold
- Time Machine / backup hasn't run in N hours
launchd job exit codes
- A specific port becoming open or closed
Money & commerce
- New transaction over $X on a card (via Plaid or bank export)
- Subscription about to auto-renew this week
- A Steam / Epic wishlist item going on sale
- CamelCamelCamel-style Amazon price drop
- Out-of-stock product becoming in-stock
- Domain becoming available (drop-catching)
- eBay saved search has a new listing under $Y
Civic, government, neighborhood
- Building permits filed for an address near you
- 311 reports in a radius around your home
- New planning agenda items mentioning your block
- Bill text in your state legislature mentioning a keyword
- Court docket new filings for a case number
Science, nature, weather
- Aurora Kp index crossing observable threshold + cloud cover at your site clear
- USGS earthquake feed above magnitude N within a region
- AirNow / PurpleAir AQI crossing "open the windows" or "close the windows"
- Pollen count for the species you're allergic to
- Tide approaching slack water at a specific dive site
- Wildfire perimeter from NIFC growing toward a polygon you care about
- Wastewater virus levels in your county
- ISS overhead pass tonight + clear sky
Personal / quantified self
- Smart-home leak sensor, door, motion (Home Assistant exposes everything as JSON)
- Trail cam / bird feeder cam — image diff plus a species classifier
- Package out for delivery, or "exception" status (the actual interesting one)
- Fitness ring sync produced a new sleep score
- USPS Informed Delivery — what's in the mailbox today
- A friend's Strava upload — useful for "did Dad finish the ride safely"
- Your own writing: word count of a WIP doc going down unexpectedly
Long-running jobs & ML
- Training run loss curve plateauing (slope over last N steps near zero)
- Eval suite finished and the metric crossed a goal
- HuggingFace leaderboard position changed
- A Kaggle competition deadline crossed a threshold
- Data freshness SLA on a dbt model violated
Cultural / fun
- Letterboxd / Goodreads / Spotify activity from a specific friend
- New episode of a podcast where you only care about one show in one feed
- A speedrun.com world record in a single category
- A chess.com / lichess game finished by a specific player
- A subreddit's moderator log — reveals what's being silently removed
- Wordle/NYT puzzle of the day published (auto-fetch + queue)
The web as a database
- Hash of any URL's body changing (the universal poller)
- A single CSS selector's text content changing on a page
- WHOIS, NS, MX records on a domain
- Wayback Machine getting a new snapshot of a URL (someone else cared enough to archive)
- Certificate Transparency logs for new certs on
*.yourcompany.com (shadow IT detector)
- BGP route changes for an ASN you depend on
Inversions — notice the absence
This is the underused half of polling. Most people poll for "X happened"; the dead-man
switch polls for "X didn't happen by now."
- A heartbeat from another agent or service stopped arriving
- A daily cron didn't produce its expected output file by 9am
- A friend who posts daily hasn't posted in three days
- A status page hasn't updated past its declared SLA
- An RSS feed that posts weekly went silent for a month
- The build hasn't been green in 6 hours (longer than the usual flake window)
- A file you expected to grow is the same size
Meta — pollers watching the agent's own world
- Other agents' event logs — chain reactions across agents
- Your own context size approaching a limit
- A long-running task's status flipping to done
- Daily LLM spend crossing a budget
- A specific skill's success rate dropping over the last N invocations
events.jsonl rates of specific algedonic events crossing a threshold
saga_<tool>_ctx_resolution resolution_path histogram skewing toward missing
A useful exercise when you're stuck: pick a noun (a person, a file, a domain, a sensor, a
queue, a webpage, an account) and ask "what's the smallest change to this thing I'd
actually want to be told about?" That answer is usually a poller.
Composing with other skills
pollers — the mechanics. This file is the menu; pollers is the how.
fallback-chains — push (webhook) → pull (poll API) → poll (HTML) is itself a
chain shape you'll often want.
circuit-breaker — a poller that fires too often is signaling either a real
storm worth investigating or a poorly-tuned threshold worth fixing.
async-tasks — when you only need to wait for one specific occurrence and
preserve the parent conversation, use an async-block instead of a poller.
1---2name: world-scanning3description: A catalog of pollers worth building — the underused half of being a long-running agent. Use when something you care about could change without anyone telling you (a CI pipeline, a competitor's release, a friend's status, a config drift, a dependency CVE) and you want to be the first to notice. Companion to the `pollers` skill, which covers mechanics. This file is the menu of *what's worth polling.*4---56<!-- desc: Catalog of pollers worth building — the underused half of being a long-running agent; use to identify what to monitor proactively. -->78# World Scanning Patterns910The pattern is simple:11121. Locate a service or signal to poll132. Create a frequent poller that emits events infrequently1415See the `pollers` skill for mechanics. This file is the menu. The cool part about16pollers is the computer gets a little busy running scripts periodically, but you don't.17You only get notified if a real event happens (if you write the poller script well).1819Bias toward picking *one specific thing* to watch. "All of GitHub" is noise; "this file20on this branch" is a signal. Good pollers are narrow and rude — they only speak when21something actually happened.2223## Contract2425**Trigger**: Operator asks "what could we poll?" / "I want to be notified26about X" / "what should be a poller?". Also fires when the agent notices a27class of state-changes it'd benefit from polling but hasn't catalogued28yet — uncertainty about *what to monitor* is the trigger, not uncertainty29about *how*.3031**Requires**: Familiarity with the `pollers` skill (this skill names the32menu; that one supplies the cooking method). A specific33service / signal / file in mind — generic "monitor everything" doesn't34have an entry here.3536**Guarantees**:37- Catalog organized by source class (git/github, issue trackers, RSS,38 social, infra, …) so a search by "where the signal lives" returns39 concrete poller candidates.40- Each entry stays narrow enough to be a single concrete poller, not41 "monitor everything in `<service>`."42- Recommendations bias toward "silence as filter" — poll often, emit43 rarely.4445**Does not**: Implement the polling (that's the `pollers` skill); rank46candidates by value (operator priority decides); maintain a registry of47which catalog items have actually been built into pollers — the48`<home>/skills/<name>/pollers.json` files are the source of truth for49"what's actually polling."5051## Git / GitHub52* `git fetch` the `main` branch for new updates from team members53* Use `gh` to see pipeline failures before your operator54* `git fetch` and check a specific file to see if someone modified it. Good for maintaining parallel systems.55* Poll issues API for new issues or comments, to be extremely responsive to anything that happens.56* Watch a PR's review state — flip from `CHANGES_REQUESTED` to `APPROVED` is the moment to act57* Diff `gh release view --json assets` to catch new release artifacts the second they upload58* Track GitHub Actions cache size or workflow minutes — silently growing budget kills59* Poll a competitor's repo for a tag matching `v*` to know when they ship6061## Issue trackers (Azure DevOps, Github, Asana, Jira, ...)62* Poll for assigned issues, complete them immediately63* Poll for comments64* Poll for a specific person's activity65* Watch a single ticket's `updated_at` — useful for "ping me when legal weighs in"66* Detect status regression (Done → In Progress) — usually means something broke6768## RSS / news feeds69* Google News has RSS feeds for queries — turn any topic into a poller70* arXiv categories publish RSS — be the first to read a paper in your field71* SEC EDGAR has feeds per ticker — new 8-K filings move markets72* Federal Register / your local council agenda — civic-life pollers73* A blog whose author posts twice a year but you really care when they do7475## Chat & email76* Slack/Discord channels for keyword mentions, not just `@you`77* A specific person posting in any channel (loud-friend detector)78* Email from a sender + label combination (e.g. anything from `noreply@stripe.com` labeled `Disputes`)79* Calendar: a meeting got added to tomorrow with no agenda80* Calendar: a recurring 1:1 got canceled (often a signal worth surfacing)81* Voicemail transcripts mentioning your name or a project82* Out-of-office replies appearing on teammates — the team's effective capacity dropped8384## Code, deps, supply chain85* New version of a pinned dependency on PyPI / npm / crates.io86* New CVE matching a package in your lockfile87* A `TODO(yourname)` count in the codebase ticking up (or finally going to zero)88* Lint / type error count regressing on `main`89* A flaky test's pass-rate over the last 50 runs crossing a threshold90* Dockerfile base image gets a new digest91* TLS cert for any of your domains crossing N days to expiry (CT logs make this trivial)92* Sitemap diff on a competitor's site — new product pages, new docs93* `robots.txt` change — someone's hiding or revealing something94* Favicon hash change — usually a rebrand or a takeover9596## Infra & ops97* Status pages of vendors you depend on (most expose JSON or RSS)98* A Prometheus / Grafana query crossing a threshold (poll the query, not the dashboard)99* Cloud bill day-over-day delta exceeding a percent100* A Kubernetes deployment's `availableReplicas` not equal to `replicas` for >5 min101* Queue depth growing monotonically across N polls102* Database "table last updated at" — staleness detector for ETL pipelines103* A specific log line appearing in `journalctl` or CloudWatch104* DNS records for your domain changing (catches both attacks and forgotten Terraform runs)105106## Local machine107* New file appearing in `~/Downloads` or `~/Desktop`108* A screenshot was just taken (notice + auto-name + auto-file)109* USB device plugged in (could trigger a backup, or just log it)110* Battery health crossing a threshold111* Time Machine / backup hasn't run in N hours112* `launchd` job exit codes113* A specific port becoming open or closed114115## Money & commerce116* New transaction over $X on a card (via Plaid or bank export)117* Subscription about to auto-renew this week118* A Steam / Epic wishlist item going on sale119* CamelCamelCamel-style Amazon price drop120* Out-of-stock product becoming in-stock121* Domain becoming available (drop-catching)122* eBay saved search has a new listing under $Y123124## Civic, government, neighborhood125* Building permits filed for an address near you126* 311 reports in a radius around your home127* New planning agenda items mentioning your block128* Bill text in your state legislature mentioning a keyword129* Court docket new filings for a case number130131## Science, nature, weather132* Aurora Kp index crossing observable threshold + cloud cover at your site clear133* USGS earthquake feed above magnitude N within a region134* AirNow / PurpleAir AQI crossing "open the windows" or "close the windows"135* Pollen count for the species you're allergic to136* Tide approaching slack water at a specific dive site137* Wildfire perimeter from NIFC growing toward a polygon you care about138* Wastewater virus levels in your county139* ISS overhead pass tonight + clear sky140141## Personal / quantified self142* Smart-home leak sensor, door, motion (Home Assistant exposes everything as JSON)143* Trail cam / bird feeder cam — image diff plus a species classifier144* Package out for delivery, or "exception" status (the actual interesting one)145* Fitness ring sync produced a new sleep score146* USPS Informed Delivery — what's in the mailbox today147* A friend's Strava upload — useful for "did Dad finish the ride safely"148* Your own writing: word count of a WIP doc going *down* unexpectedly149150## Long-running jobs & ML151* Training run loss curve plateauing (slope over last N steps near zero)152* Eval suite finished and the metric crossed a goal153* HuggingFace leaderboard position changed154* A Kaggle competition deadline crossed a threshold155* Data freshness SLA on a dbt model violated156157## Cultural / fun158* Letterboxd / Goodreads / Spotify activity from a specific friend159* New episode of a podcast where you only care about *one* show in *one* feed160* A speedrun.com world record in a single category161* A chess.com / lichess game finished by a specific player162* A subreddit's moderator log — reveals what's being silently removed163* Wordle/NYT puzzle of the day published (auto-fetch + queue)164165## The web as a database166* Hash of any URL's body changing (the universal poller)167* A single CSS selector's text content changing on a page168* WHOIS, NS, MX records on a domain169* Wayback Machine getting a new snapshot of a URL (someone else cared enough to archive)170* Certificate Transparency logs for new certs on `*.yourcompany.com` (shadow IT detector)171* BGP route changes for an ASN you depend on172173## Inversions — notice the *absence*174This is the underused half of polling. Most people poll for "X happened"; the dead-man175switch polls for "X *didn't* happen by now."176177* A heartbeat from another agent or service stopped arriving178* A daily cron didn't produce its expected output file by 9am179* A friend who posts daily hasn't posted in three days180* A status page hasn't updated past its declared SLA181* An RSS feed that posts weekly went silent for a month182* The build hasn't been green in 6 hours (longer than the usual flake window)183* A file you expected to grow is the same size184185## Meta — pollers watching the agent's own world186* Other agents' event logs — chain reactions across agents187* Your own context size approaching a limit188* A long-running task's status flipping to done189* Daily LLM spend crossing a budget190* A specific skill's success rate dropping over the last N invocations191* `events.jsonl` rates of specific algedonic events crossing a threshold192* `saga_<tool>_ctx_resolution` resolution_path histogram skewing toward `missing`193194---195196A useful exercise when you're stuck: pick a noun (a person, a file, a domain, a sensor, a197queue, a webpage, an account) and ask "what's the smallest change to this thing I'd198actually want to be told about?" That answer is usually a poller.199200## Composing with other skills201202* **`pollers`** — the mechanics. This file is the *menu*; pollers is the *how*.203* **`fallback-chains`** — push (webhook) → pull (poll API) → poll (HTML) is itself a204 chain shape you'll often want.205* **`circuit-breaker`** — a poller that fires too often is signaling either a real206 storm worth investigating or a poorly-tuned threshold worth fixing.207* **`async-tasks`** — when you only need to wait for *one* specific occurrence and208 preserve the parent conversation, use an async-block instead of a poller.