Open-source reference implementation of the Agent Name Service (ANS) The Agent Name Service project published `ans`, an open-source reference implementation of a registry and transparency log that assigns AI agents versioned DNS-style names such as `ans://v1.0.0.my-agent.example.com` and backs each registration with an append-only Merkle log, SCITT COSE_Sign1 receipts, and private-CA identity certificates for mTLS between agents. The release ships four binaries — `ans-ra` (Registration Authority, port 18080), `ans-tl` (Transparency Log, port 18081), `ans-verify` (offline CLI verifier) and `ans-dns` (dev-only authoritative DNS server, port 15353) — and requires Go 1.26+, openssl, curl and jq to build via `make build`. The project states the wire shape (event envelope, SCITT COSE receipts, sumdb-note checkpoints and `/root-keys` format) is a public contract that offline verifiers and TL clients depend on byte-for-byte. ans is an open-source implementation of the Agent Name Service ANS , a registry + transparency log for discovering and verifying AI agents by name. Every registered agent gets: - A versioned DNS-style name: ans://v1.0.0.my-agent.example.com - A publicly-auditable event history append-only Merkle log - SCITT COSE Sign1 receipts proving the agent's state at a point in time - Identity certificates signed by a private CA for mTLS between agents - Optional BYOC server certificates + pinned TLSA records The wire shape — event envelope, SCITT COSE receipts, sumdb-note checkpoints, /root-keys format — is the public contract. Offline verifiers and TL clients depend on it byte-for-byte. | Binary | Port | Role | |---|---|---| | ans-ra | 18080 | Registration Authority — accepts registrations, issues identity certs, tracks lifecycle | | ans-tl | 18081 | Transparency Log — durable Merkle-tree append log, serves badges + receipts | | ans-verify | — | Offline CLI verifier for SCITT COSE receipts and status tokens | | ans-dns | 15353 | Dev-only authoritative DNS server with install / clear subcommands for local end-to-end verify-dns testing | Both daemons ans-ra , ans-tl serve Swagger UI at /docs — browse http://localhost:18080/docs http://localhost:18080/docs RA and http://localhost:18081/docs http://localhost:18081/docs TL after make build && scripts/demo/start.sh . The raw OpenAPI bytes live at /docs/openapi.yaml on each host. To call protected endpoints from Swagger UI's "Try it out" button: click Authorize in the top-right and paste the static API key. The quickstart defaults are: - RA: ans-dev-key-change-me from config/ra-local.yaml - TL: tl-internal-key from config/tl-local.yaml The RA writes signed events; the TL verifies, ingests, and publishes them. An operator can run just the TL for read-only verification or both together full registry . For a native Ubuntu host with systemd, Caddy, OIDC, and Let’s Encrypt, see the RA/TL deployment guide https://github.com/agentnameservice/ans/blob/main/deploy/ubuntu/README.md . Prereqs: Go 1.26+, openssl, curl, jq git clone https://github.com/agentnameservice/ans cd ans make build builds bin/ans-ra, bin/ans-tl, bin/ans-verify, bin/ans-dns scripts/demo/start.sh starts both daemons against ./data/demo scripts/demo/run-lifecycle.sh registers an agent, verifies the receipt end-to-end Expected output last few lines : ━━━ 13. Offline verify bin/ans-verify ━━━ ✓ Fetched 2 verification key s from /root-keys ✓ 1602 bytes Content-Type: application/scitt-receipt+cose ✓ VERIFIED kid <8-char-hex matched key directly Tear down with scripts/demo/stop.sh or scripts/demo/stop.sh --clean to wipe the data directory. The default DNS verifier in config/ra-local.yaml is noop , which accepts any DNS state. To exercise the real lookup verifier end-to-end without touching public DNS, run the bundled authoritative server: In one terminal: start the dev DNS server serves ./data/demo/dns bin/ans-dns serve --addr 127.0.0.1:15353 In another: install the records the RA expects after verify-acme bin/ans-dns install --api-key