0.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost up 2%, 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
27.2 / 30
03Economics
19.3 / 20
04Discoverability
11.9 / 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.
6 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 |
|---|---|---|
kya_getAgentIdentity |
no_return_description |
Declares your agent identity to a merchant before any shopping action (browsing, searching, buying), presenting proof of authorization so bot defenses let you through. Call before kya_getCard or kya_web_fetch. Takes the merchant name and optionally its URL (to check UCP identity support and generate a checkout patch). Returns a verification_token and trip_id for use in follow-up calls, an agent_disclosure text to present if challenged, and — when merchantUrl is provided — a checkoutPatch to merge into the checkout payload. Issues no card and moves no money. |
kya_reportBadgePresented |
no_return_description |
Records that you presented your Badge (verification_token) to a merchant, linking the event to the trip_id from kya_getAgentIdentity; call immediately after merging the checkoutPatch into a checkout payload. Accepts the merchant name or URL, the checkout context (arrival, addtocart, checkout, other), and an optional checkoutSessionId. Returns confirmation that the trip event was recorded; when Extended Auth is enabled, kyaLabs automatically checks back in 7 seconds to determine the outcome, otherwise call kya_reportBadgeOutcome once you know the result. |
kya_reportBadgeOutcome |
no_return_description |
[DEPRECATED — outcomes are now tracked automatically via the verify endpoint; this tool will be removed in a future version.] Reports how the merchant responded (not_denied, denied, or unparseable) after presenting your Badge (verification_token) at a merchant, linked via trip_id. Returns confirmation that the outcome was recorded. |
kya_reportBadgeNotPresented |
no_return_description |
[DEPRECATED — this event is no longer needed; this tool will be removed in a future version.] Reports that you did not present your Badge (verification_token) at a merchant, along with the reason (abandoned, merchant_didnt_ask, other), linked via trip_id. Returns confirmation that the event was recorded. |
kya_getCard |
no_return_description |
Requests a single-use virtual Visa card for a purchase, after identifying yourself with kya_getAgentIdentity. Declare the merchant, estimated_amount (max $500), and a description of what's being purchased; the user approves via MFA before the card is issued. Returns an intent_id and the single-use card details locked to this purchase amount and merchant; the card self-destructs after use. Call kya_reportPurchase after the transaction completes. |
kya_reportPurchase |
no_return_description |
Closes the audit trail for a purchase made with a kyaLabs virtual card by reporting its outcome; must be called after every purchase attempt. Takes the intent_id from kya_getCard, whether the purchase succeeded, and optional actual_amount, merchant_name, items, and order_confirmation details from the receipt. Returns confirmation that the purchase outcome was recorded. |
Selection evidence
Confusable tool pairs.
6 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
kya_reportBadgePresented |
kya_reportBadgeNotPresented |
medium | Both fire after a merchant interaction to record whether the Badge was shown; an agent unsure of the exact presentation state (e.g., ambiguous merchant challenge) could pick the wrong polarity, though the enum/required fields differ. |
kya_reportBadgePresented |
kya_reportBadgeOutcome |
medium | reportBadgeOutcome (deprecated) and reportBadgePresented both concern the result of showing the Badge; an agent following older instructions or unsure which lifecycle event to log after a checkout could call either. |
kya_reportBadgeOutcome |
kya_reportBadgeNotPresented |
medium | Both deprecated tools report a negative/ambiguous badge event (denied/unparseable vs. not presented); an agent trying to log 'the merchant didn't accept/see the badge' could plausibly choose either. |
kya_web_fetch |
kya_getHeaders |
medium | Both attach the agent's identity to outbound requests to a merchant; a task like 'authenticate my request to this site' could be served by web_fetch (direct fetch) or getHeaders (headers for an external HTTP client), and the agent may not know which execution path it's supposed to use. |
kya_getAgentIdentity |
kya_getHeaders |
low | Both are 'get identity'-flavored calls, but getAgentIdentity is clearly the mandatory first step and getHeaders explicitly depends on it, making misselection less likely. |
kya_getCard |
kya_getHeaders |
low | Share 'get' verb but serve unrelated purposes (payment card vs. HTTP headers), so a natural-language purchase or browsing task is unlikely to conflate them. |
Compare the field