Normascope — compare your running UI to any reference
Catch the drift.
Compare your running app with a design or approved build, then spot unintended changes before your users do. It runs on your machine and never blocks a commit.
npx norma-scope initNode 18+ · no account · nothing to uninstall
Diff overlay · live preview
One line changed. Four pages moved.
Five characters, on a real site. The kind of change that passes review without a comment — and a blast radius nobody predicts by eye.
- max-w-6xl
+ max-w-5xl
Four of seven pages flagged. And three measured exactly 0.00% — a tool that cries wolf is worse than no tool, so the quiet rows matter as much as the loud ones.
- Try It12.73%
- Pull Requests9.71%
- Hero8.27%
- Commands0.73%
- Engine0.00%
- Articles0.00%
- Lab0.00%
Three commands, then it’s automatic
- 01
norma-scope initAnswer a few questions. It sets up the folder and a git hook.
- 02
norma-scope checkPhotographs your running app and scores every page you track.
- 03
open the reportSide-by-side pictures and one number per page. Send it to anyone.
One comment, edited in place
The GitHub Action runs the same comparison your laptop runs, then posts one sticky comment. It finds its own previous comment by a hidden marker and rewrites it — ten pushes leave one comment, not ten.
When a summary from main is available, the table gains a delta column: not “8.4%”, but “8.4%, +2.1% since main”.
Nothing turns red on its own. The job passes unless you ask for --strict. A score is information, not a verdict.
The full report rides along. Side-by-side images and diff overlays are attached as a workflow artifact.
Not on GitHub? norma-scope ci comment prints the same markdown to stdout — pipe it into any CI, or into Slack.
Full report + diff overlays attached as a workflow artifact
commit abc123fOne step in your workflow
with:
base-url: ${{ steps.deploy.outputs.preview-url }}
Drawn in GitHub’s own shape. A screenshot of a real pull request would carry somebody’s repository — the columns, the delta and the sticky behaviour are exactly what the Action posts.
Your coding agent cannot see
Agents ship frontends fast, and blind. They diff text, not pixels — so one finishes a UI task, declares it done, and has no way to know whether the thing it built looks anything like the thing it was asked for.
Normascope gives it a camera and a measuring tape — a number it can move, so it can tell whether its last edit helped. Free and local, the same engine the CLI runs.
The agent loop
Agent writes CSS → captures → compares → sees 25% → fixes → compares → sees 0%. It converges, because for the first time it has something to converge on.
Three walls every team hits, in roughly this order
None of them are limits we put there. They’re what a tool running entirely on one laptop physically cannot do.
Someone asks “is this new?”
Your run knows about today. It cannot tell you whether this page has been drifting for three weeks or broke an hour ago.
“First exceeded your threshold at a1b2c3 — 14 commits ago.”
Your designer asks to see it
The report is a file on your laptop. So you email it. Then you email the next one, and the one after that, and nobody is sure which is current.
A private link they open in a browser — no account, always the latest run.
The same page breaks again
You fix it, and two months later you fix something that feels familiar. Nothing anywhere connects the two.
“3rd time this page has regressed.”
Turn every run into shared visual memory.
Cloud keeps the history, gives your team a stable link, and shows when a page first started drifting. Join early access now and be first to use it when the hosted surface opens.
Join early access
Or see everything it addsFour things it will never do
It won't block your commit. Or your build, unless you explicitly ask it to.
It won't change anything. It reports. You decide.
It won't upload your screenshots by default. Cloud is opt-in when your team needs shared history.
It won't let an AI decide pass or fail. The score is pixels and geometry, always.
Try it on your next commit
Sixty seconds, no account, nothing to uninstall.
npx norma-scope init