Agent Browser CLI
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking…
Add existing screenshots or screen recordings to a GitHub pull request as a before/after or preview block.
$ npx skills add sanity-io/sanity --skill before-and-after -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sanity-io/sanity before-and-after --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/sanity-io/sanity.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/before-and-after .claude/skills/before-and-after && 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 "before-and-after" agent skill from https://github.com/sanity-io/sanity/tree/main/.agents/skills/before-and-after into .claude/skills/before-and-after/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "before-and-after", 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/sanity-io/sanity/tree/main/.agents/skills/before-and-afterType 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 sanity-io/sanity --skill before-and-after -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sanity-io/sanity before-and-after --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sanity-io/sanity.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/before-and-after .agents/skills/before-and-after && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "before-and-after" agent skill from https://github.com/sanity-io/sanity/tree/main/.agents/skills/before-and-after into .agents/skills/before-and-after/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "before-and-after", 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 sanity-io/sanity --skill before-and-after -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sanity-io/sanity before-and-after --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sanity-io/sanity.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/before-and-after .cursor/skills/before-and-after && 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 "before-and-after" agent skill from https://github.com/sanity-io/sanity/tree/main/.agents/skills/before-and-after into .cursor/skills/before-and-after/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "before-and-after", 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/sanity-io/sanity.git --path .agents/skills/before-and-after--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 sanity-io/sanity --skill before-and-after -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sanity-io/sanity before-and-after --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sanity-io/sanity.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/before-and-after .gemini/skills/before-and-after && 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 "before-and-after" agent skill from https://github.com/sanity-io/sanity/tree/main/.agents/skills/before-and-after into .gemini/skills/before-and-after/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "before-and-after", 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 sanity-io/sanity before-and-afterInstalls 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 sanity-io/sanity --skill before-and-after -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sanity-io/sanity.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/before-and-after .github/skills/before-and-after && 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 "before-and-after" agent skill from https://github.com/sanity-io/sanity/tree/main/.agents/skills/before-and-after into .github/skills/before-and-after/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "before-and-after", 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 sanity-io/sanity --skill before-and-after -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sanity-io/sanity before-and-after --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sanity-io/sanity.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/before-and-after .opencode/skills/before-and-after && 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 "before-and-after" agent skill from https://github.com/sanity-io/sanity/tree/main/.agents/skills/before-and-after into .opencode/skills/before-and-after/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "before-and-after", 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.
before-and-afterAdd existing screenshots or screen recordings to a GitHub pull request as a before/after or preview block.
Before And After is an agent skill from sanity-io/sanity, published by the product's own GitHub organization. Add existing screenshots or screen recordings to a GitHub pull request as a before/after or preview block. Use when a PR needs visual media attached to its description. Browser navigation and capture belong to agent-browser.
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts.
It sits in Productivity & Automation, covering Browser automation. It works with GitHub and Vercel. The repository describes itself as: Sanity Studio – Rapidly configure content workspaces powered by structured content. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit efa15fb. 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.
Ships 1 file in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
ghnodeFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom 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.
Before And After loads about 2.1k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 977 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); the scripts in this folder are not scanned.
The full file from sanity-io/sanity at commit efa15fb, republished under its MIT licence (© sanity-io). 977 words, ~2,075 tokens.
.claude/skills/before-and-after/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Use agent-browser to create the screenshots or recordings. This skill only owns the GitHub PR attachment workflow.
Load the version-matched core instructions with agent-browser skills get core --full and follow them for sessions, navigation, page state, screenshots, and recordings.
If a Vercel URL is protected, load agent-browser skills get protected-vercel-deployments --full. Do not reproduce its authentication workflow here.
Save media under the repository with paths that contain no whitespace, for example:
captures/desktop-before.png
captures/desktop-after.png
captures/mobile-before.png
captures/mobile-after.pngThe formatter supports PNG, JPEG, GIF, WebP, MP4, MOV, and WebM files. Use an --after file without a matching --before file for a net-new preview.
agent-browser record start creates a fresh browser context. It preserves cookies and local storage, but an origin-scoped header used to open a protected Vercel Preview may not carry into that new context. Before recording a protected Preview:
agent-browser skills get protected-vercel-deployments --full.Do not assume that a page which worked before record start will remain authenticated after it.
Agent-browser 0.35.2 and 0.36.0 capture at a hardcoded 10 fps with no CLI or environment override. Inspect the installed version and its recording reference rather than assuming this stays true in later releases. Preserve the source cadence when transcoding: changing the container to 30 or 60 fps only duplicates frames and does not make motion smoother. For animation evidence that requires a higher real frame rate, use a genuinely higher-cadence capture path instead of upsampling agent-browser output.
GitHub vertically centers a shorter image inside a Markdown table cell. For full-page before/after screenshots, make both files the same pixel height so their top edges align:
document.documentElement.scrollHeight in both sessions.--full screenshots.The padding may be transparent or use the capture tool's default canvas. Never add space above the page. For component or section comparisons, capture the same scoped region instead of padding unrelated page content.
Use raw agent-browser eval for this DOM-only adjustment; do not add an image-processing dependency to this skill. Confirm the resulting files have equal pixel dimensions before publishing.
Pass one --before and --after pair for each comparison. Repeat --label to identify multiple pairs:
node skill/scripts/format.mjs \
--before captures/desktop-before.png \
--after captures/desktop-after.png \
--before captures/mobile-before.png \
--after captures/mobile-after.png \
--label Desktop \
--label Mobile \
> /tmp/before-and-after.mdFor an after-only preview:
node skill/scripts/format.mjs \
--after captures/new-page.png \
> /tmp/before-and-after.mdAdd --attribution "<name>" to prefix the block with a > Before/after by <name> line when the PR should credit who produced the evidence.
Images render in tables. Local videos initially render on their own lines so gh --attach can upload them and expose their final attachment URLs. Before/after video tables use the two-step workflow below because gh --attach does not rewrite local references inside <video src> attributes.
Read the existing PR description before inserting a new marked block. Put visual evidence near the top, after the short opening context and an existing Preview or deployment-link section when present, but before implementation-heavy sections such as Details, Changes, Testing, or Notes.
Use this reading order inside the visual evidence:
Headings are semantic hints, not required names. Never invent or rewrite prose merely to create an anchor, and never split a paragraph, list, table, code block, or other Markdown structure. If no safe anchor is clear, append the block rather than risking damage. If a marked block already exists, move or replace that whole block only; preserve every byte of unrelated prose.
After publishing, open the rendered PR and confirm the primary evidence appears before supplemental demos and before the implementation details.
Preserve the existing PR description and replace only this skill's marked block:
PR=123
gh pr view "$PR" --json body --jq .body > /tmp/pr-body.md
node skill/scripts/format.mjs \
--body-file /tmp/pr-body.md \
--before captures/desktop-before.png \
--after captures/desktop-after.png \
> /tmp/pr-body-next.md
ATTACH_ARGS=()
while IFS= read -r file; do
ATTACH_ARGS+=(--attach "$file")
done < <(
node skill/scripts/format.mjs \
--attach-list \
--before captures/desktop-before.png \
--after captures/desktop-after.png
)
gh pr edit "$PR" --body-file /tmp/pr-body-next.md "${ATTACH_ARGS[@]}"Run the formatter and gh from the same directory. gh --attach uploads the local files to GitHub and rewrites their matching local references in the PR body.
After publishing, fetch or open the PR description and confirm that no ./captures/... references remain inside the marked block and that the evidence appears in the intended reading order.
Video comparisons are a first-class two-step publish operation:
Upload the local videos in a temporary PR comment using the normal own-line output and gh pr comment --attach.
Fetch that comment through gh api and collect the stable https://github.com/user-attachments/assets/... URLs in before/after order.
Generate the final HTML table from those URLs and replace the marked PR block:
node skill/scripts/format.mjs \
--body-file /tmp/pr-body.md \
--before-video-url https://github.com/user-attachments/assets/BEFORE_ID \
--after-video-url https://github.com/user-attachments/assets/AFTER_ID \
--label "Desktop hero" \
> /tmp/pr-body-next.md
gh pr edit "$PR" --body-file /tmp/pr-body-next.mdFetch the edited PR body before deleting the temporary comment. Confirm both final URLs are present and no local video paths remain, then delete the comment.
Open the rendered PR and confirm both <video> elements are inside the comparison table, reach a playable ready state, and show controls.
If URL extraction, formatting, or PR verification fails, keep the temporary comment so its uploaded attachments remain recoverable and retry from the last successful phase. Use own-line videos as the simple fallback.
Do not publish captures containing Vercel OIDC tokens, bypass secrets, authenticated query parameters, or browser state files.
scripts/format.mjs is intentionally the only bundled script. It:
Preview;<!-- before-and-after:start/end --> without changing other PR prose.Its arguments version with this skill and are not a public library API.
© sanity-io, 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 1 other file (scripts) in .agents/skills/before-and-after of sanity-io/sanity.
Open the folder on GitHubat commit efa15fb
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in sanity-io/sanity, which our catalogue first saw on October 7, 2026.
Before And After 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 |
|---|---|---|---|---|---|---|
| Before And After this skillsanity-io/sanity | 6.4k | 1 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Agent Browser CLIvercel-labs/agent-browser | 44k | 24 repos | ~864 | Automated safety check: Pass | Apache-2.0 | |
| Browserwingbrowserwing/browserwing | 1.4k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Openclaw Rpalaziobird/openclaw-rpa | 229 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Unicliolo-dot-io/Uni-CLI | 274 | — | ~3.8k | Automated safety check: Notes | Apache-2.0 | |
| Chrome Relayaindeev/agent-chrome-relay | 249 | — | ~669 | Automated safety check: Pass | MIT |
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking…
browserwing/browserwing
Browser automation platform with 78 built-in scripts and full CLI.
laziobird/openclaw-rpa
Record browser, Excel, Word & API actions once — replay without the LLM: faster, cheaper, no hallucinations.
olo-dot-io/Uni-CLI
Comprehensive guide to Uni-CLI — the open Agent-Computer Interface runtime for real software.
aindeev/agent-chrome-relay
Use the person's own signed-in Chrome from the command line, in background tabs, through Chrome Relay.
vercel-labs/agent-browser
Runs agent-browser with headless Chrome inside Vercel Sandbox microVMs so Vercel-deployed apps can automate a browser without binary size limits.
sanity-io/sanity
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
sanity-io/sanity
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities.
sanity-io/sanity
React and Next.js performance optimization guidelines from Vercel Engineering.
sanity-io/sanity
React DevTools CLI for AI agents. An agent skill from sanity-io/sanity.
sanity-io/sanity
Test-driven development with red-green-refactor loop. An agent skill from sanity-io/sanity.
sanity-io/sanity
Measures @sanity/ui v5 side-by-side migration progress — per-component import file counts (v5 alias vs @sanity/ui), JSX instance counts, and styled() instance counts with alias resolution.
Categories
Add existing screenshots or screen recordings to a GitHub pull request as a before/after or preview block. Before And After is an agent skill from sanity-io/sanity, published by the product's own GitHub organization. Add existing screenshots or screen recordings to a GitHub pull request as a before/after or preview block.
Before And After fits situations like: A PR needs visual media attached to its description; tasks that involve Browser automation.
Run `npx skills add sanity-io/sanity --skill before-and-after -a claude-code`. Or copy the skill folder (.agents/skills/before-and-after in sanity-io/sanity) into .claude/skills/before-and-after in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sanity-io/sanity --skill before-and-after -a codex`. Or copy the skill folder (.agents/skills/before-and-after in sanity-io/sanity) into .agents/skills/before-and-after 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 sanity-io/sanity --skill before-and-after -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/before-and-after, .gemini/skills/before-and-after, .github/skills/before-and-after and .opencode/skills/before-and-after in your project.
Going by SKILL.md and its folder, Before And After needs JavaScript for the scripts in its folder and the command-line tools its instructions call (gh and node). Our summary lists: Node.js.
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Before And After is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.3k 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 Before And After: Agent Browser CLI (vercel-labs/agent-browser, 44k stars), Browserwing (browserwing/browserwing, 1.4k stars), Openclaw Rpa (laziobird/openclaw-rpa, 229 stars) and Unicli (olo-dot-io/Uni-CLI, 274 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sanity-io (a GitHub organization, an official publisher) maintains it in sanity-io/sanity, which has 6,352 GitHub stars. The repository holds 34 skills in this directory. The repository was last updated on October 9, 2026.
Source: sanity-io/sanity on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.