agent-browser · git:20261008.9e0f094 · 2026-10-08 · sha256 b2770065cc22ab5c

agent-browser git:20261008.9e0f094A

Immutable. This exact content never changes and is served at /api/v1/blob/b2770065cc22ab5c.

---
name: agent-browser
description: Interactive browser automation via the deferred ``browser`` tool (open/snapshot/click/fill/press/scroll/screenshot/back/close). The agent drives the same WebView2 page the user sees in the EvoPanel browser side panel. Use for dynamic pages, login flows, and anything needing clicks or forms.
---

# Agent Browser

Interactive browser control uses the unified **`browser`** tool. The agent drives the
**EvoPanel embedded WebView2** — the same page the user watches in the browser side
panel (ZCode model: one host-owned browser, no second window, no screencast).

## Loading the tool (deferred)

1. Activate agent mode: `scenario(action='activate', scenario_key='agent')`
2. Load the tool schema: `tool_search(query='select:browser')`

## Core workflow (snapshot + ref)

```
browser(action='open', url='https://example.com')   # live view appears in the EvoPanel side panel
browser(action='snapshot')                           # read the page → refs e1, e2, …
browser(action='click', ref='e2')
browser(action='fill', ref='e3', text='search text')
browser(action='press', key='Enter')
browser(action='snapshot')                           # page changed → refs are stale
browser(action='screenshot')                         # optional — pixels, shown to the user
browser(action='close')
```

Actions: `open`, `snapshot`, `click`, `fill`, `press`, `scroll`, `screenshot`, `back`, `close`.

## Discipline (do not skip)

1. **Always `snapshot` before choosing refs.** Refs (`e1`, `e2`, …) come from the latest
   snapshot and are invalidated by navigation and by clicks that change the page.
2. **Re-snapshot after navigation or state-changing clicks.** A stale ref returns
   `ref_not_found` — that is the signal to take a fresh snapshot, not to retry.
3. **Never guess CSS selectors, labels, or placeholders.** Build clicks and fills only
   from facts in the latest snapshot. If a locator target is ambiguous, take a fresh
   snapshot and narrow it instead of guessing.
4. **One state-changing action per observation.** After acting, judge success by the
   expected effect (URL, page state, next snapshot) — not by absence of errors.
5. **`snapshot` is how you read the page.** It returns URL, title, interactive elements
   with refs, and a compact content outline. Use `screenshot` only when pixels matter.

## When to screenshot

| Need | Use |
|------|-----|
| Click, fill, read structure | `snapshot` |
| CAPTCHA, dense layout, visual-only UI | `screenshot` (then judge from the returned image info) |
| Deliver a picture to the user | `screenshot(full_page=…)` — the image is shown in the chat UI |

The screenshot image is rendered for the user in the chat timeline; the tool result
itself stays compact (no base64 in context).

## Prerequisites

- The EvoFlow desktop app must be running — the tool drives its embedded WebView2.
  If the engine is unreachable the tool returns a structured
  `backend_unavailable` error; report it instead of trying other browsers.
- Do not invent alternate browsers or CLIs. The legacy `agent-browser` CLI path was
  removed; terminal-based browsing recipes are obsolete.

## Tips

- `fill` goes through the keyboard path (focus + insertText), so React/Vue controlled
  inputs work as if the user typed.
- `press` accepts `Enter`, `Tab`, `Escape`, `Backspace`, `Delete`, arrow keys,
  `Home`/`End`/`PageUp`/`PageDown`, single characters, and `modifiers` (e.g. Ctrl).
- `scroll` takes `direction` (`down`/`up`/`left`/`right`) and `amount` in CSS pixels.
- `back` walks the WebView2 session history; `close` ends the agent session (the user
  keeps the panel and can close it from the UI).
- The user can interact with the panel too (address bar, clicks). Treat unexpected page
  changes as user actions: re-snapshot before continuing.