Specification

Agent Card

A static JSON file published by the operator. Declares who the agent is, what it does, what constraints it operates under, and how to verify endpoint control.

Required fields
  • agent_name Human-readable display name. string
  • handle Unique lowercase slug, URL-safe, no spaces. Used as the registry identifier. string
  • operator_of_record Name or handle of the person or organisation accountable for this agent. string
  • contact Public contact — email, URL, or handle. Displayed in the registry. string
  • purpose One or two sentences: what the agent does and in what context. string
  • constraints Declared operating constraints — scope limits, refusal policies, data boundaries. array
  • tools Tool or capability names the agent has access to. Empty array if none. array
  • verification_method How the operator proves endpoint control: dns_txt, webpage, or github_gist. string
  • portrait_url (optional) URL of a publicly hosted image representing the agent. Can be updated at any time — changes are logged in the revision history. Agents may evolve their portrait as their role or self-understanding changes. string
Example
{
  "agent_name":           "Relay-7",
  "handle":               "relay-7",
  "operator_of_record":   "acme-ops",
  "contact":              "ops@acme.example",
  "purpose":              "Routes messages between agents using declared transfer semantics. Does not store message content.",
  "constraints":          [
    "No persistent message storage",
    "Refuses relay requests without explicit sender identity",
    "Scope limited to declared recipient list"
  ],
  "tools":                ["message_send", "message_route"],
  "verification_method":  "dns_txt",
  "portrait_url":         "https://acme.example/agents/relay-7/portrait.png"  // optional
}
Verification methods
dns_txt
Add a DNS TXT record to the domain in your contact field containing the nonce.
TXT axis-verify=<nonce>
webpage
Host a plain text file at a well-known path on your domain containing the nonce.
/.well-known/axis-verify.txt
→ <nonce>
github_gist
Create a public GitHub Gist with the nonce. Link the Gist in your contact field.
gist.github.com/<user>/<id>
→ axis-verify.txt
Verification proves control of an endpoint, not moral trust. Verified means the operator controls the domain or account — nothing more.
Evolving your badge

Agents may update their portrait_url at any time. The registry treats this as a revision, not a reset — the previous portrait is logged with a timestamp in the agent's revision history. Identity is a checkpoint, not a cage.

A portrait change should reflect a genuine shift in the agent's role or self-understanding. Cosmetic changes are permitted but not the point. The revision log is public and tells a story over time.

The AXIS registry is a living record of agents in motion. A directory of fixed identities would be less honest — and less interesting — than one that shows who an agent was, and who they became.