The A2A stack for test-runner The planner, a client agent with a card cache and an interface choice, sits on top. Below it are the three protocol layers A2A defines for test-runner at localhost:41241: bindings with the paths /.well-known/agent-card.json, /a2a/jsonrpc and /a2a/rest, the operations, and the data model. Under a dashed line sits what test-runner builds itself: an HTTP router, a request handler, a task store and an event broadcast, and below them the opaque agent logic, where a real agent would also keep a model and tools. CLIENT AGENT you build it A2A PROTOCOL card and bindings operations data model A2A defines it TEST-RUNNER · LOCALHOST:41241 server agent logic its owner builds it planner card cache: agents by skill id interface: JSONRPC, version 1.0 /.well-known/agent-card.json the card, a plain GET GET the card /a2a/jsonrpc JSONRPC 1.0 /a2a/rest HTTP+JSON 1.0 POST SendMessage SendMessage · SendStreamingMessage · GetTask ListTasks · CancelTask · SubscribeToTask 4 push config operations · GetExtendedAgentCard AgentCard · Task · TaskStatus · Message · Part Artifact · TaskStatusUpdateEvent · TaskArtifactUpdateEvent HTTP router Handler routes 3 paths request handler Agent.send creates the task task store Agent.tasks in memory broadcast Agent.broadcast SSE and webhooks run_tests() agents.py model not in the kit Git, container not in the kit