{"ok":true,"site":{"host":"dug.sh","url":"https://dug.sh/","type":"live","desc":"A command driven terminal for domain and network diagnostics. Every answer is a live query, labelled with how old it is.","tools":[{"name":"dug_dig","kind":"act","impl":"imperative","description":"every record type, or a single one. Runs live against the given target and renders the answer onto the page. Example: DIG example.com MX","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"},"type":{"type":"string","description":"a single record type to ask for, such as MX"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_prop","kind":"act","impl":"imperative","description":"agreement across the fixed resolver list. Runs live against the given target and renders the answer onto the page. Example: PROP example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_ttl","kind":"act","impl":"imperative","description":"remaining lifetime per record. Runs live against the given target and renders the answer onto the page. Example: TTL example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_ns","kind":"act","impl":"imperative","description":"root to tld to authoritative walk. Runs live against the given target and renders the answer onto the page. Example: NS example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_dnssec","kind":"act","impl":"imperative","description":"chain of trust, ds and dnskey. Runs live against the given target and renders the answer onto the page. Example: DNSSEC cloudflare.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_rdap","kind":"act","impl":"imperative","description":"registration data with status codes decoded. Runs live against the given target and renders the answer onto the page. Example: RDAP example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_watch","kind":"act","impl":"imperative","description":"domain and certificate expiry, computed now. Runs live against the given target and renders the answer onto the page. Example: WATCH example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_tls","kind":"act","impl":"imperative","description":"chain, validity spans, protocols. Runs live against the given target and renders the answer onto the page. Example: TLS example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a hostname"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_http","kind":"act","impl":"imperative","description":"headers, redirect chain, security headers. Runs live against the given target and renders the answer onto the page. Example: HTTP example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a hostname"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_trace","kind":"act","impl":"imperative","description":"dns, tcp, tls and ttfb timing. Runs live against the given target and renders the answer onto the page. Example: TRACE example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a hostname"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_mail","kind":"act","impl":"imperative","description":"mx, spf, dkim, dmarc and alignment policy. Runs live against the given target and renders the answer onto the page. Example: MAIL example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_spf","kind":"act","impl":"imperative","description":"include tree, against the ten lookup limit. Runs live against the given target and renders the answer onto the page. Example: SPF example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_ip","kind":"act","impl":"imperative","description":"reverse dns, asn, prefix, neighbours. Runs live against the given target and renders the answer onto the page. Example: IP 8.8.8.8","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"an ip address"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_asn","kind":"act","impl":"imperative","description":"prefixes and address space. Runs live against the given target and renders the answer onto the page. Example: ASN 13335","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"an as number, with or without the AS prefix"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_net","kind":"act","impl":"imperative","description":"address space grid, a /24 or smaller. Runs live against the given target and renders the answer onto the page. Example: NET 8.8.8.0/24","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a network in cidr form, a /24 or smaller"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_ping","kind":"act","impl":"imperative","description":"icmp echo, round trip time and packet loss. Runs live against the given target and renders the answer onto the page. Example: PING 1.1.1.1","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a hostname or an ip address"},"count":{"type":"string","description":"how many echoes to send, 1 to 10"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_route","kind":"act","impl":"imperative","description":"the hops between here and there, with reverse dns. Runs live against the given target and renders the answer onto the page. Example: ROUTE example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a hostname or an ip address"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_ports","kind":"act","impl":"imperative","description":"which tcp ports are open, closed or filtered. Runs live against the given target and renders the answer onto the page. Example: PORTS scanme.nmap.org 22,80,443","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a hostname or an ip address"},"ports":{"type":"string","description":"ports to try, comma separated, ranges allowed"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_vs","kind":"act","impl":"imperative","description":"two domains side by side. Runs live against the given target and renders the answer onto the page. Example: VS example.com github.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name, compared against `other`"},"other":{"type":"string","description":"the second domain name"}},"required":["target","other"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_src","kind":"act","impl":"imperative","description":"resolver list, cache ceilings, upstream health. Runs live against the resolver list and renders the answer onto the page. Example: SRC","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_me","kind":"act","impl":"imperative","description":"the address this request came from. Runs live against the given target and renders the answer onto the page. Example: ME","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_seo","kind":"act","impl":"imperative","description":"what a crawler reads: title, canonical, robots, structured data. Runs live against the given target and renders the answer onto the page. Example: SEO example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_aeo","kind":"act","impl":"imperative","description":"what an answer engine reads: llms.txt, markdown, content without js. Runs live against the given target and renders the answer onto the page. Example: AEO example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_og","kind":"act","impl":"imperative","description":"the share card, with the image fetched and measured. Runs live against the given target and renders the answer onto the page. Example: OG example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_webmcp","kind":"act","impl":"imperative","description":"tools for an agent in the page, and the mcp surface for one that isn’t. Runs live against the given target and renders the answer onto the page. Example: WEBMCP example.com","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"a domain name"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_help","kind":"act","impl":"imperative","description":"this list. Runs live against the given target and renders the answer onto the page. Example: HELP","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"dug_investigate","kind":"act","impl":"imperative","description":"Answer a question that takes more than one lookup, and build the case on the page while you do. You choose the commands and the order: this is your plan, not a preset. Each screen is left on the page, in sequence, under the question that produced it, so the person watching ends up with the evidence, not your summary of it. Prefer this over calling the single-command tools yourself whenever the person has described a symptom instead of naming a lookup, and whenever one answer won’t settle it. Steps use the same grammar as the other tools: a command name, {target} where the domain goes, and an optional second argument; each step runs once per target, in order. For example \"why is mail from this domain going to spam\" with steps [\"MAIL {target}\",\"SPF {target}\",\"DIG {target} MX\",\"RDAP {target}\"], or \"has my dns change taken effect\" with steps [\"PROP {target}\",\"TTL {target}\",\"NS {target}\",\"DNSSEC {target}\"]. A step naming a command that doesn’t exist is skipped and reported back to you; the rest still run.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"question":{"type":"string","description":"The question being answered, in the words the person would use. It becomes the heading the evidence is filed under. Not a restatement of the commands."},"targets":{"type":"array","items":{"type":"string"},"description":"The domains or hosts under investigation, bare names, one entry when there is one. The steps run against each in this order."},"steps":{"type":"array","items":{"type":"string"},"description":"The commands to run, in order, each a full command line such as \"MAIL {target}\" or \"DIG {target} MX\". Three to five is usually right: enough to be conclusive, few enough to read."}},"required":["question","targets","steps"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]}],"category":"Developer Tools","favicon":"/favicons/dug.sh.png","apiSurface":"spec","toolCount":27}}