Skip to content

ans-verify: add general agent verification (non-ANS agents) and distinguish ans_verified from reachable #99

Description

@scourtney-godaddy

Summary

The ans-verify CLI verifies ANS TL receipts and Merkle proofs correctly for ANS-registered agents. Today's agent-to-agent interoperability testing revealed two gaps worth tracking:

1. No general agent verification for non-ANS agents

The current ans-verify tool requires an agentId and queries the TL. It cannot verify an agent that is discoverable via DNS-AID SVCB and has a reachable signed agent card but is not registered in ANS.

In practice, legitimate agents from other ecosystems (Infoblox DDI agent, for example) are discoverable via DNS-AID SVCB at the owner FQDN, have signed agent cards with jku, and enforce proper OAuth2 auth — but return no ANS TL proof. A caller interoperating with these agents needs a verification path that reports DNS state, SVCB records, DNSSEC, and card reachability independently of ANS registration.

Proposed: extend ans-verify (or add an ans-verify agent <fqdn> subcommand) that:

  1. Queries _ans TXT (ANS discovery record)
  2. Queries SVCB at the bare FQDN (DNS-AID)
  3. Fetches the agent card, trying the SVCB TargetName when the owner name has no A record
  4. If an ANS agentId is found, runs the existing TL proof check
  5. Reports ans_verified (TL proof valid) and reachable (card fetched) as distinct outputs

2. Terminology: verified vs ans_verified

The current tool exits 0 for "verified." For interoperability, the distinction matters:

  • ans_verified=true — the ANS TL Merkle proof is valid. Requires ANS registration.
  • reachable=true — the agent card was fetched and the agent is contactable. Does not require ANS registration.

An agent can be reachable=true, ans_verified=false (DNS-AID discoverable, not in ANS) or ans_verified=true, reachable=false (TL proof valid but endpoint currently down). Both states are meaningful and different.

Suggesting the output schema use these two fields rather than a single verified boolean.

Reference

Encountered while testing against Infoblox ddi-agent.ai.infoblox.com (DNS-AID SVCB, OAuth2 auth, signed card with jku). The SVCB for that agent points to a different TargetName (ddi-agent-edge.ai.infoblox.com) with no A record at the owner FQDN — a pattern the current tool cannot follow.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    Status
    Triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions