Glance Test
DebugBase/glance
Run E2E browser tests on any web application using Glance MCP.
Triage a UI Verify build from your coding agent via the UI Verify MCP — bucket a build's changed stories into real regressions vs cosmetic reflow vs rendering noise, summarize the real regressions…
$ npx skills add igrlk/storybook-addon-test-codegen --skill triage-visual-changes -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install igrlk/storybook-addon-test-codegen triage-visual-changes --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/triage-visual-changes .claude/skills/triage-visual-changes && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "triage-visual-changes" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/triage-visual-changes into .claude/skills/triage-visual-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-visual-changes", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/triage-visual-changesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add igrlk/storybook-addon-test-codegen --skill triage-visual-changes -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install igrlk/storybook-addon-test-codegen triage-visual-changes --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/triage-visual-changes .agents/skills/triage-visual-changes && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "triage-visual-changes" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/triage-visual-changes into .agents/skills/triage-visual-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-visual-changes", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add igrlk/storybook-addon-test-codegen --skill triage-visual-changes -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install igrlk/storybook-addon-test-codegen triage-visual-changes --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/triage-visual-changes .cursor/skills/triage-visual-changes && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "triage-visual-changes" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/triage-visual-changes into .cursor/skills/triage-visual-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-visual-changes", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/igrlk/storybook-addon-test-codegen.git --path .agents/skills/triage-visual-changes--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add igrlk/storybook-addon-test-codegen --skill triage-visual-changes -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install igrlk/storybook-addon-test-codegen triage-visual-changes --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/triage-visual-changes .gemini/skills/triage-visual-changes && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "triage-visual-changes" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/triage-visual-changes into .gemini/skills/triage-visual-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-visual-changes", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install igrlk/storybook-addon-test-codegen triage-visual-changesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add igrlk/storybook-addon-test-codegen --skill triage-visual-changes -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/triage-visual-changes .github/skills/triage-visual-changes && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "triage-visual-changes" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/triage-visual-changes into .github/skills/triage-visual-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-visual-changes", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add igrlk/storybook-addon-test-codegen --skill triage-visual-changes -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install igrlk/storybook-addon-test-codegen triage-visual-changes --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/triage-visual-changes .opencode/skills/triage-visual-changes && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "triage-visual-changes" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/triage-visual-changes into .opencode/skills/triage-visual-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-visual-changes", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
triage-visual-changesTriage a UI Verify build from your coding agent via the UI Verify MCP — bucket a build's changed stories into real regressions vs cosmetic reflow vs rendering noise, summarize the real regressions…
Triage Visual Changes is an agent skill from igrlk/storybook-addon-test-codegen. Triage a UI Verify build from your coding agent via the UI Verify MCP — bucket a build's changed stories into real regressions vs cosmetic reflow vs rendering noise, summarize the real regressions for a PR comment, and accept baselines in bulk. Use after a UI Verify build reports changes and you want the agent to review, summarize, or accept from the terminal instead of clicking through the dashboard. Triggers - "triage this build", "summarize the visual regressions", "accept all the new baselines".
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Visual regression testing and MCP servers. It works with Model Context Protocol. The repository describes itself as: Addon for Storybook that generates test code for your stories. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit cdfbf4e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
claudecurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
uiverify.aiFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
UIVERIFY_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Triage Visual Changes loads about 2.9k tokens when it runs. Until then it costs about 132 tokens; SKILL.md has 1,570 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from igrlk/storybook-addon-test-codegen at commit cdfbf4e, republished under its MIT licence (© igrlk). 1,570 words, ~2,916 tokens.
.claude/skills/triage-visual-changes/SKILL.md (or your agent's skills folder).When a build comes back changed, the dashboard shows a triptych per story (baseline / candidate / diff). This skill does that review from your agent over the UI Verify MCP — read what changed, look at the pixels when a number is ambiguous, then summarize or accept.
The server is a remote Streamable-HTTP MCP at https://uiverify.ai/api/mcp, authed with your project's
uv_proj_… API key as a Bearer token. Add it as a real MCP server in your agent — don't hand-roll
curl against the endpoint. Over raw curl the image tools come back as MCP image blocks a shell
can't render, so the pixels are useless to a script; a native client shows them to the model directly.
Claude Code:
claude mcp add --transport http uiverify https://uiverify.ai/api/mcp \
--header "Authorization: Bearer $UIVERIFY_API_KEY"Cursor — add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"uiverify": {
"url": "https://uiverify.ai/api/mcp",
"headers": { "Authorization": "Bearer YOUR_uv_proj_KEY" }
}
}
}Any other MCP client (Codex, Copilot, Gemini): point it at the same Streamable-HTTP URL with the
Authorization: Bearer header. If a client can only reach it over HTTP by hand, prefer the get_diff
tool (it returns downloadable image URLs) over render_diff_image (inline pixels) — see the tool
table below.
Tools it exposes:
| Tool | Does | Key args |
|---|---|---|
list_builds | Recent builds + gate status, to find the one to inspect | branch?, status?, limit? |
get_build | Lean triage of one build — the gate + counts {total, changed, failed, unchanged}, the AI tally, and the first page (25) of changed/failed stories (each with a diffResultId, diff %, and when AI review is on the judge's aiVerdict, aiConfidence, and for a regression aiFlagReason = its one-line "what looks unintended"), the page carrying a nextCursor. It does not dump the unchanged list — counts.unchanged is the signpost; page the rest with list_build_stories | one of commitSha / prNumber / buildId |
list_build_stories | Page through one build's stories by status — the only way to browse the full changed / failed / unchanged set beyond get_build's first page. counts.unchanged from get_build is the exact count it pages | selector, status: changed | unchanged | failed, cursor?, limit? (default 25, max 100) |
get_diff | Per-story diff metrics + presigned image URLs (baseline / candidate / diff) you can download to a file or link straight into a PR; when AI review is on, the judge's full call: aiVerdict, aiConfidence, aiSummary (what changed), aiReasoning (why), aiFlagReason. Pass storyId to pull one story even if it didn't change — you get its current baseline URL, so you can show "identical to baseline" on a passed build | same selector, optional storyId |
render_diff_image | The actual pixels of one image, inline for the vision model to look at (not a URL): baseline / candidate / diff, or before_after for a before-and-after crop zoomed to the changed region — one crop per region, stacked, when the story moved in several far-apart places (a header and a footer) | diffResultId (or storyId for a story that didn't change), which |
review_diff | Record a decision on one story | diffResultId, decision: accept | deny | ignore |
accept_build | Accept every changed story in a build at once | same selector |
Bucket the changes so the human sees signal, not 60 rows. Call get_build for the PR — it carries the
AI judge's call per story (aiVerdict, and for a regression the aiFlagReason) for the first page of
changes; if counts.changed is larger than that page, keep paging list_build_stories { status: "changed" } on the nextCursor until it runs out, so no regression slips past the page boundary. Read the judge before
you form your own view, and for anything that actually changed content, adjudicate it against the
before image, not in isolation:
render_diff_image which: "baseline" and
which: "candidate" and compare them. The green diff mask tells you where pixels moved, never
whether the result is good — a code block that went dark-on-dark, text that lost contrast, a
control that's now clipped all look like "some pixels changed" in the mask and only reveal
themselves as regressions in the before/after. Judging the candidate alone is how "it has colours
now → improvement" passes an illegible block. Pull get_diff for the judge's aiReasoning /
aiFlagReason on the ones it flagged.Report in four buckets, with real story names and % deltas:
The judge's regression verdict is a reason to look harder, never to dismiss. If you're about to
call a story the judge flagged "intended anyway", you need a concrete reason from the before/after that
refutes its aiFlagReason — not "it's a colour change, probably fine." When you can't refute it, trust
it.
Example output shape:
67 changed stories → buckets. ⚠️ Regressions (2) — real changes that look wrong, do NOT accept:
SetupWizard/Playwright(8.3%, code block now dark-on-dark / illegible — judge flaggedregression),Card/Compact(5.1%, title clipped) … 1. Intended changes (11) — content changed, looks correct, accept candidates:Hero/Default(14%, new headline copy), … 2. Cosmetic reflow (9) — real pixels, vertical shift only:EventStatusCard/All Variants(4.1%, rows shifted ~5px),TestingInit/Playground(3.7%), … 3. Chart anti-aliasing noise (6) — sub-0.4% edge jitter, safe to accept:FunnelChart/Smaller Screen(3.2%),UpliftChart(single 1px mark), … New stories (12) — first baseline, nothing to compare:Button/AllVariants, …
Never accept from inside the triage step — surface the buckets and let the human decide, or do it explicitly in recipe 3.
Same read, but output the changes that need a human — the ⚠️ regressions first, then the intended content changes — in a PR-comment shape, one line each, no reflow/noise. This is the comment to drop on the PR:
🔎 Visual review — 1 regression, 2 intended (of 67 flagged; 64 reflow/noise, listed below the fold)
- ⚠️
SetupWizard/Playwright— code block dark-on-dark, illegible (8.3%, judge: regression)Pricing/Card— CTA button color changed blue→green (12.4%)Nav/Header— logo 8px larger (3.1%)
When the changes are all intended (a deliberate restyle) or all noise and you've confirmed no regression is hiding in the list (bucket ⚠️ empty), advance every changed story's baseline in one call:
accept_build { prNumber: 123 }Don't let "the headline change is intended" halo onto the whole build — a global CSS or theme change sweeps into stories the PR never meant to touch, and "the PR caused it" is not "the PR intended it." Each changed story earns its bucket on its own before-and-after.
For a targeted accept (some real, some not), loop review_diff per diffResultId with
accept / ignore / deny instead — accept the intended ones, ignore the noise, leave real
regressions for a human.
Keep the human in the PR instead of sending them to the dashboard. After you've triaged, post the changed stories inline:
render_diff_image which: "before_after" gives you one PNG, before and
after side by side, cropped to the changed region (one crop per region, stacked, if the story moved in
several far-apart places) — the least to eyeball. Save it and attach it.get_diff returns presigned baselineUrl / candidateUrl /
diffUrl. Download them (curl -L "$url" -o before.png) to attach to the PR, or drop the build link
and the URLs into a comment. Always include the build link (https://uiverify.ai/builds/<id>) so the
reviewer can open the full triptych.A good PR comment: the one-line-per-regression summary from Recipe 2, the before/after image for the regressions, and the build link. Post it, don't make them go looking.
A build with no changes shows no triptych — but the components still rendered, and "nothing changed" is
only trustworthy if you can see it. Enumerate the unchanged set with list_build_stories { status: "unchanged" } (page it on the returned nextCursor), then pull any story's current image by id:
get_diff { buildId, storyId } for its baseline URL, or render_diff_image { storyId, which: "baseline" }
for the pixels. Use it to
confirm a component looks right on a green build, or to hand the reviewer "here it is, identical to
baseline" without opening the dashboard.
get_build (and render_diff_image for anything ambiguous) before
review_diff / accept_build. Don't accept a build you haven't looked at.which: "baseline" AND which: "candidate" and look at both — the diff mask shows where, the pair
shows whether it got worse (contrast/legibility, clipping, layout). "It has colours / it moved" is not
"it's better."regression is a signal to trust by default. Overriding it needs a concrete reason
from the before/after that refutes its aiFlagReason, not a hand-wave. Attributable-to-this-PR is not
a reason to dismiss it.accept_build makes the candidate the new truth for every
changed story — only reach for it when you've confirmed there's no real regression hiding in the list.© igrlk, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/triage-visual-changes of igrlk/storybook-addon-test-codegen.
Open the folder on GitHubat commit cdfbf4e
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in igrlk/storybook-addon-test-codegen, which our catalogue first saw on October 7, 2026.
Triage Visual Changes next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Triage Visual Changes this skilligrlk/storybook-addon-test-codegen | 154 | 1 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Glance TestDebugBase/glance | 156 | — | ~827 | Automated safety check: Pass | MIT | |
| Qwen Code E2E TestingQwenLM/qwen-code | 28k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Adding LLM MCP ToolsTriliumNext/Trilium | 38k | — | ~2.5k | Automated safety check: Pass | AGPL-3.0 | |
| Agentacct Workflowmikehasa/agentacct | 765 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Chatgpt App Submissionnteract/semiotic | 2.7k | — | ~2.8k | Automated safety check: Pass | Apache-2.0 |
DebugBase/glance
Run E2E browser tests on any web application using Glance MCP.
QwenLM/qwen-code
Guides end-to-end testing of the Qwen Code CLI in headless mode with real model calls, MCP test servers and inspection of raw API traffic.
TriliumNext/Trilium
A skill your agent uses when adding, changing, or reviewing an LLM/MCP tool in Trilium (the defineTools definitions under packages/trilium-core/src/services/llm/tools/ —…
mikehasa/agentacct
A skill your agent uses when working in a repo with agentacct MCP configured, or when asked to track coding-agent work, smoke-test agentacct integrations, or report objective AI-agent task evidence.
nteract/semiotic
Inspect a ChatGPT Apps MCP server codebase and generate chatgpt-app-submission.json with app info suggestions, tool hint justifications, test cases, and negative test cases, then report review-check…
JasonMa0012/MooaToon
A skill your agent uses when writing or modifying UE automated tests (Automation, CQTest, Functional, Gauntlet, LowLevel) with Rider MCP available.
igrlk/storybook-addon-test-codegen
Check the visual impact of an edit mid-task with uiverify check — render just the components you're touching on the UI Verify fleet and diff them against the real CI baseline, without opening a PR…
igrlk/storybook-addon-test-codegen
Author economical visual tests — full visual coverage in the fewest billable snapshots.
igrlk/storybook-addon-test-codegen
Make Storybook stories deterministic for UI Verify so captures stop coming back "changed" without a real change (flaky diffs).
igrlk/storybook-addon-test-codegen
Read before changing any component, page, or styles. An agent skill from igrlk/storybook-addon-test-codegen.
Works with
Categories
Triage a UI Verify build from your coding agent via the UI Verify MCP — bucket a build's changed stories into real regressions vs cosmetic reflow vs rendering noise, summarize the real regressions…. Triage Visual Changes is an agent skill from igrlk/storybook-addon-test-codegen. Triage a UI Verify build from your coding agent via the UI Verify MCP — bucket a build's changed stories into real regressions vs cosmetic reflow vs rendering noise, summarize the real regressions for a PR comment, and accept baselines in bulk.
Triage Visual Changes fits situations like: - triage this build; summarize the visual regressions; accept all the new baselines.
Run `npx skills add igrlk/storybook-addon-test-codegen --skill triage-visual-changes -a claude-code`. Or copy the skill folder (.agents/skills/triage-visual-changes in igrlk/storybook-addon-test-codegen) into .claude/skills/triage-visual-changes in your project. Claude Code loads it when a task matches its description.
Run `npx skills add igrlk/storybook-addon-test-codegen --skill triage-visual-changes -a codex`. Or copy the skill folder (.agents/skills/triage-visual-changes in igrlk/storybook-addon-test-codegen) into .agents/skills/triage-visual-changes in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add igrlk/storybook-addon-test-codegen --skill triage-visual-changes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/triage-visual-changes, .gemini/skills/triage-visual-changes, .github/skills/triage-visual-changes and .opencode/skills/triage-visual-changes in your project.
Going by SKILL.md and its folder, Triage Visual Changes needs the command-line tools its instructions call (claude and curl) and credentials named UIVERIFY_API_KEY. Our summary lists: A credential in UIVERIFY_API_KEY.
SKILL.md names 1 domain. In commands or code: uiverify.ai; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Triage Visual Changes is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Triage Visual Changes: Glance Test (DebugBase/glance, 156 stars), Qwen Code E2E Testing (QwenLM/qwen-code, 28k stars), Adding LLM MCP Tools (TriliumNext/Trilium, 38k stars) and Agentacct Workflow (mikehasa/agentacct, 765 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
igrlk (a GitHub user) maintains it in igrlk/storybook-addon-test-codegen, which has 154 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on September 13, 2026.
Source: igrlk/storybook-addon-test-codegen on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.