01Safety
0.0 / 30
What changed in the harness
Selection accuracy 89→89, token cost up 3%, unconfirmed writes 0%→0%.
Category breakdown
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
0.0 / 30
24.1 / 30
15.3 / 20
15.6 / 20
Highest-impact fix
Estimated gain +30 pointsExpose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
6 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 |
|---|---|---|
confirm_regeneration |
no_return_description |
Finalize a regeneration by selecting one of the 4 candidates returned by regenerate_icon. Free — the credit was already charged during regenerate_icon. Returns the finalized icon's generationId, ready for download_icon or save_to_library. |
check_credits |
name_restates_behavior no_return_description |
Retrieve the caller's current credit balance and account details (e.g. plan info and daily-claim eligibility) without spending credits. Free to use. Returns the numeric credit balance along with account metadata. |
generate_bundle |
no_return_description |
Generate a themed set of icons in a single call. Costs 1 credit per icon. Keep descriptions minimal — verbose prompts create cluttered icons. Use normalize_bundle first or supply an icons list directly. Returns a bundleId plus a watermarked, low-resolution preview for each icon (for display/evaluation only); use download_icon with the bundleId to get the final unwatermarked assets. |
save_to_library |
params_unexplained no_return_description |
Save a previously generated icon or bundle to the caller's library so it can be re-downloaded later at no extra cost. Free. Requires the generationId from generate_icon (or bundleId from generate_bundle) and the original prompt; optionally specify type (single/bundle), style, an optional display name, and variations — the number of generated variants to retain for this entry. Returns the new library item's id, for use with list_library and download_from_library. |
list_library |
no_return_description |
Browse the caller's saved icons, optionally filtered by status or type and paginated via limit/offset. Free. Returns an array of library entries (each with its id, name, type, status, and style) for use with download_from_library. |
claim_daily_credits |
name_restates_behavior no_return_description |
Grant the caller 2 free credits for the current day; calling again the same day has no additional effect since claims are limited to once per day. Returns the updated credit balance. |
Selection evidence
7 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
normalize_bundle |
generate_bundle |
high | Both take a bundle 'description' and can be invoked for the same vague request like 'make me a bundle of icons for X'; normalize_bundle only plans/names icons (free) while generate_bundle actually renders them for credits, and generate_bundle even accepts description/targetCount directly, so an agent could call generate_bundle alone or stop after normalize_bundle thinking the bundle is done. |
generate_icon |
generate_bundle |
medium | A request for 'several icons' or 'a few icon options' could plausibly be fulfilled by looping generate_icon per icon or by a single generate_bundle call, since both accept style/prompt-like fields and cost credits per icon. |
generate_icon |
regenerate_icon |
medium | A task like 'try another version of this icon' could be satisfied by calling generate_icon again with a tweaked prompt or by regenerate_icon with an index; the tools overlap in purpose (produce a new icon preview) even though regenerate_icon is meant for refining an existing session/bundle item. |
download_icon |
download_from_library |
medium | For an icon that was already saved to the library, 'download my icon' is ambiguous between download_icon (using generationId/bundleId, costs credits) and download_from_library (using libraryId, free for exported items) — an agent unaware the item was saved could pick the wrong one. |
list_library |
download_from_library |
low | A request like 'get me my saved icons' could trigger list_library (browsing) when the user actually wants the files downloaded via download_from_library, or vice versa if the agent assumes listing implies retrieval. |
check_credits |
claim_daily_credits |
low | A vague instruction like 'get me more credits' could be misrouted to check_credits (just checks balance) instead of claim_daily_credits (actually adds credits), since both are free zero-argument tools about the credit system. |
save_to_library |
download_from_library |
low | Both relate to persisting/retrieving library items and share 'download/library' terminology; a task like 're-download this icon later' could be misinterpreted as needing save_to_library rather than download_from_library if the agent conflates 'saving for later' with 'downloading now'. |
Compare the field