For the complete documentation index, see llms.txt. This page is also available as Markdown.

Publish Your Own

Publishing AgentRoot for a domain you own is three steps: host a zone file, add a DNS TXT record, verify resolution. After that, your domain's AI capabilities are discoverable by any tool that speaks the protocol.

Prerequisites

  • You own a domain.

  • You can publish a static file at https://<your-domain>/.well-known/agentroot.json (any web host).

  • You can edit DNS records at your registrar / DNS provider (e.g. Cloudflare, Route 53, Squarespace, GoDaddy).

The three steps

1

Step 1: Host a zone file

Create agentroot.json declaring whatever capabilities your domain offers. Refer to the Zone File Reference for the full schema.

A minimum viable zone with one skill record:

{
  "domain": "<your-domain>",
  "records": [
    {
      "type": "skill",
      "id": "my-skill",
      "name": "My First Skill",
      "description": "What this skill does in one sentence.",
      "skill_md": "https://<your-domain>/.well-known/skills/my-skill/SKILL.md"
    }
  ]
}

Save the file at:

<your-web-root>/.well-known/agentroot.json

Confirm it's reachable:

curl -sf https://<your-domain>/.well-known/agentroot.json | head

It must return HTTP 200 and Content-Type: application/json.

2

Step 2: Add a DNS TXT record

At your DNS provider, create a TXT record:

Field
Value

Name / Host

_agentroot

Type

TXT

Value

v=ar1 zone=https://<your-domain>/.well-known/agentroot.json

TTL

3600 (default is fine)

The full record is _agentroot.<your-domain>.

Some DNS UIs append the apex automatically (you enter _agentroot); others require the FQDN (_agentroot.your-domain.com). Check what your provider expects: getting this wrong is the most common publishing error.

Wait for DNS propagation (usually under a minute, occasionally up to your TTL).

3

Step 3: Verify resolution

Confirm the TXT record is published:

dig +short TXT _agentroot.<your-domain>

Expected output:

"v=ar1 zone=https://<your-domain>/.well-known/agentroot.json"

Then run the AgentRoot resolver end-to-end:

npx agent-root resolve <your-domain>

Expected: a JSON object containing your declared records. If the command errors with "no TXT record found" or "zone fetch failed", recheck the TXT value and the zone URL.

That's it. Done. Your domain's capabilities are now discoverable.

Alternative: inline mode (no zone file)

For domains with one or two capabilities, the entire record can live in the DNS TXT value (no web hosting needed). This is the pattern tokenized domains use to advertise a single skill plus a payment endpoint.

; Single capability inline
_agentroot.<your-domain>  IN  TXT  "v=ar1 type=mcp name=My\ Tools endpoint=https://<your-domain>/mcp transport=sse"

; Multiple capabilities = multiple TXT records on the same name
_agentroot.<your-domain>  IN  TXT  "v=ar1 skill=https://<your-domain>/.well-known/skills/my-skill/SKILL.md"
_agentroot.<your-domain>  IN  TXT  "v=ar1 type=payment id=my-pay endpoint=https://pay.<your-domain> protocols=mpp methods=tempo assets=USDC"

Inline records skip Step 1 (no zone file) and replace Step 2 (the TXT value carries the full record). See Zone File Reference → Inline mode for the full wire format and parsing rules.

Optional: submit to the agentroot.io directory

Submission is not required. Your zone resolves for any agent that knows your domain whether or not it appears in any directory. Submitting to agentroot.io only adds discoverability for agents browsing the catalog.

To submit, visit agentroot.io and use the submit flow to provide:

  • Your domain (apex)

  • Optional: a category / tags

  • Optional: contact email for verification follow-ups

The directory verifies your zone and indexes its records. Updates propagate hourly.

Optional: host SKILL.md files alongside your zone

If you advertised a skill record with skill_md, you also need to publish that file. The convention is:

For the SKILL.md format itself, see the Skills overview. Doma's published skills are good reference implementations:

Updating your zone

Resolvers cache zone fetches for the TXT record's TTL (default 3600s = 1 hour). To force a refresh:

  • Update the file at .well-known/agentroot.json.

  • Bump the TXT record TTL to a low value (e.g. 60s) before edits if you need fast iteration; restore to 3600 once stable.

What's next

Last updated