Verification skills for Claude Code, Codex & Cursor

The antidote to “You’re absolutely right!”

Tired of your agent confidently saying the job is done, only to find it missed the mark again, and going around in circles correcting it? Spotter Round makes it prove the work before it tells you it’s finished.

$39. Every pack, now and later: $149.

Works with

  • Claude Code
  • Codex
  • Gemini CLI
  • Cursor
  • Windsurf
  • Aider

Fit check

Is this for you?

It’s for you if

  • You build websites or web apps with an AI coding agent and check its work by hand.
  • It has said a page was fixed, faster or live, and it wasn’t.
  • You want a pass or a fail you can read, not a confident sentence.

You’ll need

  • An AI coding agent that works on your project’s files: Claude Code, Codex, Cursor or Gemini CLI.
  • Node.js 18 or newer, plus Playwright and sharp in your project. Your agent can install them.
  • A site you can build and open in a browser, on any framework and any host.

Skip it if

  • You’re building a native phone app, or a back end with no web page to check.
  • Your project lives only inside a builder like Lovable or Bolt, not in files on your computer. What to do first

Sound familiar?

Has this ever happened to you?

Tap every one you’ve lived through.

Nothing yet? Lucky you.

Why it keeps happening

It’s grading its own homework.

The agent that made the change is the one telling you it worked, from the same context and with the same blind spots. It isn’t lying. It checked part of the page and reported on the whole page.

So you become the check. You open the page on your phone, find what it missed, explain it again, and wait. Three rounds later you’re doing the job you handed it, and wondering what else it called done.

Drag the handle

The fix

Make it prove the work.

Spotter Round is a small kit of skills your agent loads and scripts it runs before it tells you it’s done. You get a pass or a fail you can read, with a count of everything it checked, instead of a confident sentence.

  1. Checks, not promises

    Runnable scripts measure the layout, the pixels, the speed and the live site, and print what they looked at.

  2. Checks that can fail

    Every check ships a broken example it has to catch first, so a green result means something.

  3. Before and after it ships

    From the real build at real screen sizes to what the public actually gets after the deploy.

Watch it miss. Then watch it correct.

The same task, run twice. First on confidence. Then with one check fired first, and the aim corrected from where that shot landed.

A silent demonstration, shown as an agent conversation beside a paper shooting target on a night range; whichever side is acting is framed in brass, and the target is dimmed with a waiting note while the conversation runs. An agent is asked to fix a checkout bug and verify it. It answers “Fixed and verified. All checks passed,” but three rounds punch through the paper far outside the rings, circled and labeled “where it landed.” The user replies “You definitely missed,” and the target is stamped REPORTED HIT. The run restarts. This time the agent runs Skill(spotter-round:verification-protocol) and puts a single spotter round downrange first; it lands low and left of center and is circled as the spotter round. An arrow measures the difference back to the middle, labeled “correct from the difference.” The next four rounds land tightly grouped in the center of the target, which is stamped VERIFIED HIT. The agent reports that one check fired first and it corrected from where that shot landed, and the user replies “That’s perfect.”

Silent, 30 seconds, on a loop. Drag the rail to step through it, or slow it to half speed.

Who it’s for

Built for people who ship with agents.

For
Developers, freelancers and small studios who build websites and web apps with an AI coding agent (Claude Code, Codex, Cursor, Gemini CLI) and ship them to real users.
Best fit
Front-end work (marketing sites, landing pages, app screens), where an agent says “done” while the layout, the visuals, the speed or the live deploy is wrong.
Works with
Any framework and any host. The checks need Node and Playwright in your project.
Not for
Native mobile apps, or back-end services with no web page to check.

Every check here came from a real bug.

The skills, grouped by the job they do. Start with the one that fits the change you just made.

Explain it
  1. Deployment checklist

    Clipped

    Your agent says the layout passed. The sweep reads every line box and every
    edge.

    Stranded

    Deployment

    Your agent says the layout passed. The sweep reads every line box and every edge.

    Fits

    The page looks right

    A real build, at real screen sizes, in light and dark, with a clean browser console. No cut-off text, nothing spilling off the edge, and the design didn't move when nobody meant it to.

    • spotter-start
    • verification-protocol
    • layout-proof
    • visual-fidelity-gate
  2. Previous build
    This buildLargest element changed

    Faster, measured fairly

    Builds your previous version beside the new one, serves both the same way, and measures both. The two numbers can honestly be compared, and it tells you when they can't.

    • build-ab-harness
  3. /robots.txt Fetched twice

    • Plain request Old copy
    • Cache-busted Your build

    Verdict: stale. Purge the cache, don't redeploy.

    An old copy and a deploy that never landed need opposite fixes, so each gets its own verdict.

    The live site is the new build

    After the deploy, it checks what the public actually gets. Every address is fetched twice, so an old copy a cache is still handing out can't pass for the new build, on any host.

    • post-deploy-proof

What’s in the kit

