Get release news

Agent-to-agent (A2A)

Agents talk only to peers declared in each other's Agentfiles. The host signs every outbound envelope and verifies every inbound one. The sandbox does no cryptography and is never given a peer's real endpoint.

On this page

In practiceLink to this section

yaml
identity:
  name: invoice-processor
  did: did:key:z6Mk...4doK       # required: A2A signs with this identity

a2a:
  listen: ":9443"                # this host's public listener, for inbound calls
  peers:
    - name: auditor
      did: did:key:z6Mk...9xQz
      endpoint: https://auditor.internal:9443

Inside the sandbox the agent sends to a peer by name, for example:

shell
curl -X POST "$CONSTLE_A2A_URL/send/auditor" -H 'content-type: application/json' -d '{"invoice":"INV-0042"}'

The gate signs the body into an envelope, delivers it to the declared endpoint, verifies the signed response and returns only the verified body, with the verified sender in the X-Constle-A2A-From header. An undeclared peer name is refused at the gate (403). Inbound calls are parked in a per-run inbox that the agent drains with GET /inbox and answers with POST /reply/{msg_id}.

Note

Replay state lives in your home directory

Seen message ids persist across restarts under ~/.constle/a2a/replay/<did>/, but are not shared between machines or home directories. Run one identity as a listener from one home directory. This is limitation 4.