visual-self-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited visual-self-review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Read this whole file before you write your review. This skill exists because of one specific, repeated failure: you build a screen, screenshot it, glance at it, decide "looks like an app → done", and hand over work with defects so obvious a human spots them in two seconds. You are fully capable of seeing those defects. You just don't look — you pattern-match. This skill replaces the glance with a forced serial scan.
The rule that makes everything else work:
You do not get to judge a screen until you have transcribed it. Describe first. Judge second. A holistic "looks good" is banned as a first move — it is the exact reflex that ships broken UI.
A redesigned task app ("Cadence") was screenshotted and declared good enough to end the task. When then asked to "review the issues", the obvious ones were still missed. Here is what a two-second human look caught and the model didn't:
None of these need design taste. They need looking. That is all this skill enforces.
You review pixels that actually rendered, never the source you wrote, never your intent. The code can be perfect and the screen still broken (data, layout, async, theme, hit-testing). Capture the actual current state:
preview_start if needed, then preview_screenshot for visuals and preview_snapshot for the accessibility/DOM tree. Use preview_resize for the responsive + dark-mode passes. Use preview_console_logs / preview_network for errors. (Per project rules: never npm run dev via Bash — use the preview launch config.)xcrun simctl io booted screenshot /tmp/vsr.png (or Device → Screenshot, or the SwiftUI preview canvas) and then Read the PNG back so you actually see it. A green build is NOT a render check — SwiftUI layout, Auto Layout, dynamic type, dark mode and hit areas all fail at runtime with a clean compile.If you cannot render it, say so plainly and do not claim it works. "Compiles" / "types pass" / "should render" are not verification — they never catch CSS, layout, hit-testing, data, or browser/OS-specific bugs.
For each screenshot, write out a literal inventory. This is serial, not holistic. You are forbidden from writing any verdict until this is done.
Only after this inventory exists may you evaluate.
Frame it adversarially: assume there are at least three defects and your job is to find them. "I found none" almost always means you didn't look — re-scan the regions you skimmed. Walk every class:
| # | Defect class | What you're hunting | The tell |
|---|---|---|---|
| 1 | Missing / blank content | interactive element with no label, icon with no glyph, image that didn't load, undefined/NaN/null rendered | a box where text/content should be |
| 2 | Dead space | large empty bands, no page title/heading, orphaned whitespace, content not filling its container | "is this region supposed to be empty?" |
| 3 | Duplicate / garbage data | repeated rows, placeholder/lorem left in, fake seed data shown as real | reading the list in full |
| 4 | Misalignment | edges not aligned, off-grid elements, ragged margins, uneven gutters | trace vertical/horizontal edges |
| 5 | Inconsistent spacing / sizing | unequal padding between siblings, mismatched card heights, random gaps | compare sibling to sibling |
| 6 | Typography | mixed scales, weights, fonts; orphan/widow lines; ALL-CAPS inconsistency | compare every text size to its neighbours |
| 7 | Truncation / overflow | clipped text, "…", content escaping its box, horizontal scrollbars | check long-content + narrow-width shots |
| 8 | Contrast / legibility | low-contrast text, text on busy gradient, invisible-until-hover affordances | squint test; check the gradient areas |
| 9 | Broken states | empty/loading/error states unstyled or showing raw errors | force each state |
| 10 | Overlap / z-index | elements on top of each other, cut-off shadows, modal behind content | look at layering |
| 11 | Alignment to intent | does it match what was asked? missing requested feature/section? | re-read the original request |
| 12 | Performance / jank | see Step 4 | measure, don't guess |
For each defect: state where (region + the transcribed text near it), what's wrong, and severity (blocker / obvious-to-user / polish). Blockers and obvious-to-user defects MUST be fixed, not noted.
If you touched anything interactive, measure responsiveness — don't eyeball it once and move on.
preview_console_logs for errors/warnings and preview_network for slow/failed/duplicated requests. Watch for re-render storms (the same request firing repeatedly = the data-duplication bug above is often also a perf bug). Exercise the interaction (preview_click, scroll) and confirm it's smooth. Look for layout thrash, unthrottled scroll/resize handlers, unmemoised lists, animating width/height/top instead of transform.body recomputation, missing id/Equatable, heavy work on the main thread, or images decoded on-scroll.Every blocker and obvious-to-user defect: fix it, then re-capture the screenshot and run Steps 2–3 again on the new image. A fix you didn't re-screenshot is a fix you didn't verify. Loop until a clean pass.
"Looks done" is not done. A clean compile is not a render. A glance is not a review. If a human would spot it in two seconds, missing it is the failure this skill exists to prevent — there is no excuse, because you can see it too. You just have to look, one element at a time.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.