Every skill, with its job in one line. Each one works on any framework and any host.

  • spotter-start

    Where to start

    Which check fits the change you just made.

  • verification-protocol Also free on its own

    The twelve-item checklist

    A real build, real screen sizes, both light and dark, and a clean browser console.

  • layout-proof

    Text and layout

    No cut-off text, nothing spilling off the screen — and the check isn't fooling itself.

  • visual-fidelity-gate

    Before and after pictures

    Proves the design didn't move: same pixels, three browsers, nothing jumping as the page loads.

  • build-ab-harness

    Speed, compared fairly

    Faster than last time, measured so the two runs can honestly be compared.

  • post-deploy-proof

    What the live site serves

    Every address fetched twice, so an old copy a cache is still handing out can't pass for the new build.

Where it lands, and what it proves.

One download: skills for Claude Code, the same instructions to paste into any tool that reads AGENTS.md, and checks that prove the build, the layout and the live site are what you think they are.

Your download, unzippedPlain folders
├── install.shCopies the skills into place. Never symlinks.
├── skills/One folder per skill
│ ├── spotter-start/SKILL.md: which check fits your change
│ ├── layout-proof/SKILL.md · scripts/
│ ├── post-deploy-proof/SKILL.md · scripts/served.mjs
│ └── …The rest, same shape: a SKILL.md, most with short scripts
├── examples/Two before/after pairs the pixel diff must catch
├── ci/Checks this pack itself must pass before a release ships
├── .claude-plugin/Claude Code plugin wiring
└── README.md LICENSE  CHANGELOG.md

What you download

A zip of plain folders. Each skill is a SKILL.md your agent reads, and most carry short, commented scripts it runs.

spotter-start is the router: it reads what you changed and names the one check that fits, so you never have to guess which skill to load.

Every check can fail on purpose.

A check that has never failed is a green light with extra steps. Each one here ships with a deliberately broken example it has to catch. Run that first: if the check calls the broken example fine, don't trust it on your real work either.

We ran them on our own checks first. They found three bugs in ours.

  1. Skipped silentlyNow skips loudly, and says not to release on a skip.
  2. Hung on a server portEvery step is time-limited; hanging counts as failing.
  3. Matched error wordingChecks for no crash trace, so rewording can't break it.
Show the commands and what they print

Run the broken examples

Shell
# run from the project you are checking, with Spotter Round unzipped at /path/to/spotter-roundnode /path/to/spotter-round/skills/layout-proof/scripts/orphans.mjs --selftest   # plants a known problem and must catch itnode /path/to/spotter-round/skills/visual-fidelity-gate/scripts/diff.mjs --dir /path/to/spotter-round/examples/negative-control-diff   # must go rednode /path/to/spotter-round/skills/post-deploy-proof/scripts/served.mjs --selftest   # must tell a stale copy from a missing deploy

We call these negative controls: a planted defect the check has to fail on. The first command builds a known stranded word and asserts the detector catches it; the second points the picture comparison at a pair that differs on purpose and must go red; the third serves a stale copy and a missing deploy and must tell them apart.

[ Gate ] visual-fidelity-gate //

# from the project you are auditingnode /path/to/spotter-round/skills/visual-fidelity-gate/scripts/diff.mjs --dir DIR
  1. Matching after screenshot found, passed
  2. Same dimensions, passed
  3. mean |Δ| at or under 1/255, passed

[ Result ]fidelity: ALL OK//

[ Control ] negative-control-diff //

# from the project you are auditingnode /path/to/spotter-round/skills/visual-fidelity-gate/scripts/diff.mjs --dir /path/to/spotter-round/examples/negative-control-diff
  1. card-320 · after-card-320.png found, passed
  2. card-320 · same dimensions, failed
  3. tint-320 · after-tint-320.png found, passed
  4. tint-320 · same dimensions, passed
  5. tint-320 · mean |Δ| at or under 1/255, failed

[ Result ]2 FAIL · exit 1//

[ Output ] excerpt //

FAIL card-320 SIZE MISMATCH 320×200 vs 320×256 — layout changedFAIL tint-320 mean |Δ| 15.40/255 > 12 pair(s) · worst mean 30.81/255 · threshold 12 FAIL

# expected: 2 FAIL, exit 1. If this reports clean, the gate is not measuring anything.

[ Range card ] // What we aimed for, what came back
  1. [ Shot 01 ]

    orphans.mjs --selftest

    Aimed: plant a known problem; the check must catch it

    ok detector: separates the twins: found 1 orphan, expect exactly 1

    ok detector: flags the right one: "eeee", expect "eeee"

    ok (1) the in-page control runs and passes in both passes

    33 cases behaved as designed

    Landed where it was aimed // exit 0

  2. [ Shot 02 ]

    diff.mjs --dir …/negative-control-diff

    Aimed: planted differences; the check must go red

    FAIL card-320 SIZE MISMATCH 320×200 vs 320×256 — layout changed (resized diff: mean 30.81)

    FAIL tint-320 mean |Δ| 15.40/255 > 1 ≥16 off 29.43% ≥32 off 0.00%

    2 pair(s) · worst mean 30.81/255 · threshold 1

    2 FAIL

    Landed where it was aimed // exit 1

  3. [ Shot 03 ]

    served.mjs --selftest

    Aimed: a stale copy and a missing deploy; the check must tell them apart

    ok a stale cached copy is caught (expected stale, got stale)

    ok a behind deploy is caught (expected origin, got origin)

    ok a stale cache and a behind deploy get different verdicts

    28 cases behaved as designed

    Landed where it was aimed // exit 0

