Agent Browser Automation
withkynam/vibecode-pro-max-kit
Drives a browser through the agent-browser CLI, using compact snapshots with element refs to keep context small in long sessions, plus video recording and cloud browsers.
Capture a full DevTools-protocol trace of any browser automation — CDP firehose, screenshots, and DOM dumps — then bisect the stream into per-page searchable buckets.
$ npx skills add mxyhi/ok-skills --skill browser-trace -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mxyhi/ok-skills browser-trace --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/mxyhi/ok-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/browser-trace .claude/skills/browser-trace && 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-trace" agent skill from https://github.com/mxyhi/ok-skills/tree/main/browser-trace into .claude/skills/browser-trace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-trace", 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/mxyhi/ok-skills/tree/main/browser-traceType 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 mxyhi/ok-skills --skill browser-trace -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mxyhi/ok-skills browser-trace --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mxyhi/ok-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/browser-trace .agents/skills/browser-trace && 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-trace" agent skill from https://github.com/mxyhi/ok-skills/tree/main/browser-trace into .agents/skills/browser-trace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-trace", 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 mxyhi/ok-skills --skill browser-trace -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mxyhi/ok-skills browser-trace --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mxyhi/ok-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/browser-trace .cursor/skills/browser-trace && 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-trace" agent skill from https://github.com/mxyhi/ok-skills/tree/main/browser-trace into .cursor/skills/browser-trace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-trace", 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/mxyhi/ok-skills.git --path browser-trace--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 mxyhi/ok-skills --skill browser-trace -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mxyhi/ok-skills browser-trace --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mxyhi/ok-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/browser-trace .gemini/skills/browser-trace && 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-trace" agent skill from https://github.com/mxyhi/ok-skills/tree/main/browser-trace into .gemini/skills/browser-trace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-trace", 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 mxyhi/ok-skills browser-traceInstalls 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 mxyhi/ok-skills --skill browser-trace -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mxyhi/ok-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/browser-trace .github/skills/browser-trace && 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-trace" agent skill from https://github.com/mxyhi/ok-skills/tree/main/browser-trace into .github/skills/browser-trace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-trace", 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 mxyhi/ok-skills --skill browser-trace -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mxyhi/ok-skills browser-trace --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mxyhi/ok-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/browser-trace .opencode/skills/browser-trace && 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-trace" agent skill from https://github.com/mxyhi/ok-skills/tree/main/browser-trace into .opencode/skills/browser-trace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-trace", 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-traceCapture a full DevTools-protocol trace of any browser automation — CDP firehose, screenshots, and DOM dumps — then bisect the stream into per-page searchable buckets.
Browser Trace is an agent skill from mxyhi/ok-skills. Capture a full DevTools-protocol trace of any browser automation — CDP firehose, screenshots, and DOM dumps — then bisect the stream into per-page searchable buckets. Use when the user wants to debug a failed run, audit network/console/DOM activity, attach a trace to an in-progress session, or feed structured per-page summaries back into an agent loop so its next iteration learns from the last one.
Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including scripts (for example `EXAMPLES.md`, `REFERENCE.md` and `package.json`). Compatibility notes: Requires Node 18+, the browse CLI (npm install -g browse) with browse cdp, and optionally jq for ad-hoc querying of the bisected JSONL files. For remote…
It sits in Productivity & Automation, covering Browser automation and Autonomous loops. It works with Browserbase. The repository describes itself as: Curated AI coding agent skills and AGENTS.md playbooks for Codex, Claude Code, Cursor, OpenClaw, and other SKILL.md-compatible tools. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 43dfda9. 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:
BashReadGrepFrom allowed-tools in the SKILL.md frontmatter.
Ships 8 files in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodejqnpmFrom 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:
news.ycombinator.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
BROWSERBASE_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Requires Node 18+, the browse CLI (`npm install -g browse`) with `browse cdp`, and optionally `jq` for ad-hoc querying of the bisected JSONL files. For remote Browserbase sessions, also requires `BROWSERBASE_API_KEY`. The skill scripts themselves use only the Node standard library — no `npm install` step.
From compatibility in the SKILL.md frontmatter.
Browser Trace loads about 3.7k tokens when it runs. Until then it costs about 104 tokens; SKILL.md has 1,115 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, GrepAutomated 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 mxyhi/ok-skills at commit 43dfda9, republished under its MIT licence (© mxyhi). 1,115 words, ~3,746 tokens.
.claude/skills/browser-trace/SKILL.md (or your agent's skills folder). This skill also uses 12 other files; get the full folder from GitHub.Attach a second, read-only CDP client to a browser session that is already being driven by your main automation. The trace records the full DevTools firehose to NDJSON, polls for screenshots and DOM dumps in parallel, and slices everything into a directory tree that bash tools can search.
This skill does not drive pages — it only listens. Pair it with the browser skill, browse, Stagehand, Playwright, or anything else that speaks CDP.
If the user just wants to drive the browser, use the browser skill instead.
node --version # require Node 18+
which browse || npm install -g browse
which jq || true # optional — used only for ad-hoc queryingVerify browse cdp exists:
browse --help | grep -q "^\s*cdp " || echo "browse cdp not available — update browse"Every Chrome DevTools target accepts multiple concurrent CDP clients. Your main automation is one client; this skill adds a second one that only enables observation domains (Network, Console, Runtime, Log, Page) and never sends action commands.
The tracer has three pieces:
browse cdp <target> streams every CDP event as one JSON object per line to cdp/raw.ndjson.browse screenshot --cdp <target> --path <file> and browse get html body --cdp <target> on an interval (default 2s). The helper passes --cdp when it samples so it can attach to the traced target from its own process; once a browse daemon session is attached to a CDP target, follow-up commands in that session do not need to repeat --cdp.bisect-cdp.mjs walks raw.ndjson once, slices it into per-bucket JSONL files keyed by CDP method, and additionally bisects per page using top-level Page.frameNavigated events as boundaries.# 1. Launch Chrome with a debugger port (any user-data-dir keeps it isolated).
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--remote-debugging-port=9222 \
--user-data-dir=/tmp/chrome-o11y \
about:blank &
# 2. Start the tracer.
node scripts/start-capture.mjs 9222 my-run
# 3. Run your main automation against port 9222.
browse open https://example.com --cdp 9222
# ...whatever the run does...
# 4. Stop and bisect.
node scripts/stop-capture.mjs my-run
node scripts/bisect-cdp.mjs my-runTwo helpers wrap the platform-side bookkeeping: bb-capture.mjs creates or attaches to a session and starts the tracer; bb-finalize.mjs pulls platform artifacts (final session metadata, server logs, downloads) into the run dir at the end.
Browserbase ends a session as soon as its last CDP client disconnects. Create with
--keep-alive, then attach automation to the session'sconnectUrlbefore or together with the tracer.bb-capture.mjs --newhandles the keep-alive session and tracer setup; your automation still needs to attach.
export BROWSERBASE_API_KEY=...
# 1. Create a keep-alive session AND start the tracer in one step.
# Prints the session id, connectUrl prefix, and a live debugger URL you
# can open in a browser to watch the run interactively.
node scripts/bb-capture.mjs --new my-run
# 2. Drive automation. bb-capture stamped the session id into the manifest.
SID=$(jq -r .browserbase.session_id .o11y/my-run/manifest.json)
CONNECT_URL="$(browse cloud sessions get "$SID" | jq -r .connectUrl)"
BROWSE_NAME=my-run-browser
browse open https://example.com --cdp "$CONNECT_URL" --session "$BROWSE_NAME"
browse open https://news.ycombinator.com --session "$BROWSE_NAME"
# 3. Stop the tracer, bisect, then pull platform artifacts and release.
node scripts/stop-capture.mjs my-run
node scripts/bisect-cdp.mjs my-run
node scripts/bb-finalize.mjs my-run --releaseAttaching to a session that's already running (e.g. one your production worker created) — bb-capture.mjs accepts a session id instead of --new:
# Pick a running session (filter client-side; browse cloud sessions list has no --status flag)
browse cloud sessions list | jq -r '.[] | select(.status == "RUNNING") | .id'
node scripts/bb-capture.mjs <session-id> mid-flight-debug
# ...tracer runs alongside the existing automation client; no disruption...
node scripts/stop-capture.mjs mid-flight-debug
node scripts/bisect-cdp.mjs mid-flight-debug
node scripts/bb-finalize.mjs mid-flight-debug # without --release: leave the session runningbb-capture.mjs adds a browserbase block to manifest.json (session id, project, region, started_at, expires_at, debugger URL). bb-finalize.mjs writes:
<run>/browserbase/session.json — final browse cloud sessions get snapshot (proxyBytes, status, ended_at, viewport, …)<run>/browserbase/logs.json — browse cloud sessions logs output. Often empty. The CDP firehose in cdp/raw.ndjson is the source of truth; this is a side channel.<run>/browserbase/downloads.zip — files the session downloaded, if any (the script discards the empty 22-byte zip you get when there are none)Session replay artifact fetching is deprecated and isn't fetched. Use the screenshots + DOM dumps in screenshots/ and dom/ for visual ground truth.
The live debugger_url in the manifest opens an interactive Chrome DevTools view served by Browserbase — handy for watching a long-running automation while the tracer captures the firehose to disk.
.o11y/<run-id>/
manifest.json run metadata: target, domains, started_at, stopped_at
index.jsonl one line per sample: {ts, screenshot, dom, url}
cdp/
raw.ndjson full CDP firehose (one JSON object per line)
summary.json {sessionId, duration, totalEvents, pages[]} — see shape below
network/{requests,responses,finished,failed,websocket}.jsonl session-wide buckets (always written)
console/{logs,exceptions}.jsonl
runtime/all.jsonl
log/entries.jsonl
page/{navigations,lifecycle,frames,dialogs,all}.jsonl
dom/all.jsonl (only if O11Y_DOMAINS includes DOM)
target/{attached,detached}.jsonl
pages/ per-page slices, indexed by top-level frameNavigated boundaries
000/ first concrete page
url.txt the URL for this page
summary.json this page's domains/network/timing block (same shape as a pages[] entry)
raw.jsonl firehose scoped to this page
network/, console/, page/, runtime/, log/, target/, dom/ same buckets, only non-empty files
screenshots/<iso-ts>.png one PNG per sample interval
dom/<iso-ts>.html one HTML dump per sample interval
browserbase/ added by bb-finalize.mjs (Browserbase runs only)
session.json final `browse cloud sessions get` snapshot (proxyBytes, status, ended_at, …)
logs.json `browse cloud sessions logs` output (often [])
downloads.zip `browse cloud sessions downloads get` output (only if the session downloaded files)When a run was started via bb-capture.mjs, manifest.json also carries a top-level browserbase block: session_id, project_id, region, started_at, expires_at, keep_alive, debugger_url.
cdp/summary.json is the entry point for any analysis: it has session-level totals and a pages[] array indexed by top-level Page.frameNavigated. Per-page entries are emitted in navigation order (page 0 = first concrete URL).
{
"sessionId": "45f28023-…",
"duration": { "startMs": 1777312533000, "endMs": 1777312609000, "totalMs": 76000 },
"totalEvents": 420,
"pages": [
{
"pageId": 0,
"url": "https://example.com/",
"startMs": 1777312533000, "endMs": 1777312538886, "durationMs": 5886,
"eventCount": 60,
"domains": {
"Network": { "count": 18, "errors": 1 },
"Console": { "count": 2 },
"Page": { "count": 24 },
"Runtime": { "count": 13 }
},
"network": { "requests": 4, "failed": 1, "byType": { "Document": 2, "Script": 1, "Other": 1 } }
}
]
}startMs / endMs / durationMs are wall-clock ms, derived from manifest.started_at plus the offset of each event's CDP monotonic timestamp. domains[*] only includes errors/warnings keys when non-zero.
query.mjsFor interactive exploration, use scripts/query.mjs <run-id> <command> instead of remembering paths:
node scripts/query.mjs my-run list # one-line table of pages
node scripts/query.mjs my-run page 1 # full summary for page 1
node scripts/query.mjs my-run page 1 network/failed # cat failed.jsonl for page 1
node scripts/query.mjs my-run errors # all errors across pages, attributed by pid
node scripts/query.mjs my-run errors 2 # errors from page 2 only
node scripts/query.mjs my-run hosts # top hosts by request count
node scripts/query.mjs my-run host api.example.com # all requests/responses for a host
node scripts/query.mjs my-run summary # full summary.jsonBehind the scenes it just reads cdp/summary.json and the cdp/pages/<pid>/ tree — feel free to bypass it with raw jq/rg once you know the shape.
# All failed network requests (use jq -c to keep it line-delimited)
jq -c '.params' .o11y/<run>/cdp/network/failed.jsonl
# Find requests to a specific host
jq -c 'select(.params.request.url | test("api\\.example\\.com"))' \
.o11y/<run>/cdp/network/requests.jsonl
# 4xx/5xx responses
jq -c 'select(.params.response.status >= 400)
| {status: .params.response.status, url: .params.response.url}' \
.o11y/<run>/cdp/network/responses.jsonl
# Console errors only
jq -c 'select(.params.type == "error")' .o11y/<run>/cdp/console/logs.jsonl
# Sequence of URLs visited
jq -r '.params.frame.url' .o11y/<run>/cdp/page/navigations.jsonl
# Find the screenshot taken closest to a timestamp (e.g., when an exception fired)
ls .o11y/<run>/screenshots/ | sort | awk -v t=20260427T1714123NZ '
$0 >= t { print; exit }'See REFERENCE.md for the full jq recipe library and a method-by-method bisect map. See EXAMPLES.md for end-to-end debug scenarios.
bb-capture.mjs on Browserbase: it enforces --keep-alive, fetches the connectUrl, captures the debugger URL, and stamps the manifest. Doing it manually invites mistakes.--release a session you don't own: bb-finalize.mjs --release is for sessions you created with --new. When attaching to a production session via bb-capture.mjs <session-id>, run bb-finalize.mjs without --release so the original automation keeps running.--keep-alive. Otherwise the session ends as soon as the tracer's WS closes.Network Console Runtime Log Page) cover most debugging. Add DOM for DOM-tree mutations (very noisy) via O11Y_DOMAINS="$O11Y_DOMAINS DOM".connectUrl with browse open ... --cdp "$CONNECT_URL" --session <name>. The --session flag names the local browse daemon; it is not a Browserbase session attach flag.stop-capture.mjs, even after a crash, so background processes don't linger and the manifest gets stopped_at.bisect-cdp.mjs is idempotent — it overwrites the per-bucket files from raw.ndjson each time.browse cdp exited immediately: usually means the target is unreachable (wrong port) or the Browserbase session has already ended. For remote, verify with browse cloud sessions get <id> — if status is COMPLETED, recreate with --keep-alive and attach automation first.raw.ndjson even though processes are running: confirm a CDP client is actually driving the page. The tracer only emits events that the browser generates, so an idle browser produces ~5 lines of attach/discover messages and nothing else.index.jsonl — if url doesn't change, the page hasn't navigated yet. The polling loop runs independently of the main automation's pace.--timeout. Recreate with a higher timeout (BB_SESSION_TIMEOUT=1800 node scripts/bb-capture.mjs --new ...) or remove the timeout flag.bb-capture.mjs <id> says "not RUNNING": the session you tried to attach to ended. List candidates with browse cloud sessions list | jq '.[] | select(.status == "RUNNING")' and try again.browserbase/logs.json is empty []: expected — browse cloud sessions logs is sparse in practice. The CDP firehose in cdp/raw.ndjson is the source of truth.screenshots/ and DOM dumps in dom/.For full reference, see REFERENCE.md. For example debug runs, see EXAMPLES.md.
© mxyhi, 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 12 other files (scripts) in browser-trace of mxyhi/ok-skills.
Open the folder on GitHubat commit 43dfda9
Browser Trace 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 |
|---|---|---|---|---|---|---|
| Browser Trace this skillmxyhi/ok-skills | 493 | — | ~3.7k | Automated safety check: Notes | MIT | |
| Agent Browser Automationwithkynam/vibecode-pro-max-kit | 1.1k | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Oya BrowserOyadotAI/oya-browser | 349 | — | ~2.1k | Automated safety check: Pass | Custom licence | |
| Browser MCP Agentantibrow/anti-detect-browser-skills | 17 | 1 repos | ~4.2k | Automated safety check: Warn | MIT | |
| Autonomous Agent Patternsdavila7/claude-code-templates | 32k | 7 repos | ~5.6k | Automated safety check: Pass | MIT | |
| Browserbase SessionsLeoYeAI/openclaw-master-skills | 2.2k | — | ~6k | Automated safety check: Pass | MIT |
withkynam/vibecode-pro-max-kit
Drives a browser through the agent-browser CLI, using compact snapshots with element refs to keep context small in long sessions, plus video recording and cloud browsers.
OyadotAI/oya-browser
Drive real Chrome browsers through Oya Browser. An agent skill from OyadotAI/oya-browser.
antibrow/anti-detect-browser-skills
Give an AI agent its own real browser over MCP tool calls - launch, navigate, click, fill, screenshot, extract text, run JS - with a kernel-level real-device fingerprint and a persistent profile, so…
davila7/claude-code-templates
Design patterns for building autonomous coding agents. An agent skill from davila7/claude-code-templates.
LeoYeAI/openclaw-master-skills
Create and manage persistent Browserbase cloud browser sessions with authentication persistence.
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
mxyhi/ok-skills
Kimi Browser Extension(Kimi 浏览器扩展,原 Kimi WebBridge)lets AI control the user's real browser — navigate, click, type, read, screenshot, and interact with any website using the user's actual login…
mxyhi/ok-skills
Use Exa MCP for current web, code/docs, company, people, and page-fetch research.
mxyhi/ok-skills
Use Ontoly's deterministic Software Graph and MCP capabilities for repository architecture, request tracing, dependency analysis, configuration lookup, and impact analysis before falling back to…
Works with
Categories
Capture a full DevTools-protocol trace of any browser automation — CDP firehose, screenshots, and DOM dumps — then bisect the stream into per-page searchable buckets. Browser Trace is an agent skill from mxyhi/ok-skills. Capture a full DevTools-protocol trace of any browser automation — CDP firehose, screenshots, and DOM dumps — then bisect the stream into per-page searchable buckets.
Browser Trace fits situations like: the user wants to debug a failed run; audit network/console/DOM activity; attach a trace to an in-progress session; feed structured per-page summaries back into an agent loop so its next iteration learns from the last one.
Run `npx skills add mxyhi/ok-skills --skill browser-trace -a claude-code`. Or copy the skill folder (browser-trace in mxyhi/ok-skills) into .claude/skills/browser-trace in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mxyhi/ok-skills --skill browser-trace -a codex`. Or copy the skill folder (browser-trace in mxyhi/ok-skills) into .agents/skills/browser-trace 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 mxyhi/ok-skills --skill browser-trace -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-trace, .gemini/skills/browser-trace, .github/skills/browser-trace and .opencode/skills/browser-trace in your project.
Going by SKILL.md and its folder, Browser Trace needs JavaScript for the scripts in its folder, the command-line tools its instructions call (node, jq and npm) and credentials named BROWSERBASE_API_KEY. Our summary lists: Node.js; A credential in BROWSERBASE_API_KEY. Its frontmatter pre-approves these tools: Bash, Read, Grep. Compatibility (from SKILL.md): Requires Node 18+, the browse CLI (`npm install -g browse`) with `browse cdp`, and optionally `jq` for ad-hoc querying of the bisected JSONL files. For remote Browserbase sessions, also requires `BROWSERBASE_API_KEY`. The skill scripts themselves use only the Node standard library — no `npm install` step..
SKILL.md names 1 domain. In commands or code: news.ycombinator.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 notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. 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.
Browser Trace is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.7k tokens (SKILL.md is roughly 15k 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 Browser Trace: Agent Browser Automation (withkynam/vibecode-pro-max-kit, 1.1k stars), Oya Browser (OyadotAI/oya-browser, 349 stars), Browser MCP Agent (antibrow/anti-detect-browser-skills, 17 stars) and Autonomous Agent Patterns (davila7/claude-code-templates, 32k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mxyhi (a GitHub user) maintains it in mxyhi/ok-skills, which has 493 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on September 30, 2026.
Source: mxyhi/ok-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.