fastdefault
A quick, confident user
- Pointer move
- 45 to 250 ms
- Typing
- keystrokes; text over 40 characters in word chunks
- Per site, per minute
- up to 400 actions and 60 navigations
Browzie 0.1 is open source: MIT licensed, made for Windows 10 and 11.
Read the designTools
Everything Claude needs to read a page and act on it, over MCP. Reads are instant and send no input. Input tools move a real cursor and return only what changed.
Showing all 19 tools.
Open a URL in Browzie's window (or back/forward/reload, or in a new tab) and return a compact snapshot. Interactive elements carry refs like [e12].
| Parameter | Type | What it does |
|---|---|---|
url | string | The address to open |
action | back | forward | reload | A history step instead of a URL |
newTab | boolean | Open the URL in a new tab |
snapshot | full | none | Return the full snapshot (default) or nothing |
maxChars | integer | Snapshot size budget |
{
"name": "navigate",
"arguments": {
"url": "news.ycombinator.com"
}
}
Compact text snapshot of the current page (instant, no input). Scope with ref/selector, viewportOnly or interactiveOnly.
| Parameter | Type | What it does |
|---|---|---|
ref | string | Element ref from a snapshot, e.g. "e12" or "f1e3" (best) |
selector | string | CSS selector (must match one element unless nth is given) |
viewportOnly | boolean | Only what is on screen |
interactiveOnly | boolean | Only elements you can act on |
maxChars | integer | Size budget |
{
"name": "snapshot",
"arguments": {
"interactiveOnly": true
}
}
Search the whole page (all frames) by text, name, role or CSS selector and get refs.
| Parameter | Type | What it does |
|---|---|---|
query | string | Text or accessible name to look for |
selector | string | CSS selector |
role | string | Only this role |
limit | integer | Most results to return |
{
"name": "find",
"arguments": {
"query": "Add to cart",
"role": "button"
}
}
Readable text of the page (or of ref/selector), with paging.
| Parameter | Type | What it does |
|---|---|---|
ref | string | Element ref from a snapshot, e.g. "e12" or "f1e3" (best) |
selector | string | CSS selector (must match one element unless nth is given) |
offset | integer | Where to start, for paging |
max | integer | Most characters to return |
{
"name": "read",
"arguments": {
"ref": "e9"
}
}
Screenshot of the viewport in CSS pixels (x,y can be clicked directly). labels:true draws refs on the image. The virtual cursor is not in the image.
| Parameter | Type | What it does |
|---|---|---|
labels | boolean | Draw ref labels onto the image |
quality | integer | JPEG quality |
{
"name": "screenshot",
"arguments": {
"labels": true
}
}
Move the visible cursor to an element and click it with real mouse input (fast). Scrolls with the wheel if needed; waits up to 3 s for a text/selector target to appear. Returns what changed on the page.
| Parameter | Type | What it does |
|---|---|---|
ref | string | Element ref from a snapshot, e.g. "e12" or "f1e3" (best) |
text | string | Visible text or accessible name of the element |
selector | string | CSS selector (must match one element unless nth is given) |
role | string | With text: only this role (button, link, textbox...) |
nth | integer | 1-based pick when several elements match |
snapshot | diff | none | diff (default): what changed on the page; none: one line only (cheapest; dialogs, bot checks and navigation are still reported) |
wait | integer | With text/selector: ms to wait for the element to appear (default 3000) |
x | number | X in the latest screenshot (CSS px) |
y | number | Y in the latest screenshot (CSS px) |
button | left | right | middle | Mouse button |
doubleClick | boolean | Double-click |
modifiers | array | Control, Shift, Alt, Meta held during the click |
force | boolean | Click even if something covers it |
{
"name": "click",
"arguments": {
"ref": "e12"
}
}
Move the cursor onto an element and rest there (opens hover menus and tooltips).
| Parameter | Type | What it does |
|---|---|---|
ref | string | Element ref from a snapshot, e.g. "e12" or "f1e3" (best) |
text | string | Visible text or accessible name of the element |
selector | string | CSS selector (must match one element unless nth is given) |
role | string | With text: only this role (button, link, textbox...) |
nth | integer | 1-based pick when several elements match |
snapshot | diff | none | diff (default): what changed on the page; none: one line only (cheapest; dialogs, bot checks and navigation are still reported) |
wait | integer | With text/selector: ms to wait for the element to appear (default 3000) |
x | number | X in the latest screenshot (CSS px) |
y | number | Y in the latest screenshot (CSS px) |
{
"name": "hover",
"arguments": {
"text": "Account"
}
}
Scroll with the mouse wheel: the page or the container holding ref, by direction/amount, to an edge, or bring ref into view.
| Parameter | Type | What it does |
|---|---|---|
direction | up | down | left | right | Which way to turn the wheel |
amount | number | CSS px (default: most of a screen) |
to | top | bottom | left | right | Scroll to an edge |
ref | string | The container to scroll, or the element to bring into view |
snapshot | diff | none | diff (default): what changed on the page; none: one line only (cheapest; dialogs, bot checks and navigation are still reported) |
{
"name": "scroll",
"arguments": {
"direction": "down"
}
}
Fill several form fields: click each field, select existing text, type it (fast). value: text; true/false for checkboxes and radios; option label for selects; YYYY-MM-DD for dates; a file path (or array) for file inputs or for a button that opens the file chooser.
| Parameter | Type | What it does |
|---|---|---|
fields | array | Each field: a target (ref, text, selector, role, nth) and its value |
submit | boolean | Press Enter after the last field |
snapshot | diff | none | diff (default): what changed on the page; none: one line only (cheapest; dialogs, bot checks and navigation are still reported) |
{
"name": "fill",
"arguments": {
"fields": [
{
"text": "Email",
"value": "ada@example.com"
},
{
"text": "Weekly summary",
"value": true
}
],
"submit": true
}
}
Upload files: clicks a file input, or a button / drop area that opens the file chooser, and answers the chooser with these files (the Windows dialog never opens).
| Parameter | Type | What it does |
|---|---|---|
files | array | Full paths of the files |
ref | string | Element ref from a snapshot, e.g. "e12" or "f1e3" (best) |
text | string | Visible text or accessible name of the element |
selector | string | CSS selector (must match one element unless nth is given) |
role | string | With text: only this role (button, link, textbox...) |
nth | integer | 1-based pick when several elements match |
snapshot | diff | none | diff (default): what changed on the page; none: one line only (cheapest; dialogs, bot checks and navigation are still reported) |
wait | integer | With text/selector: ms to wait for the element to appear (default 3000) |
{
"name": "upload",
"arguments": {
"text": "Choose file",
"files": [
"C:\\Users\\ada\\cv.pdf"
]
}
}
Type text into the focused element or into ref/selector (clicked first). Short text goes in as real keystrokes, long text (over 40 characters) a few words at a time, so a caption takes about a second. If typing stops part way, call type with resume: true.
| Parameter | Type | What it does |
|---|---|---|
text | string | Text to type |
ref | string | Element ref from a snapshot, e.g. "e12" or "f1e3" (best) |
selector | string | CSS selector (must match one element unless nth is given) |
clear | boolean | Select existing text first so it is replaced |
submit | boolean | Press Enter afterwards |
typos | boolean | Now and then hit a neighbouring key and fix it with Backspace, as people do (free text only, never codes, URLs or exact values) |
resume | boolean | Finish a type call that stopped part way: checks the field, then types the rest |
snapshot | diff | none | diff (default): what changed on the page; none: one line only (cheapest; dialogs, bot checks and navigation are still reported) |
{
"name": "type",
"arguments": {
"text": "quiet café with good Wi-Fi",
"submit": true
}
}
Press keys or shortcuts, e.g. "Enter", "Escape", "Tab", "Control+A", "Shift+Tab". Space-separated combos run in order.
| Parameter | Type | What it does |
|---|---|---|
keys | string | One key or combo, or several separated by spaces |
repeat | integer | Press each combo this many times |
snapshot | diff | none | diff (default): what changed on the page; none: one line only (cheapest; dialogs, bot checks and navigation are still reported) |
{
"name": "press",
"arguments": {
"keys": "Control+A Backspace"
}
}
Wait for text, a selector, a URL (substring or /regex/), their disappearance, or a fixed time. enabled: true waits until the element named by text/selector (and role) is there and not disabled (a Next button after an upload). Returns a viewport snapshot unless snapshot: "none".
| Parameter | Type | What it does |
|---|---|---|
text | string | Text to appear |
textGone | string | Text to disappear |
selector | string | Selector to appear |
selectorGone | string | Selector to disappear |
role | string | With text: only this role (button, link, textbox...) |
nth | integer | 1-based pick when several elements match |
enabled | boolean | Wait until the element is there and not disabled |
url | string | URL substring or /regex/ |
time | number | A fixed wait |
timeout | number | ms, at most 110000 |
snapshot | viewport | none | What to return |
{
"name": "wait_for",
"arguments": {
"text": "Next",
"role": "button",
"enabled": true
}
}
List, open, switch to or close Browzie's tabs (its window, and popup windows the page opened, such as a sign-in window). select/close take the tab number from the list (1, 2, ...); without one they act on the current tab.
| Parameter | Type | What it does |
|---|---|---|
action | list | new | select | close | What to do |
id | integer | Tab number as listed (1-based) |
url | string | For new: the address to open |
{
"name": "tabs",
"arguments": {
"action": "list"
}
}
Accept or dismiss an open alert/confirm/prompt dialog.
| Parameter | Type | What it does |
|---|---|---|
accept | boolean | Accept (true) or dismiss (false) |
text | string | Answer for a prompt |
{
"name": "dialog",
"arguments": {
"accept": true
}
}
Hand control to the human and wait: for CAPTCHAs and other bot checks (Browzie never solves them), logins with 2FA, payments, anything needing a person. Returns when the check is gone or the user clicks Done.
| Parameter | Type | What it does |
|---|---|---|
reason | string | What you need the user to do |
timeout | number | ms, default 300000 |
{
"name": "handoff",
"arguments": {
"reason": "Please complete the check on the sign-in page."
}
}
Sign in with a login saved in Chrome's password manager. Browzie never types, reads or sees the password: it clicks into the sign-in form so Chrome lists the saved logins, the user picks one in Chrome's own list (one click), and Browzie then presses the form's button. One step per call (a username-first page, then the password page). Returns when the step is gone.
| Parameter | Type | What it does |
|---|---|---|
timeout | number | ms, default 300000 |
{
"name": "signin",
"arguments": {}
}
Run JavaScript in the page and return JSON. The code goes in "script" (an expression, statements, or a function body with return). Runs in an isolated world by default (sees the DOM, not page globals, leaves no trace); world:"main" sees page globals.
| Parameter | Type | What it does |
|---|---|---|
script | string | An expression, statements, or a function body with return |
world | isolated | main | isolated (default) leaves no trace; main sees page globals |
maxChars | integer | Result size limit (default 20000) |
{
"name": "evaluate",
"arguments": {
"script": "return document.title"
}
}
Run several steps in one call (saves a model turn per step). Each step is {action, ...that tool's arguments}; action is navigate, click, fill, type, press, hover, scroll, wait_for, upload or dialog. Target later steps by text/role/selector, since their refs do not exist yet. Stops at the first failing step. Returns one line per step and the full result of the last.
| Parameter | Type | What it does |
|---|---|---|
steps | array | Each step: {action, ...that tool’s arguments} |
{
"name": "batch",
"arguments": {
"steps": [
{
"action": "navigate",
"url": "example.com/contact"
},
{
"action": "fill",
"fields": [
{
"text": "Name",
"value": "Ada"
},
{
"text": "Message",
"value": "Hello!"
}
]
},
{
"action": "click",
"text": "Send"
},
{
"action": "wait_for",
"text": "Thanks"
}
]
}
}
No tool matches . Try , or .
Refs, not pixels
A snapshot is one line per meaningful element, with a ref like [e12] on everything Claude can act on. It costs a few milliseconds, and after an action only the difference comes back.
snapshot4 ms
A shortened example. Refs live in the extension’s memory, never in the page.
Create your account
Emailada@example.com NameAda Lovelace Send me the weekly summary Create account I already have an accountCheck your inbox
We sent a link to ada@example.com
batch
The model’s round trips between steps are the largest cost in a task. With batch a known sequence runs as one call, each step keeps its human pacing, and it stops at the first step that fails.
{
"steps": [
{ "action": "navigate", "url": "example.com/contact" },
{ "action": "fill", "fields": [
{ "text": "Name", "value": "Ada" },
{ "text": "Message", "value": "Hello!" } ] },
{ "action": "click", "text": "Send" },
{ "action": "wait_for", "text": "Thanks" }
]
}
one call per step
with batch
Later steps target by text, role or selector, because their refs do not exist yet.
BROWZIE_PACE
All three keep the same shapes: curved moves, separate button and key events, Shift as its own key. Only the clock changes.
fastdefault
brisk
human
Pick a pace to see the same sentence typed three ways. A simulation of the model in extension/lib/human.js.
Configuration
Set them in the environment of the MCP server, for example with claude mcp add -e. The native host logs to %LOCALAPPDATA%\Browzie\host.log.
BROWZIE_PACEfastbriskhuman
How quickly the pointer moves and keys are typed. fast is the default.
BROWZIE_YIELDwindowanyoff
window (default): stop only for your input in the Browzie window. any: stop for any input anywhere. off: never stop.
BROWZIE_DESKTOPnumberGUIDoff
The virtual desktop for Browzie’s windows. By default, the desktop Claude Code runs on.
BROWZIE_CHROME_PATHpath
The chrome.exe to start when Chrome is not running.
BROWZIE_DEBUG1
Timing lines on stderr, for every hop.
BROWZIE_LENS_LOGfile
A file the cursor overlay writes its window decisions to.
Ready when you are
Clone it, run one installer, load the extension once, then ask Claude to open a page. You will see the purple cursor on its way.