LabscoConnect MCP ↗
getsentry logo✓ Official★ 367

visual-web-qa

Checks how a web change actually looks in a browser instead of judging it from the code: screenshots for layout, themes and screen sizes, short videos for loading, animation and interactions, and page checks for exact text or attributes. It reports the URL it checked, the evidence, a pass, issues-found or blocked result, and what it didn't cover. It is part of Junior, Sentry's Slack bot, and shares the evidence through Junior.

by getsentrypart of getsentry/junior

One of 22 skills in the getsentry/junior package — works on its own, and pairs well with its siblings.

WHEN YOUR AGENT SHOULD USE IT

A QUICK BOUNDARY

USE FOR

  • Verify a docs theme on desktop and mobile, then share the evidence.
  • Record a short video of a loading state or animation.
  • Get a clear blocked result, not a false pass, when no page is reachable.

DO NOT USE FOR

  • General browser automation that isn't visual checking: agent-browser does that.

Documents

This is the playbook your agent receives when the skill activates — you don't need to read it to use the skill, but it's here to audit before installing.

Visual Web QA

Verify rendered behavior in a browser instead of inferring visual correctness from code. Choose the smallest set of evidence that directly answers the request.

Workflow
  1. Classify the requested behavior as stable, temporal, or exact-state verification.
  2. Resolve a valid local, preview, or explicitly requested target URL.
  3. Choose representative pages, states, viewports, and themes.
  4. Capture browser evidence with meaningful waits and fresh element refs.
  5. Share requested artifacts with sendFiles and verify delivery success.
  6. Report the exact target, evidence, result, findings, and limitations.
Choose Evidence
RequestPrimary evidenceOptional support
Layout, CSS, content, typographyScreenshotDOM text or style check
Light and dark themesScreenshot per relevant themeTheme attribute check
Responsive behaviorScreenshot per relevant breakpointVideo only if resize motion matters
Loading state, animation, transitionShort videoScreenshot for a distinct final-state question
Navigation or interaction sequenceShort videoScreenshot for a specific defect
Stable menu, modal, hover, or focus stateScreenshotVideo if the transition matters
Exact text, route, ARIA, or attributeDOM checkScreenshot or video if the visible state matters

Use screenshots for stable rendered states. Use short videos for timing, motion, loading, or sequence. A purely temporal request may use video without a redundant screenshot. DOM checks support visual evidence; they do not replace it when the user asks how something looks.

agent-browser --session visual-qa screenshot /tmp/visual-qa.png
agent-browser --session visual-qa screenshot --full /tmp/visual-qa-full.png
agent-browser --session visual-qa screenshot --annotate /tmp/visual-qa-issue.png
Keep Scope Representative
  • Check one to four representative pages or states unless the user requests broader coverage or the change spans more templates.
  • Choose the viewport-theme combinations most likely to expose the issue instead of building an exhaustive matrix by default.
  • State clearly when only part of the requested surface was verified.
Resolve The Target

Use this order:

  1. User-provided URL
  2. Running local development server
  3. Repo-native server such as pnpm dev
  4. Preview deployment
  5. Production as an explicitly requested or read-only baseline
  6. file:// output only when the site renders correctly without a server

Do not check production and claim an unmerged change is present. If no valid target is reachable, report blocked and name the missing server, preview, build, or authentication requirement.

Capture Reliable State

Wait for the state that proves progress instead of adding arbitrary delays:

agent-browser --session visual-qa wait --url "**/expected-path"
agent-browser --session visual-qa wait --text "Expected text"
agent-browser --session visual-qa wait --load networkidle
agent-browser --session visual-qa wait 100
  • Prefer URL or text waits for route and content changes.
  • Use networkidle only when the action triggers real network activity.
  • Use a short fixed wait only when an animation has no semantic completion signal.
  • Run snapshot -i after navigation or significant DOM changes before using element refs.

For initial loading behavior, start recording before the first navigation:

agent-browser --session visual-qa set viewport 1440 900
agent-browser --session visual-qa record start /tmp/visual-qa-load.webm "$URL"
agent-browser --session visual-qa wait --load networkidle
agent-browser --session visual-qa record stop

For post-load interactions, explore first, then start recording. record start creates a fresh browser context and reloads the page, so discard earlier refs and run snapshot -i again before interacting. Stop recording as soon as the target behavior is captured. Never end a QA run with an active recording.

Share Evidence

Use sendFiles for every artifact the user should receive:

{
  "files": [
    { "path": "/tmp/visual-qa.png" },
    { "path": "/tmp/visual-qa-load.webm" }
  ]
}
  • Claim an artifact was shared only when sendFiles succeeds in this turn.
  • If delivery fails or sendFiles is unavailable, report the error and saved paths without claiming attachment success.
Protect Sensitive Data

Never capture or share credential entry, session tokens, customer data, or unrelated sensitive UI state. If reaching the target requires exposing that data, use an existing safe authenticated session or report the authentication requirement as a limitation or blocker.

Report The Result

Report:

  • Target: exact URL verified
  • Evidence: screenshots, videos, and state checks gathered, with why each was chosen
  • Result: pass, issues found, or blocked
  • Findings: specific rendered behavior observed
  • Limitations: requested pages, states, viewports, or themes not verified

Use pass only when the captured evidence matches the requested behavior without an obvious scoped regression. Use issues found for broken layout, incorrect motion, flicker, missing assets, or invalid states. Use blocked when no safe reachable target exists.

Never generalize beyond the evidence collected, and never claim a rendered change looks correct without opening a browser and gathering supporting evidence.

Installation

Copy & paste — that's it
npx skills add getsentry/junior --skill "visual-web-qa" --full-depth

Run this in your project — your agent picks the skill up automatically.

BEFORE IT WILL WORK

2 FOR YOU
  1. 01
    Made for Junior, Sentry's Slack bot

    It drives the browser with the agent-browser command-line tool and shares files with Junior's sendFiles. Add the @sentry/junior-agent-browser package to your Junior app.

  2. 02
    A page it can open

    It needs a URL it can reach: one you give it, a running local server, a preview deployment, or production as a read-only baseline. Start one before you ask.

License

Licensed under Apache-2.0— you can use, modify, and redistribute it under that license's terms.

View the full license file on GitHub →