Agent skill

Diff-Driven Smoke Tests

by Skyvern-AI in Skyvern-AI/skyvern

Reads your git diff, writes a handful of happy-path browser smoke tests, runs them with Skyvern or Chrome DevTools MCP and posts screenshot evidence to the PR.

AGPL-3.0Auto-check passedTesting & QA

Install Diff-Driven Smoke Tests

skills CLI
$ npx skills add Skyvern-AI/skyvern --skill smoke-test -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Skyvern-AI/skyvern smoke-test --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Skyvern-AI/skyvern.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skyvern/cli/skills/smoke-test .claude/skills/smoke-test && rm -rf skills-src

Use ~/.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/

Facts

Skill name
smoke-test
GitHub stars
23k
Token cost
~5.2k tokens
SKILL.md length
2,035 words
Files
1
Skills in repo
6
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Reads your git diff, writes a handful of happy-path browser smoke tests, runs them with Skyvern or Chrome DevTools MCP and posts screenshot evidence to the PR.

  • Works in 8 steps: Understand the Changes → Classify the Diff → Choose the Validation Strategy → …
  • Checking a feature branch in the browser before opening a pull request
  • SKILL.md covers Quick Start, How It Works, Step 1: Understand the Changes and Step 2: Classify the Diff, plus 8 more sections
  • Calls gh, git and npx; needs ANTHROPIC_API_KEY and GITHUB_TOKEN

What it does

After you change code, this skill reads the diff and the changed files, classifies what changed across frontend, API and internal backend code, and picks a validation strategy and browser backend. It is the CI-oriented companion of a /qa skill, sharing the same diff reading, classification and app startup, but formatted for CI output and pull request comments.

It generates a small set of smoke tests, three to eight, as happy-path action sequences and runs each one by navigating, acting, validating and taking a screenshot. Skyvern browser tools are the default; if the Skyvern MCP is unavailable it falls back to Chrome DevTools MCP, which connects to a real Chrome instance and supports authenticated sessions. It can start the app when needed, accepts an explicit app URL or a focus hint, and ends with a report that embeds the screenshots and is posted to the PR. When neither the last-commit diff nor the working-tree diff has content, there is nothing diff-driven to test.

When your agent uses it

  • Checking a feature branch in the browser before opening a pull request
  • Adding screenshot evidence of working behavior to a PR
  • Running quick smoke checks in CI against a staging URL

Example prompts

  • “Smoke test my current changes against the local dev server.”
  • “Run the smoke tests against https://staging.example.com and post the screenshots on the PR.”
  • “Smoke test only the settings page changes.”

Requirements

  • Skyvern MCP browser tools or Chrome DevTools MCP
  • A git repository with changes to test
  • A local or deployed app to open

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Understand the Changes
  2. Classify the Diff
  3. Choose the Validation Strategy
  4. Start the App
  5. Generate Smoke Test Cases
  6. Run Tests via Browser Tools
  7. Report Results
  8. Post to PR

What it can do on your machine

Read from SKILL.md and the folder at commit f5f3f28. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git
    • npx
    • claude
    • pip
    • playwright

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh, git, npx and pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • ANTHROPIC_API_KEY
    • GITHUB_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Diff-Driven Smoke Tests loads about 5.2k tokens when it runs. Until then it costs about 59 tokens; SKILL.md has 2,035 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~59
When it runs · the whole SKILL.md, loaded when a task matches
~5.2k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from Skyvern-AI/skyvern at commit f5f3f28, republished under its AGPL-3.0 licence (© Skyvern-AI). 2,035 words, ~5,168 tokens.

