Troubleshooting
DNS propagation, TTL, and common AID errors (1000–1005)
Troubleshooting
DNS propagation
- Try multiple resolvers:
dig @1.1.1.1 TXT _agent.<domain>,dig @8.8.8.8 .... - Check authoritative NS directly (from your registrar/host).
- Allow several minutes; some providers cache for longer.
TTL & caching
- Recommended TTL: 300–900 seconds.
- Clients may cache up to the DNS TTL.
- For testing, lower TTL temporarily; raise for production.
Common errors
- 1000 ERR_NO_RECORD:
_agent.<domain>TXT not found- Add at subdomain
_agent(not apex). Verify propagation.
- Add at subdomain
- 1001 ERR_INVALID_TXT: malformed record
- Required keys for new records:
v=aid2;uri=...;proto=<token>. - Legacy
v=aid1records remain accepted only for backward compatibility. - Use
proto(preferred) orp(shorthand), not both. - Remote URIs must be
https://and parseable.
- Required keys for new records:
- 1002 ERR_UNSUPPORTED_PROTO: unsupported
proto- Use a registered protocol token (see Protocols & Auth):
mcp,a2a,openapi,grpc,graphql,websocket,local,zeroconf,ucp.
- Use a registered protocol token (see Protocols & Auth):
- 1003 ERR_SECURITY: security policy violation
- DNSSEC failures, invalid local execution, disallowed scheme, failed PKA proof, or domain-binding policy rejection (see Domain-binding failures below).
- 1004 ERR_DNS_LOOKUP_FAILED: DNS/network timeout/failure
- Retry, try different resolver, increase client timeout.
- 1005 ERR_FALLBACK_FAILED: .well-known fetch failed/invalid
- Ensure
/.well-known/agentexists, returns JSON, and uses HTTPS.
- Ensure
PKA handshake failures (checklist)
For v2 records:
- Invalid key:
k/pkais not unpadded base64url or does not decode to a 32-byte Ed25519 public key keyidmismatch: headerkeyiddoes not equal the RFC 7638 JWK thumbprint derived fromk- Nonce mismatch: response
noncedoes not exactly match the client challenge - Timestamp skew:
created/expiresis missing, expired, or too far from the client clock - Covered fields mismatch: ensure the response signature covers
"@method";req,"@target-uri";req,"@authority";req, and"@status"
Domain-binding failures
domain-binding=require causes ERR_SECURITY in two cases:
- Unbound proof returned: the endpoint signed
aid-pka-v2with the base covered set, omitting"aid-domain";req. The endpoint may not support domain binding. Check whether the server implements the B.7 profile. Underdomain-binding=prefer(default), an unbound proof is accepted anddomainBoundin the result isfalse. - Endpoint refused with 403: the endpoint supports domain binding but does not serve the queried domain. This means the DNS record points to a different operator's endpoint — an unauthorized association. Verify that the
uriin the AID record belongs to the domain's own infrastructure.
To confirm whether an endpoint supports domain binding, send a manual PKA request with AID-Domain: <domain> and an Accept-Signature whose covered set includes "aid-domain";req (tag aid-pka-v2). If the response Signature-Input contains aid-pka with "aid-domain";req in the covered components, binding is supported. The aid-doctor CLI reports this as domain-bound in human output and as domainBound: true in JSON.
For legacy v1 compatibility records:
- Missing covered fields: ensure exactly
"AID-Challenge" "@method" "@target-uri" "host" "date" - Algorithm mismatch:
algmust beed25519 - Timestamp skew:
createdor HTTPDateoutside ±300 seconds keyidmismatch: headerkeyiddoes not equal recordkid(quotes allowed)- Invalid key:
pkanotz...base58btc or not 32‑byte Ed25519 public key
Quick checks
- CLI:
aid-doctor check <domain>oraid-doctor json <domain>. - Web: aid.agentcommunity.org/workbench.
- For comprehensive diagnostics, use the aid-doctor CLI which provides detailed validation, security checks, and PKA verification.