30.0 / 30
What changed in the harness
Selection accuracy 93→96, token cost up 7%, 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
24.1 / 30
03Economics
19.5 / 20
04Discoverability
12.3 / 20
Highest-impact fix
Estimated gain +8 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.
13 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_by_term |
no_return_description |
Full-text search across all podcasts in the index, matching by topic, show name, or keyword. Returns a list of matching podcasts with their metadata and feed details; set fulltext to also return full text descriptions. |
trending_podcasts |
no_return_description |
Get currently trending podcasts, optionally filtered by language and category. Returns a list of podcasts with their metadata including title, feed URL, and category information. Useful for competitive intelligence and content planning. |
episodes_by_feed_id |
no_return_description |
Get episodes for a specific podcast by its Podcast Index feed ID. Returns a list of episodes with metadata such as title, publication date, and audio URLs. Use podcast_by_feed_url first to get the feed ID. |
recent_episodes |
no_return_description |
Get the most recent episodes published across the entire Podcast Index. Returns a list of recent episodes with metadata including episode title, feed title, and publication date. Useful for seeing what is being published right now in the ecosystem. |
categories_list |
no_return_description |
Get the full list of Podcast Index categories. Returns an object mapping category names to their IDs for use in filtering other searches. |
search_by_title |
no_return_description |
Search for podcasts by title, returning a list of matching podcasts with their metadata and feed details. Narrower than search_by_term, which also matches descriptions and other feed metadata — use this when you already know (or are guessing at) the show name. |
episodes_live |
no_return_description |
Get episodes that are currently live (actively streaming right now) across the Podcast Index. Returns a list of live episodes with their metadata and stream URLs. Useful for finding live shows in progress. |
podcast_by_guid |
no_return_description |
Look up a podcast by its podcast:guid tag value — the globally unique identifier defined in the Podcast Namespace spec. Returns the podcast's full metadata including feed URL, title, and feed health. Use this when you have the GUID rather than a feed URL or ID. |
value_by_feed_id |
no_return_description |
Get the value4value (lightning payment / streaming sats) information for a podcast by its Podcast Index feed ID. Returns the podcast:value block (payment method, destinations, and suggested amount) if the feed publishes one, or an empty result otherwise. |
value_by_feed_url |
no_return_description |
Get the value4value (lightning payment / streaming sats) information for a podcast by its RSS feed URL. Returns the podcast:value block (payment method, destinations, and suggested amount) if the feed publishes one, or an empty result otherwise. |
recent_feeds |
no_return_description |
Get the most recently updated podcast feeds across the entire Podcast Index, optionally filtered by language and category. Returns a list of feeds with metadata including title, feed URL, last update time, and category information. Useful for spotting fresh activity in the ecosystem. |
recent_new_feeds |
no_return_description |
Get podcast feeds newly added to the Podcast Index, in the order they were added. Returns a list of new feeds with metadata including title, feed URL, and assigned feed ID. Useful for discovering brand-new shows before they show up in other searches. Use feedid to start from a specific feed, with desc controlling sort order. |
stats_current |
no_return_description |
Get current aggregate statistics for the entire Podcast Index. Returns total counts of feeds, episodes, and related metrics for the index as a whole. |
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 |
|---|---|---|---|
recent_feeds |
recent_new_feeds |
high | Near-identical names and both return 'most recent feeds' from the same index; the only distinguishing phrase is 'recently updated' vs 'newly added'. A task like 'get the most recent feeds' or 'see new feeds today' maps to both, so the agent can pick the wrong one. |
podcast_by_feed_id |
podcast_by_itunes_id |
medium | Both are 'look up a podcast by a numeric ID' with an identical input schema (a number named 'id'). Users often give a bare show ID from Apple/other directories without stating it is an iTunes ID, so the agent may call the Podcast Index feed lookup instead. |
value_by_feed_id |
value_by_feed_url |
medium | Descriptions are near-identical: both fetch the podcast:value (lightning sats) block and differ only in feed ID vs RSS URL as the key. When the user asks 'get the value/sats info for this feed' without pinning down which identifier is available, the wrong lookup flavor may be selected. |
episodes_by_feed_id |
episode_by_id |
medium | Both accept a single numeric 'id' described as a Podcast Index ID. A task like 'look up the episodes with id 123' or 'get that episode, id is 123' can trigger the plural-per-feed tool instead of the single-episode tool (or vice versa) when the user omits the words feed vs episode. |
podcast_by_feed_url |
podcast_by_feed_id |
low | Both look up the same podcast entity, differing only by URL vs feed ID identifier. A given RSS URL makes the choice obvious, but a loosely worded 'look up this podcast feed' where the identifier format is not explicit leaves a small chance of mismatch. |
episode_by_id |
podcast_by_itunes_id |
low | Both are bare numeric-ID lookups with identical schema. A user saying 'look up id 12345' without saying whether it is an episode or a podcast can push the agent toward the wrong tool, though most tasks name the entity type. |
Compare the field