0.0 / 30
What changed in the harness
Selection accuracy 93→100, token cost up 12%, 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
19.6 / 30
03Economics
18.3 / 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.
24 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 |
|---|---|---|
list_pages |
no_return_description |
List all open browser tabs, showing each tab's index, title, and URL, with the currently selected tab marked. Returns this list of tabs. |
navigate_page |
no_return_description |
Navigate the currently selected tab to the given URL, waiting for the page to load. Returns confirmation once navigation completes. |
select_page |
no_return_description |
Select which open tab is active, matched by index, URL substring, or title substring (index takes precedence when multiple are given). Returns the selected tab's index, title, and URL. |
close_page |
no_return_description |
Close the tab at the given index. Returns confirmation that the tab was closed. |
take_snapshot |
no_return_description |
Capture a DOM snapshot of the page, assigning stable UIDs to elements for use with other tools; retake after navigation since UIDs go stale. Returns the snapshot as text, or, when saveTo is set, saves it to a file and returns its path plus an optional preview. |
resolve_uid_to_selector |
name_restates_behavior no_return_description |
Look up the CSS selector for an element previously captured in a snapshot, for use with tools outside the UID-based API (e.g. evaluate_script). Returns the CSS selector string; fails if the UID is stale, such as after a new snapshot or navigation. |
clear_snapshot |
name_restates_behavior no_return_description |
Discard the cached UID-to-element mappings from the last snapshot; rarely needed since take_snapshot already replaces the cache each time it runs. Returns confirmation once the cache is cleared. |
click_by_uid |
no_return_description |
Click the element identified by a UID from the last snapshot; set dblClick to perform a double-click instead of a single click. Returns confirmation once the click is dispatched. |
hover_by_uid |
name_restates_behavior no_return_description |
Move the pointer over the element identified by a UID from the last snapshot, useful for triggering hover-revealed UI like tooltips or menus. Returns confirmation once the hover is dispatched. |
fill_by_uid |
name_restates_behavior no_return_description |
Set the value of a text input or textarea identified by a UID from the last snapshot, replacing its current contents. Returns confirmation once the value is set. |
drag_by_uid_to_uid |
no_return_description |
Drag the element identified by fromUid and drop it on the element identified by toUid, dispatching native HTML5 drag-and-drop events. Returns confirmation once the drag-and-drop sequence completes. |
fill_form_by_uid |
no_return_description |
Fill several form fields in one call, given a list of {uid, value} pairs for elements from the last snapshot. Returns confirmation once all fields are filled. |
upload_file_by_uid |
name_restates_behavior no_return_description |
Attach a local file at filePath to a file input element identified by a UID from the last snapshot. Returns confirmation once the file is attached. |
screenshot_page |
name_restates_behavior no_return_description |
Capture a screenshot of the current page viewport, for visually verifying page state or layout. Returns the image as base64-encoded PNG data, or, when saveTo is set, saves it to a file and returns its path. |
screenshot_by_uid |
name_restates_behavior no_return_description |
Capture a screenshot of just the element identified by a UID from the last snapshot, for visually verifying a specific component. Returns the image as base64-encoded PNG data, or, when saveTo is set, saves it to a file and returns its path. |
list_downloads |
no_return_description |
List downloads tracked since the browser session started, optionally filtered by status or URL substring. Returns each matching download's status, URL, and saved file path, as text or JSON depending on format. |
clear_downloads |
name_restates_behavior no_return_description |
Reset the in-memory list of tracked downloads returned by list_downloads, without affecting files already saved to disk. Returns confirmation once cleared. |
set_download_behavior |
no_return_description |
Control whether downloads are saved automatically, canceled, or handled by the browser default, bypassing the native save-file dialog; requires a recent Firefox build. Returns confirmation of the behavior now in effect. |
dismiss_dialog |
name_restates_behavior no_return_description |
Dismiss (cancel) any currently open browser dialog, such as an alert, confirm, or prompt. Returns confirmation once the dialog is dismissed. |
navigate_history |
no_return_description |
Move the selected tab back or forward in its browsing history; note that any UIDs from a prior snapshot become stale afterward. Returns confirmation once navigation completes. |
set_viewport_size |
no_return_description |
Resize the browser viewport to the given width and height in pixels, useful for testing responsive layouts. Returns confirmation of the new viewport size. |
restart_firefox |
no_return_description |
Restart Firefox, optionally changing the binary path, profile, environment variables, headless mode, startup URL, or preferences; all current tabs are closed in the process. Returns confirmation once Firefox has restarted with the new configuration. |
install_extension |
no_return_description |
Install a Firefox extension from an archive (.xpi/.zip), base64-encoded data, or an unpacked directory, via WebDriver BiDi. Returns the installed extension's ID, needed later for uninstall_extension. |
evaluate_script |
no_return_description |
Execute a JavaScript function in the page context, optionally passing snapshot UIDs as arguments; prefer the dedicated UID tools for standard interactions. Returns the function's result as JSON, or, when saveTo is set, saves it to a file and returns its path plus an optional preview. |
Selection evidence
Confusable tool pairs.
9 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
fill_by_uid |
fill_form_by_uid |
high | Both fill form fields by UID; an agent asked to 'fill in the form' could pick the single-field fill_by_uid when multiple fields are involved, or vice versa for a single field, since both accept uid/value pairs and names only differ by 'form'. |
click_by_uid |
hover_by_uid |
low | Both act on an element by UID; a task like 'trigger the dropdown menu' could be ambiguous between hover (to reveal) and click, though the verbs themselves are distinct enough to usually disambiguate. |
screenshot_page |
screenshot_by_uid |
medium | A request like 'take a screenshot of the button' could be fulfilled by either capturing the whole page or the specific element by UID, especially if the agent hasn't taken a snapshot yet and defaults to the page-level tool. |
accept_dialog |
dismiss_dialog |
low | Both handle browser dialogs, but 'accept' vs 'dismiss' are semantically opposite and a natural task ('close the dialog') could be misread as either action depending on user intent, though wording usually distinguishes them. |
install_extension |
uninstall_extension |
low | Opposite operations on extensions; unlikely genuine confusion since verbs are clear, but a vague task like 'remove the extension I just installed' could momentarily lead an agent to reference the wrong tool if extension ID handling is unclear. |
list_pages |
list_downloads |
low | Both are 'list_*' tools returning enumerable state; a vague task like 'show me what's open' is unlikely to be confused but naming pattern similarity could cause a momentary mismatch in low-context agents. |
get_firefox_output |
get_firefox_info |
medium | Both retrieve Firefox-related data with similar names; a task like 'get Firefox details' or 'check Firefox status' could plausibly be routed to either the runtime output/logs tool or the configuration info tool. |
clear_snapshot |
clear_downloads |
low | Both are 'clear_*' cache-clearing tools but operate on unrelated data (DOM snapshot vs downloads list); shared 'clear' verb could cause a vague 'clear that' request to be misrouted in rare cases. |
navigate_page |
navigate_history |
low | Both involve navigation; a task like 'go back' vs 'go to URL X' are usually distinguishable, but 'navigate' phrasing overlap could cause minor confusion for ambiguous instructions like 'navigate back to the previous page'. |
Compare the field