Browser Automation Edge Cases
aden-hive/hive
Step-by-step procedure for debugging browser automation failures on complex sites such as LinkedIn, Twitter/X, single-page apps and Shadow DOM pages.
Browser automation and debugging through bundled Chrome DevTools Protocol.
$ npx skills add aiguicai/MCP-Gateway --skill chrome-cdp -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install aiguicai/MCP-Gateway chrome-cdp --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/aiguicai/MCP-Gateway.git skills-src && mkdir -p .claude/skills && cp -r skills-src/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp .claude/skills/chrome-cdp && 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 "chrome-cdp" agent skill from https://github.com/aiguicai/MCP-Gateway/tree/main/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp into .claude/skills/chrome-cdp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chrome-cdp", 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/aiguicai/MCP-Gateway/tree/main/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdpType 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 aiguicai/MCP-Gateway --skill chrome-cdp -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install aiguicai/MCP-Gateway chrome-cdp --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aiguicai/MCP-Gateway.git skills-src && mkdir -p .agents/skills && cp -r skills-src/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp .agents/skills/chrome-cdp && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "chrome-cdp" agent skill from https://github.com/aiguicai/MCP-Gateway/tree/main/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp into .agents/skills/chrome-cdp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chrome-cdp", 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 aiguicai/MCP-Gateway --skill chrome-cdp -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install aiguicai/MCP-Gateway chrome-cdp --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aiguicai/MCP-Gateway.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp .cursor/skills/chrome-cdp && 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 "chrome-cdp" agent skill from https://github.com/aiguicai/MCP-Gateway/tree/main/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp into .cursor/skills/chrome-cdp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chrome-cdp", 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/aiguicai/MCP-Gateway.git --path mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp--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 aiguicai/MCP-Gateway --skill chrome-cdp -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install aiguicai/MCP-Gateway chrome-cdp --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aiguicai/MCP-Gateway.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp .gemini/skills/chrome-cdp && 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 "chrome-cdp" agent skill from https://github.com/aiguicai/MCP-Gateway/tree/main/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp into .gemini/skills/chrome-cdp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chrome-cdp", 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 aiguicai/MCP-Gateway chrome-cdpInstalls 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 aiguicai/MCP-Gateway --skill chrome-cdp -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/aiguicai/MCP-Gateway.git skills-src && mkdir -p .github/skills && cp -r skills-src/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp .github/skills/chrome-cdp && 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 "chrome-cdp" agent skill from https://github.com/aiguicai/MCP-Gateway/tree/main/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp into .github/skills/chrome-cdp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chrome-cdp", 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 aiguicai/MCP-Gateway --skill chrome-cdp -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install aiguicai/MCP-Gateway chrome-cdp --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aiguicai/MCP-Gateway.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp .opencode/skills/chrome-cdp && 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 "chrome-cdp" agent skill from https://github.com/aiguicai/MCP-Gateway/tree/main/mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp into .opencode/skills/chrome-cdp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chrome-cdp", 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.
chrome-cdpBrowser automation and debugging through bundled Chrome DevTools Protocol.
Chrome Cdp is an agent skill from aiguicai/MCP-Gateway. Browser automation and debugging through bundled Chrome DevTools Protocol. First read the complete builtin://chrome-cdp/SKILL.md to get skillToken; this SKILL.md read does not require skillToken. Do not use regex or partial reads to fetch only the token. Later calls without the correct skillToken will fail and must be retried, so get the token before debugging.
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 testing, Browser automation and Debugging. It works with Chrome DevTools. The repository describes itself as: Unify multiple MCP Servers & Skills into a single gateway — with proxy forwarding, authentication, and a management API. Typical use: expose local stdio servers as remote MCP… The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 9cfc330. 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:
nodeFrom 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.
Chrome Cdp loads about 2.1k tokens when it runs. Until then it costs about 94 tokens; SKILL.md has 856 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 aiguicai/MCP-Gateway at commit 9cfc330, republished under its MIT licence (© aiguicai). 856 words, ~2,057 tokens.
.claude/skills/chrome-cdp/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.This built-in skill uses MCP Gateway's bundled cdp.mjs runner. It talks
directly to Chrome DevTools Protocol over WebSocket with no third-party browser
automation bridge.
By default, the gateway starts or reuses a visible Chromium-family browser in managed launch mode.
CDP_BROWSER_MODE=attach.CDP_PROFILE_MODE=persistent by default.CDP_USER_DATA_DIR to the gateway-owned persistent profile path:
mcp-gateway/builtin-skills/chrome-cdp/chrome-user-data under the OS local
data directory.Default behavior is to reuse the existing browser cache/profile. Do not create a fresh profile just because a new task starts, a new page is opened, or the browser was closed and reopened.
Use the default persistent profile when the user asks to:
Only use a new cache/profile when the user explicitly asks for a clean browser,
fresh cache, separate login, separate account, temporary session, or similar.
In that case, start the gateway with a different CDP_USER_DATA_DIR, or set
CDP_PROFILE_MODE=empty for a blank managed profile. Do not delete or overwrite
the default persistent profile unless the user explicitly asks to clear saved
browser data.
Short form accepted by the gateway:
open https://example.com
list
snap
eval "document.title"
netclear
net api/chat
netget 1234.56 --request-file "D:\tmp\chat-request.txt" --response-file "D:\tmp\chat-response.txt"
stopYou may also pass the script form; the gateway still runs its bundled script:
node cdp.mjs open https://example.comPage-scoped commands can take a target prefix from list.
list
snap <target>
html <target> ".message-list"
click <target> "button[type=submit]"For convenience, open, launch, and list maintain an active target. These
commands may omit the target and use the active page:
snap
eval "document.title"
netclear
net chat
netget <request-id>If multiple pages are open and no active target is known, run list and pass
the target prefix explicitly.
launch [url] # start or reuse managed browser
open [url] # open a tab and select it as active
list # list open pages and target prefixes
snap [target] # accessibility tree snapshot
html [target] [selector] # full page or element HTML
nav <target> <url> # navigate target to URL
eval [target] <js> # evaluate JavaScript in the page
evalraw <target> <method> [json]# raw CDP command passthrougheval accepts expressions or function/IIFE source. When calling this tool
through MCP Gateway on Windows, quote the whole JavaScript expression as one
argument.
click <target> <selector> # CSS selector
clickxy <target> <x> <y> # CSS pixel coordinates
type <target> <text> # Input.insertText at current focus
loadall <target> <selector> [ms]
shot [target] [file] [--inline-base64]Use type after focusing an input with click or clickxy. It uses CDP input
events and works better than DOM assignment for cross-origin iframes.
[file]) and
prints its absolute path plus DPR / coordinate mapping. Choose this when the
image is large, must be reused across turns, or should not load the model's
context window.shot [target] [file] --inline-base64 skips the file write and returns a
mimeType: image/png base64 payload inside stdout (as JSON after the
[inlineBase64 json] marker), plus the same DPR / coordinate mapping lines.
Choose this when a multimodal model should consume the image directly in the
current turn.Use the CDP Network recorder for searchable request capture.
netclear [target] # enable CDP Network and clear captured events
net [target] [filter] # list/search captured requests
netget [target] <request-id> [--full]
netget [target] <request-id> --request-file "<abs-path>" --response-file "<abs-path>"
perfnet [target] # PerformanceResourceTiming fallbackRecommended request capture flow:
netclear.net <filter> with a URL, method, endpoint fragment, MIME type, or
keyword.net.netget <request-id> --request-file "<abs-path>" --response-file "<abs-path>"
when full bodies are needed.netget redacts sensitive headers such as Authorization, Cookie, and
Set-Cookie in its JSON output. Never print or summarize sensitive headers,
tokens, device ids, or session ids in the final answer.
If no CDP record appears, run perfnet to inspect browser resource timing, then
repeat with netclear before the next user action. Network capture only records
events after it has been enabled.
For WebSocket traffic, netget returns captured frames for the selected
WebSocket request id.
Use evalraw for precise DevTools operations that are not wrapped by a
high-level command:
evalraw <target> "DOM.getDocument" "{}"
evalraw <target> "Network.enable" "{\"maxPostDataSize\":10485760}"Prefer the high-level netclear, net, and netget commands for normal
request debugging because they keep a per-tab event history.
Environment variables for the gateway process:
CDP_BROWSER=chrome|edge|brave|chromiumCDP_BROWSER_MODE=launch|attachCDP_USER_DATA_DIR=<absolute path>CDP_PROFILE_MODE=persistent|clone|emptyCDP_PROFILE_SOURCE_DIR=<absolute path> for clone modeCDP_RUNTIME_DIR=<absolute path>Default bundled mode is launch + persistent. Attach mode connects to an
already-running browser with remote debugging enabled and may trigger Chrome's
manual debugging approval prompt.
stop [target]stop without a target stops per-tab CDP daemons, closes the managed browser,
and clears active runtime state such as managed-browser.json, pages.json,
and the active target cache. The managed browser profile remains on disk so
future launches reuse the same login/cache state.
stop <target> only stops that target's daemon and leaves the managed browser
running.
If a previous managed browser crashed or the gateway was interrupted, the next command automatically clears stale runtime state and retries the managed browser connection once.
Files produced by this skill (for example netget --request-file,
--response-file, or shot <file>) land under allowed directories. When you
need to look at or edit those files afterwards:
read_file so output stays line-numbered and capped; do not
use shell_command with cat, Get-Content, type, sed, head, or
tail for these files.multi_edit_file; do not use shell_command
redirection, Set-Content, or ad-hoc scripts for normal text edits.This keeps the capture pipeline auditable and lets the gateway enforce path guards on every follow-up read/write.
© aiguicai, 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 mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp of aiguicai/MCP-Gateway.
Open the folder on GitHubat commit 9cfc330
Chrome Cdp 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 |
|---|---|---|---|---|---|---|
| Chrome Cdp this skillaiguicai/MCP-Gateway | 158 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Browser Automation Edge Casesaden-hive/hive | 11k | — | ~1.8k | Automated safety check: Pass | MIT | |
| AI Search Hubminsight-ai-info/AI-Search-Hub | 1.3k | — | ~1.3k | Automated safety check: Pass | None | |
| Superset Browser Controlsuperset-sh/superset | 15k | — | ~2.9k | Automated safety check: Pass | Custom licence | |
| Agent Browser Electronmoeru-ai/airi | 50k | — | ~3.1k | Automated safety check: Pass | MIT | |
| Agent Browseroxylabs/agent-skills | 875 | — | ~3k | Automated safety check: Pass | MIT |
aden-hive/hive
Step-by-step procedure for debugging browser automation failures on complex sites such as LinkedIn, Twitter/X, single-page apps and Shadow DOM pages.
minsight-ai-info/AI-Search-Hub
Run the AI Search Hub browser automation scripts for Yuanbao, LongCat, Doubao, Qwen, Gemini, Grok, and MiniMax.
superset-sh/superset
Opens pages, takes screenshots, reads the console, clicks and types in the browser panes of a Superset workspace, with Browser Use as a fallback for other browsers.
moeru-ai/airi
A skill your agent uses when Codex needs to inspect, debug, or automate an Electron app through agent-browser and Chrome DevTools Protocol, especially when the app has multiple BrowserWindow…
oxylabs/agent-skills
Connects to Oxylabs remote agent browsers over the Chrome DevTools Protocol (CDP) with Playwright or Puppeteer.
981377660LMT/algorithm-study
Interactive browser automation via Chrome DevTools Protocol.
aiguicai/MCP-Gateway
Use this bundled skill to create, update, and clear the in-memory todo state required before real bundled tool calls when task planning is enabled.
aiguicai/MCP-Gateway
为 Chat Plus 新框架编写、修复、审查站点适配脚本。先读取完整 builtin://chat-plus-adapter-debugger/SKILL.md 获取 skillToken;这次读取 SKILL.md 不需要 skillToken。不要用正则或局部读取只抓 token。后续调用不带或带错 skillToken 会报错并必须重试,所以正式调试前先拿到正确 token。
aiguicai/MCP-Gateway
Run CodeGraph CLI commands through npx for local codebase indexing, semantic search, context building, and impact analysis.
aiguicai/MCP-Gateway
Create, analyze, proofread, and modify Office documents (.docx, .xlsx, .pptx) using the officecli CLI tool.
Works with
Categories
Browser automation and debugging through bundled Chrome DevTools Protocol. Chrome Cdp is an agent skill from aiguicai/MCP-Gateway. Browser automation and debugging through bundled Chrome DevTools Protocol.
Chrome Cdp fits situations like: tasks that involve Browser testing; tasks that involve Browser automation; tasks that involve Debugging.
Run `npx skills add aiguicai/MCP-Gateway --skill chrome-cdp -a claude-code`. Or copy the skill folder (mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp in aiguicai/MCP-Gateway) into .claude/skills/chrome-cdp in your project. Claude Code loads it when a task matches its description.
Run `npx skills add aiguicai/MCP-Gateway --skill chrome-cdp -a codex`. Or copy the skill folder (mcp-gateway/crates/gateway-http/builtin-skills/chrome-cdp in aiguicai/MCP-Gateway) into .agents/skills/chrome-cdp 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 aiguicai/MCP-Gateway --skill chrome-cdp -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/chrome-cdp, .gemini/skills/chrome-cdp, .github/skills/chrome-cdp and .opencode/skills/chrome-cdp in your project.
Going by SKILL.md and its folder, Chrome Cdp needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node). Our summary lists: Node.js.
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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Chrome Cdp 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.2k 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 Chrome Cdp: Browser Automation Edge Cases (aden-hive/hive, 11k stars), AI Search Hub (minsight-ai-info/AI-Search-Hub, 1.3k stars), Superset Browser Control (superset-sh/superset, 15k stars) and Agent Browser Electron (moeru-ai/airi, 50k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
aiguicai (a GitHub organization) maintains it in aiguicai/MCP-Gateway, which has 158 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on May 27, 2026.
Source: aiguicai/MCP-Gateway on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.