01Safety
0.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost up 8%, 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
18.9 / 30
13.6 / 20
13.7 / 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
63 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 |
|---|---|---|
register_domain |
no_return_description |
Registers a new domain for the specified number of years (1-10) using the account's default registrant contact unless registrant_contact is given; optionally applies a coupon and billing currency. Returns the registration order details including status and price. |
bulk_register_domains |
no_return_description |
Registers up to 100 domains in a single call using the account's default settings (nameservers, DNS, contacts), applying an optional coupon and currency to all of them. Returns per-domain registration results including success/failure status and price. |
get_domain_info |
no_return_description |
Retrieves the full registration record for a domain. Returns its expiry date, nameservers, WHOIS contact details, privacy status, and lock status. |
list_domains |
name_restates_behavior no_return_description |
Retrieves every domain in the account without needing a per-domain lookup. Returns an array of domain summaries including expiry date, status, and lock/privacy flags. |
renew_domain |
name_restates_behavior no_return_description |
Extends a domain's registration by the given number of years, optionally applying a coupon; with price_check=true it only quotes the renewal cost without charging. Returns the renewal order details or price quote. |
delete_domain |
name_restates_behavior no_return_description |
Cancels a domain registration while it is still within its grace period; once the grace period ends this can no longer be reversed. Returns the deletion confirmation status. |
restore_domain |
no_return_description |
Reinstates a domain that has entered the post-expiration redemption grace period, typically for an added restore fee. Returns the restoration order status. |
push_domain |
name_restates_behavior no_return_description |
Transfers ownership of a domain already in Dynadot to a different Dynadot account identified by the recipient's push username, optionally unlocking the domain first if it is locked. Returns the push request status. |
get_dns |
name_restates_behavior no_return_description |
Retrieves the DNS configuration currently active on a domain through Dynadot's DNS service, useful before making edits with set_dns. Returns all A, AAAA, CNAME, MX, TXT, and SRV records along with any configured subdomains. |
set_dns |
no_return_description |
Applies DNS record settings to a domain via Dynadot's DNS service, using API-style keys (main_record_type0-19, subdomain0-9, etc.) passed in the records object, either overwriting existing records or appending to them. Returns the update confirmation status. |
set_nameservers |
name_restates_behavior no_return_description |
Replaces a domain's nameserver delegation with up to 13 specified hostnames, pointing DNS resolution away from Dynadot's default servers. Returns the update confirmation status. |
get_nameservers |
name_restates_behavior no_return_description |
Looks up which nameservers are currently delegated for a domain. Returns the list of nameserver hostnames. |
register_nameserver |
name_restates_behavior no_return_description |
Creates a glue record pairing a custom nameserver hostname with an IP address, needed when a domain uses its own subdomain as its nameserver. Returns the registration confirmation status. |
get_dnssec |
name_restates_behavior no_return_description |
Looks up whether DNSSEC is enabled for a domain and its current key parameters. Returns the flags, algorithm, and public key configured, or a disabled state if none is set. |
add_nameserver |
no_return_description |
Creates a new custom nameserver record pairing a hostname with an IP address for use as glue on domains delegated to it. Returns the creation confirmation status. |
set_nameserver_ip |
no_return_description |
Changes the IP address associated with an already-registered custom nameserver hostname. Returns the update confirmation status. |
delete_nameserver |
no_return_description |
Removes a specific registered nameserver by hostname, or, if domain is given instead, removes all custom nameservers tied to that domain. Returns the deletion confirmation status. |
list_registered_nameservers |
name_restates_behavior no_return_description |
Retrieves every custom nameserver (glue record) registered under the account, regardless of which domains use them. Returns a list of nameserver hostnames and their IP addresses. |
create_contact |
params_unexplained no_return_description |
Creates a reusable contact record (requiring name, email, phone_num, address1, city, state, zip_code, and country, plus optional address2, organization, and fax_num) that can later be assigned as a domain's registrant, admin, technical, or billing contact. Returns the new contact_id. |
delete_contact |
name_restates_behavior no_return_description |
Permanently removes a contact record; this fails if any domain still references it as registrant, admin, technical, or billing contact. Returns the deletion confirmation status. |
list_contacts |
no_return_description |
Retrieves all contacts on the account, or, when contact_id is given, just that one contact's full details. Returns contact records including name, email, address, and organization fields. |
set_contact_regional_setting |
no_return_description |
Applies additional WHOIS fields that certain registries (EU, Latvia, or Lithuania) require on a contact before registrations under those TLDs will be accepted. Returns the update confirmation status. |
manage_cn_audit |
no_return_description |
Creates or checks the status of the identity-verification audit China's registry requires before a .cn domain can be registered, using the given contact and, for 'create', supporting documents in params. Returns the audit record or its current status. |
set_reseller_verification |
name_restates_behavior params_unexplained no_return_description |
Updates the WHOIS identity-verification status recorded for a reseller's contact, used when a reseller must attest that an end customer's contact information has been validated. Returns the update confirmation status. |
transfer_domain |
name_restates_behavior no_return_description |
Starts an inbound transfer of a domain from its current registrar into this Dynadot account using the EPP authorization code obtained from that registrar, optionally assigning a registrant contact or coupon. Returns the transfer request status. |
cancel_transfer |
name_restates_behavior no_return_description |
Withdraws an in-progress inbound transfer request for a domain before it completes. Returns the cancellation confirmation status. |
get_transfer_status |
no_return_description |
Looks up where an inbound domain transfer currently stands in the approval process. Returns the transfer's current status (e.g., pending, completed, failed). |
get_auth_code |
no_return_description |
Retrieves the EPP authorization code required to transfer a domain out to another registrar, optionally regenerating the code and/or unlocking the domain in the same call. Returns the authorization code and the domain's lock status. |
authorize_transfer_away |
no_return_description |
Confirms consent to release a domain to a different registrar that has an outgoing transfer pending on it. Returns the authorization confirmation status. |
set_auth_code |
params_unexplained no_return_description |
Manually sets the EPP authorization code stored for a domain, overriding the auto-generated one, typically to match a code the receiving registrar requires. Returns the update confirmation status. |
manage_domain_push |
no_return_description |
Views incoming domain push requests sent by other Dynadot accounts, or accepts/rejects a specific one by push_id. Returns the list of pending requests, or the accept/reject confirmation status. |
set_privacy |
no_return_description |
Sets how much of a domain's WHOIS contact information is masked from public lookups. Returns the update confirmation status. |
set_whois_contacts |
name_restates_behavior params_unexplained no_return_description |
Assigns which contact records serve as a domain's registrant, admin, technical, and/or billing WHOIS contacts; any role left unspecified keeps its current contact. Returns the update confirmation status. |
set_forwarding |
no_return_description |
Redirects visitors of a domain to another URL, either via a standard 301/302 HTTP redirect or, with stealth=true, an iframe that keeps the domain's own URL visible under a custom page title. Returns the update confirmation status. |
set_renew_option |
no_return_description |
Sets whether a domain automatically renews at expiration, does not renew, or reverts to the account default. Returns the update confirmation status. |
lock_domain |
name_restates_behavior no_return_description |
Toggles a domain's clientTransferProhibited status to block or allow transfers to another registrar, guarding against unauthorized transfer attempts. Returns the update confirmation status. |
set_domain_note |
name_restates_behavior no_return_description |
Attaches a free-text note to a domain and/or moves it into an organizational folder. Returns the update confirmation status. |
set_parking |
no_return_description |
Activates Dynadot's placeholder parking page for a domain that has no active site or forwarding, optionally showing ads on the page. Returns the update confirmation status. |
set_hosting |
name_restates_behavior no_return_description |
Activates Dynadot's built-in web hosting for a domain, choosing between basic and advanced tiers, with an option to enable a mobile-optimized view on advanced hosting. Returns the update confirmation status. |
set_email_forward |
name_restates_behavior no_return_description |
Configures a domain's incoming mail to either forward to existing email addresses or route through custom MX records, selected via forward_type and indexed keys (username0/exist_email0, or mx_host0/mx_priority0) in params. Returns the update confirmation status. |
clear_domain_setting |
name_restates_behavior no_return_description |
Removes a previously configured service (forwarding, stealth, parking, hosting, DNS, or email forwarding) from a domain, reverting it to having no active service of that kind. Returns the update confirmation status. |
create_folder |
name_restates_behavior no_return_description |
Adds a new named folder that domains can later be organized into. Returns the new folder's ID. |
delete_folder |
name_restates_behavior no_return_description |
Removes a folder; this fails if any domains are still assigned to it. Returns the deletion confirmation status. |
list_folders |
name_restates_behavior no_return_description |
Retrieves every organizational folder set up in the account. Returns each folder's ID and name. |
set_folder_settings |
no_return_description |
Applies a default configuration (nameservers, DNS, forwarding, parking, stealth, hosting, email forwarding, or renewal option, chosen via setting_type with values in params) to a folder so every domain placed in it inherits the same setting. Returns the update confirmation status. |
rename_folder |
name_restates_behavior no_return_description |
Changes the display name of an existing folder without affecting the domains or settings assigned to it. Returns the update confirmation status. |
get_account_info |
no_return_description |
Looks up the Dynadot account's identity and configuration. Returns the username, email address, and account settings. |
get_account_balance |
no_return_description |
Checks how much account credit is currently available for domain purchases and renewals. Returns the current balance and its currency. |
set_account_defaults |
no_return_description |
Sets the account-wide default (WHOIS contacts, nameservers, DNS, parking, forwarding, stealth, hosting, email forwarding, or renewal option, chosen via setting_type with values in params) applied to new registrations that don't specify their own. Returns the update confirmation status. |
list_orders |
name_restates_behavior no_return_description |
Retrieves the account's full history of purchases, renewals, and transfers. Returns a list of past orders with their type, date, and status. |
get_order_status |
no_return_description |
Looks up how a specific past order is progressing. Returns that order's current status. |
check_processing |
name_restates_behavior no_return_description |
Checks whether the account has any operations (such as registrations or transfers) still being processed asynchronously, useful before assuming a prior action has finished. Returns the count/list of pending operations. |
list_coupons |
name_restates_behavior no_return_description |
Retrieves every coupon code currently available on the account for use with registrations or renewals. Returns each coupon's code, discount, and applicable conditions. |
get_auctions |
no_return_description |
Browses domain auctions that are currently accepting bids or already completed, with optional filter parameters. Returns a paginated list of auctions including domain name and current/final price. |
place_bid |
name_restates_behavior no_return_description |
Submits a bid on a domain currently up for auction, at the specified amount and currency. Returns the bid confirmation status. |
manage_backorders |
no_return_description |
Adds a request to automatically attempt to catch a domain if it becomes available, removes an existing backorder, or lists all backorders on the account, depending on action. Returns the backorder record or list accordingly. |
set_for_sale |
no_return_description |
Lists an owned domain for sale on the Dynadot marketplace at the given asking price. Returns the listing confirmation status. |
get_marketplace_listings |
no_return_description |
Browses domains for sale on the Dynadot marketplace, either all listings matching optional filter parameters or one specific listing by ID. Returns listing details including domain name and asking price. |
get_auction_details |
no_return_description |
Looks up a specific auction's current state, optionally including its full bid history. Returns the auction's domain, status, current price, and bids if requested. |
manage_backorder_auctions |
no_return_description |
Views open or closed backorder auctions, retrieves details on a specific one, or places a bid on it, depending on action. Returns the auction list, details, or bid confirmation accordingly. |
buy_expired_domain |
no_return_description |
Browses domains that expired into closeout at discounted prices, or purchases one directly by domain name. Returns the list of available domains, or the purchase confirmation status. |
buy_it_now |
no_return_description |
Immediately purchases a marketplace-listed domain at its fixed Buy It Now price, skipping the auction/bidding process. Returns the purchase confirmation status. |
confirm_marketplace_action |
name_restates_behavior params_unexplained no_return_description |
Accepts or rejects a pending marketplace action (such as a sale offer) relayed from an Afternic or Sedo integration for a specific domain. Returns the confirmation status of the action taken. |
Selection evidence
19 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
get_auctions |
get_auction_details |
medium | A request like 'get info on this auction' could route to either the list-with-filters tool or the single-auction-detail tool, especially if the agent conflates 'auction' generically without noting one needs an auction_id. |
manage_backorders |
manage_backorder_auctions |
high | Both are action-dispatch tools over backorders; 'list my backorders' or 'bid on a backorder' could plausibly be routed to either tool since one manages backorder requests and the other manages backorder auctions, and the naming barely distinguishes them. |
push_domain |
manage_domain_push |
high | A task like 'handle the domain push' is ambiguous between initiating a push (push_domain) and viewing/responding to incoming push requests (manage_domain_push), since both are literally about 'domain push' actions. |
register_domain |
bulk_register_domains |
medium | A task registering a single domain could be misrouted to the bulk tool if the agent assumes bulk_register_domains is the general-purpose registration entry point, though the singular vs plural/array schema difference mitigates this somewhat. |
register_nameserver |
list_registered_nameservers |
low | Different verbs (register vs list) make intent fairly clear, but an agent summarizing 'set up my nameserver' might briefly consider list_registered_nameservers to check existing state first — low true selection confusion for a write vs read action. |
set_nameservers |
set_nameserver_ip |
medium | 'Update the nameserver for my domain' is ambiguous between assigning a domain's nameserver list (set_nameservers) and updating a registered nameserver's own IP address (set_nameserver_ip), since both use 'set nameserver' phrasing. |
get_auth_code |
set_auth_code |
medium | A task like 'update the auth code for transferring my domain' could be misrouted to get_auth_code (which can generate a new code) instead of set_auth_code (which sets a specific provided code), since both deal with the same EPP code concept. |
get_account_info |
get_account_balance |
low | A vague request like 'check my account' could nominally hit either, but 'balance' and 'info' are distinct enough concepts that real confusion is unlikely except in very generic phrasing. |
get_domain_info |
get_account_info |
low | Both are 'get info' tools but operate on clearly different entities (domain vs account), so confusion would only arise from extremely vague prompts lacking a domain name. |
get_transfer_status |
get_order_status |
medium | 'Check the status of my domain transfer' could be routed to get_order_status if the agent treats the transfer as an order rather than using the dedicated get_transfer_status tool, especially if only an order ID vs domain name distinction is unclear from context. |
set_contact_regional_setting |
set_whois_contacts |
low | Both configure contact-related domain settings, but the regional-setting tool is for TLD-specific compliance fields while set_whois_contacts assigns contact IDs to roles — a task mentioning 'set contact info for my domain' leans clearly toward set_whois_contacts, limiting real ambiguity. |
set_domain_note |
clear_domain_setting |
low | Both modify domain settings but for very different purposes (adding a note/folder vs clearing a service); unlikely to be confused except in vague 'update domain settings' prompts. |
set_nameservers |
set_forwarding |
low | Both are domain 'set' operations but govern distinct, clearly-named services (nameservers vs URL forwarding), so genuine confusion is unlikely. |
set_nameservers |
set_dnssec |
low | Both are domain configuration 'set' tools but for distinct technical features (nameservers vs DNSSEC), unlikely to be confused given specific terminology. |
set_nameservers |
set_privacy |
low | Both are domain 'set' tools but for unrelated features (nameservers vs WHOIS privacy); minimal real confusion risk. |
get_dns |
get_dnssec |
low | 'Get DNS settings' could occasionally be misapplied to get_dnssec if a user conflates DNS and DNSSEC terminology, but the tools are otherwise clearly distinguished. |
add_nameserver |
delete_nameserver |
low | Opposite actions (add vs delete) on the same entity type are clearly distinguished by verb, so confusion is unlikely despite shared vocabulary. |
create_contact |
edit_contact |
low | Clear verb distinction (create vs edit) on the same entity type makes true confusion unlikely except in trivial cases. |
delete_domain |
delete_nameserver |
low | Both delete operations but on clearly different entities (domain vs nameserver), unlikely to be confused given explicit entity naming in typical requests. |
Compare the field