agentsclimarketplace

Vision verify

Skill seldonframe/seldonframe/.claude/skills/vision-verify

Visually verify a rendered web page against a goal + rubric — screenshot it (reliable off-box render, NOT the flaky Chrome-MCP), then grade the pixels with an INDEPENDENT vision pass. Use for any UI/visual change before calling it done, or to confirm a fix landed on a live/preview page. Catches what verify-build + code review can't SEE: contrast, overlap, broken images, layout shift, duplicated elements.From its SKILL.md

Install
npx -y skills add seldonframe/seldonframe --skill vision-verify

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

4.9 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it

vision-verify — the visual gate

verify-build proves a change compiles and passes tests. It cannot prove the page looks right — code review reasons about JSX/CSS, it never sees the result. This skill closes that gap: render → screenshot → an independent visual grade against a rubric. It is the visual complement to verify-build, not a replacement — run both for UI-affecting work.

Proven 2026-07-05: caught a duplicate "Services" nav item on a live r1 site that unit tests, tsc, next build, AND two code reviews all missed — then confirmed the fix by re-screenshot. First bug on SF caught by seeing, not reasoning about code.

When to use

  • After ANY UI-affecting change, before "done" — especially landing/site render (hero, nav, sections), the dashboard shell, or anything themed.
  • To confirm a fix visually landed on a live/preview URL (the found → fix → confirm loop).

Steps

  1. Get a public URL to the page — a deployed /w/<slug>, the <slug>.app.seldonframe.com subdomain, or a Vercel preview URL. It must be publicly reachable (the renderer fetches it). If you just pushed a fix, first confirm the deploy is live: curl -s https://app.seldonframe.com/api/version → the sha should be your commit (else wait for the deploy).

  2. Render (from packages/crm), at desktop and — for anything responsive — mobile:

    node scripts/vision-shot.mjs <url> /tmp/vv-desktop.png 1280
    node scripts/vision-shot.mjs <url> /tmp/vv-mobile.png 390
    

    It cache-busts so a just-deployed change is captured fresh. Prints the saved path. (Set MICROLINK_API_KEY for higher rate limits; the free endpoint works without it, but can rate-limit on rapid retries — space them out.)

  3. Grade — independent (maker ≠ checker), on haiku — PINNED. Dispatch the vision-grader agent (Agent tool, subagent_type: "vision-grader" — its definition in .claude/agents/vision-grader.md pins model: haiku; do NOT pass a model override) — it Reads the PNG and grades it against the goal + a rubric, returning { pass: boolean, gaps: string[] }. Read-a-PNG→verdict is haiku work; a real session ran 4 graders on sonnet (~218k tokens — the session's biggest line item) purely because the model was left to dispatch-time habit. The pin lives in the agent definition so it can't drift. (If haiku ever provably misses what sonnet catches — run 10 known-good + 10 known-bad screenshots — change the pin there, on evidence, not per-dispatch.) Do NOT let the code's author grade its own pixels — a fresh grader sees only the artifact + the rubric, with no stake in the maker's reasoning. For a quick self-check inline, Read the PNG yourself — but a real gate uses a separate grader. Prefer a before/after DIFF grade when a baseline exists: hand the grader both screenshots and ask "what changed — is the change the requested one, and did anything regress?" A visual diff is more sensitive to regressions (the duplicate-nav class) and less subjective than an absolute grade.

  4. Act. Pass → done. Gaps → feed each gap back to the maker → re-render → re-grade until pass or a hard iteration cap (an objective stop, like /goal).

Rubric (adapt per surface)

Generic: renders with no broken images / empty sections; text is legible (contrast); nothing overlaps or overflows the viewport (no horizontal scroll); no duplicated nav/section elements; the specific change requested is visibly present; nothing is truncated mid-word in a jarring way.

Per-surface hints:

  • Hero: headline hierarchy clear; subhead + CTAs legible; any lead-form-in-hero renders; a set background sits BEHIND text with a legibility veil (never washing out the copy).
  • Nav: exactly one of each item (the duplicate-"Services" class of bug); wordmark + phone/CTA present.
  • Pricing / tables: columns aligned; numbers tabular; no clipped cells.
  • Dashboard shell: no sideways scroll; the summary reads before the detail.

Notes

  • The Chrome-MCP screenshot path is unreliable here (CDP clip.scale + backgrounded-tab 0-viewport) — use vision-shot.mjs.
  • Product version (next build): the same render+grade engine, server-side, becomes SeldonChat's "confirm the edit looks right before I say done" and a gate in the site-generation pipeline — the never-lies pillar made mechanical. Spec: docs/superpowers/specs/2026-07-05-vision-verify-spike.md.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most quality gates skills give in ~1.2k tokens

Counted across 1,524 of the 2,830 authors here whose files we hold, read 2026-09-06

  • Read full output and check exit codein 45 of 1524, across 40 files
  • Verify output confirms the claimin 44 of 1524, across 39 files
  • Identify the command that proves the claimin 43 of 1524, across 39 files
  • Execute the full verification commandin 36 of 1524, across 30 files
  • Produce a verification reportin 34 of 1524, across 18 files
  • Review git diff changesin 30 of 1524, across 16 files
  • Fix build failures immediatelyin 29 of 1524, across 9 files
  • Group findings by severityin 28 of 1524
  • State claim only with evidencein 27 of 1524, across 22 files
  • Verify regression tests with red-green cyclein 26 of 1524, across 22 files
  • Run the full test suitein 26 of 1524, across 25 files
  • Run test suite with coveragein 25 of 1524, across 10 files

Said here and by no other author read

  • obtain a public URL for the page
  • render screenshots at desktop and mobile widths
  • use the vision-shot script for rendering
  • dispatch the vision-grader agent for independent grading
  • use a before and after diff grade when possible
  • feed gaps back to the maker for iteration

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.