Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/agent0ai/space-agent/browser-controlnpx skills add agent0ai/space-agent --skill browser-controlgit clone --depth 1 https://github.com/agent0ai/space-agentWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00016 | $0.01477 |
| Opus 5 | $0.00008 | $0.00739 |
| Sonnet 5 | $0.00003 | $0.00295 |
| Haiku 4.5 | $0.00002 | $0.00148 |
Grade A, and why
Browser Control scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
Copies of this mod
1 near-identical copy found in the catalogue:
- Browser Control — 100% identical, 36 lines differ
How it starts
The opening of the file, as written. The whole thing — 111 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Use this skill once at least one browser surface is open. browser-manager handles stand-alone window open or close work.
transient
currently open web browserslistsbrowser id|url|titlelast interacted web browsermay include freshpage content↓with typed ref markers such as[link 12],[button 18],[image 24], or[input text 30]
workflow
- pick the target from transient or an explicit numeric browser id such as
1 space.browserhelpers already settle navigation state internally; do not call a separate sync step- open, navigate, history, reload,
state(...),content(...),detail(...), anddom(...)settle internally and return fresh read results without a separate sync step, andevaluate(...)still resolves a ready guest without requiring a separate sync step first - ref-targeted action helpers such as
click,type,submit,typeSubmit, andscrollreturn{ action, state }; inspectresult.action.statusbefore retrying open(...)and typednavigate(...)treat bare hosts likenovinky.czorlocalhost:3000as browser-address input instead of app-relative paths- widget or page-authored
<x-browser src="google.com"></x-browser>surfaces appear in the same browser list as stand-alone windows - inspection helpers such as
content(...),detail(...),dom(...), andstate(...)also settle internally and mark that browser as the current prompt-time page-content source - prefer the fresh
last interacted web browsertransient block after open, navigate, history, reload, and ref-targeted actions before asking for another explicitcontent(...)capture - use
content(...)to get readable page content with stable typed refs for the latest capture; unlikedom(...), it should stay cleaned up for agent use and should not include raw helper wrapper markup from nested frames or shadow roots dom(...)andcontent(...)accept either{ selector: "..." }or{ selectors: ["...", "..."] }when you want a scoped read instead of the whole pagecontent(...)is lean by default to save tokens: it uses typed ref boxes like[link 12] Story,[disabled muted button 18] Continue,[checked checkbox 7] Email updates, or[input text 30] Search placeholder=Hledat value=Ethereum, omits link destinations, omits quotes around labels, and omits list bullets while keeping list indentation- those refs also cover generic controls wired through framework or inline handlers such as
@click,x-on:click,v-on:click, oronclick - state and semantic tags are best-effort hints, not absolute truth; use
detail(id, ref)when actionability is unclear - if you need flatter output,
content(id, { includeStateTags: false, includeSemanticTags: false })suppresses those extra bracket tags - images also get refs now, so
detail(id, ref)works for image targets too - if a specific link or image target matters, prefer
detail(id, ref)on that reference instead of askingcontent(...)to print every-> url - use
detail(...)for deeper DOM on one ref before acting, and use it to inspect a link's realhref, an image source, another referenced DOM target, or richer state metadata when the destination or actionability matters - use
click,type,submit,typeSubmit, andscrollonly with refs from the latestcontent(...)capture typeSubmit(...)types into the field and then presses Enter in that same field- any new
content(...)call or navigation replaces the old ref ids - prefer high-level helpers first; use
evaluate(id, script)orsend(id, "evaluate", { script })only as a last resort when refs or navigation helpers cannot express the step, and remember that the last evaluated expression or resolved promise value becomes the result - if
result.action.status.noObservedEffect === true, stop retrying the same action and re-read the page or inspect the relevant control withdetail(...) - treat
validationTextAdded,nearbyTextChanged,descriptorChanged,valueChanged,checkedChanged,selectedChanged, andsemanticHintsas evidence about what the page did after your action - use numeric ids like
1, notbrowser-1
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 111 lines · 16 tokens per session scan A 1be4eac17c39
Browser Control is a skill published in the GitHub repository agent0ai/space-agent (1,390 stars, last pushed 2mo ago), licensed MIT. It adds 16 tokens to every session and 1,477 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
use-agent-browser-for-airi
Test AIRI display-model imports with agent-browser across stage-tamagotchi Electron, stage-web, and stage-pocket mobile web layouts. Use when uploading and verifying contributor-supplied Live2D ZIP, VRM, or MMD ZIP/PMX/PMD files through AIRI's model selector, including onboarding bypass, format-specific import…
opencli-sitemap-author
Use when creating or maintaining OpenCLI site sitemaps: agent-facing navigation, page-state, action, workflow, API-reference, pitfall, and fallback knowledge for a website. Use after browser exploration discovers durable site context, when a sitemap is stale, or when promoting local site knowledge into the repo.
pinchtab-mcp
Use this skill when a task requires browser automation through PinchTab's MCP server connected to a remote browser instance. Covers navigation, element interaction, data extraction, form filling, multi-step flows, and session management via MCP tools.
peekaboo
Capture and automate macOS UI with the Peekaboo CLI.
repro-admin
Reproduce an EmDash admin UI bug. Attach a container, start the demo dev server, drive the admin with agent-browser using the dev-bypass session, and capture the reproduction as screenshots plus a replayable transcript.
browser_cdp
通过 Chrome DevTools Protocol (CDP) 连接已运行的浏览器,或扫描本机 CDP 端口,用于远程调试与多工具共享浏览器实例。.