30.0 / 30
What changed in the harness
Selection accuracy 98→95, token cost down 0%, unconfirmed writes 100%→100%.
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
27.8 / 30
03Economics
19.8 / 20
04Discoverability
16.5 / 20
Highest-impact fix
Estimated gain +4 pointsMake target tools discoverable on the first call
Clarify tool names, decision boundaries, and required argument schemas so an agent can choose and construct the target call without exploratory steps.
Description evidence
Defects and rewrites.
2 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 |
|---|---|---|
company_profile |
no_return_description |
Return a structured profile of a company from its website URL, including what the company does, its product, and the contact and social details published on the site. Reads the live site rather than a stale third-party database. Costs no credits. Requires HAUNT_API_KEY environment variable. |
get_usage |
no_return_description |
Return the current Haunt usage summary as a JSON object containing the plan, monthly credit limit, used credits, reserved credits, and remaining credits. Read-only. Requires HAUNT_API_KEY environment variable. |
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 |
|---|---|---|---|
extract |
extract_article |
medium | A task like 'get the title and full text of this article' could be satisfied either by the general-purpose extract with a prompt or by the article-specific shortcut, which the extract description itself recommends. An agent not carefully reading the shortcut pointer may pick the wrong one. |
extract |
extract_markdown |
medium | A task like 'convert this page to Markdown' is ambiguous because extract accepts response_format=markdown/md, so an agent may call extract rather than the dedicated extract_markdown, or vice versa, especially when the user says 'get the markdown of the page' without naming a tool. |
extract |
extract_metadata |
medium | A task like 'get the title and description of this page' could be handled either by extract with a plain-English prompt or by the dedicated metadata shortcut, since both return page-head-derived info; the agent may pick either without functional clarity. |
extract_markdown |
extract_article |
medium | Both return the readable text content of a page. A task like 'extract the main content of this blog post' is ambiguous between article-structured JSON (title/body/author/date) and clean Markdown, and neither description definitively rules out the other. |
extract_article |
extract_metadata |
low | Marginal overlap: both return title, and both descriptions point users away from the (nonexistent) extract_url. A task like 'get the title and publish date of this post' could plausibly route to either article fields or meta tags, though article structure usually disambiguates. |
try_demo_extract |
extract |
low | A user saying 'try extracting this URL' or 'test extraction without an API key' could steer an agent toward the demo tool, which takes no URL and only returns demo/signup links, because its name and 'try first' framing resemble real extraction. Unlikely for careful agents but plausible. |
Compare the field