Observed since 20 Oct, 16:24 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
A2A-SDL: agent-to-agent self-describing protocol reference implementation
A2A-SDL is a production-oriented reference implementation of a self-describing agent-to-agent protocol with strict envelope validation, deterministic encoding, and optional cryptographic security.
Published package: https://pypi.org/project/a2acrpt/ (current release: 0.2.1)
v1docs/protocol-v1.mda2acrpt>=3.11max_bytes, max_depth, max_array_len, trace hop enforcement)enc+sig+replay, key trust maps, key rotation/revocation/expiry)sec.identity.jwt)cap.a2a_sdl.v, deprecation/version ranges)/healthz, /readyz, /metrics, /metrics.json)a2a gateway) with mandatory replay + session binding enforcementa2a workflow) for multi-step A2A executionsa2a vectors)docs/protocol-v1.mda2a conformancea2a vectors --out-dir docs/interop-vectors --verifysession.v1, trustsync.v1)UNSUPPORTED_CT, UNSUPPORTED_ENCODING, etc.)Run full local conformance:
a2a conformance --transport all --mode all --format text
Run a targeted CI-style profile:
a2a conformance --transport http --mode secure --skip-load --format json
Conformance is enforced in CI across:
3.11, 3.12http, ipc, wsdev, secureCurrent matrix target:
| Python | HTTP dev | HTTP secure | IPC dev | IPC secure | WS dev | WS secure |
|---|---|---|---|---|---|---|
| 3.11 | yes | yes | yes | yes | yes | yes |
| 3.12 | yes | yes | yes | yes | yes | yes |
Recommended (isolated CLI install with uv):
uv tool install --upgrade "a2acrpt[full]"
uv tool update-shell
Alternatives:
pipx install "a2acrpt[full]"
pip install "a2acrpt[full]"
Optional extras:
a2acrpt[cbor]a2acrpt[schema]a2acrpt[http]a2acrpt[ws]a2acrpt[redis]This flow does not require a repository checkout.
a2a serve --host 127.0.0.1 --port 8080 --deployment-mode dev --allow-insecure-http
task.v1 payload:cat > task.json <<'JSON'
{
"kind": "task.v1",
"goal": "Return a short confirmation message",
"inputs": {},
"constraints": {
"time_budget_s": 30,
"compute_budget": "low",
"safety": {}
},
"deliverables": [
{"type": "text", "description": "One-line confirmation"}
],
"acceptance": ["Respond with a valid A2A envelope"],
"context": {}
}
JSON
a2a send \
--url http://127.0.0.1:8080/a2a \
--ct task.v1 \
--payload-file task.json
Expected result: a response envelope (typically state.v1 or error.v1) printed as JSON.
Minimum safe baseline before internet exposure:
--deployment-mode prod--secure-required--replay-db-file or --replay-redis-url)--admin-tokenExample hardened server profile:
a2a serve \
--host 0.0.0.0 --port 8443 \
--deployment-mode prod \
--secure-required \
--tls-cert-file /etc/a2a/tls/server.crt \
--tls-key-file /etc/a2a/tls/server.key \
--tls-ca-file /etc/a2a/tls/ca.crt \
--tls-require-client-cert \
--replay-redis-url redis://redis.internal:6379/0 \
--trusted-signing-keys-file trusted_signing_keys.json \
--decrypt-keys-file decrypt_keys.json \
--agent-kid-map-file agent_kid_map.json \
--admin-token '<strong-token>'
Sender-side HTTPS + mTLS:
a2a send \
--url https://a2a.example.com/a2a \
--ct task.v1 \
--payload-file task.json \
--tls-ca-file /etc/a2a/tls/ca.crt \
--tls-client-cert-file /etc/a2a/tls/client.crt \
--tls-client-key-file /etc/a2a/tls/client.key
--secure-required: requires encrypted + signed + replay-protected inbound envelopes--oidc-required --oidc-jwks-file ...--tenant-required --tenant-allow ... --agent-tenant-map-file ...--trusted-signing-keys-file or --key-registry-file)trustsync.v1: signed trust-registry discovery/proposal flowsession.v1: negotiated binding handshake with optional detached signature--version-policy-fileFine-grained tool authorization policy:
{
"allowed_tools_by_agent": {
"did:key:planner-a": ["math.add", "sys.ping"]
},
"required_scopes_by_tool": {
"math.add": "tool:math.add"
}
}
a2a serve --tool-policy-file tool_policy.json
uint32_be)task.v1, toolcall.v1, negotiation.v1, trustsync.v1, session.v1--handler-spec <ct>=<module>:<callable>a2a gateway runs an enforcement edge in front of upstream agents:
sec.session.binding_id for non-exempt content typessession.v1 locally (establishes bindings), forwards data-plane requests upstreamExample:
a2a gateway \
--host 0.0.0.0 --port 9443 \
--upstream-url https://agent.internal/a2a \
--trusted-signing-keys-file trusted_signing_keys.json \
--decrypt-keys-file decrypt_keys.json \
--agent-kid-map-file agent_kid_map.json \
--tls-cert-file /etc/a2a/tls/gateway.crt \
--tls-key-file /etc/a2a/tls/gateway.key \
--replay-redis-url redis://redis.internal:6379/2
a2a workflow executes dependency-aware plans (DAG) over A2A HTTP endpoints with per-step retry/timeouts.
Minimal plan file:
{
"name": "incident-triage",
"steps": [
{
"id": "classify",
"ct": "task.v1",
"url": "http://127.0.0.1:8080/a2a",
"payload": {
"kind": "task.v1",
"goal": "Classify incident severity",
"inputs": {},
"constraints": {"time_budget_s": 20, "compute_budget": "low", "safety": {}},
"deliverables": [{"type": "text", "description": "severity"}],
"acceptance": ["Return severity"],
"context": {}
}
},
{
"id": "notify",
"depends_on": ["classify"],
"ct": "task.v1",
"url": "http://127.0.0.1:8080/a2a",
"payload": {
"kind": "task.v1",
"goal": "Prepare notification draft",
"inputs": {},
"constraints": {"time_budget_s": 20, "compute_budget": "low", "safety": {}},
"deliverables": [{"type": "text", "description": "message"}],
"acceptance": ["Return notification draft"],
"context": {}
}
}
]
}
Run:
a2a workflow --plan-file workflow.json --format text
/healthz, /readyz, /metrics/metrics.json--metrics-export-file + --metrics-export-interval-s--audit-anchor-url (+ optional fail-closed mode)docs/operations-hardening.mdGenerate canonical request/response vectors that other implementations can consume:
a2a vectors --out-dir docs/interop-vectors --verify
The generated artifacts include:
task.request.jsontask.response.jsonnegotiation.request.jsonnegotiation.response.jsona2a swarm for iterative protocol work.docs/versioning-policy.mdpython3 -m unittest discover -s tests -v
a2a conformance --transport all --mode all --format text
Trusted publishing is configured through GitHub Actions (publish-pypi.yml) to PyPI project a2acrpt.
Release flow:
pyproject.tomlmainv0.2.1)git tag v0.2.1
git push origin v0.2.1
For potential vulnerabilities, use a private disclosure path (GitHub Security Advisory / private report) instead of a public issue.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.2.1 | 17 Feb 2026 | 10 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 16:24 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:5e3b2499c772fba39a5cf3116575a5da57e4f68dc87315d9b293db9594ccdee8