01Safety
0.0 / 30
What changed in the harness
Selection accuracy 98→95, token cost up 15%, 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
26.4 / 30
19.6 / 20
19.2 / 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
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 |
|---|---|---|
search_images |
params_unexplained |
Federated image search across license-aware providers (Wikimedia Commons, Openverse, Unsplash, Pexels, Pixabay, iTunes, MusicBrainz CAA, Spotify, Brave). `query` is the text to search for. `providers` restricts the search to specific upstream services; omit for the default set. `safeSearch` sets content filtering level (strict/moderate/off). `licensePolicy` selects allowed licensing: 'safe-only' (default; open, platform-license, and editorial/press tags, rejects UNKNOWN) or 'open-only' (CC/public-domain only). `maxPerProvider` caps results per provider (1-50); `minWidth`/`minHeight` filter out smaller images; `timeoutMs` bounds each provider request. Returns concise ranked candidates with license + attribution. Does NOT auto-download — call `download_image` after. For large batches, prefer CLI: webfetch batch --jsonl --continue-on-error. |
search_artist_images |
params_unexplained no_return_description |
Specialized image search for a musical artist. `artist` is the artist name to search. `kind` selects provider set + query expansion: 'portrait' (Wikimedia + Unsplash + Spotify), 'album' (MusicBrainz CAA + iTunes + Spotify), 'logo' (Wikimedia), 'performing' (Wikimedia + Pexels). `providers` overrides the provider set chosen by `kind`; `safeSearch` sets content filtering (strict/moderate/off); `licensePolicy` selects allowed licensing ('safe-only' default, 'open-only' for CC/public-domain only); `maxPerProvider` caps results per provider (1-50); `minWidth`/`minHeight` filter out smaller images; `timeoutMs` bounds each provider request. Returns ranked image candidates with license + attribution. Prefer this over `search_images` when building artist/band content. |
search_album_cover |
params_unexplained |
Find canonical album artwork for an artist/album pair. `artist` is the artist name and `album` is the album name to match. Uses MusicBrainz Cover Art Archive + iTunes + Spotify. `providers` restricts which upstream providers to query; `safeSearch` sets content filtering (strict/moderate/off); `licensePolicy` selects allowed licensing ('safe-only' default, 'open-only' for CC/public-domain only); `maxPerProvider` caps results per provider (1-50); `minWidth`/`minHeight` filter out smaller images; `timeoutMs` bounds each provider request. Returns matching album artwork candidates. Results are EDITORIAL_LICENSED — safe for album identification UI per platform ToS; always show attribution. |
download_image |
params_unexplained |
Download an image URL (typically from a prior search_images result) to the local disk cache. `url` is the image URL to download. `maxBytes` overrides the 20MB hard cap on download size (1KB-100MB). `cacheDir` overrides the default local cache directory. Streams with the size cap, a content-type guard, and SHA-256 hash, and returns the cached file path. Host blocklist enforced. |
fetch_with_license |
params_unexplained no_return_description |
Given an arbitrary URL (image or webpage), determine its license via host heuristics + page metadata (<link rel=license>, dc.rights, og tags). `url` is the image or webpage URL to assess. `probe` (default false) additionally downloads the bytes to verify the assessment. Returns the detected license and the evidence used — a go/no-go decision for shipping. |
find_similar |
params_unexplained |
Reverse-image-search: given a public image URL, find visually similar images. `url` is the public URL of the reference image. `providers` selects which upstream provider to query; this tool requires SERPAPI_KEY env var and providers must be ['serpapi']. Returns candidates with heuristic licenses — treat results as leads, not shippable. |
probe_page |
params_unexplained |
Given a webpage URL, return every <img> on the page with inferred dimensions and a heuristic license per image. `url` is the webpage to scan. `respectRobots` (default true) makes the crawler honor robots.txt restrictions. Use to triage a candidate source page before picking. |
Selection evidence
4 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
search_images |
search_artist_images |
high | A task like 'find images of Drake' fits both tools: the general federated search and the artist-specialized variant overlap heavily in purpose and name tokens. The artist tool's own description even says to prefer it over search_images for artist content, which signals the agent must infer intent from phrasing (artist name in query vs. explicit kind) to pick correctly. |
search_artist_images |
search_album_cover |
medium | 'Get the album cover for artist X' is ambiguous: search_artist_images with kind='album' uses the same providers (MusicBrainz CAA + iTunes + Spotify) as search_album_cover, so an agent could pick the artist tool (kind album) instead of the dedicated album-cover tool, especially since both are keyed by artist. |
search_images |
search_album_cover |
low | 'Search for an album cover' could map to either: search_images also queries iTunes/MusicBrainz CAA and returns artwork, while search_album_cover is narrowly specialized and requires an album field. Only the required album parameter and 'canonical artwork' wording disambiguate, so a generic query like 'find the cover of Nevermind' might land on the broader tool. |
search_images |
download_image |
low | A request like 'download an image of X' could make the agent pick download_image directly, but its required url field (and 'typically from a prior search_images result') forces it to first search. Confusion is possible on the first tool choice, though the schema quickly disambiguates. |
Compare the field