0.0 / 30
What changed in the harness
Selection accuracy 96→93, token cost up 9%, unconfirmed writes 0%→0%.
Category breakdown
Where the score comes from.
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
01Safety
02Legibility
23.0 / 30
03Economics
19.2 / 20
04Discoverability
13.4 / 20
Highest-impact fix
Estimated gain +30 pointsAdd explicit identity and permission preflight tools
Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
Defects and rewrites.
15 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.
| Tool | Defect types | Suggested rewrite |
|---|---|---|
browser_navigate |
name_restates_behavior no_return_description |
Navigates the active browser tab to the given URL, waiting for either the load or domcontentloaded event as specified by waitUntil; returns once navigation completes or throws on failure. |
browser_click |
params_unexplained no_return_description |
Clicks an element identified by a snapshot ref or CSS selector, optionally with a specific mouse button (left, right, or middle) or as a double-click; returns confirmation of the click or an error if the element cannot be found. |
browser_type |
no_return_description |
Types the given text into an input element identified by a snapshot ref or CSS selector, optionally clearing existing content first; returns confirmation once the text has been entered. |
browser_scroll |
params_unexplained no_return_description |
Scrolls the page or a specified container in a given direction (up, down, left, or right) by a pixel amount, to a named position (top/bottom), or into view of a target ref/selector, including virtual scroll containers; returns confirmation of the resulting scroll position. |
browser_press_key |
no_return_description |
Presses a keyboard key or combination (e.g. Enter, Ctrl+A, Cmd+C), optionally focusing an element via ref or selector first; returns confirmation once the key event has been dispatched. |
browser_wait |
no_return_description |
Waits until an element matching the selector reaches the given state (visible, hidden, or attached), or for a fixed delay, up to a timeout; returns once the condition is met or throws on timeout. |
browser_screenshot |
params_unexplained no_return_description |
Captures a screenshot of the currently visible page area, encoded as PNG or JPEG (with adjustable JPEG quality); returns the image as base64-encoded data. |
browser_console |
no_return_description |
Reads buffered console messages (log, warn, error) from the browser, optionally clearing the buffer after reading; returns an array of message entries with type and text. |
browser_network |
no_return_description |
Reads buffered network requests made by the page, optionally filtered by a URL regex and cleared after reading; returns an array of request records including URL, method, and status. |
browser_tabs |
no_return_description |
Lists, creates, closes, or focuses browser tabs based on the action parameter; returns the tab list for 'list' or the affected tab's id and URL for create/close/focus. |
browser_text |
no_return_description |
Extracts raw visible text from the page or an element matched by selector, truncated to maxLength characters; returns the extracted text as a string. |
browser_hover |
no_return_description |
Hovers over an element identified by a snapshot ref or CSS selector to trigger tooltips, dropdowns, or hover states; returns confirmation once the hover has been performed. |
browser_select |
no_return_description |
Selects an option in a dropdown/select element identified by ref or selector, matched by value, label, or index; returns confirmation of the option that was selected. |
browser_click_text |
no_return_description |
Clicks the element whose visible text matches the given string (first line), by substring or exact match, choosing among multiple matches via index; works on React dropdowns, portals, and overlays absent from snapshots; returns confirmation of the click or an error if no match is found. |
browser_handle_dialog |
no_return_description |
Accepts or dismisses a pending JavaScript dialog (alert, confirm, or prompt), optionally supplying text for prompt() dialogs, to unblock page interaction; returns confirmation that the dialog was handled. |
Selection evidence
Confusable tool pairs.
6 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
browser_click |
browser_click_text |
high | Both perform a click action on a page element; the only difference is targeting method (ref/CSS selector vs visible text match). A task like 'click the Submit button' doesn't specify which targeting mechanism to use, so an agent could pick either tool, especially before or instead of taking a snapshot. |
browser_text |
browser_click_text |
medium | Names overlap heavily ('text' vs 'click_text') despite very different purposes (extracting page text vs clicking by visible text). A task phrased around 'text' content, e.g. 'find and interact with the text that says X', could lead an agent to pick the wrong one based on name similarity alone. |
browser_hover |
browser_select |
medium | Both are used to interact with dropdown-like UI elements. A task like 'choose an option from the dropdown menu' could be ambiguous between browser_hover (to reveal a hover-triggered menu) and browser_select (for native select elements), especially if the agent doesn't know the dropdown's implementation in advance. |
browser_press_key |
browser_handle_dialog |
medium | A task like 'press Enter to confirm the alert' or 'dismiss the popup' could plausibly be attempted with browser_press_key when browser_handle_dialog is actually required, since JS dialogs block normal keyboard/page interaction and only handle_dialog can resolve them. |
browser_screenshot |
browser_text |
low | Both can be used to inspect page content ('show me what's on the page'), one visually and one textually. A vague task about viewing page content without specifying format could lead to either being chosen. |
browser_console |
browser_evaluate |
low | Both relate to browser-side JavaScript/state inspection. A task like 'check if there are any errors on the page' could ambiguously call browser_console (reading logged errors) or browser_evaluate (running a JS check), though their described purposes are fairly distinct. |
Compare the field