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.
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.
$ npx skills add Skyvern-AI/skyvern --skill smoke-test -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Skyvern-AI/skyvern smoke-test --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "smoke-test" agent skill from https://github.com/Skyvern-AI/skyvern/tree/main/skyvern/cli/skills/smoke-test into .claude/skills/smoke-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smoke-test", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Skyvern-AI/skyvern/tree/main/skyvern/cli/skills/smoke-testType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Skyvern-AI/skyvern --skill smoke-test -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Skyvern-AI/skyvern smoke-test --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Skyvern-AI/skyvern.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skyvern/cli/skills/smoke-test .agents/skills/smoke-test && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "smoke-test" agent skill from https://github.com/Skyvern-AI/skyvern/tree/main/skyvern/cli/skills/smoke-test into .agents/skills/smoke-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smoke-test", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Skyvern-AI/skyvern --skill smoke-test -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Skyvern-AI/skyvern smoke-test --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Skyvern-AI/skyvern.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skyvern/cli/skills/smoke-test .cursor/skills/smoke-test && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "smoke-test" agent skill from https://github.com/Skyvern-AI/skyvern/tree/main/skyvern/cli/skills/smoke-test into .cursor/skills/smoke-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smoke-test", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Skyvern-AI/skyvern.git --path skyvern/cli/skills/smoke-test--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Skyvern-AI/skyvern --skill smoke-test -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Skyvern-AI/skyvern smoke-test --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Skyvern-AI/skyvern.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skyvern/cli/skills/smoke-test .gemini/skills/smoke-test && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "smoke-test" agent skill from https://github.com/Skyvern-AI/skyvern/tree/main/skyvern/cli/skills/smoke-test into .gemini/skills/smoke-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smoke-test", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Skyvern-AI/skyvern smoke-testInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Skyvern-AI/skyvern --skill smoke-test -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Skyvern-AI/skyvern.git skills-src && mkdir -p .github/skills && cp -r skills-src/skyvern/cli/skills/smoke-test .github/skills/smoke-test && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "smoke-test" agent skill from https://github.com/Skyvern-AI/skyvern/tree/main/skyvern/cli/skills/smoke-test into .github/skills/smoke-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smoke-test", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Skyvern-AI/skyvern --skill smoke-test -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Skyvern-AI/skyvern smoke-test --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Skyvern-AI/skyvern.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skyvern/cli/skills/smoke-test .opencode/skills/smoke-test && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "smoke-test" agent skill from https://github.com/Skyvern-AI/skyvern/tree/main/skyvern/cli/skills/smoke-test into .opencode/skills/smoke-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smoke-test", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
smoke-testReads 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.
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.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f5f3f28. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
ghgitnpxclaudepipplaywrightFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names these keys or tokens, usually read from environment variables:
ANTHROPIC_API_KEYGITHUB_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
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.
.claude/skills/smoke-test/SKILL.md (or your agent's skills folder).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.
/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# 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 uncommittedPick whichever diff has content. If both are empty, there is nothing diff-driven to test.
Read the full contents of every changed file that affects behavior:
.tsx, .jsx, .ts, .js, .css, .htmlLook for:
| Mode | Trigger | Primary validation |
|---|---|---|
| Frontend/browser | UI/routes/components/styles changed | Browser smoke tests against the dev server |
| Backend API | Route handlers, request/response schemas, or externally visible API behavior changed | Start backend locally and run smoke tests against changed endpoints |
| Backend-internal | Services/workers/business logic changed without public API surface changes | Repo-native fast checks plus targeted tests |
| Mixed | Frontend/browser and backend changed together | Backend validation first, then frontend smoke tests |
Use these rules:
Mixed.backend-internal.Run smoke tests via Skyvern browser tools against the dev server. Validate the specific UI changes plus 1-2 adjacent regression checks.
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.
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.
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.
Try Skyvern browser tools first. Fall back to Chrome DevTools MCP if Skyvern MCP is unavailable.
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.
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 managementtake_screenshot - capture viewport (save to a path within workspace roots)take_snapshot - get page structure with element uids for interactionclick / fill / press_key - interact with elements by uidevaluate_script - run JS for health gates and data extractionwait_for - wait for content to loadChrome 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.
Check whether the app requires authentication:
list_pages. If the user already
has the app open and authenticated, navigate_page inherits their session. No auth
step needed.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.local=true against an
unauthenticated dev server, or test only public-facing pages.If the user provided a URL argument, skip startup and use that URL directly.
Otherwise, auto-detect common local ports:
5173, 3000, 3001, 8080, 8000, 4200If 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.
For each testable surface identified in Steps 2-3, generate a smoke test case as a numbered action sequence using Skyvern browser tools.
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()For localhost URLs, create a local browser session:
skyvern_browser_session_create(local=true, timeout=15)For publicly reachable URLs, create a cloud session instead:
skyvern_browser_session_create(timeout=15)For each test case, run its action sequence. Every test starts with skyvern_navigate:
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.
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:
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:
skyvern_act(prompt="Fill Company Name with 'Test Corp', click Save")
skyvern_validate(prompt="Success toast visible, no error state")
skyvern_screenshot()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:
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:
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.
For each test, record:
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.
Embed each screenshot from somewhere the PR can render it:
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):
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.
## Smoke Test Report
### Changes Tested
- <summary of what changed, from the diff>
### Results
| Flow | Result | Screenshot |
|------|--------|------------|
| Workflows page | PASS |  |
| Task detail | PASS |  |
| Settings save | FAIL |  |
### Verdict
2/3 tests passed. 1 issue found.Every test row must have a screenshot. The screenshot is the primary evidence.
After generating the report, persist it to the pull request as a sticky comment so the evidence survives beyond the conversation.
PR_NUMBER was set in Step 7. If it is "draft" (no PR found):
.qa/latest-smoke-report.md in the project root (create the directory if needed)..qa/latest-smoke-report.md. Run /smoke-test again after creating a PR to post it."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):
# 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"<!-- skyvern-smoke-test-report --> marker so repeated runs update the same comment instead of creating duplicates.gh is not available or not authenticated, fall back to saving the report locally and tell the user.| Problem | Action |
|---|---|
| No git diff found | Ask what behavior to validate, then fall back to explore mode |
| App not running and no startup command found | Start the most direct repo-documented local command; only ask user if no command exists or startup fails |
| Chrome DevTools MCP browser profile locked | Kill stale Chrome processes, retry. If still locked, fall back to Skyvern |
| Auth redirect detected | Tell user to authenticate in the Chrome DevTools browser, wait for confirmation |
| Skyvern browser tools also unavailable | Use Playwright directly (npx playwright) as last resort |
| Health gate fails on navigation | Mark the test as FAIL, take a screenshot anyway for evidence, continue |
| Screenshot upload fails | Save 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." |
To run /smoke-test in a GitHub Action (or any CI), the runner needs:
claude -p "/smoke-test")pip install skyvern && playwright install chromium (required for local=true sessions that can reach localhost)Cloud browser sessions (local=false) work for publicly reachable URLs (e.g., preview deploys) without Playwright installed, but cannot reach localhost.
Always close the browser session when done:
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
Just SKILL.md in skyvern/cli/skills/smoke-test of Skyvern-AI/skyvern.
Open the folder on GitHubat commit f5f3f28
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Diff-Driven Smoke Tests this skillSkyvern-AI/skyvern | 23k | — | ~5.2k | Automated safety check: Pass | AGPL-3.0 | |
| Whole-App Health Sweepreticlehq/reticle | 1.2k | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| LangBot Testinglangbot-app/LangBot | 18k | — | ~1k | Automated safety check: Notes | Apache-2.0 | |
| Agentic Browser Testingpetrkindlmann/qa-skills | 170 | — | ~4.5k | Automated safety check: Pass | MIT | |
| Record E2E Giflablup/backend.ai-webui | 133 | — | ~907 | Automated safety check: Notes | LGPL-3.0 | |
| Team Frontend Debugcatlog22/Claude-Code-Workflow | 2.1k | — | ~2.8k | Automated safety check: Notes | MIT |
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.
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.
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.
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.
catlog22/Claude-Code-Workflow
Frontend debugging team using Chrome DevTools MCP. An agent skill from catlog22/Claude-Code-Workflow.
bluzir/claude-code-design
First-run setup + health check. An agent skill from bluzir/claude-code-design.
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.
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.
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.
Skyvern-AI/skyvern
Smoke-tests a Skyvern deployment by checking the backend API, frontend rendering, browser session provisioning and workflow execution in sequence.
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.
Works with
Categories
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.