Mandatory visual evidence capture for any change with an on-screen impact.
Install
mkdir -p .claude/skills/evidence && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/13194" && unzip -o skill.zip -d .claude/skills/evidence && rm skill.zipInstalls to .claude/skills/evidence
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Produce visual PR evidence — a screenshot or a video — whenever a change has on-screen impact. If exercising the change would make the screen look different (a rendered view, an error/empty/loading/blocked state, a panel, layout, an icon, motion, a live update) a visual artifact is MANDATORY, not optional. A change can be backend by cause and visible by effect: tests are never a substitute for a visual artifact when there is on-screen impact. Capture rides the project's own Cucumber + Playwright e2e harness on an ephemeral pu box (video of a flow, or a still pulled from the clip), or drives a live kolu with the chrome-devtools MCP for a state no scenario reaches. Then transcode (ffmpeg), host on a GitHub release, and post a `## Evidence` comment. Triggers on "post evidence", "screenshot the change", "PR evidence", "record a video of this", "capture the UI", "show it working", "prove it", or finishing any change whose effect is visible on screen.Key capabilities
- →Determine if a change has on-screen impact
- →Capture screenshots for static visual changes
- →Record videos for motion or multi-step flows
- →Drive e2e harness on an ephemeral pu box
- →Transcode media using ffmpeg
- →Post visual evidence as a PR comment
How it works
The skill first gates whether a change has visual impact. If so, it captures visual evidence (screenshot or video) by driving an e2e harness or chrome-devtools, transcodes it, and posts it as a PR comment.
Inputs & outputs
When to use evidence
- →Capture PR screenshots
- →Record UI flow videos
- →Prove UI changes work
About this skill
evidence — PR screenshots & video
The gate — answer this first
If someone exercised what this change affects, would the screen look DIFFERENT — before vs. after?
- YES → a visual artifact is mandatory. Static (end-state, single moment, before↔after) → screenshot. Motion (transition, flow, live update, animation) → video. A value-over-time element — a running timer, live counter, anything whose job is to change on its own — is motion: a frozen clock and a live one are pixel-identical in one frame, so watch it tick. A screenshot is a complete deliverable, not a runner-up to video.
- NO → skip with one explicit PR line:
No visual impact: <why>.Silent skips are not allowed; neither is manufacturing a tenuous pixel for a change whose screen truly doesn't differ.
Excuses that don't hold (each was tried on a real PR and rejected):
- "Backend change, no UI surface." Backend by cause can be visible by effect — trace the effect to the screen, not the cause to a layer.
- "No scenario exercises it." That decides how you capture, never whether.
- "It's a CLI/TUI — here's a transcript." A terminal is an on-screen surface, and a pasted transcript is not a visual artifact. Record the real binary with vhs/asciinema.
- "The tests prove it." Tests accompany the artifact, never replace it.
- "I reconstructed the output — close enough." A synthesized artifact (formatter output posted as a recording, mocked data, a stub's clip) is a fabrication, and it hides the very bug evidence exists to expose. The artifact comes from really executing the change end-to-end against real data — and read the real output to confirm the feature works before posting.
Capture
Runs on an ephemeral pu box (see the pu skill), never locally, so evidence reflects a clean CI-like build of the PR's commit.
Prefer the existing Cucumber + Playwright e2e harness — KOLU_EVIDENCE=1
turns on video recording (see packages/tests/support/hooks.ts) and you select
a scenario by name. It's the default because the clip comes from the same code
CI runs. The one thing to avoid building is a parallel capture harness that
duplicates the step library; everything else is fair game when the harness
can't reach the state: pull a still from a recorded clip, drive a live kolu
with the chrome-devtools MCP and take_screenshot, vhs for a TUI, ordinary
shell setup for on-disk preconditions. Never skip for lack of a canned path.
Delegate capture to a subagent so the main context stays clear: brief it
with the box, branch, image-or-video, the scenario or live state, a <slug>,
the PR number, and the release tag; it returns the markdown it posted.
Commands, harness details, transcode settings, and vhs gotchas: CAPTURE.md.
Host & post
evidence-assetsis the one fixed release tag. It already exists; verify it does, never create another, never derive a tag from the PR number.- The local filename IS the asset name — copy back as
/tmp/<slug>.png, not a decorated name, or every…/download/evidence-assets/<slug>.pngembed 404s. - GIF embeds inline (keep under GitHub's ~10 MB limit); MP4 links via the
shared player (
juspay.github.io/video-evidence). PNG embeds like a GIF. - Use a single-quoted heredoc when posting so backticks and
$survive. - Tear the box down when finished:
pu destroy "$host".
When not to use it
- →When there is genuinely no visual impact from a change
- →When the user wants to use unit tests as visual evidence
- →When the user wants to paste a text transcript for terminal output
Prerequisites
Limitations
- →Requires visual impact for evidence generation
- →Unit tests are not a substitute for visual artifacts
- →Pasted text transcripts are not considered visual artifacts
How it compares
This skill enforces and automates the creation of visual evidence for PRs, ensuring that UI changes are visually verified rather than relying solely on code or unit tests.
Compared to similar skills
evidence side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| evidence (this skill) | 0 | 1mo | Review | Intermediate |
| svelte-expert | 11 | 9mo | No flags | Intermediate |
| home-assistant-integration-knowledge | 8 | 2mo | No flags | Advanced |
| security-requirement-extraction | 7 | 2mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by juspay
View all by juspay →You might also like
svelte-expert
Raudbjorn
Expert Svelte/SvelteKit development assistant for building components, utilities, and applications. Use when creating Svelte components, SvelteKit applications, implementing reactive patterns, handling state management, working with stores, transitions, animations, or any Svelte/SvelteKit development task. Includes comprehensive documentation access, code validation with svelte-autofixer, and playground link generation.
home-assistant-integration-knowledge
home-assistant
Everything you need to know to build, test and review Home Assistant Integrations. If you're looking at an integration, you must use this as your primary reference.
security-requirement-extraction
wshobson
Derive security requirements from threat models and business context. Use when translating threats into actionable requirements, creating security user stories, or building security test cases.
writing-skills
obra
Use when creating new skills, editing existing skills, or verifying skills work before deployment
obsidian-hello-world
jeremylongshore
Create a minimal working Obsidian plugin with commands and settings. Use when building your first plugin feature, testing your setup, or learning basic Obsidian plugin patterns. Trigger with phrases like "obsidian hello world", "first obsidian plugin", "obsidian quick start", "simple obsidian plugin".
code-review-checklist
vudovn
Code review guidelines covering code quality, security, and best practices.