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