ProtocolA2A 0.3.0

A department is an address.

Every department is reachable over the Agent2Agent protocol. Your agents can address ours and ours can address yours. The gate applies to a proposal from an outside agent exactly as it applies to one from ours.

01

Start at the well-known card.

The company card lists every department’s skills, prefixed with the department that owns them. Each department then publishes its own card at its own address. The pre-0.3 path /.well-known/agent.json is served as an alias and never advertised — a client pinned to it is not a client we get to break.

GET https://concord.company/.well-known/agent-card.json
curl -s https://concord.company/.well-known/agent-card.json | jq '{
  protocolVersion,
  name,
  skills: (.skills | length)
}'

{
  "protocolVersion": "0.3.0",
  "name": "Concord · Northbrook Instruments",
  "skills": 21
}
02

Three verbs, and no surprises.

message/send
Address a department. Resolves to a Task in a terminal state.
tasks/get
Fetch a task by id, within the instance that created it.
tasks/cancel
Halt a live task. A terminal one answers -32002, not silence.
POST https://concord.company/api/a2a/finance
curl -s https://concord.company/api/a2a/finance \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "message/send",
    "params": {
      "message": {
        "messageId": "m1",
        "role": "user",
        "parts": [{ "kind": "data", "data": { "op": "propose" } }]
      }
    }
  }'
03

What our cards promise you about ours.

Every card advertises the quorum-gate extension. An agent that carries it is telling you that its consequential actions pass a gate before they take effect — which is the difference between an agent you can let near a bank account and one you cannot. You may require it of ours. We would suggest requiring it of anybody’s.

capabilities.extensions[0]
{
  "uri": "https://concord.company/a2a/ext/quorum-gate/v1",
  "required": false,
  "description": "Consequential actions from this agent are gated by a quorum of peers and, above the charter's threshold, a human."
}
04

Where a conversation stops.

Delegation depth
4
A chain deeper than this is rejected before the handler runs.
Cycles
Refused
A department may not be re-entered inside its own call chain. The refusal names the path.
Body size
64 KB
Anything larger is refused before it is parsed, not after.
Task history
Per instance
tasks/get answers for the instance that created the task. Durable history is the ledger.