0.0 / 30
What changed in the harness
Selection accuracy 88→88, token cost down 0%, unconfirmed writes 0%→0%.
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
23.2 / 30
03Economics
12.8 / 20
04Discoverability
17.5 / 20
Highest-impact fix
Estimated gain +30 pointsAdd explicit identity and permission preflight tools
Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
Defects and rewrites.
3 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 |
|---|---|---|
list_watches |
name_restates_behavior no_return_description |
List the active webhook watches owned by the configured TensorFeed token, returning each watch's id, type, callback URL, and trigger configuration so you can audit or target them for deletion. Free, requires TENSORFEED_TOKEN. |
create_watch |
no_return_description |
Register a webhook watch (type: price, status, digest, or leaderboard_rank) and return the created watch's id and configuration for later lookup or deletion; the watch lives 90 days and each fire delivers an HMAC-signed POST to callback_url. Costs 1 credit ($0.02) at registration. Needs a TENSORFEED_TOKEN. |
delete_watch |
no_return_description |
Delete one of your active webhook watches by id, returning a confirmation that the watch was removed (or an error if the id was not found or not owned by this token). Free, requires TENSORFEED_TOKEN. |
Selection evidence
Confusable tool pairs.
13 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
x402_settlement_verdict |
x402_publisher_verdict |
medium | Both are signed x402 verdicts; a task like 'check trust for the tavily x402 feed' could be routed to the market-wide settlement tool instead of the publisher-specific one that actually requires a domain. |
pricing_series |
benchmark_series |
medium | Identical shape (daily series for one model over a window, same day/credit tiers) — a vague task like 'how has Claude Opus trended over the last 30 days' doesn't specify price vs. benchmark score, risking the wrong series tool. |
route_verdict |
failover_verdict |
high | Both return a signed 'best model/provider' decision; a task like 'what should I route to since Anthropic is degraded' could be satisfied by either the general router or the failover-specific tool that excludes the degraded provider. |
status_uptime |
status_leaderboard |
medium | Both report uptime over a day window; 'show me provider uptime over 30 days' is ambiguous between the single-provider rollup (status_uptime, needs provider) and the cross-provider ranking (status_leaderboard, no provider param). |
benchmark_trust_verdict |
benchmark_series |
low | Both take a benchmark name and return benchmark-related scores, but one judges the benchmark's trustworthiness while the other tracks a model's score trend — a loosely worded 'how good is swe-bench lately' could tempt either. |
get_ai_status |
account_status |
low | Both are literally named '*status'; a terse task like 'check my status' could momentarily be misrouted to the AI-provider status tool instead of the user's own account/credit tool. |
get_ai_status |
status_leaderboard |
medium | 'Which AI provider is most reliable right now' plausibly maps to either the real-time operational rollup (get_ai_status) or the historical uptime ranking (status_leaderboard), since both cover provider health. |
get_ai_status |
status_uptime |
medium | A task like 'what's OpenAI's status' is ambiguous between the current real-time operational check (get_ai_status) and the historical daily uptime rollup for one provider (status_uptime). |
get_model_pricing |
compare_models |
medium | 'Compare pricing of Claude and GPT-5.5' could invoke the raw cross-provider pricing table or the dedicated compare_models tool that also bundles pricing among other signals. |
get_model_pricing |
pricing_series |
medium | 'What's the price of Claude Opus' is ambiguous between the current cross-provider snapshot (get_model_pricing) and the daily price history for one model (pricing_series). |
provider_reliability_verdict |
failover_verdict |
high | Both rule on which provider is most dependable; 'which provider should I use since X is having issues' could trigger the general reliability ranking instead of the failover tool built for that exact live-degradation scenario. |
provider_reliability_verdict |
provider_deepdive |
medium | 'Tell me how reliable/dependable Anthropic is' could route to the signed reliability verdict or to the broader provider_deepdive bundle that also includes status and reliability-adjacent data. |
route_verdict |
provider_reliability_verdict |
medium | Both fuse latency/p95 and produce a signed 'best X' verdict; a task like 'what should I use right now' doesn't clarify whether the unit of choice is a model (route_verdict) or a provider (provider_reliability_verdict). |
Compare the field