01Safety
0.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost up 6%, 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
27.8 / 30
20.0 / 20
15.9 / 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
4 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_index_data |
no_return_description |
Get custom market indices — China A-share momentum and strategy-weighted momentum. Returns index levels and performance data for the requested indexId, or a summary of all indices when indexId is omitted. Requires API key (get one free via register_trial). |
get_subscription_info |
name_restates_behavior no_return_description |
Get details of the available subscription plans and free trial offering. Returns the plan options, their features, and trial terms so you can decide which plan fits; no API key is required. |
get_signals |
no_return_description |
Get today's buy/sell signals for a strategy. Returns the most recent trading signals, including signal direction and timestamp, limited to the count specified by limit (default 20, max 50). Requires API key from register_trial. |
check_subscription |
no_return_description |
Check your subscription status and remaining trial days. Returns whether the account is active, the current plan, and how many trial days remain. Requires API key from register_trial. |
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 |
|---|---|---|---|
list_strategies |
compare_strategies |
medium | A task like 'compare all my strategies' or 'show me how my strategies perform relative to each other' maps easily to either tool: list_strategies returns live performance for every strategy (satisfying a comparison request without IDs, since compare_strategies requires an explicit productIds array), while compare_strategies is the literal match. Agents can reasonably pick either when the user names no specific product IDs. |
get_strategy_performance |
get_signals |
medium | Both require the same inputs (apiKey + productId) and both return recent strategy data. A loose task like 'get the latest data/signals for strategy PROD-E3X' or 'what's PROD-E3X doing today' is ambiguous between detailed performance (returns/NAV history) and today's buy/sell signals, so an agent may call the wrong one based on phrasing. |
get_subscription_info |
check_subscription |
high | Both share 'subscription' and 'trial' and serve overlapping queries: get_subscription_info returns plans/trial info, check_subscription returns status/remaining trial days. A natural task like 'check my subscription status', 'how many trial days do I have left?', or 'do I have a free trial' could easily route an agent to get_subscription_info (no apiKey needed, generic plans) instead of check_subscription, or vice versa. |
Compare the field