0.0 / 30
What changed in the harness
Selection accuracy 98→98, token cost up 7%, 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
28.3 / 30
03Economics
20.0 / 20
04Discoverability
18.1 / 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.
3 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 |
|---|---|---|
highlight_element |
no_return_description |
Briefly flash-highlight a specific element on the page so the user can see which element you are referring to. Useful for confirming "do you mean this element?" Takes an element name or CSS selector via the 'name' parameter. Returns a confirmation that the highlight was triggered; it does not return element data. |
rescan_elements |
no_return_description |
Force the annotated page to rescan all UI elements. Use this after the page content has changed (e.g. after navigation, DOM updates, or user interaction). Takes no parameters. Returns a summary of the rescanned elements (e.g. count found) confirming the scan completed. |
inspect_mode |
no_return_description |
Toggle inspect mode on the annotated page. When enabled (set 'enabled' to true), the user can click any element to copy its name; when disabled (false), the page behaves normally. Use this to help the user copy element names for communicating design changes. Returns confirmation of the new inspect mode state. |
Selection evidence
Confusable tool pairs.
3 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
get_elements |
rescan_elements |
medium | A task like 'what elements are on this page now' could lead an agent to call get_elements when the page just changed and rescan_elements is actually needed first, or to call rescan_elements when it just wants to read existing data without forcing a rescan. |
get_elements |
highlight_element |
low | Both involve inspecting/referencing elements on the page, but their purposes (listing all elements vs. visually flashing one specific element) are distinct enough that confusion is unlikely except in vague prompts like 'show me the button', which could ambiguously map to either retrieving info or highlighting it. |
highlight_element |
rescan_elements |
low | Little functional overlap—one highlights a specific known element, the other forces a full page rescan—so confusion is unlikely except in very vague 'update the element view' style requests. |
Compare the field