AI-native browser — renders pixels for humans, structured API for agents. No screenshots, no OCR.
AI Browser exposes 13 well-structured tools with complete JSON schemas and consistent naming (browse_* prefix). All tools have descriptions and input schemas with typed parameters. However, descriptions are terse (avg ~80 chars, below the 194-char baseline), lack WHEN/WHY guidance, and omit error recovery hints. Output schemas are undocumented, LLMs cannot predict response structure for chaining. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Parameter descriptions are minimal; several lack context (e.g., 'Tab id (default: active tab)' repeated 10 times without explaining tab lifecycle). browse_wait condition enum is documented but lacks examples of expected behavior. browse_evaluate lacks safety guardrails in description (5000-char limit mentioned but no guidance on expression constraints). Error handling is absent from tool definitions.
Perform an action on an element by its data-ai-id: click, type, clear, select, focus, hover, scroll_to.
Close a tab by id.
Run a JS expression in the page context and return its value.
Return the page semantic UI tree (roles, labels, actions, bounds).
List open tabs (id, url, title, active).
Navigate the active/focused tab to a URL.
Return the response body of a completed request whose URL contains the pattern (requires prior subscription).
Output schemas undocumented. LLMs cannot predict response structure (fields, types, pagination) for downstream tool chaining. browse_get_tree, browse_list_tabs, browse_network_body, browse_subscribe lack documented return types.
Descriptions are terse (avg 80 chars vs 194-char baseline) and lack WHEN/WHY context. E.g., 'Navigate the active/focused tab to a URL' omits: when to use vs browse_new_tab, whether it waits for load, error recovery. LLMs cannot distinguish similar tools.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. browse_quit is DESTRUCTIVE, browse_navigate/browse_act are WRITE, browse_get_tree is READ_ONLY, LLMs cannot infer safety without hints.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
Open a new tab, optionally at a URL.
Gracefully shut down the AI Browser (releases resources).
Scroll the page or an element into view.
Switch the active tab.
Subscribe to page events (dom_change, network_response, captcha_appeared, message_appeared, js_error, state_changed). "*" for all.
Poll the page until a condition holds or timeout. Conditions: button_enabled, modal_appeared, text_contains, url_contains.
browse_evaluate lacks safety guardrails in description. 5000-char limit mentioned but no guidance on expression constraints, sandbox behavior, or error cases (syntax errors, timeouts, access violations). LLMs may pass unsafe JS.
Error handling absent from tool definitions. No guidance on retryability, user-fixable vs fatal errors, or recovery steps. E.g., browse_navigate may fail (network, invalid URL, timeout) but description offers no recovery hints.