---
name: watch-pages-with-fullsy
description: Re-capture a list of pages with Fullsy and report what changed since the last captures — prices, terms, claims — using capture-record fingerprints as change detection, with before/after records as evidence. Use when the user invokes /watch-pages-with-fullsy, wants pages monitored for changes, or asks "did X change" about a page they've captured before.
---

# Fullsy Watch — change detection with evidence

Re-capture a set of pages and tell the user what changed since last time,
with a before/after Capture Record pair for anything that did. The output is
not just "it changed" — it's "it changed, and here are the fingerprinted
records of both versions."

## Preconditions

Same bridge as /research-with-fullsy: browser control with JS execution in the
user's Chrome; `typeof window.fullsy === "object"` on any http(s) page. If
undefined, have the user turn on "Agents" in a Fullsy editor tab, then stop
until ready. If the toggle reads **"Agents: Pro"**, or a call returns
`{ok:false, error:'Fullsy Pro required …'}`, agent capture needs Fullsy Pro
(the 30-day trial counts) — point the user to getfullsy.com/pricing, have them
activate the key, then stop until ready. Never fake records to route around it.

## Bridge contract (summary)

- `await window.fullsy.captureUrl(url, {caseName})` → `{ok, capId}`; opens a
  visible tab, captures, closes it. One capture per 15 seconds; http(s) only.
  **Always pass the same short `caseName` for the whole errand** — captures
  file into one case file, separate from the user's own history.
- `await window.fullsy.getRecord(capId)` → `{ok, record}` once stored (poll;
  give up after ~6 tries / ~90s and mark the page "not captured" — never poll
  forever, a rare uncapturable page never lands).
  `record.integrity.html` is the sha-256 of the DOM snapshot;
  `record.integrity.frames` fingerprint the pixels.
- `await window.fullsy.list(50)` → recent captures with url + capturedAt —
  this is where prior records come from.
- Never call `window.fullsy.capture()` from your own tab (debugger stall);
  always `captureUrl`.

## Workflow

1. Determine the watchlist: URLs the user gives, or (if they say "same as
   last time") the distinct URLs of prior agent captures from `list(50)`.
2. For each URL:
   a. Find the most recent PRIOR record of the same URL via `list(50)`;
      note its id and `integrity.html`. None → this URL is NEW (baseline).
   b. `captureUrl(url)`, poll `getRecord` (interleave with the next URL's
      reading to absorb the rate limit).
   c. Compare: **equal html hashes = provably unchanged — say so and move
      on.** Different hashes = *possibly* changed: dynamic pages differ every
      load (timestamps, ads, csrf tokens), so hash inequality alone is not a
      finding. Read the live page text and compare against what the user
      cares about (prices, terms, availability, claims) to judge whether the
      change is meaningful, and say specifically what differs.
3. Consent: same rules as always — no logged-in pages without an explicit
   ask; more than ~10 URLs, confirm first.

## Deliverable

A watch report (markdown):

- Headline: N unchanged · N changed · N new · N failed.
- Table: `url | status | what changed | prior record id | new record id |
  prior hash (12) | new hash (12)`.
- For each meaningful change: a short before/after quote of the changed bit.
- Retention note when relevant: agent case files have their own shelf
  (separate from the user's captures), but old cases are evicted whole when
  the shelf fills. For evidence worth keeping long-term, tell the user to
  hit **Download case** in History — the zip is self-contained, keeps its
  fingerprint manifest, and on Fullsy Pro carries a readable report.html per
  page (the SEO and design reports styled like the app) with a case index.html.

Never report "changed" on hash inequality alone, and never invent a record
id — failed captures are listed as failed.
