evidence — PR screenshots & video
SkillDev toolsEvidence hygiene before any FIND moves to Completed or enters a report. Cookie redaction, PII black-bar, HAR sanitization, screenshot metadata strip. Run after /triage passes and before final report assembly.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the evidence — PR screenshots & video skill
What this skill tells your AI
The instructions your AI receives, as published by encod3d-sec/torch in skills/workflow/evidence/SKILL.md and read by ahel’s review.
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".
Signals
- GitHub stars
- 322
- Forks
- 44
- Last commit
- Sep 2026
Others that do the same job
Advanced
- Catalog kind
- skill
- Gateway key
evidence- Source
- github.com/encod3d-sec/torch