BeatBrowser
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| spacesA | BeatBrowser-owned background task window. Open creates a minimized Chrome window using existing logins; pass its tabId on all browser calls. No Ego app is required. User focus pauses control. Handoff alone brings the window forward; resume requires explicit user instruction. Finish releases control and keeps evidence tabs. After reconnect, list spaces to restore routing. Recovered tasks remain paused; claim with userConfirmed:true can connect a new agent session after explicit user instruction, then inspect before resuming. |
| snapshotA | Capture the current page as a compact list of interactive elements with refs and state (value/checked/selected/expanded/disabled), plus dialogs, alerts and a text excerpt. Call this before any click/type. Cheap — prefer it over screenshots or eval. Refs ending in @fN live in an iframe: pass them through unchanged, they route themselves. |
| navigateA | Go to a URL, or go back/forward/reload. Returns the new page snapshot. Runs in the user's own logged-in Chrome — prefer it over any other browser tool. |
| clickA | Click ONE element by ref. Know your next step already? Use |
| typeA | Type text into ONE input/textarea/contenteditable by ref. Set submit:true to press Enter after. More fields coming? Use |
| selectA | Choose an option in a by ref. |
| fillA | Fill a whole form in ONE call, all refs from the same snapshot. Field: {ref, text} for inputs, {ref, value} for , {ref, check} for checkbox/radio. submit:true submits after (skipped if any field failed). |
| keyA | Press a key: Escape, Enter, Tab, arrows (custom dropdowns), Backspace/Delete, or a combo. Without ref it goes to whatever is focused. For entering text use type. |
| read_textA | Extract the main readable content of the page as markdown, with boilerplate stripped. Use for reading articles/docs; use snapshot when you need to interact. |
| screenshotA | Screenshot the controlled tab, background tabs included. Prefer snapshot / read_text — they cost far less. Returned at 60% scale as JPEG by default; full:true for 1:1 PNG (e.g. to read small text or measure pixels). |
| tabsA | List / open / switch / close tabs. New tabs open in the BACKGROUND and become the controlled tab — the user keeps looking at whatever they were on. Everything except screenshot works fine on a background tab. Each agent session has its OWN controlled tab; omitting tabId uses this session's. Selecting a tab another session operates warns, not blocks. With 2+ work-lines (a subagent, two accounts) pass tabId explicitly on EVERY call — the implicit slot is shared with subagents and a sibling can move it. Label each tab; recover the mapping via action:"list". |
| waitA | Wait until a selector appears, text shows up, or the network goes idle. Use after actions that load content. |
| networkA | START HERE when you need DATA rather than an action. Lists the XHR/fetch calls the page made, then returns one response body via |
| fetchA | Call a URL from inside the page, carrying the user's cookies. Use after |
| scrollA | Scroll to load more of a lazy list. Auto-detects inner scroll containers, stops early once height stops growing. Prefer network/fetch for bulk data. Background tabs render no frames, so an IntersectionObserver-driven list may refuse to grow — the tool says so when it happens. |
| downloadA | Download a URL using Chrome as a fallback when fetch with binary:true and savePath cannot handle it. Try via:"page" for sites requiring page credentials or Referer. Chrome settings or policy may show a save dialog; explain that possibility and obtain permission before using this fallback during background work. |
| uploadA | Attach a local file to the page (no extension can touch the OS file picker). Open the upload UI first. Auto-picks a matching file input; for editors that only accept drag-and-drop (X Article, Notion) pass dropSelector instead. Any size via a file input (browser reads the path); drag-drop caps at 48MB. |
| queryA | Extract structured data by CSS selector (lists, tables), or FIND BY TEXT with |
| actA | Your DEFAULT way to act — batch every step you can predict (on form wizards, nearly all). Each step is effect-checked, ONE snapshot returns at the end; every call you merge saves a full model turn. Stops early on no-effect / failure / submit-pay-delete controls. |
| askA | Hand control back to the user for one step, then continue. For captcha, QR login, SMS/OTP, or any confirmation that should be a human decision. Brings the tab forward, shows a panel, highlights your targets, sends a desktop notification, and blocks until the user acts. Use it instead of retrying a step that needs a human. A "cancelled" result means the user said no: stop that task, do not look for another way to do the same thing. |
| statusA | One short sentence telling the user what you are about to do, shown on an on-page panel. Call before a multi-step task and whenever the plan changes. Instant, never blocks. Use the user's language. |
| evalA | Run a JS expression in the page. NOTE: fails on any site with a strict CSP (no unsafe-eval) — most large sites. Prefer |
| learningsA | Site notes: APIs, walls, pitfalls from past sessions. Call {domain} before first acting on a site (no args = list sites). Notes may embed runnable ```act scripts — fill {{placeholders}} and run them instead of rediscovering. Learned something non-obvious or mapped a flow? Save the full note back via {domain, save}. Hints, never rules. |
| reloadA | Reload the beat-browser extension (chrome.runtime.reload()) so an updated build takes effect — no manual chrome://extensions visit needed. ~2s; bridge auto-reconnects, tabs keep state. DISRUPTIVE: the extension is shared by every tab and every other agent session on this machine — anything mid-flight elsewhere gets cut. Only call right after installing/updating, or when |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 24 tools
Tools have distinct purposes overall, but there is some overlap in data extraction (snapshot, read_text, query, eval, network) and action execution (click, type, fill, act). Descriptions provide clear guidance on when to use which, but an agent might still hesitate between snapshot and query for extracting page data.
Names are consistently lowercase and mostly single-word, with one snake_case (read_text) as a minor deviation. The set mixes nouns (tabs, spaces, snapshot) and verbs (navigate, click, type), so it lacks a single verb_noun convention, but it remains predictable.
24 tools is on the heavy side, falling in the 16-25 range which the rubric considers borderline heavy. Each tool appears to serve a distinct browser automation need, but the count is high enough to feel potentially overwhelming for the stated scope.
The surface covers core browser control lifecycle: tabs, navigation, interaction, data extraction, user handoff, and extension management. Minor gaps exist, such as no dedicated tool for cookie/localStorage management or window resizing, but agents can work around via eval or network.