01Safety
0.0 / 30
What changed in the harness
Selection accuracy 94→98, token cost up 9%, 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
16.9 / 30
11.2 / 20
12.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
44 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 |
|---|---|---|
favourite_studio |
name_restates_behavior no_return_description |
[Requires Login] Toggles whether a studio is on the authorized user's favourites list; pass the AniList studio ID and the existing status will be flipped on or off. Returns the studio's updated favourite status. |
get_genres |
no_return_description |
Get all available genres on AniList. Returns the complete list of genre names, which can be used to filter anime and manga searches. |
get_media_tags |
no_return_description |
Get all available media tags on AniList. Returns the complete list of tags, which can be used to filter anime and manga searches. |
get_site_statistics |
no_return_description |
Get AniList site statistics over the last seven days. Returns aggregate statistics about recent site activity, such as the most popular anime, manga, characters, staff, and studios. |
get_studio |
params_unexplained no_return_description |
Get information about a studio by its AniList ID or name. Pass a numeric AniList studio ID or an exact studio name as the studio parameter. Returns details about the studio, including its name, description, and associated works. |
delete_activity |
no_return_description |
[Requires Login] Delete the current authorized user's activity post by its AniList activity ID. Returns a confirmation of whether the deletion succeeded. |
get_activity |
no_return_description |
Get a specific AniList activity by its ID. Returns the activity record, such as a text post, message, or media list status update, along with its details. |
get_user_activity |
no_return_description |
Fetch activities from a user by their AniList ID. Returns a paginated list of the user's activities; use page and perPage to control pagination (max 25 entries per page). |
post_message_activity |
no_return_description |
[Requires Login] Post a new message activity to a target recipient, or update an existing message activity by passing its AniList Activity ID. Set isPrivate to true for a private message. Returns the created or updated activity. |
post_text_activity |
no_return_description |
[Requires Login] Post a new text activity to the authorized user's feed, or update an existing text activity by passing its AniList Activity ID. Returns the created or updated activity. |
add_list_entry |
name_restates_behavior no_return_description |
[Requires Login] Add an entry to the authorized user's anime or manga list so it can be tracked. Provide the media ID to add and an options object carrying values to save (status, progress, score, dates, notes, etc.). Returns the created list entry. |
get_user_anime_list |
name_restates_behavior no_return_description |
Get a user's anime list by username or user ID. Returns that user's anime list entries, including each entry's status, progress, and score. |
get_user_manga_list |
name_restates_behavior no_return_description |
Get a user's manga list by username or user ID. Returns that user's manga list entries, including each entry's status, progress, and score. |
remove_list_entry |
name_restates_behavior no_return_description |
[Requires Login] Remove an entry from the authorized user's animated list by its AniList list ID. Returns a confirmation of whether the removal succeeded. |
update_list_entry |
name_restates_behavior no_return_description |
[Requires Login] Update an existing entry on the authorized user's anime or manga list by its AniList list ID, applying the values passed in the options object (status, progress, score, etc.). Returns the updated list entry. |
get_anime |
no_return_description |
Get detailed information about anime by AniList ID or an array of IDs. Returns the matching anime records; by default only essential fields are returned, set fullData to true to receive the full unfiltered data (may be very large). |
favourite_anime |
name_restates_behavior no_return_description |
[Requires Login] Toggles whether an anime is on the authorized user's favourites list; pass the AniList ID and the existing favourite status will be flipped on or off. Returns the anime's updated favourite status. |
favourite_manga |
name_restates_behavior no_return_description |
[Requires Login] Toggles whether a manga is on the authorized user's favourites list; pass the AniList ID and the existing favourite status will be flipped on or off. Returns the manga's updated favourite status. |
get_manga |
no_return_description |
Get detailed information about manga by AniList ID or an array of IDs. Returns the matching manga records; by default only essential fields are returned, set fullData to true to receive the full unfiltered data (may be very large). |
get_character |
no_return_description |
Get information about a character by their AniList ID or name. Returns the character's details, including their name, description, and the anime and manga they appear in. |
favourite_character |
name_restates_behavior no_return_description |
[Requires Login] Toggles whether a character is on the authorized user's favourites list; pass the AniList ID and the existing favourite status will be flipped on or off. Returns the character's updated favourite status. |
favourite_staff |
name_restates_behavior no_return_description |
[Requires Login] Toggles whether a staff member is on the authorized user's favourites list; pass the AniList ID and the existing favourite status will be flipped on or off. Returns the staff member's updated favourite status. |
get_todays_birthday_characters |
name_restates_behavior no_return_description |
Get all characters whose birthday is today. Returns a paginated list of matching characters; use page to target a specific page of results. |
get_todays_birthday_staff |
name_restates_behavior no_return_description |
Get all staff members whose birthday is today. Returns a paginated list of matching staff members; use page to target a specific page of results. |
get_staff |
no_return_description |
Get information about a staff member by their AniList ID or name. Returns the staff member's details, including their name, description, and the anime and manga they have worked on. |
get_recommendation |
no_return_description |
Fetch a single AniList recommendation by its numeric recommendationID, returning the recommendation along with the media and user it is associated with. |
get_recommendations_for_media |
no_return_description |
Fetch AniList recommendations for a specific media by its mediaID, returning a paginated list of recommendations controlled by page and perPage. |
search_activity |
no_return_description |
Search AniList activities by activityID or via a filter object, returning a paginated list of matching activities whose size is controlled by page and perPage. |
search_anime |
no_return_description |
Search AniList for anime using a query term plus an optional filter object, returning a paginated list of matching anime and their details; page and amount control result pagination and sort orders the results. |
search_character |
no_return_description |
Find AniList characters whose details match a search term, returning a paginated list of matching characters controlled by page and amount. |
search_manga |
no_return_description |
Search AniList for manga using a query term plus an optional filter object, returning a paginated list of matching manga and their details; page and amount control result pagination and sort orders the results. |
search_staff |
no_return_description |
Find AniList staff members whose details match a search term, returning a paginated list of matching staff controlled by page and amount. |
search_studio |
no_return_description |
Find AniList studios whose details match a search term, returning a paginated list of matching studios controlled by page and amount. |
search_user |
no_return_description |
Find AniList users whose details match a search term, returning a paginated list of matching users and their profile information controlled by page and amount. |
delete_thread |
name_restates_behavior no_return_description |
[Requires Login] Permanently remove an AniList thread by its ID from the site, deleting the thread and its contents; returns the deleted thread. |
get_thread |
no_return_description |
Fetch a single AniList thread by its ID, returning the thread's title, body, and related metadata. |
get_thread_comments |
name_restates_behavior params_unexplained no_return_description |
Fetch the comments posted on a specific AniList thread by its ID, returning a paginated list of comments; use page to select the 1-based page of the comment list and perPage to set how many comments are returned per request (default 25). |
get_full_user_info |
no_return_description |
Fetch a user's complete AniList profile and statistics by username or user ID, returning their account details, profile information, and aggregated stats. |
follow_user |
name_restates_behavior no_return_description |
[Requires Login] Toggle the authenticated user's following relationship with another AniList user identified by userID, following them if not already followed and unfollowing otherwise; returns the updated user. |
get_authorized_user |
name_restates_behavior no_return_description |
[Requires Login] Fetch the profile of the currently logged-in AniList user with no arguments required, returning their account details and settings; useful when the user's own data is needed without knowing a username. |
get_user_recent_activity |
name_restates_behavior no_return_description |
Fetch the most recent AniList activity entries for a user identified only by their numeric user ID (usernames and other value types are not accepted), returning a list of their latest activities. |
get_user_profile |
no_return_description |
Fetch a user's AniList profile by username or user ID, returning their displayed account and profile information. |
get_user_stats |
no_return_description |
Fetch a user's AniList statistics by username or user ID, returning their aggregated anime and manga statistics. |
update_user |
name_restates_behavior no_return_description |
[Requires Login] Modify the currently authorized user's settings by submitting an options object such as about, displayAdultContent, or scoreFormat; returns the updated user. |
Selection evidence
23 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
get_user_activity |
get_user_recent_activity |
high | Both descriptions say essentially the same thing ('Fetch activities from a user' vs 'Get recent activity from a user') and both take a numeric user ID, so a task like 'show user X's activity' without the word 'recent' maps plausibly to either tool. |
get_activity |
get_user_activity |
medium | Both accept a numeric ID; a task like 'get the activity for user 5' could wrongly route the user ID into the activityID parameter of get_activity instead of the user parameter of get_user_activity. |
get_recommendation |
get_recommendations_for_media |
medium | Names differ only by singular/plural and the ID parameter (recommendID vs mediaID); a task like 'show recommendations for this media' with a media ID could plausibly be routed to get_recommendation. |
get_todays_birthday_characters |
get_todays_birthday_staff |
high | A natural task like 'whose birthday is it today?' does not specify entity type, and both tools have identical signatures (page only), so either could be selected. |
get_user_anime_list |
get_user_manga_list |
medium | Both take the same user parameter with near-identical descriptions; a task like 'show this user's list' without stating anime vs manga is ambiguous. |
post_message_activity |
post_text_activity |
high | Both describe 'Post a new ... activity or update an existing one' and share the same text/id schema; a task like 'post this message' is ambiguous between a wall text activity and a private message (only recipientId distinguishes them). |
add_list_entry |
update_list_entry |
medium | Both share the identical id+options schema and a task like 'mark this anime as completed on my list' does not reveal whether the entry already exists, making add vs update genuinely ambiguous. |
get_user_profile |
get_user_stats |
medium | Both fetch data about a user by the same username/ID parameter; a task like 'give me info on user X' or 'show me user X's overview' plausibly maps to either profile or statistics. |
get_authorized_user |
get_user_profile |
medium | A task like 'show my profile' is ambiguous: get_authorized_user returns the logged-in user's profile with no params while get_user_profile requires a username/ID, so an agent may pick the wrong one for a self-referencing request. |
get_anime |
get_manga |
medium | Both fetch details by AniList ID(s) and only differ by media type; a task like 'get info on this ID/title' without specifying anime or manga could select the wrong one. |
get_character |
get_staff |
medium | Both accept an ID or name with similar descriptions; a task looking up a person by name (e.g., 'tell me about this person') is ambiguous about whether they are a character or staff member. |
search_anime |
search_manga |
high | Both take the same term+filter schema and a plain title search (e.g., 'search One Piece') does not state whether the media is anime or manga, so either search tool could be chosen. |
search_character |
search_staff |
medium | Both search by a query term and a name could belong to either a character or a voice actor/staff member; a task like 'search for this person' is ambiguous between the two. |
favourite_anime |
favourite_character |
medium | All favourite tools share the identical '[Requires Login] Favourite or unfavourite ... by its ID' shape with the same numeric id parameter; a task like 'favourite this (ID 42)' does not restate entity type, so the wrong member can be picked. |
favourite_anime |
favourite_manga |
medium | Identical signature (numeric id) and description except anime vs manga; a bare-ID favourite request or one where type is inferred from context can select the wrong member. |
favourite_manga |
favourite_character |
medium | Identical signature and description pattern (favourite/unfavourite by ID); a task that references only an ID leaves the manga vs character distinction ambiguous. |
favourite_studio |
favourite_anime |
medium | Same numeric-id signature and same 'favourite or unfavourite by ID' phrasing; a bare-ID task or one relying on ambiguous context can confuse studio with anime. |
favourite_studio |
favourite_character |
medium | Identical tool shape differing only in entity type; a task like 'favourite this' with a bare ID is genuinely ambiguous between studio and character. |
favourite_studio |
favourite_manga |
medium | Identical numeric-id signature and identical description format; without an explicit entity type in the task, studio vs manga selection is ambiguous. |
favourite_anime |
favourite_staff |
medium | Same id-only signature and same favourite/unfavourite wording; a task that gives only an ID cannot disambiguate anime from staff member. |
favourite_character |
favourite_staff |
medium | Both take a single numeric ID with near-identical descriptions; a person-related bare-ID favourite request is ambiguous between character and staff. |
favourite_manga |
favourite_staff |
medium | Identical signature and description structure; a bare-ID favourite task or one without explicit entity type is ambiguous between manga and staff. |
favourite_studio |
favourite_staff |
medium | Same numeric-id signature and same favourite/unfavourite description; a task referencing only an ID leaves studio vs staff selection ambiguous. |
Compare the field