# browser An interactive headless Firefox session for each conversation, separate from `web` search/fetch and from your personal browser profile. Firefox runs in the conversation's target environment, so `localhost` refers to that machine, not the berry host. Requires `deno`, `firefox`, and a POSIX shell on the target's PATH; Windows targets are not supported. A session-scoped Deno process owns Firefox and its native WebSocket connection; berry exchanges commands and observations with it over stdio. No browser download or server restart is needed. Enable **browser** in a conversation's extension picker. Its **browser** view shows tabs, page text, interactive elements, console/network diagnostics, recent actions, and the latest explicitly captured screenshot. Refreshing the view only reads existing observations; it does not launch a browser or refresh the page. ## Tools `browser` takes one action and returns `{ snapshot, tabs }`. Open a page, then use the tab and element references it actually returned: ```ts const { snapshot } = await tools.browser({ action: "open", url: "http://localhost:3000" }); text(snapshot); ``` After identifying a field in that snapshot: ```ts const field = snapshot.elements.find((element) => element.name === "Email"); const result = await tools.browser({ action: "fill", tab: snapshot.tab, ref: field.ref, text: "charlotte@example.com", }); text(result.snapshot); ``` Every observation issues new references. Use the updated snapshot after each action; old references are rejected rather than guessed. `fill` replaces existing text using keyboard input. Clicks use real pointer input and refuse an obscured target. Selecting a native `