---
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."

**Assumes the Fullsy extension does the capturing.** Every before/after record is
captured by Fullsy in the user's own browser via the bridge below. Extension + Agent
Access required (see Preconditions).

## 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 hashes — but know what the bridge can and can't tell you. It
      gives you the NEW content (you just read the live page) and only the
      PRIOR *fingerprint*, not the prior *content*. So `getRecord` proves
      change / no-change, not *what* changed.
      - **Equal html hashes → provably unchanged.** Say so, move on.
      - **Different hashes → the page changed.** To state an *exact
        before→after diff*, you need the prior capture's CONTENT — available
        from a **downloaded prior case** (or a local snapshot). With it, quote
        the specific before/after of what the user cares about (price, terms,
        availability, claims).
      - **Without the old content**, report *that* it changed and describe the
        *current* state — but do NOT fabricate the "before." Mark it
        *changed · delta not reconstructable* and note the prior case is needed.
      - Dynamic pages differ every load (timestamps, ads, tokens); hash
        inequality alone is not a *meaningful* finding — judge materiality
        against what the user actually cares about.
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)`. Status is one of: *unchanged · changed
  (material) · changed (minor) · changed (delta unknown) · new · failed*.
- For each material change, quote the specific before→after **only when the
  prior content is available** (a downloaded case or local snapshot); when it
  isn't, describe the current state and mark the delta unreconstructable —
  never invent the "before."
- 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 a *material* change on hash inequality alone, never claim an
exact before→after without the prior content, and never invent a record id —
failed captures are listed as failed.
