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.
Solves web tasks by driving a local Playwright browser one bash command at a time, saving a reusable script, screenshots and an action log for each run.
$ npx skills add microsoft/CUAWright --skill cuawright-web -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install microsoft/CUAWright cuawright-web --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/microsoft/CUAWright.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/cuawright-web .claude/skills/cuawright-web && 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 "cuawright-web" agent skill from https://github.com/microsoft/CUAWright/tree/main/skills/cuawright-web into .claude/skills/cuawright-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cuawright-web", 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/microsoft/CUAWright/tree/main/skills/cuawright-webType 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 microsoft/CUAWright --skill cuawright-web -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install microsoft/CUAWright cuawright-web --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/CUAWright.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/cuawright-web .agents/skills/cuawright-web && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cuawright-web" agent skill from https://github.com/microsoft/CUAWright/tree/main/skills/cuawright-web into .agents/skills/cuawright-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cuawright-web", 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 microsoft/CUAWright --skill cuawright-web -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install microsoft/CUAWright cuawright-web --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/CUAWright.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/cuawright-web .cursor/skills/cuawright-web && 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 "cuawright-web" agent skill from https://github.com/microsoft/CUAWright/tree/main/skills/cuawright-web into .cursor/skills/cuawright-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cuawright-web", 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/microsoft/CUAWright.git --path skills/cuawright-web--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 microsoft/CUAWright --skill cuawright-web -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install microsoft/CUAWright cuawright-web --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/CUAWright.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/cuawright-web .gemini/skills/cuawright-web && 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 "cuawright-web" agent skill from https://github.com/microsoft/CUAWright/tree/main/skills/cuawright-web into .gemini/skills/cuawright-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cuawright-web", 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 microsoft/CUAWright cuawright-webInstalls 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 microsoft/CUAWright --skill cuawright-web -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/microsoft/CUAWright.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/cuawright-web .github/skills/cuawright-web && 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 "cuawright-web" agent skill from https://github.com/microsoft/CUAWright/tree/main/skills/cuawright-web into .github/skills/cuawright-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cuawright-web", 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 microsoft/CUAWright --skill cuawright-web -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install microsoft/CUAWright cuawright-web --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/CUAWright.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/cuawright-web .opencode/skills/cuawright-web && 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 "cuawright-web" agent skill from https://github.com/microsoft/CUAWright/tree/main/skills/cuawright-web into .opencode/skills/cuawright-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cuawright-web", 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.
cuawright-webSolves web tasks by driving a local Playwright browser one bash command at a time, saving a reusable script, screenshots and an action log for each run.
In Claude Code the agent takes the place of the Webwright loop. It runs Playwright commands against a local browser through the Bash tool, reads its own screenshots with the Read tool and checks success against a plan.md file, so no model API keys are needed. Work stays inside one chosen workspace directory under a fixed contract: a final_script.py, and for each clean execution a numbered folder under final_runs holding the script, screenshots named by step and action, and a final_script_log.txt.
There are two modes. The default solves the task for the literal values you gave and starts from a plain prompt or /cuawright:run. The CLI-tool mode, started with /cuawright:craft or by asking to parameterize the script, produces a reusable command-line script with a Google-style Args docstring and argparse flags that default to the concrete values. Setup is pip install -e . from the repo root plus playwright install firefox. Reference files cover Playwright patterns, the workflow and CLI tool mode, and desktop tasks use a separate runtime.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ff44a05. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadWriteEditbashread_filewrite_fileFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pipplaywrightFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use 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:
OPENAI_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
CUAWright Web Task Automation loads about 2k tokens when it runs. Until then it costs about 108 tokens; SKILL.md has 930 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 noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, Write, Edit, bash, read_file, write_fileAutomated 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 microsoft/CUAWright at commit ff44a05, republished under its MIT licence (© microsoft). 930 words, ~1,995 tokens.
.claude/skills/cuawright-web/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.This skill drives the Webwright browser subsystem in cuawright.webwright.
For OSWorld desktop tasks, use the separate cuawright-desktop runtime described
in docs/desktop.md at the repository root.
You are the Webwright agent. Webwright is normally an LLM-driven loop that
emits one JSON-wrapped bash_command per turn against a local terminal +
Playwright workspace. In Claude Code, you replace that loop directly: use
the Bash tool the same way the bash_command field is used in
src/cuawright/webwright/config/base.yaml. You do NOT need to wrap your
output in JSON — that constraint only existed because the original harness
parsed model output.
This skill keeps the workspace contract (plan.md, final_runs/run_<id>/
folders, instrumented final_script.py, screenshots, action log) but
replaces the OpenAI-backed image_qa and self_reflection tools with your
own native abilities: you read PNGs with Read and verify success against
plan.md yourself. No OPENAI_API_KEY or other model API keys required.
final_script.py solves the task for the literal
values the user provided. Triggered by a plain prompt or by
/cuawright:run <task>.final_script.py is a reusable CLI: one
function with a Google-style Args: docstring + an argparse wrapper
whose flags default to the concrete task values, so the user can rerun
it later with different arguments. Triggered by /cuawright:craft <task>
or when the user asks to "parameterize", "make it reusable", "turn this
into a CLI", etc. See reference/cli_tool_mode.md.From the CUAWright repo root:
pip install -e .
playwright install firefoxNo API keys needed for this skill.
Mirror what base.yaml's instance_template requires:
WORKSPACE_DIR (e.g. outputs/<task_id>/) and work only there.
Keep all generated code, screenshots, logs, and notes inside it.final_script.py.final_runs/run_<id>/ folder. <id> is an integer higher than any
existing run_* folder.final_runs/run_<id>/final_script.pyfinal_runs/run_<id>/screenshots/final_execution_<step_number>_<action>.pngfinal_runs/run_<id>/final_script_log.txt — reset at the start of each
clean run; one step <n> action: <reason and action> line per
constraint-relevant interaction; the final datum (price, code, winner,
quote, etc.) printed at the end.playwright.firefox.launch(headless=True). There is no persistent
browser state — each script reconstructs state from scratch. (Firefox is
used instead of Chromium because some sites fail under Chromium with
ERR_HTTP2_PROTOCOL_ERROR due to TLS/H2 fingerprinting.)viewport={"width": 1280, "height": 1800}. Never call
page.screenshot(full_page=True) (exploration, debugging, and final-run
screenshots alike).Plan. Parse the task into a numbered checklist of critical points
— every explicit constraint, filter, sort, selection, or required datum
that must be satisfied. Write it to WORKSPACE_DIR/plan.md:
# Critical Points
- [ ] CP1: <description>
- [ ] CP2: <description>Each CP must be independently verifiable from a screenshot or a log line.
Explore. Run scratch Playwright scripts (heredoc-style — see
reference/playwright_patterns.md) to discover stable selectors and
confirm filter controls exist. Use Read on saved PNGs to inspect UI
state. Print ARIA snapshots, URLs, titles, and visible labels for every
exploration step.
Author final_script.py in a fresh final_runs/run_<id>/. Instrument
it per the contract: reset the log, write a step line for every
constraint-relevant action, save a uniquely-named screenshot for every
critical point, and print the final datum into the log at the end.
Execute the final script once. Capture stdout/stderr.
Self-verify (this replaces cuawright.webwright.tools.self_reflection). Walk
plan.md:
Read each cited PNG and confirm the evidence is unambiguous (the
filter chip is visible, the date matches exactly, the result list
reflects the constraint, etc.).final_script.py,
re-run inside final_runs/run_<id+1>/, and re-verify.Done. Only when every CP in plan.md is checked off with cited
evidence. Report the final datum to the user.
cheapest, best-selling, most reviewed,
highest-rated, lowest, latest, …) must be grounded in the site's
actual sort/filter — not in your own ordering of results.final_script_log.txt.playwright, httpx,
pydantic, etc. are already installed.final_script.py exists, prefer incremental edits (Edit) over
rewriting the whole file.reference/playwright_patterns.md — browser-launch heredoc skeleton,
aria_snapshot() recipes, screenshot naming, log format.reference/workflow.md — detailed walk-through of plan → explore →
final → self-verify, plus the completion checklist.reference/cli_tool_mode.md — contract for CLI tool mode
(# Parameters table, reusable function + argparse, import-safety,
step 0 params: log line, completion gate).Optional shortcuts under commands/:
/cuawright:run <task> — default one-shot mode./cuawright:craft <task> — CLI tool mode.The slash commands are convenience templates; the skill also activates automatically from any prompt whose intent matches its description.
© microsoft, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files in skills/cuawright-web of microsoft/CUAWright.
Open the folder on GitHubat commit ff44a05
CUAWright Web Task Automation 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 |
|---|---|---|---|---|---|---|
| CUAWright Web Task Automation this skillmicrosoft/CUAWright | 6k | — | ~2k | Automated safety check: Notes | MIT | |
| Skyvern Browser AutomationSkyvern-AI/skyvern | 23k | 1 repos | ~2.9k | Automated safety check: Pass | AGPL-3.0 | |
| AI Search Hubminsight-ai-info/AI-Search-Hub | 1.3k | — | ~1.3k | Automated safety check: Pass | None | |
| Ego Browserkwakseongjae/oh-my-design | 531 | 2 repos | ~4.9k | Automated safety check: Pass | MIT | |
| Browser Controlanomalyco/browser-control | 440 | — | ~8.3k | Automated safety check: Pass | MIT | |
| Playwright Bowserdisler/bowser | 265 | — | ~1.1k | Automated safety check: Notes | None |
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.
minsight-ai-info/AI-Search-Hub
Run the AI Search Hub browser automation scripts for Yuanbao, LongCat, Doubao, Qwen, Gemini, Grok, and MiniMax.
kwakseongjae/oh-my-design
When you need a browser, read this Skill by default. An agent skill from kwakseongjae/oh-my-design.
anomalyco/browser-control
Drive the user's existing Chromium-family browser with deterministic Playwright.
disler/bowser
Headless browser automation using Playwright CLI. An agent skill from disler/bowser.
rengwu/wayfinder-maps
Build, launch and drive wayfinder-maps to verify a change end-to-end (server + headless browser).
Works with
Categories
Solves web tasks by driving a local Playwright browser one bash command at a time, saving a reusable script, screenshots and an action log for each run. In Claude Code the agent takes the place of the Webwright loop.md file, so no model API keys are needed.
CUAWright Web Task Automation fits situations like: automating a multi-step web flow such as a search, filter or form fill; extracting data from a site while keeping screenshot evidence; turning a one-off browser task into a reusable parameterized CLI script.
Run `npx skills add microsoft/CUAWright --skill cuawright-web -a claude-code`. Or copy the skill folder (skills/cuawright-web in microsoft/CUAWright) into .claude/skills/cuawright-web in your project. Claude Code loads it when a task matches its description.
Run `npx skills add microsoft/CUAWright --skill cuawright-web -a codex`. Or copy the skill folder (skills/cuawright-web in microsoft/CUAWright) into .agents/skills/cuawright-web 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 microsoft/CUAWright --skill cuawright-web -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cuawright-web, .gemini/skills/cuawright-web, .github/skills/cuawright-web and .opencode/skills/cuawright-web in your project.
Going by SKILL.md and its folder, CUAWright Web Task Automation needs the command-line tools its instructions call (pip and playwright) and credentials named OPENAI_API_KEY. Our summary lists: Python with the CUAWright package installed through pip install -e .; Playwright with Firefox installed. Its frontmatter pre-approves these tools: Bash, Read, Write, Edit, bash, read_file, write_file.
SKILL.md contains no URLs. Its commands use 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 notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
CUAWright Web Task Automation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 8k 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 CUAWright Web Task Automation: Skyvern Browser Automation (Skyvern-AI/skyvern, 23k stars), AI Search Hub (minsight-ai-info/AI-Search-Hub, 1.3k stars), Ego Browser (kwakseongjae/oh-my-design, 531 stars) and Browser Control (anomalyco/browser-control, 440 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
microsoft (a GitHub organization, an official publisher) maintains it in microsoft/CUAWright, which has 6,043 GitHub stars. The repository was last updated on October 6, 2026.
Source: microsoft/CUAWright on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.