Download SKILL.mdSave it as .claude/skills/smoke-test/SKILL.md (or your agent's skills folder).
name
smoke-test
description
Run smoke tests against a deployed or local app based on your git diff. Each test uses Skyvern browser tools (navigate, act, validate, screenshot) with Chrome DevTools MCP as fallback. Posts screenshot evidence as PR comments.

Smoke Test — CI-Oriented Validation via Skyvern Browser Tools

Read the diff, classify changes, start the app, and run targeted smoke tests via Skyvern browser tools with Chrome DevTools MCP as fallback.

<!-- NOTE: .agents/skills/smoke-test/SKILL.md is the repository canonical source.
     Keep the synchronized bundled copy in sync with it:
     skyvern/cli/skills/smoke-test/SKILL.md
     Steps 1-4 are copied from .agents/skills/qa/SKILL.md.
     If you fix bugs in /qa's diff-reading, classification, or app startup,
     mirror those fixes here. -->

You changed code. This skill reads the diff, generates targeted smoke tests, and runs each one via Skyvern browser tools - navigate, act, validate, screenshot. If Skyvern tools are unavailable (no Skyvern MCP), fall back to Chrome DevTools MCP, which connects to a real Chrome instance and supports authenticated sessions. It is /qa's CI companion: same diff-reading, same classification, same app startup, formatted for CI output and PR comments with screenshot evidence on every test.

Quick Start

text
/smoke-test                              # Diff-driven, auto-detect everything
/smoke-test https://staging.example.com  # Explicit app URL
/smoke-test -- focus on the settings page
/smoke-test --pr 11488                   # Target a specific PR

How It Works

  1. Read git diff (reused from /qa)
  2. Classify changes → identify testable surfaces (reused from /qa)
  3. Choose validation strategy (reused from /qa)
  4. Pick browser backend (Chrome DevTools MCP or Skyvern)
  5. Handle auth (connect to authenticated session or bypass)
  6. Start the app if needed (reused from /qa)
  7. Generate 3-8 smoke test cases as action sequences (happy paths only)
  8. Run each test via browser tools: navigate → act → validate → screenshot
  9. Collect results with screenshot evidence
  10. Report with embedded screenshots
  11. Post to PR with images

Step 1: Understand the Changes

Get the diff
bash
# What files changed?
git diff --name-only HEAD~1     # vs last commit (if changes are committed)
git diff --name-only            # vs working tree (if uncommitted)

# Full diff for context
git diff HEAD~1                 # or git diff for uncommitted

Pick whichever diff has content. If both are empty, there is nothing diff-driven to test.

Read the changed files

Read the full contents of every changed file that affects behavior:

  • Frontend files: .tsx, .jsx, .ts, .js, .css, .html
  • Backend/API files: routes, controllers, request/response schemas, serializers, handlers
  • Backend-internal files: services, workers, business logic, validators, data-layer code
  • Tests that changed alongside the implementation

Look for:

  • route paths and page entry points
  • component names, visible text, forms, buttons, error states
  • API endpoints, request params, response fields, auth requirements
  • validation logic, branching behavior, feature flags, empty states
  • tests that describe the expected behavior

Step 2: Classify the Diff

ModeTriggerPrimary validation
Frontend/browserUI/routes/components/styles changedBrowser smoke tests against the dev server
Backend APIRoute handlers, request/response schemas, or externally visible API behavior changedStart backend locally and run smoke tests against changed endpoints
Backend-internalServices/workers/business logic changed without public API surface changesRepo-native fast checks plus targeted tests
MixedFrontend/browser and backend changed togetherBackend validation first, then frontend smoke tests

Use these rules:

  • If both frontend/browser and backend changed, treat it as Mixed.
  • If only backend internals changed, do not invent unrelated browser tests or random API calls.
  • If a backend change might affect the public contract, inspect routes, schemas, and tests before choosing backend-internal.
  • If the diff is mostly documentation or comments, keep testing lightweight and report that no behavioral validation was warranted.

Step 3: Choose the Validation Strategy

Frontend/browser mode

Run smoke tests via Skyvern browser tools against the dev server. Validate the specific UI changes plus 1-2 adjacent regression checks.

Backend API mode

Use the repo's documented local startup and auth instructions, start the backend if needed, identify the changed endpoint(s), and run smoke tests that validate the changed contract.

Backend-internal mode

Run the repo's fast verification commands first, then targeted unit/integration/scenario tests for the changed logic. Only run smoke tests if the change affects exposed behavior.

Mixed mode

Validate the backend first, then run frontend smoke tests against the flow that depends on it. If the backend contract is broken, frontend results are not trustworthy.

Step 3b: Pick Browser Backend

Try Skyvern browser tools first. Fall back to Chrome DevTools MCP if Skyvern MCP is unavailable.

Skyvern browser tools (primary)

Use skyvern_browser_session_create, skyvern_navigate, skyvern_act, skyvern_validate, skyvern_screenshot. Works in CI and locally. Create a local=true session to reach localhost.

Chrome DevTools MCP (fallback)

If Skyvern MCP tools are not available, invoke the /chrome-devtools skill to learn the tool API. Key tools:

  • list_pages / new_page / navigate_page - page management
  • take_screenshot - capture viewport (save to a path within workspace roots)
  • take_snapshot - get page structure with element uids for interaction
  • click / fill / press_key - interact with elements by uid
  • evaluate_script - run JS for health gates and data extraction
  • wait_for - wait for content to load

Chrome DevTools MCP connects to a real Chrome instance with the user's profile, so authenticated sessions carry over - no separate auth step needed if the user is already logged in. Useful when the app requires auth that Skyvern sessions can't provide.

Step 3c: Handle Auth

Check whether the app requires authentication:

  1. Chrome DevTools MCP with existing session: Call list_pages. If the user already has the app open and authenticated, navigate_page inherits their session. No auth step needed.
  2. User needs to log in: Call new_page or navigate_page to the app URL. If a login page appears, tell the user: "Chrome is open to the login page. Please authenticate, then tell me when you're done." Wait for confirmation before proceeding.
  3. Auth bypass: If the repo has a local auth-bypass mechanism (env var or dev branch), use it. Check the project's dev setup docs or CLAUDE.md for details.
  4. CI / headless: Use Skyvern browser tools with local=true against an unauthenticated dev server, or test only public-facing pages.

Step 4: Start the App

If the user provided a URL argument, skip startup and use that URL directly.

Otherwise, auto-detect common local ports:

text
5173, 3000, 3001, 8080, 8000, 4200

If none respond, start the most direct repo-documented local command for the changed surface. If the diff needs both frontend and backend running together and the repo provides a combined frontend/backend dev script, prefer that. Only ask the user to start something manually if the repo has no documented command or startup fails.

If the repo requires background processes, start them in the background and keep notes on how you did it.

Step 5: Generate Smoke Test Cases

For each testable surface identified in Steps 2-3, generate a smoke test case as a numbered action sequence using Skyvern browser tools.

Guidelines
  • 3-8 tests per PR (stay narrow — test what changed, not everything)
  • Happy paths only (smoke level, not deep QA)
  • Each test should answer: "does the changed thing still work?"
  • For frontend: navigate to the page, interact with the changed element, verify it works
  • For backend API: navigate to a page that exercises the API, verify the response
  • For mixed: backend-dependent flows first, then frontend that depends on them
Example test cases
text
Test: Settings save button works after CSS refactor
1. skyvern_navigate(url="http://localhost:5173/settings")
2. skyvern_act(prompt="Fill Company Name with 'Test Corp', click Save")
3. skyvern_validate(prompt="Success toast visible, no error state")
4. skyvern_screenshot()

Test: Dashboard loads after route refactor
1. skyvern_navigate(url="http://localhost:5173/dashboard")
2. skyvern_validate(prompt="Dashboard content visible, no loading spinner stuck")
3. skyvern_screenshot()

Test: Login redirect works
1. skyvern_navigate(url="http://localhost:5173/protected-page")
2. skyvern_validate(prompt="Redirected to login page or auth prompt shown")
3. skyvern_screenshot()

Step 6: Run Tests via Browser Tools

Option A: Skyvern browser tools (primary)

For localhost URLs, create a local browser session:

text
skyvern_browser_session_create(local=true, timeout=15)

For publicly reachable URLs, create a cloud session instead:

text
skyvern_browser_session_create(timeout=15)

For each test case, run its action sequence. Every test starts with skyvern_navigate:

text
skyvern_navigate(url="http://localhost:5173/settings")

CRITICAL: Always include the url parameter in every skyvern_navigate call. Never omit it and rely on the current page - this prevents test-to-test state bleed.

After navigation, run the health gate to catch broken pages early:

In extension mode, use this health gate. Do not call skyvern_evaluate. Before each skyvern_navigate to a route under test, call skyvern_get_errors(clear=True), skyvern_console_messages(clear=True), skyvern_handle_dialog(clear=True), and skyvern_network_requests(clear=True); discard what they return.

text
skyvern_tab_list()
skyvern_get_errors()
skyvern_console_messages(level="error")
skyvern_get_html(selector="body")
skyvern_find(by="role", value="alert")
skyvern_find(by="role", value="dialog")
skyvern_handle_dialog()

PASS requires the active tab URL to match the expected route, with no unexpected login redirect. The body must contain the expected page content, not only scripts or an empty app container. Require no unexpected error text, visible alerts, visible dialogs, JavaScript errors, console errors, or JavaScript dialog events. skyvern_handle_dialog reads dialog history; JavaScript dialogs are auto-dismissed by default. If a call fails or evidence is incomplete, record FAIL and stop this test. Do not treat missing evidence as PASS.

Outside extension mode, use this health gate:

text
skyvern_evaluate(expression="(() => {
  const errors = [];
  const body = document.body?.innerText || '';
  if (body.includes('Something went wrong')) errors.push('error_message');
  if (body.includes('Cannot read properties')) errors.push('js_error_in_ui');
  if (/\\bundefined\\b/.test(body) && !/\\bif\\b|\\btypeof\\b|\\bdocument|tutorial|example/i.test(body) && body.length < 5000) errors.push('undefined_text');
  if (body.includes('connection refused')) errors.push('connection_refused');
  if (/sign.?in|log.?in|auth/i.test(window.location.pathname)) errors.push('auth_redirect');
  if (document.querySelector('[role=\"alert\"]')) errors.push('alert_element');
  if (!document.querySelector('main, [role=\"main\"], nav, header, h1, h2, [class*=\"layout\" i], [class*=\"page\" i], [class*=\"app\" i]'))
    errors.push('blank_page');
  return JSON.stringify({ pass: errors.length === 0, errors });
})()")

