01Safety
0.0 / 30
What changed in the harness
Selection accuracy 98→100, token cost up 10%, 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
19.6 / 30
13.9 / 20
11.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
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 |
Register a new domain name for a duration of 1-10 years and return the registration result status. Requires the domain name and duration in years; optionally provide a registrant contact ID, a currency for payment, and a coupon code for a discount. |
bulk_register_domains |
no_return_description |
Register up to 100 domains in a single call and return the registration status for each domain. Domains use default settings unless overridden; optionally provide a currency for payment and a coupon code for a discount. |
get_domain_info |
no_return_description |
Return detailed information about a domain, including its expiry date, nameservers, WHOIS contacts, privacy status, and lock status. Use this to check a domain's current registration state before renewing or modifying it. |
list_domains |
name_restates_behavior no_return_description |
Return a list of all domains in the Dynadot account with basic information such as domain name and status, so you can enumerate your portfolio and pick domains for renewal, DNS changes, or deletion. |
renew_domain |
name_restates_behavior no_return_description |
Extend an existing domain registration by 1-10 years and return the renewal status. Set price_check to true to only retrieve the renewal price without renewing; optionally apply a coupon code for a discount. |
delete_domain |
name_restates_behavior no_return_description |
Remove a domain during its grace period and return the deletion status. This action cannot be undone after the grace period expires, so only call it for domains you no longer want. |
restore_domain |
no_return_description |
Restore a recently deleted domain from the redemption grace period and return the restoration status so the domain becomes active again for registration use. |
push_domain |
name_restates_behavior no_return_description |
Transfer a domain to another Dynadot account using the recipient's push username and return the push status. Set unlock to true to unlock the domain first if it is currently locked. |
get_dns |
name_restates_behavior no_return_description |
Return all DNS records configured for a domain, including A, AAAA, CNAME, MX, TXT, and SRV records and their subdomains, so you can review the domain's current DNS configuration before editing it. |
set_dns |
no_return_description |
Set or append DNS records for a domain using Dynadot's DNS service and return the update status. Supports main records and up to 10 subdomains; pass Dynadot API3 set_dns2 parameters in the records map (e.g., main_record_type, main_record, subdomain0, sub_record_type0, sub_record0, ttl), and set add_dns_to_current_setting to '1' to append instead of overwrite. |
set_nameservers |
name_restates_behavior no_return_description |
Point a domain at hosting DNS by setting its nameservers and return the update status. Accepts up to 13 nameserver hostnames (e.g., 'ns1.example.com'). |
get_nameservers |
name_restates_behavior no_return_description |
Return the nameservers currently configured for a domain, so you can verify where a domain's DNS is delegated before changing nameservers. |
register_nameserver |
name_restates_behavior no_return_description |
Register a custom nameserver (glue record) by associating a hostname such as 'ns1.example.com' with an IP address and return the registration status, so delegated nameservers resolve correctly. |
get_dnssec |
name_restates_behavior no_return_description |
Return the DNSSEC (Domain Name System Security Extensions) settings configured for a domain, so you can review its current security configuration before enabling or disabling DNSSEC. |
add_nameserver |
no_return_description |
Add a new nameserver entry with the given hostname and IP address and return the result, so the domain can advertise additional nameservers. |
set_nameserver_ip |
no_return_description |
Point an existing registered nameserver to a new IP address and return the update status, so DNS queries for that host resolve to the updated server. |
delete_nameserver |
no_return_description |
Delete a registered nameserver by hostname, or delete all nameservers associated with a domain, and return the deletion status. Provide either host (exact nameserver) or domain (removes all of that domain's nameservers). |
list_registered_nameservers |
name_restates_behavior no_return_description |
Return all registered (custom) nameservers in the account, so you can inspect glue records and identify hosts to update or delete. |
create_contact |
params_unexplained no_return_description |
Create a new contact record for use with domain registrations and return the new contact ID. Required: name, email, phone_num (with country code, e.g., '+1.5551234567'), address1, city, state, zip_code, and country (e.g., 'US'). Optionally provide address2, organization (company name), and fax_num. |
delete_contact |
name_restates_behavior no_return_description |
Remove a contact record that is not in use by any domain and return the deletion status. Use list_contacts to find the contact_id first. |
list_contacts |
no_return_description |
Return all contacts in the account, or the details of a single contact when contact_id is provided. Use the returned contact_id values as the registrant_contact for register_domain. |
set_contact_regional_setting |
no_return_description |
Configure the region-specific contact settings required by certain TLD registries (EU, Latvia, Lithuania) for a contact and return the update status. Select the region ('eu', 'lv', or 'lt') and pass the registry-required parameters as key-value pairs. |
manage_cn_audit |
no_return_description |
Manage China (.cn) domain audit requests, which are required for .cn domain registration. Use action 'create' to start a new audit (passing the contact_id and audit parameters such as the required audit documents), or 'status' to check an existing one. Returns the audit status for 'status', and for 'create' returns confirmation with the new audit's details. |
set_reseller_verification |
name_restates_behavior params_unexplained no_return_description |
Update the WHOIS verification status of a reseller contact to record whether the contact's identity has been verified for WHOIS display. Provide the contact_id of the reseller contact and the status value to apply (e.g., verified/unverified). Returns a confirmation that the verification status was set. |
transfer_domain |
name_restates_behavior no_return_description |
Initiate an inbound domain transfer into your Dynadot account. Supply the domain name and the authorization/EPP code issued by the current registrar; optionally set registrant_contact to the contact ID to use as registrant and coupon for a discount. Returns confirmation and the transfer status once initiated. |
cancel_transfer |
name_restates_behavior no_return_description |
Cancel a pending inbound domain transfer to stop it from completing into your Dynadot account. Pass the domain whose transfer should be cancelled. Returns a confirmation that the transfer was cancelled. |
get_transfer_status |
no_return_description |
Check the current status of a domain transfer (e.g., pending, approved, rejected, cancelled) for the given domain. Returns the transfer status. |
get_auth_code |
no_return_description |
Retrieve the transfer authorization (EPP) code for the given domain; this code is required to move the domain to another registrar. Optionally set new_code to generate a new code instead of the existing one, and unlock_for_transfer to automatically unlock the domain. Returns the authorization code, and indicates whether a new code was generated and the domain unlocked. |
authorize_transfer_away |
no_return_description |
Approve an outgoing transfer of the given domain to the requesting registrar so the transfer can proceed. Returns a confirmation that the transfer away was authorized. |
set_auth_code |
params_unexplained no_return_description |
Set the authorization/EPP code for the given domain; this code is used as the secret when transferring the domain to another registrar. Provide the domain and the auth_code to assign. Returns a confirmation that the code was set. |
manage_domain_push |
no_return_description |
View or respond to incoming domain push requests from other Dynadot accounts. Use action 'list' to see pending requests, or 'accept'/'reject' with the push_id of a specific request to respond to it. For 'list', returns the pending push requests; for 'accept'/'reject', returns a confirmation of the outcome. |
set_privacy |
no_return_description |
Set WHOIS privacy for the given domain to control how much registrant contact info is publicly visible: option 'full' hides all info, 'partial' hides some, and 'off' shows all. Returns a confirmation that privacy was set. |
set_whois_contacts |
name_restates_behavior params_unexplained no_return_description |
Update the WHOIS contact information for the given domain by specifying contact IDs (saved contacts from your account) for the registrant, admin, technical, and/or billing roles; omitted roles are unchanged. Each contact_id must reference an existing contact. Returns a confirmation that the WHOIS contacts were updated. |
set_forwarding |
no_return_description |
Configure URL forwarding for the given domain so visitors are redirected to url. By default uses a 301 (permanent) redirect; set is_temporary to use a 302 (temporary) redirect, or stealth to embed the target in an iframe with an optional stealth_title. Returns a confirmation that forwarding was configured. |
set_renew_option |
no_return_description |
Set the auto-renewal behavior for the given domain: option 'auto' enables auto-renewal, 'donot' disables renewal, and 'reset' restores the default renewal setting. Returns a confirmation that the renewal option was updated. |
lock_domain |
no_return_description |
Lock or unlock the given domain for transfer protection. Locking enables clientTransferProhibited status to prevent unauthorized transfers; use lock 'lock' to enable the transfer lock or 'unlock' to disable it (default 'lock'). Returns a confirmation of the new lock state. |
set_domain_note |
name_restates_behavior no_return_description |
Attach a note to the given domain and/or move it into a folder to organize your domain list. Pass the note text and the target folder name or ID; either is optional. Returns a confirmation that the note/folder was updated. |
set_parking |
no_return_description |
Enable domain parking for the given domain so it shows a placeholder page. Optionally set with_ads to show ads on the parking page. Returns a confirmation that parking was enabled. |
set_hosting |
name_restates_behavior no_return_description |
Provision website hosting for the given domain using Dynadot's built-in hosting service. Select hosting_type 'advanced' or 'basic', and for 'advanced' optionally enable mobile_view for a mobile-optimized view. Returns a confirmation that hosting was configured. |
set_email_forward |
no_return_description |
Configure email forwarding for the given domain so mail sent to it is handled as configured. Use params with forward_type 'forward' and keys username0/exist_email0 to route to existing mailboxes, or 'mx' with mx_host0/mx_priority0 to set MX records. Returns a confirmation that email forwarding was set. |
clear_domain_setting |
name_restates_behavior no_return_description |
Remove a previously configured service setting from the given domain. Select the service to clear: 'forwarding', 'stealth', 'parking', 'hosting', 'dns', or 'email_forward'. Returns a confirmation that the setting was cleared. |
create_folder |
name_restates_behavior no_return_description |
Create a new folder in your Dynadot account for organizing domains. Provide the folder_name for the new folder. Returns the new folder ID. |
delete_folder |
no_return_description |
Delete the given folder from your Dynadot account. The folder must be empty (no domains assigned to it) or the deletion fails. Returns a confirmation that the folder was deleted. |
list_folders |
name_restates_behavior no_return_description |
List folders in your Dynadot account, used to organize domains. Returns the account's folders with their IDs and names. |
set_folder_settings |
no_return_description |
Apply default settings to the given folder so every domain inside it inherits them. Choose a setting_type from whois, ns, dns, dns2, forwarding, stealth, parking, hosting, email_forward, renew_option, or clear, and pass the Dynadot API parameters for that type via params. Returns a confirmation that the folder settings were applied. |
rename_folder |
name_restates_behavior no_return_description |
Rename an existing folder in your Dynadot account. Provide the folder_id of the folder and the new folder_name. Returns a confirmation that the folder was renamed. |
get_account_info |
no_return_description |
Retrieve details about your Dynadot account, including the username, email, and account settings. Returns the account information. |
get_account_balance |
no_return_description |
Check the current account balance available for domain purchases and renewals. Returns the available balance amount and its currency. |
set_account_defaults |
no_return_description |
Set default account settings for new domain registrations. Supports default WHOIS contacts, nameservers, DNS, parking, forwarding, stealth, hosting, email forwarding, and renewal options, with setting_type 'clear' removing existing defaults. Returns the type of default setting applied and whether the operation succeeded. |
list_orders |
name_restates_behavior no_return_description |
Retrieve the account's order history covering purchases, renewals, and transfers. Returns a list of orders with their IDs, types, dates, and statuses. |
get_order_status |
no_return_description |
Check the status of a specific order by its ID. Returns the order's current status and associated order details. |
check_processing |
name_restates_behavior no_return_description |
Determine whether the account currently has any pending or in-progress operations. Returns whether processing is active and a list of any pending operations. |
list_coupons |
name_restates_behavior no_return_description |
Retrieve the coupon codes available on the account, including their values and any expiration dates. Returns a list of usable coupons. |
get_auctions |
no_return_description |
List domain auctions, showing open (active) or closed (completed) auctions. Returns a list of auctions with their IDs, domains, and status. |
place_bid |
name_restates_behavior no_return_description |
Submit a bid for a domain at auction using the auction ID and the bid amount in the specified currency. Returns confirmation of the placed bid with its details. |
manage_backorders |
no_return_description |
Manage domain backorder requests by adding a new backorder, deleting an existing one, or listing all current requests. Returns the list of backorders for 'list' and a confirmation for 'add' and 'delete'. |
set_for_sale |
no_return_description |
List a domain for sale on the Dynadot marketplace with a specified asking price and currency. Returns confirmation and the marketplace listing details. |
get_marketplace_listings |
no_return_description |
View marketplace listings: lists all available domains, or returns details of a specific listing when a listing_id is provided. Returns the matching listings and their pricing. |
get_auction_details |
no_return_description |
Get detailed information about a specific auction, including auction status and, when include_bids is set, the full bid history. Returns the auction details and current bids. |
manage_backorder_auctions |
no_return_description |
View backorder auctions (open or closed), get details of a specific backorder auction, or place a bid on one. Returns the requested auction list, auction details including bids, or bid confirmation. |
buy_expired_domain |
no_return_description |
Browse and purchase expired closeout domains at discounted prices; use 'list' to see available domains and 'buy' to purchase one. Returns the list of available domains or the purchase confirmation. |
buy_it_now |
no_return_description |
Purchase a domain listed on the marketplace at its Buy It Now price in the specified currency. Returns confirmation and order details for the purchased domain. |
confirm_marketplace_action |
name_restates_behavior params_unexplained no_return_description |
Approve or reject a pending marketplace action for a specific domain originating from an Afternic or Sedo integration; specify the platform, the affected domain name, and the action to perform (e.g., 'accept' or 'reject'). Returns confirmation of the applied action. |
Selection evidence
11 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 task like 'get auction info' or 'show me auction status' is ambiguous: get_auctions lists auctions, while get_auction_details needs an auction_id and returns bid details; an agent may pick the generic 'get_auctions' for a details request. |
manage_backorders |
manage_backorder_auctions |
medium | Both tools handle 'backorders' with overlapping concepts; a task like 'manage my backorders' or 'deal with backorder auctions' could route to manage_backorders (add/delete/list requests) instead of manage_backorder_auctions (list/bid on backorder auctions), or vice versa. |
push_domain |
manage_domain_push |
medium | Both involve 'domain push'. 'Push a domain to Bob' clearly hits push_domain, but a task like 'handle my domain pushes' or 'respond to the incoming push' could misroute: push_domain pushes out, manage_domain_push lists/accepts/rejects incoming requests. |
push_domain |
transfer_domain |
medium | A task like 'transfer my domain to another account' is ambiguous: push_domain moves it between Dynadot accounts (by username), while transfer_domain brings it in from another registrar (with EPP code). Without specifying destination registrar, either could be chosen. |
get_transfer_status |
get_order_status |
medium | A user asking 'check the status of my transfer order' is ambiguous: get_transfer_status checks a domain transfer status, while get_order_status checks a specific order by ID. Both match 'transfer order status' phrasing. |
set_forwarding |
set_email_forward |
medium | A bare task like 'set up forwarding for example.com' is ambiguous between URL forwarding (set_forwarding) and email forwarding (set_email_forward). The names and descriptions only differ by 'email', so unqualified 'forwarding' requests can misroute. |
set_nameservers |
set_nameserver_ip |
medium | 'Update my nameserver' is ambiguous: set_nameservers assigns hostnames to a domain, while set_nameserver_ip changes the IP of an existing registered nameserver. Both descriptions start with set + nameserver and accept a hostname, so a user 'changing nameservers' may pick the wrong one. |
get_dns |
get_nameservers |
medium | 'Check the DNS for my domain' is ambiguous: get_dns returns DNS records (A, CNAME, MX, etc.), while get_nameservers returns the delegated hostnames. Users often say 'DNS' when they mean 'nameservers' and vice versa. |
get_auth_code |
set_auth_code |
low | Mostly verb-disambiguated, but confusion is plausible for 'regenerate/update my auth code': get_auth_code can generate a new code (new_code flag) while set_auth_code sets one explicitly, so a 'change my EPP code' task could hit either. |
register_domain |
bulk_register_domains |
low | Descriptions clearly split singular vs multi-domain, but a task like 'register a few domains' or 'register my domains' without an explicit list/count could route to register_domain when bulk_register_domains is intended, or vice versa. |
set_contact_regional_setting |
set_whois_contacts |
low | Both are 'set ... contact' tools. A task like 'set the contact settings for my .eu domain' could be read as assigning WHOIS contacts (set_whois_contacts) instead of the registry regional setting (set_contact_regional_setting); plausible only for region-specific .eu/.lv/.lt requests. |
Compare the field