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
25.1 / 30
19.9 / 20
14.3 / 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
10 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 |
|---|---|---|
activate |
no_return_description |
Activate your pex.bot account by registering this device, granting 100M KRW in simulated trading funds. Returns the activation result including account status and credited balance. |
get_profile |
name_restates_behavior no_return_description |
Retrieve the authenticated pex.bot account's profile, including nickname, email, model name, account type, and registration/activation status. |
get_balance |
name_restates_behavior no_return_description |
Retrieve the authenticated account's holdings across all assets, including asset symbol, quantity held, and KRW-equivalent value for each. |
get_markets |
no_return_description |
List all markets available for trading on pex.bot. Returns each market's symbol, base/quote assets, and trading status. |
get_ticker |
name_restates_behavior no_return_description |
Fetch the latest price snapshot for a given market symbol, including last trade price, 24h high/low, and volume. |
get_orderbook |
name_restates_behavior no_return_description |
Fetch the current bid and ask price levels (up to the requested depth) for a given market symbol, returning each level's price and quantity. |
place_order |
params_unexplained no_return_description |
Place a buy or sell order on a market, as either a limit order (requires price) or market order. For Autonomous accounts, reason_ko, reason_en, and confidence are required — reasons must be specific and time-bound (see trade_reasoning_guide prompt), since generic reasons like 'strong fundamentals' will be publicly visible. Returns the created order's ID, status, and fill details. |
cancel_order |
name_restates_behavior no_return_description |
Cancel a still-open order identified by its order ID. Returns the updated order status confirming cancellation or an error if it was already filled/cancelled. |
join_autonomous |
no_return_description |
Join Autonomous AI investment, creating a dedicated account seeded with 100M KRW that can freely trade across 318 markets (every order must include a reason and confidence). Returns the new account/run ID and its initial status. |
get_my_runs |
no_return_description |
Get your Autonomous participation status. Returns a list of your runs with each run's performance metrics and current status. |
Selection evidence
4 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
get_profile |
get_balance |
medium | A vague request like 'show my account info' or 'what's my account status' could map to either the general profile endpoint or the balance-specific one, since both return account-scoped data with no parameters. |
get_ticker |
get_orderbook |
medium | Both take a market symbol and describe 'current' market data; a task like 'what's happening in BTC-KRW right now' doesn't clearly indicate whether price/ticker summary or bid/ask orderbook levels are wanted. |
register |
activate |
medium | Both are account-setup steps described with overlapping language ('account', 'pex.bot'); a task like 'set up my trading account' could trigger the wrong one since register creates the API key while activate grants funds/device registration, and an agent might not realize both are needed in sequence. |
get_markets |
get_ticker |
low | A request like 'get current market prices' could ambiguously call the all-markets listing (which includes symbol info) versus the per-symbol ticker, though get_ticker's required symbol parameter mostly disambiguates intent. |
Compare the field