The check that has never failed is the one to distrust.

Works with the agent you already use.

The skills are plain text files your agent reads. The scripts are short, commented, and run only on your computer.

  • Claude Code
  • Codex
  • Gemini CLI
  • Cursor
  • Windsurf
  • Aider
Shell
claude --plugin-dir /path/to/spotter-round

The written skills need nothing at all. The scripts need Node 18 or newer, plus two packages in the project you're checking:

Shell
npm i -D playwright sharp && npx playwright install chromium webkit firefox

Everything the scripts touch

A local web server
On a port you choose
A browser with no window
Takes screenshots and compares them
Lighthouse
Only on addresses you hand it. npx fetches it from npm unless your project has it
A temporary copy of your project
Builds your previous version, then deletes the copy. Never saves, uploads or changes your branches.
Your live site
Only the addresses you name, each fetched plain and with a cache-busting query
The network
No tracking, no license check, nothing phoning home. The scripts visit only the addresses you give them, and npm for Lighthouse.

Short scripts with comments, and nothing compressed into a blob. A product that says “don't trust a report you can't read” has to be readable itself.

One payment. Yours forever.

Spotter Round

$39.

  • One company, team or solo operator
  • As many computers and projects as you like
  • Change and adapt it freely
  • Keep the version you bought, forever
  • No subscription
  • Every future version of Spotter Round included
  • 14-day refund, no questions

Please don't resell it or share it outside your company.

All-Access Bundle

Every pack, now and later.

Spotter Round, the Agent Setup Pack, the Email Pack, the WordPress Pack, the App Stack Pack and the Campaign Tracker Pack, plus every pack added after them, each with every future version.

$149.

The six separately: $234

Get every pack — $149

Questions before you buy.

Which pack do I need?

Spotter Round if an agent writes your web pages: it proves the work before and after it ships. The Agent Setup Pack if you use more than one agent or more than one tool, or hand agents API keys. The Email Pack if you send HTML email. The WordPress Pack if you build on WordPress with Bricks. The App Stack Pack if you build web apps on Cloudflare Pages, Supabase or Stripe, or use SureContact or OttoKit on any site, WordPress included. The Campaign Tracker Pack if you run ads and want short links, leads, purchases and cost per lead tracked from the server, on any site behind Cloudflare. The All-Access Bundle is every pack, now and later, for less than the six together.

Does this work with Codex, Cursor, Gemini CLI, Aider, Windsurf?

Yes. The skills are plain text files and the checks are plain Node scripts, so any agent can run them. Claude Code loads the skills from its skills folder. Codex, Cursor and the rest take a skill pasted into your repository's AGENTS.md, and Gemini CLI reads that file once its settings name it.

Does it send anything anywhere?

No tracking, no license check, no analytics, nothing phoning home. The scripts only visit addresses you type, with one exception: the speed comparison runs Lighthouse through npx, which fetches it from the npm registry unless your project already has it. You can confirm that yourself: the scripts are short enough to read.

Claude Code ships /verify. Why buy this?

Different jobs, and they work together. /verify is a built-in, prompt-based skill that builds and runs your app “without falling back to tests or type checks”, and it runs only when you invoke it. Anthropic's own docs say that working out how to launch your app “gets unreliable” once a project needs a database, an env file, a graphical session or a multi-step build. This is runnable scripts instead of a prompt: the same checks every time, a pass or fail you can wire into CI, a broken example proving each check can fail, and things /verify doesn't mention at all — before-and-after pictures, three-browser checks, fair speed comparisons, and proof that the live site serves the build you made.

Where did the email and agent-setup skills go?

Into their own packs, so each one can do a single job well: the Agent Setup Pack, the Email Pack and the App Stack Pack. The skills kept their names, and each pack ships its own checks and the broken examples that prove them.

I bought Spotter Round before the split. What do I get?

More than you paid for: everyone who bought Spotter Round before version 2 gets the All-Access Bundle, every pack now and every pack we add later.

What do updates look like?

Numbered downloads with a list of what changed. Every future version of Spotter Round is included at no charge, so you never pay for a new version, and you are never forced to update.

Can I use it for client work?

Yes — that's what it's for. One company covers every project that company delivers.

Refunds?

Fourteen days, no questions. A product about checking things that argued with you over a refund would be a poor advertisement for itself.

Stop taking its word for it.

Sold separately

Five more packs. One job or stack each.

Each pack is sold on its own and ships its own checks, the same way this one does.

Agent Setup Pack$39
Email Pack$39
WordPress Pack$39
App Stack Pack$39
Campaign Tracker Pack$39
All-Access Bundle$149

Agent Setup Pack

$39

One set of rules, proven to reach every coding agent, several agents on one project without landing work on each other's branches, and API keys handed over without entering the chat.

1 / 6