If the health gate fails, mark the test as FAIL and move on. Otherwise, continue with the test's action steps:

text
skyvern_act(prompt="Fill Company Name with 'Test Corp', click Save")
skyvern_validate(prompt="Success toast visible, no error state")
skyvern_screenshot()
Show full SKILL.md (792 more words)Show less
Option B: Chrome DevTools MCP (fallback)

If Skyvern MCP tools are unavailable, use Chrome DevTools MCP. Invoke the /chrome-devtools skill first.

No session setup needed - the browser launches automatically on first tool call. For each test:

text
1. navigate_page(url="http://localhost:8080/workflows")
2. wait_for(text="Workflows", timeout=5000)
3. take_snapshot()                                             # get element UIDs
4. click(uid="<target-element>")                               # interact
5. take_screenshot(filePath="/path/within/workspace/test-name.png")

Run the health gate via evaluate_script:

text
evaluate_script(function="() => {
  const errors = [];
  const body = document.body?.innerText || '';
  if (body.includes('Something went wrong')) errors.push('error_message');
  if (body.includes('Cannot read properties')) errors.push('js_error_in_ui');
  if (/\\bundefined\\b/.test(body) && !/\\bif\\b|\\btypeof\\b|\\bdocument|tutorial|example/i.test(body) && body.length < 5000) errors.push('undefined_text');
  if (body.includes('connection refused')) errors.push('connection_refused');
  if (/sign.?in|log.?in|auth/i.test(window.location.pathname)) errors.push('auth_redirect');
  if (document.querySelector('[role=\"alert\"]')) errors.push('alert_element');
  if (!document.querySelector('main, [role=\"main\"], nav, header, h1, h2, [class*=\"layout\" i], [class*=\"page\" i], [class*=\"app\" i]'))
    errors.push('blank_page');
  return JSON.stringify({ pass: errors.length === 0, errors });
}")

