بنقرة واحدة
visual-verification
// Verify application UI changes with uploaded screenshot or video artifacts
// Verify application UI changes with uploaded screenshot or video artifacts
Record and upload a short browser interaction video artifact
Upload an existing screenshot file to the Open-Inspect session
Deploy your own Open-Inspect instance. Use when the user wants to set up, deploy, or onboard to Open-Inspect. Guides through repository setup, credential collection, Terraform deployment, and verification with user handoffs.
| name | visual-verification |
| description | Verify application UI changes with uploaded screenshot or video artifacts |
Use this skill when the goal is to verify UI changes inside the application and return visual evidence in the Open-Inspect session.
agent-browser remains the low-level browser tool. This skill defines the workflow contract for
using it reliably.
upload-media is a bash command installed on PATH. Run it with your Bash tool, not as an MCP
tool or tool binding. For videos, use agent-browser record directly, then probe and upload the
resulting MP4 with upload-media.
The task is not complete until all of these are true:
artifactId is reported back to the user.agent-browser open.agent-browser set viewport <width> <height>.If the screenshot already exists as a file — for example, captured via Playwright MCP
(playwright_browser_take_screenshot), a manual capture, or any other tool — skip the
agent-browser steps and upload the file directly:
upload-media /path/to/existing-screenshot.png \
--caption "Description of what was captured" \
--source-url "$URL"
Add --full-page or --viewport '{"width":1512,"height":982}' as appropriate. The same reporting
template and guardrails below still apply.
For a dedicated upload-only workflow, see the upload-screenshot skill.
Viewport capture:
agent-browser open "$URL" && \
agent-browser set viewport 1512 982 && \
agent-browser wait 2000 && \
agent-browser screenshot --json /tmp/verify.png && \
upload-media /tmp/verify.png \
--caption "UI verification screenshot" \
--source-url "$URL" \
--viewport '{"width":1512,"height":982}'
Full-page capture:
agent-browser open "$URL" && \
agent-browser set viewport 1512 982 && \
agent-browser wait 2000 && \
agent-browser screenshot --full --json /tmp/verify-full.png && \
upload-media /tmp/verify-full.png \
--caption "Full-page verification screenshot" \
--source-url "$URL" \
--viewport '{"width":1512,"height":982}' \
--full-page
Annotated capture for review/debugging:
agent-browser open "$URL" && \
agent-browser wait 2000 && \
agent-browser screenshot --annotate --json /tmp/verify-annotated.png && \
upload-media /tmp/verify-annotated.png \
--caption "Annotated UI verification screenshot" \
--source-url "$URL" \
--annotated
Video recording for interaction flows:
set -e
agent-browser open "$URL"
agent-browser set viewport 1512 982
agent-browser snapshot -i
STARTED_AT_MS=$(date +%s%3N)
agent-browser record start /tmp/opencode/menu-recording.mp4
recording_started=1
cleanup_recording() {
if [ "${recording_started:-0}" = "1" ]; then
agent-browser record stop || true
fi
}
trap cleanup_recording EXIT
interaction_exit_code=0
agent-browser click "[data-testid=settings]" || interaction_exit_code=$?
agent-browser wait 1000 || interaction_exit_code=$?
agent-browser record stop
recording_started=0
trap - EXIT
ENDED_AT_MS=$(date +%s%3N)
PROBE_JSON=$(ffprobe -v error -print_format json -show_streams -show_format /tmp/opencode/menu-recording.mp4)
DURATION_MS=$(node -e 'const p=JSON.parse(process.argv[1]); const v=(p.streams||[]).find((s)=>s.codec_type==="video")||{}; const d=Number(v.duration ?? p.format?.duration); console.log(Math.max(1, Math.round(d * 1000)));' "$PROBE_JSON")
DIMENSIONS=$(node -e 'const p=JSON.parse(process.argv[1]); const v=(p.streams||[]).find((s)=>s.codec_type==="video")||{}; console.log(JSON.stringify({width:Number(v.width),height:Number(v.height)}));' "$PROBE_JSON")
upload-media /tmp/opencode/menu-recording.mp4 \
--artifact-type video \
--caption "Menu interaction recording" \
--source-url "$URL" \
--duration-ms "$DURATION_MS" \
--recording-started-at "$STARTED_AT_MS" \
--recording-ended-at "$ENDED_AT_MS" \
--dimensions "$DIMENSIONS" \
--truncated false \
--has-audio false
exit "$interaction_exit_code"
Include the following in the final response:
Example:
Verified the updated settings page header.
Capture mode: viewport
Viewport: 1512x982
Source: http://127.0.0.1:3000/settings
Uploaded artifact: abc123
upload-media in a later prompt; it is prompt-scoped.agent-browser record stop if a recording was
started.ffprobe; do not reuse the
requested viewport as video dimensions.[data-testid=...], [data-clear-completed], or #todo-title.
Run agent-browser snapshot -i before recording when selectors or accessible names are uncertain.agent-browseragent-browser directly for open-ended browsing, debugging, auth flows, snapshots, and custom
inspection.visual-verification when the deliverable is proof that a UI change works and the user should
receive an uploaded screenshot or video artifact.