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 rules/compnew2006/browser-controller/browser-controllergit clone --depth 1 https://github.com/compnew2006/browser-controllerWhat 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.01571 | $0.01571 |
| Opus 5 | $0.00785 | $0.00785 |
| Sonnet 5 | $0.00314 | $0.00314 |
| Haiku 4.5 | $0.00157 | $0.00157 |
Grade A, and why
browser-controller 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 yesterday.
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.
How it starts
The opening of the file, as written. The whole thing — 95 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Browser Controller
MCP server: browser-controller. Controls the user's REAL Chrome browser - not headless. All sessions, logins, cookies are already active.
CRITICAL: Tab-targeting model (v2)
This is a multi-client server. Other agents may be working in other tabs right now. Never assume which tab your actions hit. You MUST target a tab explicitly.
The required flow (instead of "snapshot the active tab")
browser_tabswithaction: "list"→ get atabIdfor the tab you want to work in- Pass that same
tabIdto EVERY page-interaction tool (browser_snapshot,browser_click,browser_type, …) - Refs from a snapshot are only valid for the tabId that produced them. A ref from tab 10 will never resolve on tab 20.
- If you need exclusive access to a tab (another agent might touch it),
browser_tabswithaction: "lock", tabIdfirst;action: "unlock"when done.
If tabId is missing on a page tool, you'll get: "tabId is required. Call browser_tabs list first."
Rules
- NEVER close tabs you didn't create
- NEVER navigate away from pages the user is working on without asking
- ALWAYS pass
tabId— the "active tab" the user is looking at is NOT yours to act on - Prefer
browser_snapshotoverbrowser_screenshot(cheaper, faster, parseable) - Refs break after navigation/scroll/DOM changes - re-snapshot before using stale refs
- Refs recover automatically: if a ref goes stale but the element still exists, the tool finds it via a robust selector + text/role scan (response carries
via: "fallback"). If the element was scrolled away entirely, the response carriesfreshRefs: [...]— retry with one of those new refs in the same step, no separate snapshot needed. isNew: trueon a snapshot ref means the element appeared since the last snapshot. After an action opens an overlay/dropdown, filter toisNewrefs instead of re-reading the whole tree.- After
browser_scroll, expectrefsMayBeStale: trueon feeds that recycle DOM nodes (Facebook/Instagram/Twitter) — re-snapshot before interacting. browser_evaluatenow runs in the page's MAIN world via chrome.scripting (no debugger banner, CSP-safe). It no longer needs CDP.
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.
- yesterday First seen · 95 lines · 1,571 tokens per session scan A 11f0a8f7d4df
browser-controller is a cursor rule published in the GitHub repository compnew2006/browser-controller (1 stars, last pushed 3d ago), licensed MIT. It adds 1,571 tokens to every session, about $0.0079 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-31.
Other cursor rules, from other repositories
webkit-browser
Cursor rule "webkit-browser" from duckduckgo/apple-browsers, covering webkit & browser development guidelines, webview configuration, basic webview setup, user scripts management and tab management.
cypress-e2e-testing-cursorrules-prompt-file
Cursor rules for Cypress development with E2E testing.
vasu-playwright-utils
../../templates/cursor-rules/vasu-playwright-utils.mdc.
dev-browser
Fallback browser automation with persistent Chrome state. Use only when Browser Use is unavailable or blocked.
node-dependencies
Enforce Node.js versioning and package management best practices.
security-standards
Cursor rule "security-standards" from wjgogogo/cursor-rules, covering 安全规范, 核心原则 [p0], 输入验证, xss 防护 and csrf 防护.