Open specification · Draft 0

Prove which company sent an AI agent — and what it asked for.

Commissioned Agent Records is a proposed open standard built on Web Bot Auth. It lets any platform confirm, with certainty, that a named company commissioned an agent and that the agent made this exact request — backed by an independent, tamper-evident record.

  • Built on Web Bot Auth
  • Free to implement
  • Any company can run an operator

Animated demo. Sam at Halden & Co asks the company’s purchasing assistant to order £4,200 of paper. The agent signs the request, VerifiedProxy records a salted hash of it before it leaves, and Supplies Co checks the agent’s identity, Halden’s commission and the record, then accepts order SUP-88213. Sam then asks for £12,000 of desks. VerifiedProxy refuses to record it because it is over Halden’s £10,000 per-order limit, so the request is never sent.

What happens when an agent acts for a company
Illustrative. Halden & Co, Sam, Supplies Co and these domains are fictional.

Why it’s needed

Identity alone can’t tell you who is accountable.

AI agents now place orders, book travel and pull financial data on behalf of companies. Web Bot Auth — being standardised at the IETF — lets an agent prove which key signed a request. A platform needs to know more than that.

Question 1

Which key signed this request?

An HTTP message signature, checked against the agent’s published key.

Answered today by Web Bot Auth
Question 2

Which company commissioned this agent, and for what?

Who is accountable, what the agent may do, where, and up to how much.

Added by the commission
Question 3

Did it really make this request — and did anyone independent see it?

Evidence of the exact request that holds up in a dispute.

Added by the record

The idea

Three layers, each building on the one below.

Identity already exists. The commission and the record are what this standard adds — and the layers are separable, so a platform benefits from whichever it checks.

RecordNew in this standard
AnswersDid this agent really make this request, within scope?
ProofAn independent operator’s signed entry in an append-only log
CommissionNew in this standard
AnswersWhich company commissioned this agent, and for what?
ProofA document signed with the company’s domain key, served from its own domain
IdentityExists today: Web Bot Auth
AnswersWhich key signed this request?
ProofAn HTTP message signature checked against the agent’s published key

How it works

How one request is verified.

Before any request, the company publishes a commission on its own domain naming the agent’s key, its scope, an expiry date and the operator that holds its records.

Swipe to see the whole diagram →

Agentacts for halden.example VerifiedProxyrecord operator Platformsupplies.example halden.examplecommissioning company 1 sign request (Web Bot Auth) 2 record (request hash only) signed receipt 3 signed request 4 check signature 5 fetch commission + DNS commission and its operators 6 verify this request verified, in scope, with log proof
The record is written before the request leaves. Out-of-scope or revoked requests are refused — and never sent.
  1. Signed request. The agent signs with Web Bot Auth and puts a pointer to its commission inside the signed headers, so it can’t be swapped.
  2. Record. Before the request leaves, an independent operator records a salted hash of it — never its path or body.
  3. Send. The request reaches the platform carrying the agent’s signature.
  4. Identity check. Exactly as for any Web Bot Auth agent.
  5. Commission check. Fetched from the company’s own domain, signed with its key, naming this agent, within scope.
  6. Record check. One call to the operator named in the company’s DNS, returning a proof the platform verifies itself.

What the spec defines

Four small parts, built from standards you already use.

HTTP Message Signatures, JWS, DNS and a Certificate Transparency-style Merkle log. All free to implement; none requires VerifiedProxy.

01

The commission

A small JSON document, signed with the company’s domain key and served from its own domain. Remove it and it’s withdrawn.

{
  "commissioner": "halden.example",
  "agent_keys": ["kq3V…9xA"],
  "scope": {
    "sites": ["supplies.example"],
    "actions": ["create_order"],
    "limit": { "currency": "GBP",
               "per_order": 10000, "per_day": 25000 }
  },
  "valid_until": "2026-12-31T23:59:59Z",
  "record_operators": ["verifiedproxy.com"],
  "record_level": 2
}
02

Discovery

One DNS record says which operators may vouch for the company and where its signing keys live. An operator that isn’t listed can’t impersonate it.

_agent-commission.halden.example.  TXT
"v=ACR1; ops=verifiedproxy.com;
 keys=https://halden.example/
      .well-known/acr-keys.json"
03

The record

Written before the request leaves, into an append-only Merkle log with signed tree heads and independent timestamps. Three levels, chosen per commission:

LevelRecorded
1 · DestinationAgent, site and time
2 · CommitmentA salted hash of the signed request — the default. Proves the exact request; the operator never receives its path or body.
3 · Full contentThe full request, encrypted to the company’s own key
04

Verification

One API call returns verified, unknown, out of scope or revoked — plus an inclusion proof the platform checks against the public log.

POST /acr/v1/verify
{ "commission", "key_id", "nonce", "request_hash" }
→ { "status": "verified", "scope": …,
    "proof": …, "tree_head": … }

Trust model

Nobody has to be trusted blindly — including us.

The design assumes any party might misbehave, and makes each kind of misbehaviour impossible or detectable.

The company’s domain is the anchor

