← Blueprints

BLUEPRINT · page-change-watcher

Page change watcher

Watches a web page and tells you when it meaningfully changes. Most checks are free — it only reasons when something on the page is different. Ships pointed at the Anthropic newsroom; swap in any page you care about.

Runs
every hour
Leash
required

How it decides

  1. OBSERVE · source dom_scrape
  2. FILTER · gate fast_path_diff
  3. REASON · reason llm_reason · standard tier only when the gate fires
  4. ACT · act notify_webhook ●write_state

● = touches the outside world (leashed by default)

What it costs

Model only when the page changed · standard tier · ≤ $0.05/day.

Ceiling: budget_usd_per_day: 0.05

What you'll need

WEBHOOK_URL

A model key (Anthropic, OpenAI or xAI) in Settings.

Make it yours

Swap the URL/selector for any page you care about.

sources.page.url
https://www.anthropic.com/news
sources.page.selectors.headlines
h1, h2, h3

Full YAML

blueprints/page-change-watcher.yaml
# Most ticks are a free diff; the LLM only thinks when the
# page actually changed. Swap the URL/selector for any page you care about.
blueprint:
  id: page-change-watcher
  title: Page change watcher
  description: >-
    Watches a web page and tells you when it meaningfully changes. Most checks
    are free — it only reasons when something on the page is different.
    Ships pointed at the Anthropic newsroom; swap in any page you care about.
config:
  synth:
    name: Page watcher
    goal: Tell me when the page I'm watching meaningfully changes.
    schedule_seconds: 3600
  requires_credentials:
    - WEBHOOK_URL
  sources:
    - id: page
      primitive: dom_scrape
      config:
        url: https://www.anthropic.com/news
        selectors:
          headlines: "h1, h2, h3"
  fast_path:
    primitive: fast_path_diff
    inputs:
      current: $sources.page.headlines
      previous: $state.last_headlines
  reasoning:
    primitive: llm_reason
    triggered_by: fast_path
    model_tier: standard
    budget_usd_per_day: 0.05
    output_schema:
      is_meaningful: bool
      summary: string
      confidence: float
  actions:
    - if: "$reasoning.is_meaningful AND $reasoning.confidence > 0.6"
      primitive: notify_webhook
      config:
        url: $secrets.WEBHOOK_URL
        template: "[Page watcher] {summary}"
    - always: true
      primitive: write_state
      config:
        last_headlines: $sources.page.headlines
        checked_at: $tick.started_at

Install

In the control room

Blueprints → Page change watcher → Shadow, then Deploy.

To change something first (see Make it yours): View config, copy the JSON, and paste it into + Install a Synth.

With your AI

Ask: "Clone the page-change-watcher blueprint." It uses caedos_blueprints, then validates, shadows and deploys.

Related use case