deep dive
A redesign costs 6 tokens
Rote sends the model diffs of the page, not the page. So what happens when a site restyles everything? Nothing — and not because we detect it. The styling is thrown away one layer before the diff runs, so a redesign has nothing left to change.
Watch it happen
The production pipeline on three versions of one page — original, fully redesigned, and redesigned with a real new field hidden inside:

Step 1 · first look
~65 tokens
One grounded snapshot of the page. Paid once — this is the diff base.
Step 2 · full redesign
~6 tokens
New classes, fonts, colors on every element. The diff: “no observation changes.”
Step 3 · a real change
~11 tokens
A new required field, hidden inside another restyle. One diff line — the field.
How it's taken care of
Before anything is diffed, every page passes through a distiller that keeps what an agent needs and drops what a designer touches:
kept — what the agent acts on
dropped — what a redesign touches
page → distill (styling dropped here) → stable IDs → diff → planner
Each element's identity is a hash of what it is — role, name, position band — never how it looks and never its selectors. A restyled button is still the same button, so the diff has nothing to report and replay finds its target without hesitation.
Where the line is
“Cosmetic” is a spectrum. Here's the whole of it, and what each kind of change costs:
| the site changes… | rote's response | cost |
|---|---|---|
| Restyle — classes, CSS, colors, fonts | Invisible. The diff never sees styling. | ~6 tokens |
| Visual reordering | Same element identities; only order updates. | ~6 tokens |
| Fades & translucency | Still visible, still tracked. | ~6 tokens |
| Renamed labels or placeholders | Identity changes; resolution falls back to selectors. | a few diff lines |
| New wrapper layout | One bounded re-snapshot, then diffs resume. | one snapshot |
| Two identical controls appear | Refused, never guessed. Falls back to the plain agent. | run falls back |
The rule across every row: drift can cost tokens, but it can never make the agent act on a stale picture of the page. When the system isn't sure, it re-looks or hands off — it doesn't guess.
Try it yourself
No API key needed. The page HTML is inline in the script — edit the “redesign” and rerun your own drift:
git clone https://github.com/kedarvartak/rote && cd rote && npm i npx tsx scripts/demo/cosmetic-diff-demo.ts
Scope note: this page covers cosmetic drift. Structural drift — an input swapped for a textarea, a button disabled — is a different problem with its own planned defenses, tracked openly in the roadmap.