01Safety
0.0 / 30
What changed in the harness
Selection accuracy 80→70, token cost up 17%, 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
23.7 / 30
19.5 / 20
10.7 / 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 |
|---|---|---|
search_artist_images |
params_unexplained no_return_description |
Specialized image search for a musical artist, returning a ranked JSON array of candidate images with URL, license, and attribution (same shape as search_images) — does not auto-download. `artist` is the artist or band name to search for. `kind` selects the provider set and query expansion: 'portrait' (Wikimedia + Unsplash + Spotify), 'album' (MusicBrainz CAA + iTunes + Spotify), 'logo' (Wikimedia), 'performing' (Wikimedia + Pexels); defaults to 'portrait'. `providers` overrides the default provider set for the chosen kind. `safeSearch` controls explicit-content filtering ('strict'|'moderate'|'off'). `licensePolicy` sets the license filter ('open-only', 'safe-only', 'context-safe', 'prefer-safe', 'any'). `maxPerProvider` caps results returned per provider, `minWidth`/`minHeight` filter out images smaller than the given pixel dimensions, and `timeoutMs` bounds how long each provider request may take. Prefer this over search_images when building artist/band content. |
search_images |
params_unexplained |
Federated image search across license-aware providers (Wikimedia Commons, Openverse, Unsplash, Pexels, Pixabay, iTunes, MusicBrainz CAA, Spotify, Brave, and others). Returns concise ranked candidates with URL, license, and attribution. Does NOT auto-download — call `download_image` after. `providers` restricts the search to specific sources from the supported enum (omit for the default set). `safeSearch` controls explicit-content filtering ('strict'|'moderate'|'off'). `licensePolicy` sets the license filter: 'open-only' keeps CC/public-domain only, 'safe-only' (default) includes open, platform-license, and editorial/press tags while rejecting UNKNOWN, and 'context-safe'/'prefer-safe'/'any' relax filtering further. `maxPerProvider` caps results returned per provider, `minWidth`/`minHeight` filter out images smaller than the given pixel dimensions, and `timeoutMs` bounds how long each provider request may take before it's skipped. For large batches, prefer CLI: webfetch batch --jsonl --continue-on-error. |
search_album_cover |
params_unexplained |
Find canonical album artwork using MusicBrainz Cover Art Archive, iTunes, and Spotify. Returns a ranked JSON array of candidate cover-art images with URL and license, tagged EDITORIAL_LICENSED — safe for album identification UI per platform ToS as long as attribution is shown. `artist` and `album` identify the release to search for. `providers` restricts the lookup to specific sources from the supported enum (defaults to the three above). `safeSearch` controls explicit-content filtering. `licensePolicy` sets the license filter ('open-only', 'safe-only', 'context-safe', 'prefer-safe', 'any'). `maxPerProvider` caps results per provider, `minWidth`/`minHeight` filter by minimum pixel dimensions, and `timeoutMs` bounds per-provider request time. |
download_image |
params_unexplained |
Download an image from `url` (typically from a prior search_images result) to the local disk cache. Streams with a 20MB default hard cap, content-type guard, SHA-256 hashing, and a host blocklist. `maxBytes` overrides the default cap (1KB-100MB). `cacheDir` overrides the default directory the file is cached to. Returns the cached file's local path, its SHA-256 hash, and content type. |
fetch_with_license |
no_return_description |
Given an arbitrary `url` (image or webpage), determine its license via host heuristics and page metadata (<link rel=license>, dc.rights, og tags), returning the inferred license, the signal(s) it was derived from, and a go/no-go verdict. Set `probe: true` to also download the bytes for stronger content-based verification (defaults to false, metadata-only check). Use when an agent already has a URL and needs a go/no-go decision before shipping. |
find_similar |
params_unexplained |
Reverse-image-search: given a public image `url`, find visually similar images via SerpApi (requires SERPAPI_KEY env var). Returns candidates with heuristic licenses — treat results as leads, not shippable. `providers` restricts which sources are queried; currently only 'serpapi' performs this operation, so it should generally be left as ['serpapi']. |
Selection evidence
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_images |
search_artist_images |
high | A task like 'find some photos of Drake' matches both: search_images accepts any query including artist names, while search_artist_images is explicitly recommended for artist content ('Prefer this over search_images when building artist/band content'). The agent must infer this preference rather than it being structurally enforced, so it could pick the generic tool by default. |
search_artist_images |
search_album_cover |
medium | A request like 'get me the cover art for Drake's album Scorpion' could route to either search_artist_images with kind='album' (uses MusicBrainz CAA + iTunes + Spotify) or search_album_cover (same provider set, dedicated to album art). Both take an artist parameter and target album artwork, so the agent may not clearly choose the more specific tool that also requires the album name. |
search_images |
search_album_cover |
low | A query like 'find the album cover for Scorpion by Drake' could be issued via generic search_images (which supports arbitrary queries across many providers) instead of the dedicated search_album_cover tool, though the latter's explicit purpose description makes this less likely. |
Compare the field