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
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:9443Inside the sandbox the agent sends to a peer by name, for example:
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.