Changesonething.Provesnothingelsemoved.
Kane CLI records what a known-good app does in a real browser. When a coding agent edits it, LENS replays the neighboring flows — and blocks the stop if something nobody asked to touch moved anyway.
Everyoneaskswhetherthenewfeatureworks.
LENSanswersthescarierone.
What happens when the agent is up but wrong — and it changed a behavior you never asked it to? Seat counts. Billing math. A neighboring flow that still looks fine in the UI. Even a capable model still does this. LENS is the layer that catches it before the agent is allowed to finish.
Assertions keep the new behavior working.
Table stakes — every suite sells it.
LENS keeps the agent from shipping the unauthorized thing.
The differentiator — and the part that matters.
Resilienceateverylayer.
Six controls that turn a capable coding agent into one you can let finish — Kane for browser truth, LENS for everything you did not mean to change.
Kane is the truth engine
A real Chrome replays committed browser contracts. LENS does not mock the browser, screenshot-diff the UI, or trust the coding agent to mark itself done.
Semantic observations
Kane stores what the page actually showed — active members, billable seats, monthly total — not selectors or pixels. That is the state LENS compares.
Behavioral blast radius
git diff is mapped onto business flows. A change in shared money math is not a billing-only change — neighboring flows get replayed too.
Protected vs expected
SAME stays green. EXPECTED_CHANGE is the feature you asked for. UNEXPECTED_CHANGE is everything else — and it blocks the agent.
Stop hook is the gate
When Claude Code tries to finish, LENS runs. Red means the agent cannot stop. The Kane evidence is the message it has to act on.
Evidence, not vibes
Every unexpected delta links back to the Kane run that produced it. Flow, observable, known-good, candidate — checkable in a real browser.
Everystoprunsthroughthebrowser.
The failure handling is the product. A real Chrome decides whether protected behavior still matches the trusted build — not the coding agent that just edited it.
Baseline
On a known-good build, Kane replays the committed browser contracts and stores semantic observations. That file is the trusted behavior.
Change
A coding agent edits the app. LENS reads git diff, maps changed files onto business flows, and decides what has to be replayed.
Verify
Kane replays those flows in real Chrome. LENS compares each protected observable to the baseline: SAME, EXPECTED_CHANGE, or UNEXPECTED_CHANGE.
Block or ship
An unexpected delta blocks the Stop hook and feeds Kane evidence back to the agent. Zero unexpected deltas — and only then — is SAFE TO SHIP.
Samerequest.Oneagentchangestwothings.
We ask for annual billing with a 10% discount. The feature works. Then Kane replays member removal — and LENS finds billable_seats 4 → 5.
Feature tests only. Ship it.
- Annual discount works. The requested feature is green.
- Removing Maya still hides her. The UI looks fine.
- Billing still counts the removed seat. Nobody asserted that number.
Kane replayed the neighboring flow too.
- Annual billing is an expected change. That is allowed.
- Member-removal billable seats moved 4 → 5. Unexpected.
- The Stop hook blocks. Claude has to fix the seat math.
Read the code. Watch the gate.
Seatline is a small billing app. LENS is the verification layer around it. The failure and the recovery are real Kane runs in Chrome — no theater.
Built for the brief
Kane provides the browser truth. LENS protects everything you did not mean to change. The agent does not get to mark itself done.