AI-native web browser runtime for autonomous agents with human supervision
Vessel Browser exhibits significant definition quality gaps across its 22 tools. While tool names follow verb_noun conventions and risk levels are properly classified, critical deficiencies emerge in parameter documentation, schema completeness, and output specifications. Most tools lack detailed parameter descriptions, they declare parameter existence but do not explain format, constraints, or valid ranges. For example, 'click' accepts 'text', 'selector', and 'index' parameters with minimal guidance on when to use each or what happens if multiple match. Several devtools tools (tools 20-22) have completely empty input schemas ({}), violating baseline requirements. Error handling is largely absent; tools do not guide recovery or categorize failures as retryable vs. fatal. The 'read_page' tool with 'debug' mode suggests sophisticated functionality but lacks documentation on output differences between modes. Output schemas are not formally documented in source code, responses appear to be inferred from tool behavior rather than explicit schema definitions. No evidence of per-tool audit trails, rate limiting, or permission gates. Security posture is undocumented; no clear separation of credentials vs. tool parameters.
Archive a bookmark
Click on an element on the page
Create a bookmark folder
Get information about the current tab
Execute JavaScript in the browser devtools context
Modify the DOM in the browser devtools context
Set storage values in the browser devtools context
Three devtools tools (devtools_execute_js, devtools_modify_dom, devtools_set_storage) have completely empty input schemas ({}). Per hard scoring rules, schema score MUST be 0 when input schema is missing/not visible.
Six tools with no-parameter endpoints (scroll, go_back, go_forward, current_tab) declare empty input schemas {}. While acceptable for zero-parameter tools, no output schemas are documented anywhere in source code. LLMs cannot plan downstream calls without knowing what these tools return.
Parameters across all tools lack constraint documentation. 'click' accepts index, text, and selector but does not explain: (1) which is preferred, (2) what happens if multiple elements match, (3) whether matching is case-sensitive, (4) valid range for index.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Navigate back in browser history
Navigate forward in browser history
Inspect and get detailed information about a page element
List all bookmarks
List all open tabs
Navigate to a URL
Open a bookmarked URL
Move or organize a bookmark
Read and analyze the current page content
Save a bookmark
Scroll the page
Scroll to and focus on a specific element
Search the current page or perform a page search
Type text into an input field
Perform a web search
read_page tool description does not document: (1) what 'debug' mode returns vs. 'default' mode, (2) expected output size, (3) what 'other modes' are available, (4) when to escalate to debug.
No error handling guidance present in any tool. If 'navigate' receives a malformed URL, or 'click' targets a non-existent element, tool descriptions do not explain recovery strategy.
Bookmark-related tools (save_bookmark, organize_bookmark, archive_bookmark, create_bookmark_folder) lack documentation on: (1) idempotency (is saving the same URL twice safe?), (2) folder hierarchy (can folders be nested?), (3) conflict resolution (what if folder already exists?).
No documented output schemas for any tool. From source code, it is unclear: (1) what fields are returned, (2) whether lists are paginated, (3) what IDs or references are chained for downstream tool calls.
Destructive tools (devtools_modify_dom, archive_bookmark) lack confirmation/dry-run patterns.
Multiple tools operate on page elements (click, inspect_element, scroll_to_element) but tool compositions are undocumented. It is unclear: (1) how read_page output maps to selector/text identifiers, (2) whether indexes persist across calls, (3) whether DOM changes invalidate previous selectors.