0.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost up 2%, 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
27.3 / 30
03Economics
18.8 / 20
04Discoverability
11.0 / 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.
7 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 |
|---|---|---|
create_short_link |
no_return_description |
Create a tracked short link with click analytics. Use this to add tracking to QR codes — encode the short URL as the QR content. Supports custom codes and expiration dates. Returns the created short link including its unique code and short URL. |
update_link |
no_return_description |
Update a short link — change target URL, status, or expiration. Set status to "disabled" to deactivate without deleting. The QR code continues to work but redirects will stop. Returns the updated short link with its current target URL and status. |
delete_link |
no_return_description |
Permanently delete a short link and all its associated data (QR targets, analytics, landing pages). This action cannot be undone. Consider using update_link with status "disabled" instead. Returns a confirmation that the short link was deleted. |
create_template |
no_return_description |
Save a QR code style preset. Style presets store visual settings (colors, dot styles, logos, dimensions) that can be applied to any content via render_template. Styles are unlimited and do not count against your quota. Returns the created style preset including its ID and saved options. |
list_templates |
no_return_description |
List saved QR code style presets. Styles store visual settings (colors, dots, logos) that can be reused across QR codes. Supports cursor pagination. Returns each preset's ID, name, options, and timestamps. |
delete_template |
no_return_description |
Permanently delete a QR code style preset. This action cannot be undone. Short links using this style will keep their current QR appearance. Returns a confirmation that the template was deleted. |
update_landing |
no_return_description |
Update a landing page HTML content and re-publish to CDN. The existing short link and QR code continue to work — only the page content changes. Returns the updated landing page details including its title, publish status, and public URL. |
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 |
|---|---|---|---|
get_link |
get_link_analytics |
medium | Both take the same link_id and return click data: get_link includes a click count while get_link_analytics gives the full click breakdown. A natural task like 'how many clicks did my link get' or 'show me the stats for this link' could map to either tool, so the agent may pick the wrong one. |
get_usage |
get_capabilities |
medium | Both are no-argument 'get' tools whose descriptions mention quota, limits, and plan status. A task like 'check my quota' or 'what are my current plan limits' is ambiguous because get_usage reports quota limits/cost while get_capabilities reports rate limits, quota, and retention for the tier. |
list_links |
get_link_analytics |
low | list_links returns per-link click counts and get_link_analytics returns detailed click analytics for one link. A task like 'show me the click stats for all my short links' could lead the agent to the per-link analytics tool instead of list_links, since both surface click data. |
get_link |
get_landing |
low | Both retrieve details by an ID and expose a short link/URL, and landing pages are tightly coupled to a short link code. A task like 'get the details and URL of my QR page' is ambiguous about whether the entity is a short link or a landing page, so the agent could call the wrong one. |
publish_landing |
update_landing |
low | Both publish HTML to a hosted landing page. For an existing page, a user saying 'publish my landing page with this new HTML' could trigger publish_landing (creating a duplicate) instead of update_landing, since only prior knowledge of a landing_id disambiguates the two. |
generate_qr |
batch_generate |
low | Both are QR-generation tools sharing 'generate/qr' tokens. A bulk request like 'generate QR codes for all my links' is ambiguous between generate_qr (which also auto-creates tracked short links) and batch_generate, so the agent may wrongly pick the single-item generator. |
Compare the field