30.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost up 5%, 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
28.9 / 30
03Economics
20.0 / 20
04Discoverability
12.8 / 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.
1 defect 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_agents |
name_restates_behavior no_return_description |
Browse and enumerate agents indexed in A2ASearch, optionally narrowed by agent type (MCP Server, CLI Tool, AI Coding Agent, Agent Skill, A2A Agent) to see top agents per category. Returns a list of agent records including name, description, type, slug, stars, GitHub URL and capabilities, ordered by stars or newest first and capped at the given limit. |
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 |
|---|---|---|---|
search_agents |
list_agents |
medium | A task like 'find/show me agents or MCP servers' is ambiguous: both accept an optional type filter and return names and stars. Only the sort/query distinction separates them (list_agents sorts by stars/new for browsing; search_agents takes a free-text keyword), and neither description flags that boundary, so an agent could pick the wrong one for 'show me top agents' or 'search MCP servers'. |
search_agents |
get_agent |
medium | Tasks naming a specific agent, e.g. 'get me details on the playwright agent', are ambiguous: the named entity could be treated as a search query (search_agents) or as a slug lookup (get_agent, which even lists 'playwright' as an example slug). Disambiguation requires recognizing that get_agent needs an exact slug for full details while search_agents is keyword-based, which is easy to confuse. |
get_agent |
list_agents |
low | Only a soft lexical slip like 'get me the agents' could confuse these, since get_agent explicitly requires a single kebab-case slug and returns full details for one agent, while list_agents is for browsing many by type. The descriptions largely resolve the plural-vs-singular and browse-vs-details distinction, so genuine selection confusion is unlikely. |
Compare the field