Skip to main content

a2a-doctor

One command, every A2A audit in the family. Dumb math, honest numbers, zero dependencies.

tests PyPI License: MIT

pip install a2a-doctor
a2a-doctor check --card card.json --stream stream.jsonl

The umbrella entry point for the ZidoCode A2A audit suite:

Repo What it audits
a2a-tax token cost of the agent card + polling model
a2a-stream-tax token cost of a recorded SSE stream
a2a-reconnect-tax replayed-event tax across SSE reconnects
a2a-artifact-audit chunk gaps, duplicates, writes after last_chunk
a2a-task-state-audit task resurrection, illegal transitions, unknown states
a2a-context-audit empty IDs, context mutation, orphan contexts (A2A#1309)
a2a-webhook-audit webhook SSRF: metadata IPs, credentials, risky ports (a2a-go#373)
a2a-timeline-replay time-travel explorer — per-task timelines, event windows, raw JSON at any line
a2a-card-lock agent-card pin + drift gate
a2a-card-drift protocol version sanity: MCP-date versions, 1.0 cards on pre-1.0 shape, snapshot diff (LiteLLM#30795)
a2a-error-audit (vendored) error envelope hygiene: silent voids, missing messages, untyped error.data, failed tasks without a signal (a2a-rs#146, ADK#4309)

Each member works standalone. a2a-doctor runs them all in one pass and gives one verdict.

Install

pip install a2a-doctor   # or: copy the .py files (they are all stdlib-only)

Usage

$ a2a-doctor check --card card.json --stream stream.jsonl --lock a2a-card.lock
a2a-doctor check — 10 section(s)

  ✓ card       418 tok estimated
  ✓ polling    ~418 tok/task estimated
  ✓ stream     17 event(s) recorded
  ✗ artifacts  1 critical — event 14: write to 'a1' after last_chunk (artifact already closed)
  ✗ lifecycle  5 critical — line 7: task 'zombie-task' resumed after terminal state 'failed' -> 'working'
  ✓ reconnect  no replayed events
  ✓ lock       card unchanged — hash matches

  verdict: FAIL (artifacts, lifecycle)
$ echo $?
2

check is the CI gate: exit 0 clean, 1 warnings only, 2 critical findings.

Individual sections:

a2a-doctor tax card.json          # card size + $ estimate
a2a-doctor stream stream.jsonl    # token breakdown of a recorded stream
a2a-doctor reconnect stream.jsonl # replayed events across reconnects
a2a-doctor artifacts stream.jsonl # artifact integrity report
a2a-doctor lifecycle stream.jsonl # task state machine audit
a2a-doctor context stream.jsonl   # context/task correlation audit
a2a-doctor webhook stream.jsonl   # webhook SSRF audit (offline)
a2a-doctor timeline stream.jsonl  # time-travel explorer: per-task state chains
a2a-doctor card card.json         # protocol version drift audit
a2a-doctor errors stream.jsonl    # error envelope hygiene audit
a2a-doctor lock card.json a2a-card.lock  # drift check

Stream format

One JSON event per line — record your client's message/stream session, replay it anywhere, anytime. Deterministic: same input, same verdict, byte for byte.

Why

Auditing an A2A endpoint once is easy. Continuously — in CI, on every deploy — is the point. a2a-doctor exists so there is one command to wire into the pipeline, not six. MIT license.

Metadata

Release files for a2a-doctor 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for a2a-doctor 0.3.0
File Size Uploaded
a2a_doctor-0.3.0.tar.gz 34.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for a2a-doctor 0.3.0
File Interpreter ABI Platform
a2a_doctor-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 74.9 kB

Release files / a2a_doctor-0.3.0.tar.gz

Download URL a2a_doctor-0.3.0.tar.gz
Size 34.8 kB
Tags Source
SHA-256 checksum
How to use checksums
e8d223396ccd0c2bd7f83a319a32a51af505a3f5f43567fd32dc29c4a9e72bc7
BLAKE2b-256 checksum
How to use checksums
3b39dac4c659d8f0ec70a6604e469ab9d0b81fa919f4a4a8daee7b50b31e6bae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / a2a_doctor-0.3.0-py3-none-any.whl

Download URL a2a_doctor-0.3.0-py3-none-any.whl
Size 40.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
32ecea7e7a3e3212803b9e6e7d44289899fcf590b3b6683f0c2bb664f8ad3044
BLAKE2b-256 checksum
How to use checksums
33870cbd6c4f1fbb17c5ea52608cd786805e33787f1b4653890233ccfe7c3487
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.4.0

2 release files

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page