30.0 / 30
What changed in the harness
Selection accuracy 95→89, token cost up 1%, 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
26.5 / 30
03Economics
16.0 / 20
04Discoverability
13.1 / 20
Highest-impact fix
Estimated gain +7 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.
4 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 |
|---|---|---|
fetch_github_readme |
no_return_description |
Fetches the README file from a GitHub repository given its URL (e.g., https://github.com/owner/repo). Returns the README content as text, or an error if the repository or README cannot be found. |
fetch_csdn_article |
no_return_description |
Fetches an article from a CSDN blog given its HTTPS URL (blog.csdn.net). Returns the extracted article content as text, or a structured error if the page cannot be fetched or parsed. |
fetch_juejin_article |
no_return_description |
Fetches an article from Juejin given its article URL, via the juejin.cn API. Returns the extracted article content as text, or a structured error if the article cannot be fetched or parsed. |
search_with_synthesis |
params_unexplained |
Deep search with waterfall multi-engine verification. Returns structured results plus a prompt_hint for the agent to synthesize its own answer. No external LLM call or model API key is required; search and enrichment still make outbound network requests. Best for: Complex queries needing multi-source verification and LLM synthesis. Not recommended for: Simple fact-finding — use free_search instead. Parameters: query is the search text; count (1-20, default 10) caps how many results are gathered; language selects result-language preference (auto-detect, English, or Chinese; default auto); min_confidence (0-1, default 0) filters out results below a source-reliability confidence score, with legacy values 2-3 reinterpreted as min_source_count; min_source_count (1-12, default 1) requires results to be corroborated by at least that many independent upstream provider families. @readOnly true @idempotent true — runs waterfall search across free+paid engines with content enrichment. |
Selection evidence
Confusable tool pairs.
8 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
free_search |
free_search_advanced |
high | Both are general web search tools with overlapping query params; a request like "search for X with high confidence" or "search only trusted domains" could plausibly be routed to either, especially since free_search's own description name-drops free_search_advanced as the alternative for filtered/verified results. |
free_search |
search_with_synthesis |
medium | Both take a plain query and return search results; a task asking for a 'thorough' or 'verified' answer could be sent to either, though search_with_synthesis's synthesis/prompt_hint framing differentiates it somewhat. |
free_search_advanced |
search_with_synthesis |
medium | Both perform waterfall multi-engine search with confidence/source-count filters and enrichment; an agent asked for 'deep, verified, multi-source search' could pick either since the schemas and behaviors heavily overlap. |
free_search |
free_extract |
low | Clearly distinct purposes (search vs. extracting content from a known URL) but a vague task like 'find and get the content of this page' could momentarily confuse an agent about which to call first. |
fetch_csdn_article |
fetch_juejin_article |
medium | Both fetch Chinese developer blog articles with identical schemas (a URL field); if the agent isn't attentive to the domain (blog.csdn.net vs juejin.cn) in a given URL, it could call the wrong platform-specific tool. |
fetch_github_readme |
fetch_juejin_article |
low | Both fetch article/documentation content from a URL with the same single-field schema, but GitHub vs Juejin domains are distinct enough that confusion is unlikely except in careless automation. |
fetch_github_readme |
fetch_csdn_article |
low | Same shape (URL-based content fetch) but distinct target domains (GitHub vs CSDN) make genuine mix-up unlikely outside careless URL handling. |
free_search_advanced |
free_extract |
low | Different functions (search vs URL extraction) though both share 'free' branding; unlikely to be confused except in a vague 'get me info on this' request that doesn't specify a URL. |
Compare the field