Screenshot paths must be within the workspace roots reported by the MCP server.

Chrome DevTools MCP connects to a real Chrome instance with the user's profile, so authenticated sessions carry over. If the user is already logged in, no auth step needed. If a login page appears, tell the user to authenticate in the browser window and wait.

Collect results

For each test, record:

  • result - PASS or FAIL based on validation outcome and health gate
  • evidence - one-line description of what was observed
  • screenshot - file path to the captured screenshot (required for every test)

Step 7: Report Results

The report must include embedded screenshots. Host them at a PR-accessible URL and reference them as markdown images. Do not upload evidence to a GitHub release, and do not commit screenshots into the repository.

Host the screenshots

Embed each screenshot from somewhere the PR can render it:

  • An image host or your issue tracker's attachment upload that returns a public URL, or
  • Drag-and-drop the file into the PR or comment composer on github.com, which uploads it to user-attachments and yields a ready markdown embed.

Privacy gate: the embedded URL is public and the PR may be public, so before uploading scrub each capture of names, PII, secrets, tokens, and internal URLs — otherwise re-capture against non-sensitive data, crop/mask the sensitive regions, or describe the result instead of embedding it.

Look up the PR number (Step 8 reuses it):

bash
PR_NUMBER=$(gh pr view --json number -q '.number' 2>/dev/null || echo "draft")

