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…
Drives browser surfaces inside cmux from the command line: open sites, snapshot elements, act on refs, wait for state changes and extract data.
$ npx skills add disler/learning-cmux-with-agents --skill cmux-browser -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install disler/learning-cmux-with-agents cmux-browser --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/disler/learning-cmux-with-agents.git skills-src && mkdir -p .claude/skills && cp -r skills-src/ai_docs/cmux-skills/cmux-browser .claude/skills/cmux-browser && 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 "cmux-browser" agent skill from https://github.com/disler/learning-cmux-with-agents/tree/main/ai_docs/cmux-skills/cmux-browser into .claude/skills/cmux-browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cmux-browser", 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/disler/learning-cmux-with-agents/tree/main/ai_docs/cmux-skills/cmux-browserType 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 disler/learning-cmux-with-agents --skill cmux-browser -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install disler/learning-cmux-with-agents cmux-browser --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/learning-cmux-with-agents.git skills-src && mkdir -p .agents/skills && cp -r skills-src/ai_docs/cmux-skills/cmux-browser .agents/skills/cmux-browser && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cmux-browser" agent skill from https://github.com/disler/learning-cmux-with-agents/tree/main/ai_docs/cmux-skills/cmux-browser into .agents/skills/cmux-browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cmux-browser", 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 disler/learning-cmux-with-agents --skill cmux-browser -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install disler/learning-cmux-with-agents cmux-browser --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/learning-cmux-with-agents.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/ai_docs/cmux-skills/cmux-browser .cursor/skills/cmux-browser && 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 "cmux-browser" agent skill from https://github.com/disler/learning-cmux-with-agents/tree/main/ai_docs/cmux-skills/cmux-browser into .cursor/skills/cmux-browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cmux-browser", 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/disler/learning-cmux-with-agents.git --path ai_docs/cmux-skills/cmux-browser--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 disler/learning-cmux-with-agents --skill cmux-browser -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install disler/learning-cmux-with-agents cmux-browser --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/learning-cmux-with-agents.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/ai_docs/cmux-skills/cmux-browser .gemini/skills/cmux-browser && 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 "cmux-browser" agent skill from https://github.com/disler/learning-cmux-with-agents/tree/main/ai_docs/cmux-skills/cmux-browser into .gemini/skills/cmux-browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cmux-browser", 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 disler/learning-cmux-with-agents cmux-browserInstalls 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 disler/learning-cmux-with-agents --skill cmux-browser -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/disler/learning-cmux-with-agents.git skills-src && mkdir -p .github/skills && cp -r skills-src/ai_docs/cmux-skills/cmux-browser .github/skills/cmux-browser && 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 "cmux-browser" agent skill from https://github.com/disler/learning-cmux-with-agents/tree/main/ai_docs/cmux-skills/cmux-browser into .github/skills/cmux-browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cmux-browser", 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 disler/learning-cmux-with-agents --skill cmux-browser -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install disler/learning-cmux-with-agents cmux-browser --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/learning-cmux-with-agents.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/ai_docs/cmux-skills/cmux-browser .opencode/skills/cmux-browser && 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 "cmux-browser" agent skill from https://github.com/disler/learning-cmux-with-agents/tree/main/ai_docs/cmux-skills/cmux-browser into .opencode/skills/cmux-browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cmux-browser", 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.
cmux-browserDrives browser surfaces inside cmux from the command line: open sites, snapshot elements, act on refs, wait for state changes and extract data.
The workflow is to open or target a browser surface, confirm navigation with get url, take an interactive snapshot to obtain fresh element refs, act with those refs (click, fill, type, select, press), wait for the page to change and snapshot again after any DOM or navigation change. Surfaces are addressed with short refs such as surface:N, found with cmux identify, and one surface should be kept per task. If get url returns an empty value or about:blank, the agent navigates first instead of waiting on load state.
Wait commands can target a selector, visible text, a URL fragment or a load state, each with a timeout. Example flows cover form submission, clearing an input and a stable loop of navigate, verify, wait, snapshot, act and snapshot. Reference notes cover commands, snapshot refs, authentication and saved state, proxy support, session management and video recording, and templates for authenticated sessions, capture workflows and form automation are provided.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 6eaacab. 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 script files (Shell), which the agent can run.
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.
cmux Browser Automation loads about 1.3k tokens when it runs, and up to ~4.9k if it reads all its reference files. Until then it costs about 44 tokens; SKILL.md has 316 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 disler/learning-cmux-with-agents at commit 6eaacab, republished under its MIT licence (© disler). 316 words, ~1,336 tokens.
.claude/skills/cmux-browser/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.Use this skill for browser tasks inside cmux webviews.
get url before waiting or snapshotting.--interactive) to get fresh element refs.click, fill, type, select, press).cmux --json browser open https://example.com
# use returned surface ref, for example: surface:7
cmux browser surface:7 get url
cmux browser surface:7 wait --load-state complete --timeout-ms 15000
cmux browser surface:7 snapshot --interactive
cmux browser surface:7 fill e1 "hello"
cmux --json browser surface:7 click e2 --snapshot-after
cmux browser surface:7 snapshot --interactive# identify current context
cmux identify --json
# open routed to a specific topology target
cmux browser open https://example.com --workspace workspace:2 --window window:1 --jsonNotes:
surface:N, pane:N, workspace:N, window:N).--id-format uuids|both).surface:N per task unless you intentionally switch.cmux supports wait patterns similar to agent-browser:
cmux browser <surface> wait --selector "#ready" --timeout-ms 10000
cmux browser <surface> wait --text "Success" --timeout-ms 10000
cmux browser <surface> wait --url-contains "/dashboard" --timeout-ms 10000
cmux browser <surface> wait --load-state complete --timeout-ms 15000
cmux browser <surface> wait --function "document.readyState === 'complete'" --timeout-ms 10000cmux --json browser open https://example.com/signup
cmux browser surface:7 get url
cmux browser surface:7 wait --load-state complete --timeout-ms 15000
cmux browser surface:7 snapshot --interactive
cmux browser surface:7 fill e1 "Jane Doe"
cmux browser surface:7 fill e2 "jane@example.com"
cmux --json browser surface:7 click e3 --snapshot-after
cmux browser surface:7 wait --url-contains "/welcome" --timeout-ms 15000
cmux browser surface:7 snapshot --interactivecmux browser surface:7 fill e11 "" --snapshot-after --json
cmux browser surface:7 get value e11 --json# navigate -> verify -> wait -> snapshot -> action -> snapshot
cmux browser surface:7 get url
cmux browser surface:7 wait --load-state complete --timeout-ms 15000
cmux browser surface:7 snapshot --interactive
cmux --json browser surface:7 click e5 --snapshot-after
cmux browser surface:7 snapshot --interactiveIf get url is empty or about:blank, navigate first instead of waiting on load state.
| Reference | When to Use |
|---|---|
| references/commands.md | Full browser command mapping and quick syntax |
| references/snapshot-refs.md | Ref lifecycle and stale-ref troubleshooting |
| references/authentication.md | Login/OAuth/2FA patterns and state save/load |
| references/authentication.md#saving-authentication-state | Save authenticated state right after login |
| references/session-management.md | Multi-surface isolation and state persistence patterns |
| references/video-recording.md | Current recording status and practical alternatives |
| references/proxy-support.md | Proxy behavior in WKWebView and workarounds |
| Template | Description |
|---|---|
| templates/form-automation.sh | Snapshot/ref form fill loop |
| templates/authenticated-session.sh | Login once, save/load state |
| templates/capture-workflow.sh | Navigate + capture snapshots/screenshots |
These commands currently return not_supported because they rely on Chrome/CDP-only APIs not exposed by WKWebView:
Use supported high-level commands (click, fill, press, scroll, wait, snapshot) instead.
js_error on snapshot --interactive or evalSome complex pages can reject or break the JavaScript used for rich snapshots and ad-hoc evaluation.
Recovery steps:
cmux browser surface:7 get url
cmux browser surface:7 get text body
cmux browser surface:7 get html bodyget url first so you know whether the page actually navigated.get text body or get html body when snapshot --interactive or eval returns js_error.© disler, 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 10 other files (references) in ai_docs/cmux-skills/cmux-browser of disler/learning-cmux-with-agents.
Open the folder on GitHubat commit 6eaacab
cmux Browser 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 |
|---|---|---|---|---|---|---|
| cmux Browser Automation this skilldisler/learning-cmux-with-agents | 115 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Agent Browser CLIvercel-labs/agent-browser | 44k | 24 repos | ~864 | Automated safety check: Pass | Apache-2.0 | |
| Agent Browserquran/quran.com-frontend-next | 1.9k | 40 repos | ~3.3k | Automated safety check: Pass | None | |
| Web Access via Browser CDPeze-is/web-access | 9.1k | 4 repos | ~2.2k | Automated safety check: Pass | MIT | |
| Dev Browser AutomationMemTensor/MemOS | 12k | 3 repos | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Electron App Automationvercel-labs/agent-browser | 44k | 5 repos | ~1.7k | Automated safety check: Pass | Apache-2.0 |
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…
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
eze-is/web-access
Routes every web task, from searching to logged-in browsing, through a tiered choice of search, fetch, curl or a real Chrome or Edge session driven over CDP.
MemTensor/MemOS
Automates a real browser through short TypeScript scripts that keep page state between runs, for navigating, filling forms, taking screenshots and extracting data.
vercel-labs/agent-browser
Automates Electron desktop apps such as VS Code, Slack or Discord by connecting agent-browser to their Chrome DevTools Protocol port.
vercel/next.js
Verify Next.js runtime behavior after editing app code. An agent skill from vercel/next.js.
disler/learning-cmux-with-agents
Customizes cmux for a user by editing cmux.json actions, workspace layouts, dock controls, tab bar buttons, settings and Ghostty terminal preferences.
disler/learning-cmux-with-agents
Contributor rules for the cmux repo: tagged Debug builds through reload.sh, first-time setup, Xcode project normalization and per-tag sidebar extension points.
disler/learning-cmux-with-agents
Drives the cmux terminal multiplexer from natural language to open, inspect, prompt, read and close windows, workspaces, panes, surfaces and agent sessions.
disler/learning-cmux-with-agents
Testing rules for the cmux Swift codebase: Swift Testing as the default framework, a two-commit regression policy, and tests that check runtime behavior, not source text.
Categories
Drives browser surfaces inside cmux from the command line: open sites, snapshot elements, act on refs, wait for state changes and extract data. The workflow is to open or target a browser surface, confirm navigation with get url, take an interactive snapshot to obtain fresh element refs, act with those refs (click, fill, type, select, press), wait for the page to change and snapshot again after any DOM or navigation change. Surfaces are addressed with short refs such as surface:N, found with cmux identify, and one surface should be kept per task.
cmux Browser Automation fits situations like: automating a site inside a cmux browser pane instead of an external browser; filling and submitting a web form from the command line; waiting for a page element, text or URL change before extracting data.
Run `npx skills add disler/learning-cmux-with-agents --skill cmux-browser -a claude-code`. Or copy the skill folder (ai_docs/cmux-skills/cmux-browser in disler/learning-cmux-with-agents) into .claude/skills/cmux-browser in your project. Claude Code loads it when a task matches its description.
Run `npx skills add disler/learning-cmux-with-agents --skill cmux-browser -a codex`. Or copy the skill folder (ai_docs/cmux-skills/cmux-browser in disler/learning-cmux-with-agents) into .agents/skills/cmux-browser 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 disler/learning-cmux-with-agents --skill cmux-browser -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cmux-browser, .gemini/skills/cmux-browser, .github/skills/cmux-browser and .opencode/skills/cmux-browser in your project.
Going by SKILL.md and its folder, cmux Browser Automation needs a shell for the scripts in its folder. Our summary lists: cmux with browser surfaces available.
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.
cmux Browser 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 1.3k tokens (SKILL.md is roughly 5.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with cmux Browser Automation: Agent Browser CLI (vercel-labs/agent-browser, 44k stars), Agent Browser (quran/quran.com-frontend-next, 1.9k stars), Web Access via Browser CDP (eze-is/web-access, 9.1k stars) and Dev Browser Automation (MemTensor/MemOS, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
disler (a GitHub user) maintains it in disler/learning-cmux-with-agents, which has 115 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on June 29, 2026.
Source: disler/learning-cmux-with-agents on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.