원클릭으로
browser
Drive a managed Chrome session via CDP. Navigate, click, fill forms, read the DOM, take screenshots, run JS.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Drive a managed Chrome session via CDP. Navigate, click, fill forms, read the DOM, take screenshots, run JS.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Bounded auto-iteration for a prompt with explicit stop predicates.
Memory hygiene workflow to classify, deduplicate, and promote durable knowledge across local memory layers.
Bounded simplification pass for a file or hunk that preserves behavior while reducing complexity.
Turn a repeatable workflow into a reusable local SKILL.md with explicit steps, criteria, and safe defaults.
Bounded auto-debug loop for failing build/test commands with evidence-first diagnosis.
Safely update Nexo config files with read-before-write merges, schema-aware mapping, and reload/restart awareness.
| name | Browser |
| description | Drive a managed Chrome session via CDP. Navigate, click, fill forms, read the DOM, take screenshots, run JS. |
| requires | {"bins":["chrome"],"env":[]} |
Controls a real Chrome/Chromium instance managed by the agent process. Use for tasks that require reading or interacting with a live web page: research, scraping structured data, filling forms, downloading files, grabbing a visual reference. Every tool call maps 1:1 to a Chrome DevTools Protocol command, so actions are immediate — no sandbox.
fetch-url skill instead.
The browser is heavy; spinning it up for plain JSON is wasteful.github, google, etc.) which talks the API directly.| Tool | When to call |
|---|---|
browser_navigate {url} | Go to an absolute URL. Wait for load. Call first on any new page. |
browser_snapshot | Text representation of the DOM with element refs (@e1, @e2…). Primary way to "see" a page. Refresh refs by calling again after any navigate/click. |
browser_screenshot | Base64 PNG of the viewport. For vision-capable models, or when layout matters. Don't call blindly — snapshot is cheaper. |
browser_click {target} | Click an element. target is an @eN from the latest snapshot or a CSS selector. Prefer @eN. |
browser_fill {target, value} | Replace the contents of an input / textarea. value is literal — special keys don't work here. |
browser_press_key {key} | Dispatch a keyboard event on the focused element. Names: Enter, Tab, Escape, Arrow{Up,Down,Left,Right}. Anything else is treated as a literal char. |
browser_scroll_to {target} | Scroll an element into view. Do this before clicking items the snapshot flagged as below the fold. |
browser_wait_for {selector, timeout_ms?} | Poll until a CSS selector appears. Use between browser_click and the next browser_snapshot when the page triggers an XHR/SPA transition. |
browser_evaluate {script} | Run arbitrary JS. Escape hatch for anything the other tools can't express. Returned value is in result. |
browser_current_url | Shortcut for browser_evaluate{ 'location.href' }. |
browser_go_back / browser_go_forward | Step through the history stack. |
1. browser_navigate({url: "https://example.com"})
2. browser_snapshot() ← read the page, collect refs
3. browser_fill({target: "@e12", value: "user@example.com"})
4. browser_fill({target: "@e13", value: "s3cret"})
5. browser_click({target: "@e14"}) ← submit
6. browser_wait_for({selector: ".dashboard"})
7. browser_snapshot() ← confirm logged in, collect new refs
Element refs (@eN) are only valid inside the snapshot that produced
them — as soon as the DOM changes, re-call browser_snapshot before
referencing more refs. CSS selectors stay valid across snapshots, but
the LLM usually gets better accuracy with refs.
{ok: false, error: "navigate timed out"} — page didn't fire load
within the timeout. Retry once with a longer implicit timeout via
evaluate, or check if the URL is wrong.{ok: false, error: "element not found"} — the @eN is stale or the
selector doesn't match. Call browser_snapshot again.{ok: false, error: "circuit breaker ... open"} — the plugin is
cooling off after repeated failures. Wait a few seconds or ask the
user to retry.plugins: [browser] —
actions interleave. For side-effect-free reads it's fine; for stateful
sessions (logins), give each agent its own user_data_dir in
config/plugins/browser.yaml.browser_evaluate — hit the tool directly.browser_evaluate returns the value of the last expression. Wrap
complex objects in JSON.stringify(...) if you need the full shape.browser.headless: true. With a visible
window the user sees exactly what you're doing — useful for trust,
expensive in CPU.