0.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost down 3%, 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
26.2 / 30
03Economics
16.0 / 20
04Discoverability
14.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.
5 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 |
|---|---|---|
getOgData |
name_restates_behavior no_return_description |
Fetch the OpenGraph metadata for a webpage URL (title, description, image, site name). Use this instead of researchUrl when you only need link-preview tags and want to save credits (1 credit vs 3). Returns the parsed OpenGraph meta tags for the URL. |
getOgScrapeData |
name_restates_behavior no_return_description |
Scrape and return the OpenGraph data for a webpage URL via OpenGraph's scrape endpoint. Use for link previews or page summarization when you want the raw scraped metadata rather than a structured extract. Returns the scraped data for the URL, including meta tags. |
getOgScreenshot |
name_restates_behavior no_return_description |
Capture a rendered screenshot of a webpage at the given URL. Use for link previews or visual verification of a page. Returns the screenshot image in the requested format (jpeg/png/webp) at the chosen viewport dimensions. |
getOgExtract |
name_restates_behavior no_return_description |
Extract specific HTML elements from a webpage by CSS selector and return their content. Use when you need targeted parts of a page (e.g., article, main p) rather than the full body text. Returns the extracted HTML for each requested selector. |
iterateImage |
no_return_description |
Modify an existing generated image: edit specific parts, adjust style or colors, fix issues, or crop to exact pixel coordinates. Requires the sessionId and assetId returned by generateImage. Returns the updated asset in the session, ready for further iteration or export. |
Selection evidence
Confusable tool pairs.
5 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
getOgData |
getOgScrapeData |
high | Both accept the same url param and return page data; a task like 'scrape OpenGraph data from this URL' matches both descriptions almost identically, and the shared 'getOg' prefix plus identical schemas make the wrong choice easy. |
getOgScrapeData |
getOgExtract |
medium | Both descriptions explicitly reference 'OpenGraph's scrape endpoint' and extract content from a URL, so a generic 'scrape/extract info from this URL' task is ambiguous between them. |
getOgData |
getOgExtract |
medium | A task like 'extract the meta/OpenGraph data from this page' could be routed to getOgData (meta tags) or getOgExtract (HTML selectors), since both operate on a page's structured content and share the url/site input shape. |
getOgQuery |
getOgExtract |
medium | Both take a full site URL and return structured page information; a task like 'query this site for its title and description' could plausibly map to either an AI question (getOgQuery) or element extraction (getOgExtract). |
generateImage |
iterateImage |
medium | generateImage explicitly advertises 'Iterative refinement - modify generated images without starting over', so a task asking to modify/refine an existing image could be routed to either generateImage or iterateImage rather than the more specific iterateImage. |
Compare the field