a2a-contract-test
a2a-contract-test validates an A2A-style agent card and a recorded task
lifecycle transcript without contacting the declared agent endpoint.
At a Glance
| Job | Gate a static agent card and recorded lifecycle against a practical contract profile. |
| Built for | Agent developers, integration engineers, and CI owners exchanging A2A-style tasks. |
| Differentiator | Offline, dependency-free checks with a redacted transcript in the report. |
| Produces | Markdown or JSON findings, pass state, and a replayable redacted transcript excerpt. |
Install
python -m pip install "a2a-contract-test==0.1.5"
Verified Quickstart
Run from a source checkout:
a2a-contract-test run \
--agent-card examples/passing_agent/agent-card.json \
--format json \
--out /tmp/a2a-contract-report.json
When --transcript is omitted, the CLI reads contract-transcript.json next to
the agent card. The bundled passing fixture returns passed: true with zero
findings. The failing fixture returns exit code 1.
Contract Profile
The v1 profile checks:
- required agent-card fields, semantic-version-like version text, and HTTP(S) endpoint shape;
- capabilities, input/output modes, streaming declarations, and JSON content type disclosure;
- submitted, progress, and terminal lifecycle states;
- stable task IDs, JSON request/result shape, cancellation evidence, structured errors, and unsupported-capability negotiation.
The report is considered passing when no high or critical findings exist. Medium findings remain visible and do not fail the profile.
GitHub Action
Pin the published Action to its immutable release commit:
- uses: auraoneai/a2a-contract-test@a8aeb3e6c2495a0e2b3b47e6c349c2b7628f620c # v0.1.5
with:
agent-card: contracts/agent-card.json
transcript: contracts/contract-transcript.json
output: a2a-contract-report.md
See docs/github-action.md for a complete workflow and
input behavior.
Runtime, Data, and Network Boundary
- The CLI reads local JSON files only. It does not send requests to the endpoint declared in the card.
- Transcript redaction masks secret-like keys and strings containing
sk-...orpypi-...; it is not a comprehensive PII scrubber. - Reports can preserve task payloads, results, IDs, and non-secret metadata, so sanitize recordings before use.
- Passing this profile does not establish interoperability with a live agent, protocol compliance, reliability, or security.
Limitations
- The profile checks one practical offline contract shape, not the full space of A2A implementations or future protocol revisions.
- A passing report cannot prove that a live agent honors the same behavior once network transport, authentication, and runtime state are involved.
Compatibility
The published auraone-agent-studio-open CLI declares
a2a-contract-test>=0.1.0 as a runtime dependency and exposes the profile
through agentstudio a2a.
This project is not an official A2A compliance suite and is not affiliated with the Linux Foundation or an A2A standards body.
Publication Status
Verified on 2026-07-13:
- PyPI:
a2a-contract-test==0.1.5 - GitHub Action release:
v0.1.5 - The Action and PyPI package share release
0.1.5; the Action installs the package source from its checked-out immutable commit. - Bundled cards and transcripts are synthetic fixtures.
Next Action
Capture one sanitized task lifecycle, store it beside the matching agent card, and add the pinned Action as a pull request gate.
Metadata
Release files for a2a-contract-test 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| a2a_contract_test-0.1.5.tar.gz | 10.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| a2a_contract_test-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.3 kB
Release files / a2a_contract_test-0.1.5.tar.gz
| Download URL | a2a_contract_test-0.1.5.tar.gz |
|---|---|
| Size | 10.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
35ab645f7375dee6e48ec5144dbba0696d5b211cd6841cc5e7795b8f7ba0cb6a
|
|
BLAKE2b-256 checksum How to use checksums |
22f17eab4fbfdafb88a40ffb66e6ddcc24c1ca19279ec9ae9a88179c33ff4fb0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / a2a_contract_test-0.1.5-py3-none-any.whl
| Download URL | a2a_contract_test-0.1.5-py3-none-any.whl |
|---|---|
| Size | 9.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
afa4195b93aea67cd48ffd820a6a3bbcbe8f6cc03315889fce00cb947c46e658
|
|
BLAKE2b-256 checksum How to use checksums |
4c35a5b394006c753ce9f84315e72067a0eb928cf11b9fc9ca658a3e37ab4d56
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|