30.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost up 12%, 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
26.9 / 30
03Economics
20.0 / 20
04Discoverability
14.5 / 20
Highest-impact fix
Estimated gain +6 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.
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 |
|---|---|---|
get-daily-challenge |
no_return_description |
Retrieves the current LeetCode daily challenge problem, including its title, difficulty, and related problem details. |
get-problem |
no_return_description |
Returns the LeetCode problem identified by the provided titleSlug, including its statement, difficulty, tags, and solution-related content. |
search-problems |
no_return_description |
Searches LeetCode problems filtered by the optional tags and difficulty, returning a list of up to 'limit' problems after skipping the first 'skip' results. |
get-user-profile |
no_return_description |
Returns the LeetCode profile for the given username, including ranking, problem-solving statistics, and account details. |
get-user-submissions |
no_return_description |
Returns the most recent submissions for the given LeetCode username, up to the specified limit, with details for each submission. |
get-contest-details |
no_return_description |
Returns details for the LeetCode contest identified by the provided contestSlug, such as its schedule, problems, and standings information. |
get-user-contest-ranking |
no_return_description |
Returns the contest ranking and rating information for the given LeetCode username, including contest history and performance. |
Selection evidence
Confusable tool pairs.
5 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-profile |
get-user-submissions |
medium | Both take only a username and share 'get user'; with empty descriptions, a task like 'show me this user's recent activity' or 'pull the user's stats' could select either tool. |
get-contest-details |
get-user-contest-ranking |
medium | Both revolve around 'contest'; a task like 'get the contest details/results for this user' could mis-map to get-contest-details, which expects a contestSlug, when the user meant their ranking. |
get-user-profile |
get-user-contest-ranking |
medium | Both are user-scoped with identical input (username); a task like 'show this user's contest rating or profile' is ambiguous because a profile plausibly contains rankings and ratings. |
get-problem |
search-problems |
medium | Both relate to 'problems'; 'find me a problem on arrays/dynamic-programming' could send the agent to get-problem (which needs a slug) instead of search-problems with tags, since names don't distinguish fetch-by-slug from filtered search. |
get-daily-challenge |
get-problem |
medium | The daily challenge is itself a problem; 'get today's problem' or 'show me the challenge problem' could resolve to the generic get-problem instead of get-daily-challenge when the dedicated tool's existence isn't obvious from names alone. |
Compare the field