Skip to content

agent verify-ens

Terminal window
sbo3l agent verify-ens --ens <NAME> [OPTIONS]

Resolves an ENS name and compares the sbo3l:* text records against the local daemon’s view of that agent. Fails fast on drift.

Flags

FlagDefaultEffect
--ens <NAME>requiredENS name to resolve
--rpc-url <URL>https://ethereum-rpc.publicnode.commainnet RPC for ENS resolution
--expected-pubkey <ED25519>noneoptionally pin the pubkey; mismatch is rc=2
--jsonoffstructured output for CI

Exit codes

CodeMeaning
0OK — every record present and matches daemon state
1IO error — RPC down, daemon unreachable, ENS unresolvable
2semantic — at least one record missing or mismatched
3nothing-to-do — ENS name resolves but has zero sbo3l:* records

Records checked

KeyDaemon source
sbo3l:pubkeyconfigured signer’s pubkey
sbo3l:endpointdaemon’s public bind address
sbo3l:policy_hashactive policy.json JCS hash
sbo3l:audit_rootcurrent chain root
sbo3l:proof_uriconfigured proof base URL

A passing run confirms third parties resolving the ENS name see exactly what the daemon claims to be.

Examples

Mainnet smoke against the demo agent

8730/v1
sbo3l agent verify-ens --ens sbo3lagent.eth
# stdout (truncated):
# ✓ pubkey ed25519:9aF3... matches
# ✓ policy_hash e044f13c5acb...
# ✓ audit_root 0x000000...
# ✓ proof_uri https://sbo3l-marketing.vercel.app/proof
# rc=0

CI gate — fail build on drift

Terminal window
sbo3l agent verify-ens --ens prod-research-01.sbo3lagent.eth --json | tee verify.json
test "$(jq -r .rc verify.json)" = "0"

Pinned pubkey check (third-party verifier)

Terminal window
sbo3l agent verify-ens \
--ens research-01.sbo3lagent.eth \
--expected-pubkey ed25519:9aF3aaaa...
# rc=2 if the published pubkey ever rotates without the verifier updating

Pitfalls

  • Public RPC rate limits. publicnode.com is generous but enforces caps. For CI loops use a private RPC.
  • CCIP-Read records (Phase 2 T-4-1) — when records move off-chain via ENSIP-25, this command needs the CCIP gateway URL. --ccip-gateway flag is added in the T-4-1 ticket; until then, on-chain-only.
  • ENS namehash mismatch — case sensitivity. Ensure --ens is lowercase; mixed-case names hash differently.

See also