If you have no PR-accessible host, save the captures under .qa/screenshots/ and tell the user where they are and that a host is needed — do not post unreachable local paths as evidence.

Report format
markdown
## Smoke Test Report

### Changes Tested
- <summary of what changed, from the diff>

### Results
| Flow | Result | Screenshot |
|------|--------|------------|
| Workflows page | PASS | ![workflows](https://<image-host>/workflows.png) |
| Task detail | PASS | ![task-detail](https://<image-host>/task-detail.png) |
| Settings save | FAIL | ![settings-error](https://<image-host>/settings.png) |

### Verdict
2/3 tests passed. 1 issue found.

Every test row must have a screenshot. The screenshot is the primary evidence.

Step 8: Post to PR

After generating the report, persist it to the pull request as a sticky comment so the evidence survives beyond the conversation.

Check for an open PR

PR_NUMBER was set in Step 7. If it is "draft" (no PR found):

  1. Save the full report markdown to .qa/latest-smoke-report.md in the project root (create the directory if needed).
  2. Tell the user: "No open PR found for this branch. Smoke test report saved to .qa/latest-smoke-report.md. Run /smoke-test again after creating a PR to post it."
  3. Stop here — do not attempt to create a PR.
Post or update the sticky comment

Use a hidden HTML marker to make the comment idempotent across multiple runs. Write the body to a temp file to avoid shell metacharacter issues with multiline markdown (report content may include attacker-controlled page text from health gates):

bash
# Write the comment body to a temp file (avoids shell injection from page content)
COMMENT_FILE=$(mktemp)
# Compute dynamic header outside the heredoc (controlled values only)
REPORT_HEADER="## Smoke Test Report — $(git rev-parse --short HEAD) — $(date -u +%Y-%m-%dT%H:%M:%SZ)"
# Write marker and header first (safe, controlled content)
printf '%s\n%s\n\n' '<!-- skyvern-smoke-test-report -->' "$REPORT_HEADER" > "$COMMENT_FILE"
# Append the report body via quoted heredoc (no shell expansion — safe for page content)
cat >> "$COMMENT_FILE" <<'REPORT_EOF'
<the full report markdown from Step 7>
REPORT_EOF

# Find this user's own sticky comment across all pages. Matching the marker as a bare
# substring, or without the author, would PATCH someone else's comment out of existence.
GH_LOGIN=$(gh api user --jq .login 2>/dev/null)
EXISTING_COMMENT_ID=$(GH_LOGIN="$GH_LOGIN" gh api --paginate "repos/{owner}/{repo}/issues/${PR_NUMBER}/comments" \
  --jq '.[] | select(.user.login == $ENV.GH_LOGIN) | select(.body | startswith("<!-- skyvern-smoke-test-report -->")) | .id' \
  2>/dev/null | head -1)

if [ -n "$EXISTING_COMMENT_ID" ]; then
  # Update the existing comment in place (read body from file, no shell expansion)
  gh api "repos/{owner}/{repo}/issues/comments/${EXISTING_COMMENT_ID}" \
    -X PATCH -F body=@"$COMMENT_FILE"
else
  # Create a new comment
  gh pr comment "$PR_NUMBER" --body-file "$COMMENT_FILE"
fi
rm -f "$COMMENT_FILE"
Rules
  • Always include the <!-- skyvern-smoke-test-report --> marker so repeated runs update the same comment instead of creating duplicates.
  • Include the short commit hash and UTC timestamp in the comment header.
  • Do not create a PR just to post a report — that is the user's decision.
  • If gh is not available or not authenticated, fall back to saving the report locally and tell the user.

Error Handling

ProblemAction
No git diff foundAsk what behavior to validate, then fall back to explore mode
App not running and no startup command foundStart the most direct repo-documented local command; only ask user if no command exists or startup fails
Chrome DevTools MCP browser profile lockedKill stale Chrome processes, retry. If still locked, fall back to Skyvern
Auth redirect detectedTell user to authenticate in the Chrome DevTools browser, wait for confirmation
Skyvern browser tools also unavailableUse Playwright directly (npx playwright) as last resort
Health gate fails on navigationMark the test as FAIL, take a screenshot anyway for evidence, continue
Screenshot upload failsSave the captures under .qa/screenshots/ for the record, then stop and ask the user for a PR-accessible host — do not post unreachable local paths as evidence
No testable changes (docs-only, config-only)Report "Changes are non-behavioral - no smoke tests generated."

CI Setup

To run /smoke-test in a GitHub Action (or any CI), the runner needs:

  1. Claude Code in headless mode (claude -p "/smoke-test")
  2. ANTHROPIC_API_KEY — for Claude Code
  3. GITHUB_TOKEN — for posting smoke test reports as PR comments (Step 8)
  4. Playwright browser — pip install skyvern && playwright install chromium (required for local=true sessions that can reach localhost)
  5. Your app running — started in a prior CI step

Cloud browser sessions (local=false) work for publicly reachable URLs (e.g., preview deploys) without Playwright installed, but cannot reach localhost.

Session Cleanup

Always close the browser session when done:

text
skyvern_browser_session_close()

If you started local servers or background processes, leave the user a clear note about what is still running.

© Skyvern-AI, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skyvern/cli/skills/smoke-test of Skyvern-AI/skyvern.

Open the folder on GitHubat commit f5f3f28

Compare with similar skills

Diff-Driven Smoke Tests 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.

Diff-Driven Smoke Tests compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Diff-Driven Smoke Tests this skillSkyvern-AI/skyvern23k—~5.2kAutomated safety check: PassAGPL-3.0
Whole-App Health Sweepreticlehq/reticle1.2k—~1.1kAutomated safety check: PassApache-2.0
LangBot Testinglangbot-app/LangBot18k—~1kAutomated safety check: NotesApache-2.0
Agentic Browser Testingpetrkindlmann/qa-skills170—~4.5kAutomated safety check: PassMIT
Record E2E Giflablup/backend.ai-webui133—~907Automated safety check: NotesLGPL-3.0
Team Frontend Debugcatlog22/Claude-Code-Workflow2.1k—~2.8kAutomated safety check: NotesMIT

Similar skills

  • Whole-App Health Sweep

    reticlehq/reticle

    Sweeps a running web app by clicking every reachable control, then reports dead buttons, console errors, failed requests and mismatches between API data and the screen.

    1.2k GitHub stars~1.1k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • LangBot Testing

    langbot-app/LangBot

    Tests LangBot's WebUI and core flows through an automated browser and backend logs, with a routing table to reference guides per feature area.

    18k GitHub stars~1k tokensUpdated today
    Testing & QAAuto-check: notes
  • Agentic Browser Testing

    petrkindlmann/qa-skills

    Goal-driven E2E testing where a browser agent (Playwright MCP / computer-use) reads a natural-language goal and explores the app via the accessibility tree to assert outcomes — no pre-written script.

    170 GitHub stars~4.5k tokensUpdated 4 mo ago
    Testing & QAAuto-check passed
  • Record E2E Gif

    lablup/backend.ai-webui

    Record Playwright e2e tests as one GIF per test case (video → ffmpeg palette GIF) and return a markdown table for a PR description.

    133 GitHub stars~907 tokensUpdated today
    Testing & QAAuto-check: notes
  • Team Frontend Debug

    catlog22/Claude-Code-Workflow

    Frontend debugging team using Chrome DevTools MCP. An agent skill from catlog22/Claude-Code-Workflow.

    2.1k GitHub stars~2.8k tokensUpdated 3 mo ago
    Testing & QAAuto-check: notes
  • Doctor

    bluzir/claude-code-design

    First-run setup + health check. An agent skill from bluzir/claude-code-design.

    106 GitHub stars~931 tokensUpdated 5 mo ago
    Testing & QAAuto-check passed

More from Skyvern-AI/skyvern

  • Skyvern Browser Automation

    Skyvern-AI/skyvern

    Picks the right Skyvern CLI command for a web task, from quick yes/no checks to reusable multi-page workflows, instead of falling back to plain page fetching.

    23k GitHub starsUsed in 1 repo~2.9k tokens
    Auto-check passed
  • Skyvern Version Bump

    Skyvern-AI/skyvern

    Walks through a Skyvern open-source release bump: update the version, rebuild the Python and TypeScript SDKs with Fern, commit, and open a pull request.

    23k GitHub stars~1k tokensUpdated yesterday
    Auto-check: notes
  • Skyvern Browser Automation

    Skyvern-AI/skyvern

    Automates websites with Skyvern's AI browser agent to fill forms, extract data, download files, log in and run multi-step workflows through SDKs, REST, MCP or a CLI.

    23k GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Smoke-tests a Skyvern deployment by checking the backend API, frontend rendering, browser session provisioning and workflow execution in sequence.

    23k GitHub stars~1.5k tokensUpdated yesterday
    Auto-check passed
  • Diff-Driven QA

    Skyvern-AI/skyvern

    Reads your git diff, decides whether the change needs browser QA, API checks or repo tests, runs that validation and reports pass or fail with evidence.

    23k GitHub stars~4.7k tokensUpdated yesterday
    Auto-check: warnings

Categories

Questions about Diff-Driven Smoke Tests

What does Diff-Driven Smoke Tests do?

Reads your git diff, writes a handful of happy-path browser smoke tests, runs them with Skyvern or Chrome DevTools MCP and posts screenshot evidence to the PR. After you change code, this skill reads the diff and the changed files, classifies what changed across frontend, API and internal backend code, and picks a validation strategy and browser backend. It is the CI-oriented companion of a /qa skill, sharing the same diff reading, classification and app startup, but formatted for CI output and pull request comments.

When should I use Diff-Driven Smoke Tests?

Diff-Driven Smoke Tests fits situations like: checking a feature branch in the browser before opening a pull request; adding screenshot evidence of working behavior to a PR; running quick smoke checks in CI against a staging URL.

How do I install Diff-Driven Smoke Tests in Claude Code?

Run `npx skills add Skyvern-AI/skyvern --skill smoke-test -a claude-code`. Or copy the skill folder (skyvern/cli/skills/smoke-test in Skyvern-AI/skyvern) into .claude/skills/smoke-test in your project. Claude Code loads it when a task matches its description.

How do I install Diff-Driven Smoke Tests in Codex?

Run `npx skills add Skyvern-AI/skyvern --skill smoke-test -a codex`. Or copy the skill folder (skyvern/cli/skills/smoke-test in Skyvern-AI/skyvern) into .agents/skills/smoke-test in your project. Codex loads it when a task matches its description.

Can I use Diff-Driven Smoke Tests in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Skyvern-AI/skyvern --skill smoke-test -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/smoke-test, .gemini/skills/smoke-test, .github/skills/smoke-test and .opencode/skills/smoke-test in your project.

What does Diff-Driven Smoke Tests need to run?

Going by SKILL.md and its folder, Diff-Driven Smoke Tests needs the command-line tools its instructions call (gh, git, npx, claude, pip and playwright) and credentials named ANTHROPIC_API_KEY and GITHUB_TOKEN. Our summary lists: Skyvern MCP browser tools or Chrome DevTools MCP; A git repository with changes to test; A local or deployed app to open.

Does Diff-Driven Smoke Tests access the network?

SKILL.md contains no URLs. Its commands use gh, git, npx and pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Diff-Driven Smoke Tests safe to install?

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.

What licence does Diff-Driven Smoke Tests use?

Diff-Driven Smoke Tests is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Diff-Driven Smoke Tests use?

About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Diff-Driven Smoke Tests?

Skills that share tags, products or a category with Diff-Driven Smoke Tests: Whole-App Health Sweep (reticlehq/reticle, 1.2k stars), LangBot Testing (langbot-app/LangBot, 18k stars), Agentic Browser Testing (petrkindlmann/qa-skills, 170 stars) and Record E2E Gif (lablup/backend.ai-webui, 133 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Diff-Driven Smoke Tests?

Skyvern-AI (a GitHub organization) maintains it in Skyvern-AI/skyvern, which has 23,172 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 10, 2026.

Source: Skyvern-AI/skyvern on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.