Web Application Testing
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
Traverse all interactive elements on the page — click clickables, fill inputs — and verify no errors.
$ npx skills add MigoXLab/webqa-agent --skill button-check -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install MigoXLab/webqa-agent button-check --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/MigoXLab/webqa-agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/webqa_agent/executor/flash/skills/button-check .claude/skills/button-check && 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 "button-check" agent skill from https://github.com/MigoXLab/webqa-agent/tree/main/webqa_agent/executor/flash/skills/button-check into .claude/skills/button-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "button-check", 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/MigoXLab/webqa-agent/tree/main/webqa_agent/executor/flash/skills/button-checkType 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 MigoXLab/webqa-agent --skill button-check -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install MigoXLab/webqa-agent button-check --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MigoXLab/webqa-agent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/webqa_agent/executor/flash/skills/button-check .agents/skills/button-check && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "button-check" agent skill from https://github.com/MigoXLab/webqa-agent/tree/main/webqa_agent/executor/flash/skills/button-check into .agents/skills/button-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "button-check", 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 MigoXLab/webqa-agent --skill button-check -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install MigoXLab/webqa-agent button-check --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MigoXLab/webqa-agent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/webqa_agent/executor/flash/skills/button-check .cursor/skills/button-check && 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 "button-check" agent skill from https://github.com/MigoXLab/webqa-agent/tree/main/webqa_agent/executor/flash/skills/button-check into .cursor/skills/button-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "button-check", 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/MigoXLab/webqa-agent.git --path webqa_agent/executor/flash/skills/button-check--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 MigoXLab/webqa-agent --skill button-check -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install MigoXLab/webqa-agent button-check --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MigoXLab/webqa-agent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/webqa_agent/executor/flash/skills/button-check .gemini/skills/button-check && 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 "button-check" agent skill from https://github.com/MigoXLab/webqa-agent/tree/main/webqa_agent/executor/flash/skills/button-check into .gemini/skills/button-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "button-check", 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 MigoXLab/webqa-agent button-checkInstalls 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 MigoXLab/webqa-agent --skill button-check -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/MigoXLab/webqa-agent.git skills-src && mkdir -p .github/skills && cp -r skills-src/webqa_agent/executor/flash/skills/button-check .github/skills/button-check && 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 "button-check" agent skill from https://github.com/MigoXLab/webqa-agent/tree/main/webqa_agent/executor/flash/skills/button-check into .github/skills/button-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "button-check", 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 MigoXLab/webqa-agent --skill button-check -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install MigoXLab/webqa-agent button-check --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MigoXLab/webqa-agent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/webqa_agent/executor/flash/skills/button-check .opencode/skills/button-check && 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 "button-check" agent skill from https://github.com/MigoXLab/webqa-agent/tree/main/webqa_agent/executor/flash/skills/button-check into .opencode/skills/button-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "button-check", 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.
button-checkTraverse all interactive elements on the page — click clickables, fill inputs — and verify no errors.
Button Check is an agent skill from MigoXLab/webqa-agent. Traverse all interactive elements on the page — click clickables, fill inputs — and verify no errors. Always return to the baseline page before testing the next element.
Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA. The repository describes itself as: Autonomous web browser agent that audits performance, functionality & UX for engineers and vibe-coding creators. 网站自主评估测试 Agent,支持 GUI/CLI 一键完成性能、功能使用与交互体验的测试评估. The licence is Apache-2.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit aa156d4. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Button Check loads about 2.2k tokens when it runs. Until then it costs about 46 tokens; SKILL.md has 1,062 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 MigoXLab/webqa-agent at commit aa156d4, republished under its Apache-2.0 licence (© MigoXLab). 1,062 words, ~2,158 tokens.
.claude/skills/button-check/SKILL.md (or your agent's skills folder).Systematically test every interactive element on the page:
After each test, return to the baseline page so the next element is tested from the same starting state.
Important: Before each tool call, output a short one-line description of what you are about to do (e.g. "Filling the search box with 'hello'"). This helps generate readable step-by-step reports.
Skip for single-element tests — use click or fill directly instead.
Call take_snapshot to get the accessibility tree. Group elements into two buckets by role:
Clickable bucket — driven by click:
button, link, tabcheckbox, radio, switchmenuitemInput bucket — driven by fill (or type_text / press_key for keyboard-only widgets):
textbox, searchboxcombobox (treat as click-to-open if no editable affordance is visible, then fill if a textbox appears)slider (fill with a numeric mid-range value)Each element has a uid (e.g. uid=1_5), a role, and a label. Record {uid, role, label, bucket} for every element.
Cap at 50 elements total. If more exist, prioritize:
button and link (core interactive)tab, menuitem (navigation)Snapshot misses some elements? Icon-only buttons without ARIA attributes are invisible to take_snapshot. Mention in the report instead of erroring.
Record the baseline state before testing:
take_screenshot with fullPage: true to capture the entire pageCRITICAL RULE: One element per turn. Do NOT batch multiple click / fill calls in a single turn. Each element must follow the full cycle below before moving to the next. Batching loses the ability to attribute errors to specific elements.
For each element in the list:
Pick the action by bucket:
Clickable bucket — call exactly these together in one turn:
click with includeSnapshot: true — clicks the element and returns the post-click snapshottake_screenshot with fullPage: true// Tool 1: click
{ "uid": "<element_uid>", "includeSnapshot": true }
// Tool 2: take_screenshot (same turn)
{ "fullPage": true }Input bucket — call exactly these together in one turn:
fill with a representative sample value (see below)take_screenshot with fullPage: true// Tool 1: fill
{ "uid": "<element_uid>", "value": "<sample>" }
// Tool 2: take_screenshot (same turn)
{ "fullPage": true }Pick the <sample> value by label / placeholder / role context:
textbox / searchbox → 测试输入 (or any short Chinese/English string that obviously isn't real data)test@example.comslider) → 123type=password or label "密码" / "password") → Test1234!combobox with no visible textbox → use click first to open the popup, then in the next turn click an option uidFor widgets that don't accept fill (custom rich editors, contenteditable blocks, sliders with no value attr), fall back to type_text after focusing via click.
The fullPage: true parameter is required — default viewport-only screenshots miss changes below the fold (form validation errors, expanded sections, content loaded at the bottom).
Check for errors using:
list_console_messages — new JS errors since last checklist_network_requests — failed requests (4xx/5xx)These are read-only and can be batched with the screenshot in 3a.
Pass criteria: No new JS errors, no failed network requests, the page responds as expected:
Fail criteria: JS error appears, network request returns 4xx/5xx, page crashes, validation message says the input is invalid for a sample that should be accepted.
After every element test, compare the current URL to the baseline URL recorded in Phase 2.
If the URL changed (clicked a link, form submission redirected, etc.), restore the baseline before continuing — otherwise subsequent uids belong to a different page and you'll click the wrong things:
navigate_page with type: "back". This preserves session state and the back-stack.take_snapshot. If still not on the baseline URL, go to step 3.navigate_page with url: "<baseline_url>". This is the fallback for SPAs that swallow the back action.take_snapshot after returning. The element ids from the original snapshot are now stale; you need fresh ones to keep iterating.If the URL did NOT change (in-page modal opened, input filled, tab switched, etc.):
press_key with key: "Escape" or click the dismiss buttonfill setting value: "" so the next test starts from a clean fieldtake_snapshot (uids are still valid)If you can't return after 2 attempts, stop testing the rest of the list and record:
⚠️ Lost baseline at element <uid> "<label>"; remaining N elements skipped because navigation could not be restored.Then jump to Phase 4.
After all elements are tested (or the lost-baseline abort triggered), compile results:
遍历测试完成:共检测 N 个交互元素 (M 个点击 / K 个输入),X 个正常,Y 个发现问题,Z 个跳过。
发现的问题:
● 网络请求失败 (2 个):
- Button "提交" (uid=1_12) — POST /api/submit 返回 500
- Link "下载报告" (uid=1_25) — GET /report.pdf 返回 404
● JS 控制台报错 (1 个):
- Button "删除" (uid=1_8) — TypeError: cannot read property 'id' of undefined
● 输入校验异常 (1 个):
- Textbox "邮箱" (uid=1_30) — 接受非邮箱字符串而未提示
● 跳过 (1 个):
- Combobox "城市" (uid=1_15) — 弹层未出现,无可选项Include a final take_screenshot with fullPage: true in your closing message.
Set overall status:
failed if any element caused JS errors / 4xx-5xx / lost-baseline abortwarning if elements were skipped (not visible, popup didn't open, lost baseline mid-run)passed if all elements tested without issuesclicks, two fills, or a click+fill. Each element needs its own action → screenshot → verify cycle.take_screenshot(fullPage: true) after every action — viewport-only screenshots miss off-screen changes.list_console_messages + list_network_requests + take_screenshot can run in the same turn.take_snapshot to save tokens.<a href> pointing to external domains, verify the href value from the snapshot rather than navigating away.cdp_upload_file directly if a separate task requires it).© MigoXLab, Apache-2.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 webqa_agent/executor/flash/skills/button-check of MigoXLab/webqa-agent.
Open the folder on GitHubat commit aa156d4
Button Check 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 |
|---|---|---|---|---|---|---|
| Button Check this skillMigoXLab/webqa-agent | 232 | — | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| Web Application Testinganthropics/skills | 180k | 51 repos | ~966 | Automated safety check: Pass | Apache-2.0 | |
| Diagnosing Bugsfossasia/eventyay-interpretation | 1.6k | 31 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| TDDfossasia/eventyay-interpretation | 1.6k | 28 repos | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| TDD WorkflowhellangleZ/burn-in-cceverywhere-ralph | 112 | 11 repos | ~2.4k | Automated safety check: Pass | None | |
| TDDsanity-io/sanity | 6.4k | 20 repos | ~1k | Automated safety check: Pass | MIT |
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
fossasia/eventyay-interpretation
Diagnosis loop for hard bugs and performance regressions. An agent skill from fossasia/eventyay-interpretation.
fossasia/eventyay-interpretation
Test-driven development. An agent skill from fossasia/eventyay-interpretation.
hellangleZ/burn-in-cceverywhere-ralph
A skill your agent uses when writing new features, fixing bugs, or refactoring code.
sanity-io/sanity
Test-driven development with red-green-refactor loop. An agent skill from sanity-io/sanity.
Ibrahim-3d/orchestrator-supaconductor
A skill your agent uses when working with Conductor's context-driven development methodology, managing project context artifacts, or understanding the relationship between product.md, tech-stack.md…
MigoXLab/webqa-agent
UI audit for hierarchy, accessibility, and UX. An agent skill from MigoXLab/webqa-agent.
MigoXLab/webqa-agent
Run a Nuclei security scan against the target URL and report findings by severity.
MigoXLab/webqa-agent
Decompose a task into steps with completion checkpoints. An agent skill from MigoXLab/webqa-agent.
MigoXLab/webqa-agent
Structured error recovery for failed or ineffective browser actions.
MigoXLab/webqa-agent
Use WebQA to test websites, web pages, URLs, login flows, search flows, forms, navigation, and core user journeys with an AI browser QA agent.
Categories
Traverse all interactive elements on the page — click clickables, fill inputs — and verify no errors. Button Check is an agent skill from MigoXLab/webqa-agent. Traverse all interactive elements on the page — click clickables, fill inputs — and verify no errors.
Button Check fits situations like: testing & QA work in your project.
Run `npx skills add MigoXLab/webqa-agent --skill button-check -a claude-code`. Or copy the skill folder (webqa_agent/executor/flash/skills/button-check in MigoXLab/webqa-agent) into .claude/skills/button-check in your project. Claude Code loads it when a task matches its description.
Run `npx skills add MigoXLab/webqa-agent --skill button-check -a codex`. Or copy the skill folder (webqa_agent/executor/flash/skills/button-check in MigoXLab/webqa-agent) into .agents/skills/button-check 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 MigoXLab/webqa-agent --skill button-check -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/button-check, .gemini/skills/button-check, .github/skills/button-check and .opencode/skills/button-check in your project.
SKILL.md names no scripts, command-line tools or credentials: Button Check is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Button Check is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.6k 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 Button Check: Web Application Testing (anthropics/skills, 180k stars), Diagnosing Bugs (fossasia/eventyay-interpretation, 1.6k stars), TDD (fossasia/eventyay-interpretation, 1.6k stars) and TDD Workflow (hellangleZ/burn-in-cceverywhere-ralph, 112 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
MigoXLab (a GitHub organization) maintains it in MigoXLab/webqa-agent, which has 232 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on July 2, 2026.
Source: MigoXLab/webqa-agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.