Competitive Pricing Intel
gooseworks-ai/goose-skills
Monitor competitor pricing pages via live web scrape and Web Archive snapshots.
Interactive Chromium sessions for reading and driving real web pages: open a URL, read the page as text, click and type, and read the page's own console and network history.
$ npx skills add iii-hq/workers --skill browser -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install iii-hq/workers browser --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/iii-hq/workers.git skills-src && mkdir -p .claude/skills && cp -r skills-src/browser/skills .claude/skills/browser && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "browser" agent skill from https://github.com/iii-hq/workers/tree/main/browser/skills into .claude/skills/browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/iii-hq/workers/tree/main/browser/skillsType 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 iii-hq/workers --skill browser -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install iii-hq/workers browser --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iii-hq/workers.git skills-src && mkdir -p .agents/skills && cp -r skills-src/browser/skills .agents/skills/browser && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "browser" agent skill from https://github.com/iii-hq/workers/tree/main/browser/skills into .agents/skills/browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add iii-hq/workers --skill browser -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install iii-hq/workers browser --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iii-hq/workers.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/browser/skills .cursor/skills/browser && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "browser" agent skill from https://github.com/iii-hq/workers/tree/main/browser/skills into .cursor/skills/browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/iii-hq/workers.git --path browser/skills--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 iii-hq/workers --skill browser -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install iii-hq/workers browser --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iii-hq/workers.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/browser/skills .gemini/skills/browser && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "browser" agent skill from https://github.com/iii-hq/workers/tree/main/browser/skills into .gemini/skills/browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install iii-hq/workers browserInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add iii-hq/workers --skill browser -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/iii-hq/workers.git skills-src && mkdir -p .github/skills && cp -r skills-src/browser/skills .github/skills/browser && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "browser" agent skill from https://github.com/iii-hq/workers/tree/main/browser/skills into .github/skills/browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add iii-hq/workers --skill browser -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install iii-hq/workers browser --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iii-hq/workers.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/browser/skills .opencode/skills/browser && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "browser" agent skill from https://github.com/iii-hq/workers/tree/main/browser/skills into .opencode/skills/browser/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
browserInteractive Chromium sessions for reading and driving real web pages: open a URL, read the page as text, click and type, and read the page's own console and network history.
Browser is an agent skill from iii-hq/workers. Interactive Chromium sessions for reading and driving real web pages: open a URL, read the page as text, click and type, and read the page's own console and network history. Also scrapes: HTTP and browser fetching, screenshots, persistent sessions, crawling, and CSS/XPath/regex parsing of HTML you already have. Reach for it when a task involves a running web app, especially "why is this page broken", or when pulling data off the web.
Its SKILL.md is about 4.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Data & Analytics, covering Web scraping. The licence is Apache-2.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 72ae6ab. 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 typescript).
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 loads about 4.7k tokens when it runs. Until then it costs about 111 tokens; SKILL.md has 2,545 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 iii-hq/workers at commit 72ae6ab, republished under its Apache-2.0 licence (© iii-hq). 2,545 words, ~4,665 tokens.
.claude/skills/browser/SKILL.md (or your agent's skills folder).The browser worker does two things. It runs real Chromium sessions on the bus
(browser::*), and it parses HTML natively without a browser
(browser::* — CSS/XPath/regex queries, element search,
HTML→Markdown, over any HTML string you already have).
Start a session,
navigate, and the page becomes data: browser::snapshot returns an
accessibility outline whose [ref=eN] handles feed straight into
browser::act, and everything the page logs (console calls, uncaught
exceptions, failed requests) is captured into per-session ring buffers you can
query. This is the difference from one-shot fetching: the session stays alive,
so you can act, observe the result, and read what the page said about it.
Sessions are headless by default and cost a Chromium process each; the configured session cap is small. Stop sessions when a task is done. Refs die on navigation; re-snapshot before acting after any page change.
browser::console::read /
browser::network::read instead of guessing from source.browser::styles::read and
browser::styles::write inspect and change an element's CSS in the running
page without touching source files.browser::fetch (no browser) or browser::dynamic-fetch
(Chromium, when the page needs JS). Sessions are for flows that need state
between steps.browser::* parse function below. Starting Chromium to run a
CSS selector over a string you are already holding is pure waste.solve_cloudflare is available on browser::stealthy-fetch and stealthy
Scrapling sessions. Use browser::handoff for challenges in an interactive
session or when automated solving does not clear the page.allow_attach is set, and adoption is
exclusive (one session per tab) so two sessions never fight over a tab.
Reach for a launched session when you do not specifically need the user's
existing logins.browser::styles::write edits are visual experiments only: they die on the
next navigation and never touch source files. Use them to find the right
value, then edit the codebase.browser::pick::*, browser::screencast::*, and browser::frame are console-UI plumbing, not agent surface.browser::sessions::start — open a browser tab; returns the session_id
every other function needs. Tabs share one browser profile (cookies,
logins) and stay open until stopped: an unused tab sleeps after a while
and wakes on the next call, so keep using the same session_id instead of
opening new ones. read_only: true opens an inspection-only tab. ttl_ms
gives the tab a lifetime. incognito: true opens a PRIVATE tab: its own
browser context, no shared logins, nothing saved to disk, no history, and
inactivity closes it for good — use it when a login must not be kept.browser::sessions::list — every tab, live or asleep (active), with its
current URL and whether it is incognito.browser::sessions::stop — close a tab for good; idempotent. An attached
session closes only a tab it opened and releases an adopted user tab
untouched.browser::sessions::attach — bind a session to an already-running browser
over CDP (start Chrome with --remote-debugging-port): open a fresh tab
the session owns, or adopt an existing logged-in tab by URL substring.
Off unless allow_attach is set in config.browser::tabs::list — open tabs of a running browser at a CDP endpoint,
with which are already adopted; read-only.browser::doctor — read-only environment report: which Chromium would
launch, its version, capacity, whether attach and recording are available,
and anything degraded with how to enable it.browser::chromium::status — read-only: whether a Chromium is found, its
path, version and source, and whether a download is available here.browser::chromium::install — download Chromium (~200 MB) when the
machine has none; returns a job_id at once, progress on
browser::chromium-install-progress. A session error starting with
chromium_missing: means exactly this: tell the user, and offer the ADE's
Set up the harness → Browser step or this call (it needs their approval).browser::recording::start / browser::recording::stop — capture a
session's live viewport to a webm or mp4 file via ffmpeg; stop returns the
path, duration, and frame count. Requires ffmpeg on PATH.browser::navigate — go to a URL and wait for the load. Like a browser, a
network failure or an empty HTTP error response leaves Chromium's error
page in the tab: the call returns ok: false with error set instead of
failing, and the tab stays usable.browser::snapshot — the page as an accessibility outline with [ref=eN]
handles; the default way to read a page. diff: true returns only what
changed since the previous snapshot.browser::elements — the visible, enabled controls in the viewport as a
flat table (n ref, role, label, current value, checked/expanded state,
which act operations apply, <select> options) plus the visible text,
in one read. The cheap way to drive a form and to read what an action
changed.browser::act — click, hover, type, select a native <select> option,
press, or scroll, addressed by ref or viewport coordinates. A ref is
scrolled into view, and a click/type/select on a disabled, hidden or
covered element is refused (the error names what covers it) instead of
landing on the overlay. Typing into an input or textarea by ref replaces
its value.browser::run — reach a goal on the current page in one call: the judge
worker picks each step (click, type, select, scroll, wait) from the element
table and the worker executes it, until done, blocked, a field needs text
you did not pass in inputs (needs_text), no progress, or the budget
runs out. Returns the steps and the final page table. Without a judge
worker it returns judge_unavailable plus the table, and changes nothing.browser::screenshot — viewable JPEG of the viewport, for when layout or
rendering matters.browser::evaluate — run a JavaScript expression in the page and get the
completion value.browser::execute — run a multi-step async script in the page: top-level
await and return, log(...), sleep(ms), waitFor(selector), and a
state object persisted across execute calls for the session. One call
replaces a chain of act/evaluate round-trips.browser::handoff — pause the session for a human-only step (CAPTCHA,
2FA, payment): show an in-page continue banner and block until the human
clicks it, a browser::handoff::confirm call resolves it, or the timeout
elapses. Verify the expected page state after it returns.browser::handoff::confirm — resolve a paused handoff from outside the
page (by handoff_id, or the one pending handoff for a session_id).browser::console::read — captured console entries; filter with
pattern/level and page with since_seq.browser::network::read — captured requests; failed_only=true is the fast
path for what broke.browser::history — back, forward, or reload; the tab's history survives
it sleeping and the worker restarting.browser::clear-data — clear the cookies, storage and cache of the site the
tab is on; other sites stay signed in. browser::clear-browser-data wipes
the whole profile (every tab signed out).browser::dom::read — DOM tag outline with refs, for structure the
accessibility tree hides.browser::styles::read / browser::styles::write — computed styles and
live inline CSS edits on one element.These reach the network, so they need approval. All return one envelope —
{status, url, headers, cookies, encoding} — and can extract or render inline
via selectors / format: markdown|text / include_html, so you rarely need
a second call to parse what you fetched. Each takes a single url or a bulk
urls list.
browser::fetch — plain HTTP, no browser. The default choice: fastest,
cheapest. Safe mode uses bounded native HTTP; certified compat mode uses the
frozen curl-impersonate wire behavior.browser::dynamic-fetch — real Chromium over CDP, for pages that
need JavaScript. Supports wait_selector (+ wait_selector_state),
network_idle, and a plain wait.browser::stealthy-fetch — same, plus masking of the automation
tells a page can read. Escalate here only when dynamic-fetch is detected.browser::screenshot-url — page as image tiles (≤1024px wide, ≤6
tiles); says so in the caption when a page is taller than the budget.browser::session-open / session-fetch / session-close /
session-list — keep cookies and browser state across fetches.
HTTP, dynamic and stealthy types are private FIFO sessions with UUID4 hex
ids; they never appear in browser::sessions::list and reject interactive
ids (session-close on a tab id fails: tabs close with
browser::sessions::stop). Close sessions when done.browser::crawl — breadth-first from start_urls, same-domain by
default, capped by max_pages (20) and max_depth (2). The response holds
only a ≤10-item sample; read the rest from the stream it names.Safe mode refuses private, loopback and cloud-metadata addresses on every one
of these connections (including redirects and crawl hops). To scrape a local
dev server the operator must set browser.scrapling.allow_loopback in worker
config. Compat mode reproduces the Python wrapper's unrestricted network
behavior and is for trusted calls.
These take an html string and never touch Chromium. Use them on HTML from
any source (a fetch body, a file, a page you already read).
browser::extract — declarative selector list in one call:
each entry names a css/xpath/regex plus optional attr/html/all,
and the response is a {name: value} map. The right default when pulling
several fields off one document.browser::css / browser::xpath — one query;
first: true returns a scalar, otherwise an array. attr pulls an
attribute instead of text.browser::regex — regex over the document's visible text.browser::find — element search by tag/attribute filters
(+ optional text regex), BeautifulSoup-style.browser::find-by-text / browser::find-by-regex —
find elements by their visible text. Responses carry generated css/xpath
selectors for each hit, so you can feed one straight back into a query.browser::find-similar — give one example element, get its
structural siblings. The fast path for "extract every card/row on this
page" without hand-writing a selector.browser::describe — inspect the first match: attributes,
class list, generated selectors, parent/child/sibling counts.browser::to-markdown — HTML → compact Markdown (or text), with
an optional CSS scope and a main-content cleaner. Use it to shrink a page
before putting it in context.adaptive: true persists element identities in the configured SQLite file.
Parse calls are auto-allowed, so do not assume parsing is side-effect-free
when adaptive tracking is enabled. Safe mode enforces the configured database
quota; compat mode preserves the Python wrapper's unbounded behavior.
browser.scrapling.security_mode defaults to safe. Safe mode keeps SSRF,
TLS, proxy, response-size, timeout, and adaptive-database policy checks; an
option the safe backend cannot enforce is refused with an actionable error.
Compat is eligible only on certified Linux x86_64/aarch64 builds containing
the frozen curl-impersonate and Chromium artifacts. Other targets reject it,
and a Tier-1 build missing an artifact reports a capability error instead of
silently using the safe transport.
Every id is browser::<leaf>. browser::screenshot-url screenshots a url,
while browser::screenshot is the interactive-session function. Crawl's
default stream is browser::crawl.
browser::elements is the cheap
read; browser::snapshot shows the whole structure. Refs die on
navigation, so a stale ref fails with an error instead of clicking the
wrong element.browser::elements
(or browser::snapshot { diff: true }, which returns only added and
removed lines). Set a native <select> with act select, not a
script.browser::execute when a step needs waiting or several dependent
reads and writes; use browser::act for single trusted input events
(in-page script clicks are not trusted events).read_only: true session.browser::handoff and wait, rather than trying to
automate it. After it returns confirmed, re-read the page and verify the
step actually landed — a human clicking Continue is not proof the step
succeeded.A multi-step form or flow is one call instead of an act/read round trip per click:
browser::run { session_id, goal, inputs }: state the end state in
goal ("logged in: the dashboard shows"), not the clicks, and give every
value to type in inputs (email, password or the field labels work).
Values go to the page only; the judge sees the keys. The run waits for
the requests each click starts, so the page it returns is the outcome.done: the judge chose it and a separate "is the goal complete on this
page?" check agreed (fields filled but not saved do not pass). Still check
page (the final table) against the goal before you report success; the
judge's done is not proof (a login can end on "invalid password"). page.busy means it was still loading. needs_text: type the named field with
browser::act or rerun with that input. blocked/stalled/max_steps:
read steps (each has error when an action was refused) and continue
by hand.judge_unavailable: no judge worker is deployed (or it is failing and
paused for 30 s). Drive the same flow with browser::elements +
browser::act; page already holds the table.Do not use run for destructive actions; they need the two-phase approval
below.
For destructive page actions (deleting records, cancelling subscriptions) use two phases, never one script:
Browser outputs are large and land in the transcript, so a few careless reads fill the context window and force a compaction. Read economically:
browser::snapshot (a compact text outline) over
browser::screenshot (a whole image) for reading a page; take a screenshot
only when layout or rendering is the actual question.browser::console::read takes
pattern/level, browser::network::read takes failed_only, and both
page with since_seq so a follow-up read returns only what is new.ref to browser::dom::read rather
than snapshotting the whole document repeatedly.browser::sessions::stop it when done;
do not re-snapshot after every action, only after the page actually
changed.Bind a browser::* trigger when another function should react to session
activity as it happens instead of polling the read functions. The types:
browser::session-started, browser::session-stopped, browser::navigated,
browser::console-event (one captured entry per firing; high volume),
browser::picked (a human picked an element in the console UI; the payload
carries a ref that browser::act accepts directly), and
browser::handoff-requested (a session is paused waiting for a human; the
console surfaces it beside the live viewport).
If you just ran browser::navigate yourself, its return value already tells
you the outcome; bind triggers when a different worker needs to observe
sessions it does not drive.
registerFunction('mywatcher::on-console', handler).iii.registerTrigger({
type: 'browser::console-event',
function_id: 'mywatcher::on-console',
config: { session_id: 'b1' },
})Every browser::* binding accepts the optional session_id equality filter;
omit it to receive events for all sessions. browser::console-event fires
per entry, so filter by session and treat browser::console::read as the
durable record. For event payload shapes, call get function info on the
trigger type.
© iii-hq, 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
Just SKILL.md in browser/skills of iii-hq/workers.
Open the folder on GitHubat commit 72ae6ab
Browser 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 this skilliii-hq/workers | 113 | — | ~4.7k | Automated safety check: Pass | Apache-2.0 | |
| Competitive Pricing Intelgooseworks-ai/goose-skills | 1.2k | 1 repos | ~2.2k | Automated safety check: Pass | MIT | |
| Firecrawl Website Design Clonefirecrawl/skills | 116 | — | ~1.9k | Automated safety check: Pass | ISC | |
| Tmuxtrpc-group/trpc-agent-go | 1.8k | 24 repos | ~868 | Automated safety check: Pass | Apache-2.0 | |
| Ketch1broseidon/ketch | 697 | 1 repos | ~3.9k | Automated safety check: Pass | MIT | |
| Crawl4AI Web Scrapingsmallnest/goclaw | 598 | 1 repos | ~2.5k | Automated safety check: Pass | MIT |
gooseworks-ai/goose-skills
Monitor competitor pricing pages via live web scrape and Web Archive snapshots.
firecrawl/skills
Extract any website's design system into an agent-ready DESIGN.md using Firecrawl scrape evidence.
trpc-group/trpc-agent-go
Remote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.
1broseidon/ketch
Research skill for ketch — a fast stateless CLI for web search, OSS code search, curated library docs, page scraping, and site crawling; an optional MCP server exists for operators who want it, but…
smallnest/goclaw
Scrapes sites, handles JavaScript-heavy pages and extracts structured data with Crawl4AI, through its crwl CLI or Python SDK, including schema-based extraction without an LLM.
eatmoreduck/boss-zhipin-scraper
Scrape BOSS直聘 (job listing site) via Chrome CDP. An agent skill from eatmoreduck/boss-zhipin-scraper.
iii-hq/workers
Schedule any registered function on a 6- or 7-field cron expression with the standalone cron worker.
iii-hq/workers
Send and read email from the iii engine — SMTP send, IMAP read, and real-time IDLE push as a subscribable trigger type.
iii-hq/workers
Expose registered functions as HTTP endpoints with the standalone http worker.
iii-hq/workers
File-backed kanban board: create, read, move and comment on tickets by key or uuid, assign agent profiles, and wake on comments through the kanban:comment trigger instead of polling.
iii-hq/workers
Fire-and-forget topic pub/sub: broadcast an event with publish and every matching subscribe trigger receives it.
iii-hq/workers
Organize worker release tags into Linear release waves — one team document plus one release/<date label per same-day batch of worker releases, with shipped MOT issues labeled and linked.
Categories
Interactive Chromium sessions for reading and driving real web pages: open a URL, read the page as text, click and type, and read the page's own console and network history. Browser is an agent skill from iii-hq/workers. Interactive Chromium sessions for reading and driving real web pages: open a URL, read the page as text, click and type, and read the page's own console and network history.
Browser fits situations like: tasks that involve Web scraping.
Run `npx skills add iii-hq/workers --skill browser -a claude-code`. Or copy the skill folder (browser/skills in iii-hq/workers) into .claude/skills/browser in your project. Claude Code loads it when a task matches its description.
Run `npx skills add iii-hq/workers --skill browser -a codex`. Or copy the skill folder (browser/skills in iii-hq/workers) into .agents/skills/browser in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add iii-hq/workers --skill browser -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/browser, .gemini/skills/browser, .github/skills/browser and .opencode/skills/browser in your project.
SKILL.md names no scripts, command-line tools or credentials: Browser is instructions for the agent only. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Browser 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 4.7k tokens (SKILL.md is roughly 19k 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: Competitive Pricing Intel (gooseworks-ai/goose-skills, 1.2k stars), Firecrawl Website Design Clone (firecrawl/skills, 116 stars), Tmux (trpc-group/trpc-agent-go, 1.8k stars) and Ketch (1broseidon/ketch, 697 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
iii-hq (a GitHub organization) maintains it in iii-hq/workers, which has 113 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 8, 2026.
Source: iii-hq/workers on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.