watchd

Agents that watch the web

Small AI agents on your own Cloudflare account. Each runs on a schedule, reads the pages you point it at, and reports only what is new, under a hard spend cap.

Woven this week Example week · five agents · one row per hour, 00 to 23 UTC

Found something new: a long gold float Nothing new: a short tie-down Warp: no run

Weave trace

    Punch card

    Thread inspector

    Steps
    Cost

    Punch a schedule

    An agent's schedule is a cron line, five fields read like rows on a punched card. Punch the holes; watchd's one-minute tick fires when every row matches. Times are UTC.

    Minute
    Hour
    Day
    Month
    Weekday

    schedule 0 7 * * 1

      What a run writes

      flat-hunt Mon 07:00 UTC · 9 steps · $0.0088

      Three new listings under your limit

      1. Two bedrooms by the park, $2,250 a month. Fourth floor with a lift, available from the 1st. Listed yesterday evening.
      2. One bedroom with a balcony, $1,890 a month. Ten minutes' walk to the station, pets allowed, unfurnished.
      3. Two bedrooms, now $2,380, down from $2,550. The same flat as last week at a lower price. Its seen key includes the price, so a drop counts as new.
      Only listings not seen on earlier runs. Forty-one read, three reported, the rest already seen or over the limit.

      The same report lands on your dashboard, by email if you set one, and on a public page if you mark the agent public. A run with nothing new writes nothing, and nothing is sent.

      One spool a day

      Per run
      $0.05 reserved before it starts
      Per day
      $1.00, counted across every agent
      Used in the example day

      Each run reserves its budget before it is queued. If the day's thread would run out, the run is refused; if a run spends its own budget mid-loop, it stops. Model costs come from OpenRouter per call. Give watchd its own OpenRouter key with a credit limit as the outer backstop.

      Threads it can pull

      fetch_page
      A plain HTTP fetch turned into readable text. HTML, feeds, JSON.
      browse
      A real browser for JavaScript-heavy pages, returned as markdown.
      links
      Every link on a rendered page.
      web_search
      A web search when the agent does not know where to look.
      seen
      Remembers item IDs per agent, so it only reports what is new.

      Thread the loom

      git clone https://github.com/level09/watchd && cd watchd
      npm install && npx wrangler d1 create watchd   # paste the id into wrangler.jsonc
      npm run db:migrate:remote && npm run deploy
      npx wrangler secret put OPENROUTER_API_KEY
      npx wrangler secret put RUN_TOKEN

      Then create agents from the dashboard, or ask Claude Code over MCP:

      claude mcp add --transport http watchd https://watchd.<you>.workers.dev/mcp \
        --header "Authorization: Bearer $RUN_TOKEN"
      Deploy your own