Bright Data MCP
brightdata/skills
Bright Data MCP handles ALL web data operations. An agent skill from brightdata/skills.
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…
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add Prism-Shadow/penguin-harness --skill browser-automation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Prism-Shadow/penguin-harness browser-automation --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/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/browser-automation/skills/browser-automation .claude/skills/browser-automation && 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-automation" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/browser-automation/skills/browser-automation into .claude/skills/browser-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-automation", 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/Prism-Shadow/penguin-harness/tree/main/plugins/browser-automation/skills/browser-automationType 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 Prism-Shadow/penguin-harness --skill browser-automation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Prism-Shadow/penguin-harness browser-automation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/browser-automation/skills/browser-automation .agents/skills/browser-automation && 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-automation" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/browser-automation/skills/browser-automation into .agents/skills/browser-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-automation", 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 Prism-Shadow/penguin-harness --skill browser-automation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Prism-Shadow/penguin-harness browser-automation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/browser-automation/skills/browser-automation .cursor/skills/browser-automation && 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-automation" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/browser-automation/skills/browser-automation into .cursor/skills/browser-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-automation", 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/Prism-Shadow/penguin-harness.git --path plugins/browser-automation/skills/browser-automation--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 Prism-Shadow/penguin-harness --skill browser-automation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Prism-Shadow/penguin-harness browser-automation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/browser-automation/skills/browser-automation .gemini/skills/browser-automation && 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-automation" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/browser-automation/skills/browser-automation into .gemini/skills/browser-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-automation", 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 Prism-Shadow/penguin-harness browser-automationInstalls 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 Prism-Shadow/penguin-harness --skill browser-automation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/browser-automation/skills/browser-automation .github/skills/browser-automation && 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-automation" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/browser-automation/skills/browser-automation into .github/skills/browser-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-automation", 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 Prism-Shadow/penguin-harness --skill browser-automation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Prism-Shadow/penguin-harness browser-automation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/browser-automation/skills/browser-automation .opencode/skills/browser-automation && 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-automation" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/browser-automation/skills/browser-automation into .opencode/skills/browser-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-automation", 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-automationDrive 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…
Browser Automation is an agent skill from 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 JavaScript and trusted clicks and typing, and pull structured data out of them (orders, search results, tables), signed in with the user's own accounts. Use it for any task on a website that needs a real browser or the user's sign-in, such as finding an Amazon order.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `reference/amazon-orders.md` and `reference/page-recipes.md`).
It sits in Productivity & Automation, covering Browser automation and Schema markup. It works with JavaScript and Chrome Extensions. The repository describes itself as: 🐧 Unified and Stable RSI Platform. The licence is Apache-2.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d56d9ce. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).
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.
Browser Automation loads about 2.9k tokens when it runs. Until then it costs about 122 tokens; SKILL.md has 1,645 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 patterns that need a careful read before installing.
penguin browser import --from chrome --cookies --domain amazon.comr to allow Keychain access. On Windows, Chrome 127 and later keep most cookies under app-bound encryption that no otherraw command outside the tab; the user's Chrome also refuses its cookies, storage and file paths), `not_supported` (imporAutomated 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 Prism-Shadow/penguin-harness at commit d56d9ce, republished under its Apache-2.0 licence (© Prism-Shadow). 1,645 words, ~2,873 tokens.
.claude/skills/browser-automation/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.penguin browser drives the agent browser from your shell: the desktop app's built-in browser (the Browser tab of the dock), or the user's own Chrome through the PenguinHarness Browser extension — whichever the user chose. The commands are the same on both. Its tabs are shared by every conversation and keep the sign-ins made in them, so a page you open is one the user can watch and take over. Every command acts on the active tab unless --tab <id> names another.
You do not choose the browser, and must not try to (through /api/me/prefs or any other route): penguin browser status says which one is in use, backend: builtin or backend: chrome. In the user's Chrome you reach only the tabs in its Penguin tab group, which are the ones you open, and tabs the user hands over with the extension's icon; the user can take a tab back at any time.
If the user's message only names this skill without a task, ask what they want done on the web. Then check the browser:
penguin browser statusstatus: available · backend: … is followed by the open tabs. status: unavailable (<reason>) (exit code 1) is followed by a note: saying what to tell the user. Tell them, and stop there — never answer from guessed page content:
not_desktop, shell_unsupported, no_window: the built-in browser needs the PenguinHarness desktop app, up to date and open.extension_not_paired: no Chrome is paired. Ask the user to install the PenguinHarness Browser extension and pair it: Browser panel → Connect your Chrome….extension_disconnected: their Chrome is paired but not connected. Ask them to open Chrome with the extension enabled, or to pair it again in the Browser panel.extension_disabled: an admin turned Chrome connections off on this server; the user's Chrome cannot be used here.A warning: line under memory: means the browser is using too much memory or holds too many tabs. Close the tabs you opened and no longer need (penguin browser close <tab-id>) before opening more, and reuse a tab (open without --new-tab) where you can.
penguin browser open <url> navigates the active tab (and opens one when there is none); --new-tab opens another. It waits for the load and prints tab <id> · <title> · <url>.penguin browser scan --text first — plain text, cheap. penguin browser scan returns simplified HTML when you need selectors. Both print the tab header, the tab list (tabs: *12 Your Orders | 15 Google, the active tab starred), a --- rule, then the page.penguin browser exec runs JavaScript in the page. Put the script in a quoted heredoc and return exactly what you need, as compact JSON for anything structured.status: and tab:, return:, diff: (how many elements changed, the largest change indented beneath), transients: (messages that appeared and may be gone again, such as "Added to cart"), new tabs:, and a note:. When they do not settle whether it worked, scan again.Prefer one precise exec over repeated scans: a scan costs thousands of tokens, a targeted exec a few dozen.
penguin browser exec <<'EOF'
const cards = [...document.querySelectorAll('.result')].slice(0, 10);
return JSON.stringify(cards.map((c) => ({
title: c.querySelector('h2')?.innerText.trim(),
href: c.querySelector('a')?.href,
})));
EOFreturn, or else its last expression: penguin browser exec 'document.title' prints the title. Top-level await works. Put an explicit return on its own last line: it is the one form that means the same in every script. A last line that is a statement (el.click();) gives return: undefined.<<'EOF') so the shell leaves $, backticks and quotes alone. --file script.js works too, and so does a one-liner argument.return: is cut at 8000 characters. For more, add --save out.json: the whole value goes to the file (a string as-is, anything else as JSON) and only its start is printed. Then read the file.--no-monitor skips change tracking: faster, for scripts that only read.--timeout 60s for a slow script (the default is 15 s). Poll inside the script for content that loads late (see reference/page-recipes.md).status: failed with an error: line means the script threw; the exit code is 1.page: reloaded in the status line means the page navigated while the script ran, so its JavaScript context is gone. Scan or exec again on the new page.location.href or clicks a link and then reads the page fails, because the page it was running in is gone. Navigate first (open, or an exec that only navigates), then act in the next exec.name, aria-label, data-* attributes, roles and visible text.[FAKE ELEMENT] N more items hidden, selector: "…". Query that selector in an exec for the rest.document.body.innerText, querySelectorAll).el.click() from JavaScript is an untrusted event that some sites ignore: buttons that open popups, custom dropdowns, file pickers. Use penguin browser click '<selector>' (--index n for the n-th match) or click --at x,y — a real mouse move, press and release. penguin browser type '<text>' --selector '<css>' --submit types for real and presses Enter.input event, or React and Vue will not notice (recipe in reference/page-recipes.md).disabled before clicking a button; a disabled button's click does nothing.target=_blank links open as new tabs: exec and click list them under new tabs:. Continue there with --tab <id> or penguin browser switch <id>.dialog: confirm "…" → dismissed (rerun with --accept-dialogs to accept). Rerun with --accept-dialogs only when accepting is what the task asks for, never to confirm a purchase, a payment or a deletion the user has not approved.DataTransfer, and raw DevTools Protocol commands through penguin browser cdp).penguin browser screenshot -o shot.png (--full-page for the whole page), then look at the file.error: tab_crashed means the tab's page crashed (often from running out of memory). Retrying in that tab will not work: close it (penguin browser close <tab-id>) and open the page again with penguin browser open <url> --new-tab.error: tab_released (Chrome) means the user took that tab back from you in their Chrome. Never retry it: open a new tab (penguin browser open <url> --new-tab), or ask the user to hand the tab over again with the extension's toolbar icon.A redirect to a sign-in page (/signin, /ap/signin, accounts.google.com, a login form in the scan) means the browser is not signed in to that site.
Never type the user's passwords, one-time codes or payment details, and never ask for them in the conversation.
Chrome (backend: chrome): the user's own sign-ins usually already apply. When they do not, ask the user to sign in in the Penguin tab in their Chrome, then continue. import belongs to the built-in browser and answers not_supported here.
Built-in: ask the user to sign in in the Browser panel of the desktop app, then continue from where you stopped.
Or, on the built-in browser and with the user's go-ahead, import their sign-in from the browser they normally use:
penguin browser import --list
penguin browser import --from chrome --cookies --domain amazon.com--from takes a browser (its Default profile) or a source id from --list; --domain limits the import to the sites the task needs, subdomains included. On macOS the system may ask the user to allow Keychain access. On Windows, Chrome 127 and later keep most cookies under app-bound encryption that no other program can read; the result says so in a warning: line, and the user signs in in the panel instead.
When the task is done, close the tabs you opened (penguin browser close <tab-id>), above all in the user's own Chrome. Never close a tab the user added for you: hand it back by leaving it open.
Finding and listing Amazon orders — the sign-in check, searching, extracting rows as JSON, paging, and the other Amazon sites — is in reference/amazon-orders.md.
| Command | Use |
|---|---|
penguin browser tabs | The open tabs (* marks the active one) |
penguin browser switch <id> / close [<id>] | Change or close tabs |
penguin browser cdp <Domain.method> --params '<json>' | A raw Chrome DevTools Protocol command |
penguin browser history [<query>] [-n 20] | Pages visited in the built-in browser, and imported history (built-in only) |
--json on any command | The raw response |
An error is one line, error: <code>: <message>, with exit code 1. The codes: browser_unavailable (see Before you start; also when the user paused the extension in Chrome — ask them to resume it), no_tab (open a page first), no_such_tab, tab_crashed, tab_released (see Rules), cdp_refused (a raw command outside the tab; the user's Chrome also refuses its cookies, storage and file paths), not_supported (import and history on the user's Chrome), timeout, invalid_url, script_error, source_not_found, import_failed, and invalid_argument for a command typed wrong.
© Prism-Shadow, 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 2 other files in plugins/browser-automation/skills/browser-automation of Prism-Shadow/penguin-harness.
Open the folder on GitHubat commit d56d9ce
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 |
|---|---|---|---|---|---|---|
| Browser Automation this skillPrism-Shadow/penguin-harness | 2.5k | — | ~2.9k | Automated safety check: Warn | Apache-2.0 | |
| Bright Data MCPbrightdata/skills | 264 | 1 repos | ~3.7k | Automated safety check: Pass | MIT | |
| Scrapingbee CLIScrapingBee/scrapingbee-cli | 108 | — | ~3.2k | Automated safety check: Notes | MIT | |
| SEO Checkerhanzili/hanzi-browse | 177 | — | ~1.9k | Automated safety check: Pass | Custom licence | |
| Chrome CDP Browser Controlzenstory-ai/oh-story-claudecode | 7.4k | 3 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Ego Browserkwakseongjae/oh-my-design | 531 | 2 repos | ~4.9k | Automated safety check: Pass | MIT |
brightdata/skills
Bright Data MCP handles ALL web data operations. An agent skill from brightdata/skills.
ScrapingBee/scrapingbee-cli
Fetch and read any web page, search the web, crawl a site, or pull structured data out of pages.
hanzili/hanzi-browse
Audit web pages for SEO issues in a real browser. An agent skill from hanzili/hanzi-browse.
zenstory-ai/oh-story-claudecode
Drives a Chrome window over the DevTools Protocol with the agent-browser CLI, so the agent can reuse your logged-in sessions, read pages and pull tokens.
kwakseongjae/oh-my-design
When you need a browser, read this Skill by default. An agent skill from kwakseongjae/oh-my-design.
AIPexStudio/AIPex
Lets an agent drive Chrome through the AIPex extension and its MCP bridge: navigation, clicking, form filling, screenshots, tab management and downloads.
Prism-Shadow/penguin-harness
Make a reply easier to read and act on with rich blocks inside ordinary Markdown — a choice the user picks from, a form that collects several answers, a procedure as steps with warnings in place, a…
Prism-Shadow/penguin-harness
A skill your agent uses when developing PenguinHarness itself — changing packages/{core,server,web,cli,desktop,landing,docs,skills}, the built-in model catalog, the installers or the release…
Prism-Shadow/penguin-harness
Create and edit Bento presentations — self-contained .bento.html decks whose document is JSON.
Prism-Shadow/penguin-harness
A skill your agent uses when standing PenguinHarness up to try a change by hand — launching the Web App, the desktop shell, the landing page, the docs site or the component gallery to click through…
Prism-Shadow/penguin-harness
A skill your agent uses when changing the PenguinHarness Web App (packages/web) or the shared UI package — adding or restyling any UI, picking a status colour, adding an icon, laying out a row or a…
Prism-Shadow/penguin-harness
A skill your agent uses whenever the user wants to build an agent application — their own program with an embedded agent, such as an AI app, an agentic app or a RAG app.
Works with
Categories
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…. Browser Automation is an agent skill from 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 JavaScript and trusted clicks and typing, and pull structured data out of them (orders, search results, tables), signed in with the user's own accounts.
Browser Automation fits situations like: any task on a website that needs a real browser; the users sign-in; such as finding an Amazon order.
Run `npx skills add Prism-Shadow/penguin-harness --skill browser-automation -a claude-code`. Or copy the skill folder (plugins/browser-automation/skills/browser-automation in Prism-Shadow/penguin-harness) into .claude/skills/browser-automation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Prism-Shadow/penguin-harness --skill browser-automation -a codex`. Or copy the skill folder (plugins/browser-automation/skills/browser-automation in Prism-Shadow/penguin-harness) into .agents/skills/browser-automation 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 Prism-Shadow/penguin-harness --skill browser-automation -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-automation, .gemini/skills/browser-automation, .github/skills/browser-automation and .opencode/skills/browser-automation in your project.
SKILL.md names no scripts, command-line tools or credentials: Browser Automation is instructions for the agent only.
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 flagged 3 warning(s): mentions a credentials file (ssh keys, cloud or package-manager tokens). Read the flagged lines before installing; the check is not a guarantee either way.
Browser Automation 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 2.9k tokens (SKILL.md is roughly 11k 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 Automation: Bright Data MCP (brightdata/skills, 264 stars), Scrapingbee CLI (ScrapingBee/scrapingbee-cli, 108 stars), SEO Checker (hanzili/hanzi-browse, 177 stars) and Chrome CDP Browser Control (zenstory-ai/oh-story-claudecode, 7.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Prism-Shadow (a GitHub organization) maintains it in Prism-Shadow/penguin-harness, which has 2,455 GitHub stars. The repository holds 31 skills in this directory. The repository was last updated on October 7, 2026.
Source: Prism-Shadow/penguin-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.