A commission only counts if it’s served from the company’s domain and signed with a key its DNS points to. Forged commissions and fake operators fail.

The operator is a witness, not an authority

Signed tree heads, inclusion proofs, consistency proofs, RFC 3161 timestamps and independent monitors make altering or backdating a record detectable.

Keys and requests can’t be reused

Short-lived keys, a nonce and expiry on every signature, replay detection and real-time revocation — revoke a commission and the next request is refused.

Privacy by default

The operator sees the site, time and declared action — never the path or body, and a per-request salt stops it testing guesses. One commission per platform, with IDs nobody can guess, keeps trading partners private.

Skipping the record only hurts the agent

A signed request with no record verifies as unknown. There’s no advantage in going around it.

Limits that add up

Per-order limits plus daily and lifetime caps the operator enforces across every order, atomically — so fifty orders just under the limit don’t slip through.

Open by design

One protocol. Many independent operators.

Like DMARC for email: an open standard published in DNS, with a market of operators around it. Companies choose their operator; platforms discover it automatically.

Swipe to see the whole diagram →

COMPANIESRECORD OPERATORSPLATFORMS halden.exampleops=verifiedproxy.com northwind.exampleops=verifiedproxy.com,ops-b… acme.exampleops=records.acme.example VerifiedProxyfirst operator Operator Bany conforming operator Self-operatedmarked as such to platforms supplies.exampleB2B procurement travel.examplebooking data.examplefinancial data portal Grey: a company names its operators in DNS (ops=).Blue: platforms discover them and verify.
  • Platforms never sign up with an operator. They read the company’s DNS record and call the operator it names. A new operator works with every platform from day one.
  • Companies choose — and can switch. List one operator or several; moving is a DNS change.
  • Anyone can run one. The operator’s job is fully specified. Self-operated records are allowed, and marked as such.
  • Platforms set their own bar. For example, accepting only certified operators.

The question a platform asks isn’t “do they use VerifiedProxy?” It’s “which company is accountable, and is there an independent witness?”

Adopting it

Value at every stage of adoption.

Platforms already verifying Web Bot Auth get identity with no new work. Companies get an audit trail even before any platform checks. Every platform that checks records makes commissioned agents more welcome everywhere.

Companies running agents

  • Publish a domain key and one DNS record
  • Sign a commission per agent
  • Choose an operator

Platforms

  • Verify Web Bot Auth as you may already do
  • Check the commission and scope
  • One call for the record, and check the proof

Agent builders

  • Add Agent-Commission to signed headers
  • Declare actions with Agent-Intent
  • Record before sending

Operators

  • Implement the record and verify APIs
  • Run an RFC 9162 log
  • Join the certified-operator programme

AI providers

Agents run in a provider’s cloud work too.

A commission vouches for everyone who can sign with its keys, so a key shared by all of a provider’s customers can’t be commissioned. Instead the provider gives each customer its own key, marked with the company it acts for (acr_principal), and writes the records itself. The identity layer shows the provider; the commission shows the company accountable.

VerifiedProxy

We’re building the first operator.

VerifiedProxy wrote this draft and runs the first implementation of it. The standard is free; operating it well is our business.

Our implementation covers all three record levels with a Certificate Transparency-style log; a local proxy that signs every request, records it first and blocks anything out of scope — opening HTTPS on the agent’s own machine, so we never decrypt traffic; an SDK for agents that call platforms directly; a reference verifier for platforms; and a governance console with instant revocation.

We aim to win on what an open market rewards: neutrality — we’re neither the AI provider nor the platform — and evidence-grade records. Once other operators exist, we intend to hand the certification programme to a neutral foundation.

Status

Draft 0 — and we want your input.

This is an early draft, published to start a conversation. We intend to bring it to the IETF Web Bot Auth working group, and we want it shaped by the people who would use it before then.

Where it’s going

  1. Draft 0 publishedSpecification and working implementation, open for comment.
  2. Community feedbackPlatforms, companies running agents, agent providers and would-be operators.
  3. IETF Web Bot Auth working groupBrought to the group as an Internet-Draft.
  4. Open reference implementationsVerifier and agent SDK published for anyone to use.
  5. More operators, certificationA second operator, then a certified-operator programme handed to a neutral foundation.

Open questions

  1. The name. “Commissioned Agent Records” and its headers are working names.
  2. One-key provider delegation. A single provider key plus a signed customer-account header, as an alternative to a key per customer.
  3. People, not just companies. Agent providers commissioning on a user’s behalf, with a different pseudonymous ID per platform.
  4. Declared actions. Whether Agent-Intent belongs here, and whether actions need a shared vocabulary.
  5. Key directories. Self-signatures for multi-tenant hosts, and rotating short-lived keys.
  6. Monitoring. Tree-head gossip and how platforms report inconsistencies.
  7. Certification. What certified operators must meet, and who runs the programme.

Help shape the standard.

Read the draft, try it against your platform or agents, and tell us what breaks, what’s missing and what you’d change. We especially want to hear from platforms, agent providers and anyone who would run an operator.

Download the PDF Join the discussion

25 pages · how it works, the trust model and the full Draft 0 specification