AIPex Browser Control
AIPexStudio/AIPex
Lets an agent drive Chrome through the AIPex extension and its MCP bridge: navigation, clicking, form filling, screenshots, tab management and downloads.
Controls the user's Chrome through Qwen Code's Node REPL and Browser SDK, with the Qwen Code Chrome extension, profile binding and tab ownership handling.
$ npx skills add QwenLM/qwen-code --skill browser-use -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install QwenLM/qwen-code browser-use --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/QwenLM/qwen-code.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/core/src/skills/bundled/browser-use .claude/skills/browser-use && 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 "browser-use" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/core/src/skills/bundled/browser-use into .claude/skills/browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-use", 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/QwenLM/qwen-code/tree/main/packages/core/src/skills/bundled/browser-useType 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 QwenLM/qwen-code --skill browser-use -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install QwenLM/qwen-code browser-use --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/core/src/skills/bundled/browser-use .agents/skills/browser-use && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "browser-use" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/core/src/skills/bundled/browser-use into .agents/skills/browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-use", 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 QwenLM/qwen-code --skill browser-use -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install QwenLM/qwen-code browser-use --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/core/src/skills/bundled/browser-use .cursor/skills/browser-use && 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 "browser-use" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/core/src/skills/bundled/browser-use into .cursor/skills/browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-use", 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/QwenLM/qwen-code.git --path packages/core/src/skills/bundled/browser-use--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 QwenLM/qwen-code --skill browser-use -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install QwenLM/qwen-code browser-use --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/core/src/skills/bundled/browser-use .gemini/skills/browser-use && 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 "browser-use" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/core/src/skills/bundled/browser-use into .gemini/skills/browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-use", 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 QwenLM/qwen-code browser-useInstalls 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 QwenLM/qwen-code --skill browser-use -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/core/src/skills/bundled/browser-use .github/skills/browser-use && 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 "browser-use" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/core/src/skills/bundled/browser-use into .github/skills/browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-use", 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 QwenLM/qwen-code --skill browser-use -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install QwenLM/qwen-code browser-use --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/core/src/skills/bundled/browser-use .opencode/skills/browser-use && 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 "browser-use" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/core/src/skills/bundled/browser-use into .opencode/skills/browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-use", 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.
browser-useControls the user's Chrome through Qwen Code's Node REPL and Browser SDK, with the Qwen Code Chrome extension, profile binding and tab ownership handling.
Browser Use is bundled with Qwen Code and drives Chrome through the generic Node REPL MCP tools and the Qwen Code Chrome extension, so no separate extension or Browser Use MCP server is installed. First use registers a shared Native Messaging host on macOS and Linux, and the SDK checks the real connection rather than Chrome's extension preferences. If the extension does not connect, the agent asks you to open Chrome and check it in the intended profile, with a Chrome Web Store install or a build from packages/chrome-extension as the fallback.
Several Qwen sessions can share a profile, each controlling its own tabs, and a tab held by another session reports TAB_OWNERSHIP_CONFLICT. The runtime binds to the default Chrome profile unless you name one, and switching profiles needs node_repl_reset and a repeat of setup. A newer host is never downgraded, and host files can be inspected or removed with a native-host-setup script. The excerpt ends before the SDK usage steps.
Read from SKILL.md and the folder at commit fe4d4e3. 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 (TypeScript), which the agent can run.
Shell commands in SKILL.md call:
nodeFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
chromewebstore.google.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.
Qwen Browser Use loads about 1.6k tokens when it runs. Until then it costs about 26 tokens; SKILL.md has 741 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 QwenLM/qwen-code at commit fe4d4e3, republished under its Apache-2.0 licence (© QwenLM). 741 words, ~1,593 tokens.
.claude/skills/browser-use/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Browser Use is bundled with Qwen Code and uses the generic Node REPL MCP tools and the Qwen Chrome extension. Do not install a separate Qwen extension or start a separate Browser Use MCP server.
Install and enable the Qwen Code Chrome extension in the profile the user wants to use. On macOS and Linux, first use of this SDK automatically registers the shared Native Messaging host in the user's installation directory. A browser task opts into this local setup, which can finish before the extension connects. The SDK checks the actual connection and protocol instead of reading Chrome's extension preferences.
If the extension does not connect, ask the user to open Chrome and check the extension in the intended profile. It installs from the Chrome Web Store: https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph
If the store reports it is not available in the user's region, they can build
it from packages/chrome-extension in the Qwen Code repository (its
README) and load dist/extension through chrome://extensions (Developer mode
→ Load unpacked). After installation or enabling it, retry the connection.
A usable Host of the same protocol is reused. A Host installed by a newer Qwen
Code is never downgraded: if setup reports one, tell the user to update Qwen
Code and stop. The Host files persist after Qwen exits. The user can inspect or
remove them with node <skill-base>/runtime/scripts/native-host-setup.js status
or uninstall; install explicitly switches the Host to this Qwen Code's copy
from the next time Chrome starts it. A later Browser Use initialization can
register the Host again. If required Host files cannot be read or written,
report the failing action and path so the user can resolve access and retry.
Multiple Qwen sessions can use the same profile, each controlling its own tabs.
A tab held by another session reports TAB_OWNERSHIP_CONFLICT. Use another tab
or wait for that session to release it. The setup below binds the runtime to
the default profile through browserAgent.browsers.get('chrome'). Only when the
user names a specific Chrome profile, call browserAgent.browsers.list() before
that line and pass the returned ID to browserAgent.browsers.get(id) instead.
The runtime stays bound to the first profile it connects to; to switch profiles,
call node_repl_reset and run the setup again.
If node_repl is unavailable, configure it with:
qwen mcp add --scope user node-repl npx -y @qwen-code/node-repl-mcp@0.1.7Then tell the user to restart Qwen Code and stop. Do not start a separate
Browser Use MCP server. Screenshot metadata requires @qwen-code/node-repl-mcp
0.1.7 or later, so keep this exact pin.
Qwen reports the absolute Base directory for this skill when loading this
file. Use that directory as <skill-base>. The bundled SDK ships with its
dependencies: import it directly, without installing packages or registering
module directories, replacing the example skill base below with that absolute
path. If the import reports a missing file or an incomplete runtime, stop and
report an incomplete Browser Use runtime instead of installing dependencies
into the workspace:
globalThis.browserAgent ??= await (
await import('/absolute/skill/base/runtime/index.js')
).setupBrowserRuntime();
globalThis.browser ??= await browserAgent.browsers.get('chrome');
nodeRepl.write(await browser.documentation());Create a tab or claim an exact result returned by openTabs():
globalThis.tab = await browser.tabs.new();
await tab.goto('https://example.com/');
nodeRepl.write(await tab.playwright.domSnapshot());const candidates = await browser.user.openTabs();
nodeRepl.write(candidates);
globalThis.tab = await browser.user.claimTab(
candidates.find((candidate) => candidate.url === 'https://example.com/'),
);Observe before acting and observe again after acting. Prefer semantic
Playwright locators. Use tab.dom_cua.get_visible_dom() and its node_id
values when snapshot refs are clearer, and use tab.cua for visual coordinate
targets.
await tab.playwright.getByRole('button', { name: 'Continue' }).click();
await tab.playwright.getByLabel('Email').type('user@example.com');
await tab.dom_cua.click({ node_id: 'e4' });
await tab.dom_cua.type({ text: 'hello' });When an action should navigate, arm the Playwright watcher around it:
await tab.playwright.expectNavigation(
() => tab.playwright.getByRole('link', { name: 'Next' }).click(),
{ url: '**/next.html' },
);Render screenshots with their metadata:
await nodeRepl.emitImage(await tab.screenshot());The metadata reaches the model only through @qwen-code/node-repl-mcp 0.1.6
or later; an older server accepts the call and silently drops it. If
node_repl was registered before this skill existed, check its command with
qwen mcp list, and when it pins an older version, re-register it with the
qwen mcp add command from Setup above and ask the user to restart Qwen Code.
Use tab.dev.logs() for bounded console diagnostics. Arm
tab.playwright.waitForEvent('download' | 'filechooser') before the action that
triggers it. Handle JavaScript dialogs through tab.getJsDialog(). Use a
focused tab.playwright.evaluate() only when locators cannot obtain the needed
data.
Use browser.user.history() only when the task needs browser history, with a
focused query and bounded result count.
Treat browser.tabs.finalize({ keep }) as the final browser action of the turn.
Omitted agent-created tabs close; omitted claimed tabs are released without
closing. keep is the complete set for this call. Keep a user-facing result as
deliverable, and keep a live page under control as handoff. Repeat a
handoff in each later turn that still needs it; omitting it from the next
finalize call or closing the runtime closes an agent-created tab.
await browser.tabs.finalize({
keep: [{ tab, status: 'deliverable' }],
});The Node kernel preserves globalThis and top-level bindings across cells.
Keep cells short, await every Browser SDK promise, and use nodeRepl.write() to
return text or structured data.
© QwenLM, 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
SKILL.md and 1 other file in packages/core/src/skills/bundled/browser-use of QwenLM/qwen-code.
Open the folder on GitHubat commit fe4d4e3
Qwen Browser Use 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 |
|---|---|---|---|---|---|---|
| Qwen Browser Use this skillQwenLM/qwen-code | 28k | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| AIPex Browser ControlAIPexStudio/AIPex | 1.3k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Neo4ier/neo | 756 | — | ~1.8k | Automated safety check: Pass | None | |
| Actionbook Browser Action Manualssmallnest/goclaw | 598 | 1 repos | ~4.1k | Automated safety check: Warn | MIT | |
| Bump Versionopentabs-dev/opentabs | 967 | — | ~167 | Automated safety check: Pass | MIT | |
| Competitor Monitorhanzili/hanzi-browse | 177 | — | ~2.8k | Automated safety check: Pass | Custom licence |
AIPexStudio/AIPex
Lets an agent drive Chrome through the AIPex extension and its MCP bridge: navigation, clicking, form filling, screenshots, tab management and downloads.
4ier/neo
Browse websites, read web pages, interact with web apps, call website APIs, and automate web tasks.
smallnest/goclaw
Looks up action manuals with verified selectors for multi-step website tasks, then drives the browser with the actionbook CLI in a dedicated or an existing Chrome session.
opentabs-dev/opentabs
Bump package versions across all platform packages and plugins in lockstep.
hanzili/hanzi-browse
Monitor competitor websites for changes. An agent skill from hanzili/hanzi-browse.
Prism-Shadow/penguin-harness
Drive the PenguinHarness agent browser — the desktop app's built-in browser or the user's own Chrome — from the shell with penguin browser: open pages, read them as simplified HTML or text, act with…
QwenLM/qwen-code
Reproduces a feature from Codex or Claude Code in Qwen Code by running the reference agent under capture, reading the traces, then implementing matching behavior.
QwenLM/qwen-code
Guides end-to-end testing of the Qwen Code CLI in headless mode with real model calls, MCP test servers and inspection of raw API traffic.
QwenLM/qwen-code
Scheduled CI skill that scans a repository for small, certain docs, test and code hygiene issues and fixes them on one branch with a commit per finding.
QwenLM/qwen-code
Builds a rebranded Qwen Code desktop package from the Tauri shell using only a brand id and a logo, with sensible derived defaults.
QwenLM/qwen-code
Walks through capturing and comparing V8 heap snapshots to find memory leaks in the Qwen Code Node.js CLI, using tmux and the chrome-devtools CLI.
QwenLM/qwen-code
Drives Qwen Code in a real tmux session the way a user would and saves a readable step-by-step transcript of each screen for maintainers to review.
Works with
Categories
Controls the user's Chrome through Qwen Code's Node REPL and Browser SDK, with the Qwen Code Chrome extension, profile binding and tab ownership handling. Browser Use is bundled with Qwen Code and drives Chrome through the generic Node REPL MCP tools and the Qwen Code Chrome extension, so no separate extension or Browser Use MCP server is installed. First use registers a shared Native Messaging host on macOS and Linux, and the SDK checks the real connection rather than Chrome's extension preferences.
Qwen Browser Use fits situations like: automating tasks in the user's own signed-in Chrome profile; setting up the Qwen Code Chrome extension for browser control; working with several Qwen sessions that each control their own tabs.
Run `npx skills add QwenLM/qwen-code --skill browser-use -a claude-code`. Or copy the skill folder (packages/core/src/skills/bundled/browser-use in QwenLM/qwen-code) into .claude/skills/browser-use in your project. Claude Code loads it when a task matches its description.
Run `npx skills add QwenLM/qwen-code --skill browser-use -a codex`. Or copy the skill folder (packages/core/src/skills/bundled/browser-use in QwenLM/qwen-code) into .agents/skills/browser-use 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 QwenLM/qwen-code --skill browser-use -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/browser-use, .gemini/skills/browser-use, .github/skills/browser-use and .opencode/skills/browser-use in your project.
Going by SKILL.md and its folder, Qwen Browser Use needs TypeScript for the scripts in its folder and the command-line tools its instructions call (node). Our summary lists: Google Chrome with the Qwen Code Chrome extension; The Node REPL MCP tools.
SKILL.md names 1 domain. As links in the text: chromewebstore.google.com. 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.
Qwen Browser Use 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 1.6k tokens (SKILL.md is roughly 6.4k 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 Qwen Browser Use: AIPex Browser Control (AIPexStudio/AIPex, 1.3k stars), Neo (4ier/neo, 756 stars), Actionbook Browser Action Manuals (smallnest/goclaw, 598 stars) and Bump Version (opentabs-dev/opentabs, 967 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
QwenLM (a GitHub organization) maintains it in QwenLM/qwen-code, which has 28,349 GitHub stars. The repository holds 41 skills in this directory. The repository was last updated on October 8, 2026.
Source: QwenLM/qwen-code on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.