rote

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:

Terminal demo: a full cosmetic redesign produces the diff “no observation changes” (~6 tokens); a hidden real change surfaces as one diff line (~11 tokens).

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

rolenametagdepthinteractivechecked

dropped — what a redesign touches

classCSScolorsfontsspacinganimation

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 responsecost
Restyle — classes, CSS, colors, fontsInvisible. The diff never sees styling.~6 tokens
Visual reorderingSame element identities; only order updates.~6 tokens
Fades & translucencyStill visible, still tracked.~6 tokens
Renamed labels or placeholdersIdentity changes; resolution falls back to selectors.a few diff lines
New wrapper layoutOne bounded re-snapshot, then diffs resume.one snapshot
Two identical controls appearRefused, 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.