Catalog PyPI
PACKAGE EXPLORERView in registry

a2a-doctor

PyPI

One command, every A2A audit - replay recorded streams offline and health-check agent-to-agent traffic: token tax, artifact loss, task lifecycle, context correlation, webhook SSRF, MCP collisions.

a2aagentagent2agentauditllmmcpofflinereplayssrftokenwebhook
Versions collected1
Direct dependencies0From release 0.4.0
Last observed20 Oct, 16:25 UTC

README

Version 0.4.0 documentation

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:

RepoWhat it audits
a2a-taxtoken cost of the agent card + polling model
a2a-stream-taxtoken cost of a recorded SSE stream
a2a-reconnect-taxreplayed-event tax across SSE reconnects
a2a-artifact-auditchunk gaps, duplicates, writes after last_chunk
a2a-task-state-audittask resurrection, illegal transitions, unknown states
a2a-context-auditempty IDs, context mutation, orphan contexts (A2A#1309)
a2a-webhook-auditwebhook SSRF: metadata IPs, credentials, risky ports (a2a-go#373)
a2a-timeline-replaytime-travel explorer — per-task timelines, event windows, raw JSON at any line
a2a-card-lockagent-card pin + drift gate
a2a-card-driftprotocol version sanity: MCP-date versions, 1.0 cards on pre-1.0 shape, snapshot diff (LiteLLM#30795)
a2a-fleet-comparefleet audit: duplicate skill ids, capability conflicts, version drift across agent cards (A2A#921, A2A#1377)
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 fleet card1.json card2.json [...]
                                  # fleet overlap & conflict 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.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.4.017 Oct 20260

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 16:25 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:05944b5e7b3eda7883dd41449de68f75342f4ed67966c1f2d34a316c9652ed91