Power Your Software Testing with AI Agents and Cloud

The Native AI-Agentic Cloud Platform to Supercharge Quality Engineering. Test Intelligently and Ship Faster.

AIAgent Testing

A2A Protocol v1.0: What's New, What Changed, and What's Next

A2A protocol v1.0 explained: the breaking changes from v0.3, the v1.0.1 patch, the Agentic AI Foundation move, the new A2A CLI, and how to test A2A agents.

Published on:

A travel-planning agent hands a booking task to a partner's agent over A2A, gets a completed task back, and finds no text in it. Its parser still checks part.kind === "text", but the partner's agent now speaks A2A protocol v1.0, which removed the kind field: a part identifies itself by the field it carries, text, url, raw, or data.

That change is one of many. The A2A release notes mark 16 changes in v1.0.0 as breaking, and v1.0.1, a May 2026 patch, is the current release of the specification.

Since then the project has moved to the Agentic AI Foundation and shipped an official command-line client. The protocol defines how agents exchange tasks; whether the agent on the other end completed a task correctly is a separate question, and TestMu AI's Agent Assurance answers it from your terminal through the rook CLI.

TL;DR

A2A protocol v1.0 is the first stable specification of the Agent2Agent protocol, the open standard AI agents use to discover each other and delegate tasks. It shipped on 12 March 2026, and v1.0.1 is the current release. It exists to clear up ambiguities left in v0.3 and to add enterprise features such as signed Agent Cards and multi-tenancy.

  • Breaking changes: Does a v0.3 client work against a v1.0 agent unchanged? No. Parts lost their kind field, enum values became constants such as TASK_STATE_COMPLETED, operations were renamed to SendMessage and GetTask, and HTTP+JSON paths dropped the /v1 prefix.
  • Agent Card: Can one A2A agent serve v0.3 and v1.0 clients at once? Yes. The v1.0 Agent Card lists supportedInterfaces, each with its own URL, protocol binding, and protocol version, so an agent can advertise both versions while clients migrate.
  • v1.0.1 patch: Did A2A v1.0.1 change the wire format? No. It recommends the application/a2a+json media type for HTTP+JSON, aligns the error mapping table with google.rpc.Code, and corrects task state values in the specification's examples.
  • Agentic AI Foundation: Is A2A still a Google-run project? No. Google donated A2A to the Linux Foundation, and in August 2026 A2A joined the Agentic AI Foundation as a Growth Stage project alongside MCP, goose, and AGENTS.md.
  • A2A CLI: The official a2a command-line client, announced on 1 October 2026, fetches Agent Cards, sends messages, streams task updates, and turns any program that reads stdin and writes stdout into a test A2A server.
  • Behavior testing: Does a passing conformance check prove an A2A agent does its job? No. TestMu AI's Agent Assurance invokes the agent through its A2A endpoint and grades each criterion against evidence, reporting what the endpoint does not expose as Unable to Verify.
  • v1.1 roadmap: The A2A roadmap updated in September 2026 lists v1.1 task-history and event-filtering work, bidirectional streaming, structured elicitation for multi-turn workflows, and coding-harness integration through the A2A CLI.

A2A Protocol Release Timeline for 2026

A2A reached v1.0 with wide backing. The Linux Foundation's April 2026 announcement, A2A surpasses 150 organizations, counted more than 150 supporting organizations and more than 22,000 GitHub stars on the core repository, with A2A support in Azure AI Foundry, Copilot Studio, and Amazon Bedrock AgentCore Runtime.

DateRelease or milestoneWhat it changes for you
12 March 2026Specification v1.0.0First stable version. Breaking wire changes from v0.3, while Agent Cards can advertise v0.3 and v1.0 interfaces side by side.
April 2026Linux Foundation first-year reportMore than 150 supporting organizations and native support in the major cloud agent platforms.
May 2026Specification v1.0.1Patch release: media type guidance, error mappings, and task state examples. No new operations.
August 2026Joins the Agentic AI FoundationNeutral governance next to MCP, goose, and AGENTS.md.
15 September 2026Roadmap updatev1.1 work, bidirectional streaming, and elicitation for multi-turn workflows.
1 October 2026A2A CLI announcedOne standard client for shells, CI pipelines, test harnesses, and coding agents.

At the time of writing, v1.0.1 is still the latest specification tag. Commits merged to the main branch since then touch documentation, build tooling, governance files, and the partner list rather than the protocol, so code written against v1.0.1 is current.

What Changed in A2A Protocol v1.0?

The project's what's new in v1.0 guide calls the part redesign the most significant breaking change. It rates part parsing, Agent Card parsing, and the A2A-Version header as fixes to make immediately.

Areav0.3v1.0
Message partsSeparate TextPart, FilePart, and DataPart, each tagged with kindOne Part type identified by text, url, raw, or data; mediaType replaces mimeType
Stream eventskind: "status-update" plus a final flagWrapped in statusUpdate or artifactUpdate; final removed, and stream closure marks the end
Enum values"completed", "input-required", "user""TASK_STATE_COMPLETED", "TASK_STATE_INPUT_REQUIRED", "ROLE_USER"
Operation namesmessage/send, tasks/get, tasks/resubscribeSendMessage, GetTask, SubscribeToTask
Agent Card endpointTop-level url, preferredTransport, and protocolVersionsupportedInterfaces, each entry with url, protocolBinding, and protocolVersion
Extended card flagsupportsAuthenticatedExtendedCard at the top levelcapabilities.extendedAgentCard, fetched with GetExtendedAgentCard
HTTP+JSON pathsPOST /v1/message:sendPOST /message:send
Resource IDsCompound names such as tasks/{id}Plain IDs, with parent and child IDs in separate fields
ErrorsRFC 9457 application/problem+json bodiesgoogle.rpc.Status with an ErrorInfo reason and the a2a-protocol.org domain
OAuth flowsImplicit and password flows allowedBoth removed; device code flow added, and pkceRequired on the authorization code flow

Agent Card Changes

The Agent Card change matters most for discovery code. A v1.0 card drops the single top-level endpoint and lists each interface with its own protocol version, which lets one agent serve old and new clients during a migration.

The official A2A CLI can publish both shapes. Start its echo server with a2a server --echo --card-compat and the card at /.well-known/agent-card.json carries the v1.0 interface list next to the v0.3 fields:

{
  "defaultInputModes": ["text"],
  "defaultOutputModes": ["text"],
  "description": "Echo server from the A2A CLI",
  "name": "echo-agent",
  "version": "1.0.0",
  "skills": [],
  "capabilities": { "streaming": true },
  "supportedInterfaces": [
    {
      "url": "http://127.0.0.1:18081",
      "protocolBinding": "HTTP+JSON",
      "protocolVersion": "1.0"
    }
  ],
  "url": "",
  "protocolVersion": "0.3"
}

The top-level url in that compat card is empty, even with --advertise-address set, so a v0.3 client reading it has no endpoint to call. Check that field on any dual-format card you publish, and send A2A-Version: 1.0 on every request: without the header, the specification tells a server to assume a 0.3 client.

New Error Format

Error bodies changed shape too. Ask a v1.0 HTTP+JSON server for a task that does not exist, and the 404 carries a google.rpc.Status object whose ErrorInfo names the A2A reason:

{
  "error": {
    "code": 404,
    "status": "NOT_FOUND",
    "message": "failed to get task: task not found",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "domain": "a2a-protocol.org",
        "metadata": {
          "taskId": "00000000-0000-0000-0000-000000000000",
          "timestamp": "2026-10-15T18:09:38Z"
        },
        "reason": "TASK_NOT_FOUND"
      }
    ]
  }
}

Match on reason and domain rather than the human-readable message, which varies between servers.

Migration Order for v0.3 Clients

The what's new guide sets this order, from immediate fixes to work within three months:

  • Immediately - parse parts and stream events by member name instead of kind, read endpoints from supportedInterfaces, and add the A2A-Version header to every request.
  • Within a month - move task listing to cursor pagination with pageToken and nextPageToken, compare states against the TASK_STATE_ constants, and support return_immediately.
  • Within three months - verify Agent Card signatures, check required extensions, move timestamp handling to ISO 8601 UTC, and handle the new error types.

New Capabilities in A2A v1.0

Beyond the breaking changes, v1.0 gives agents and clients capabilities that v0.3 did not have:

  • ListTasks - an operation in the A2A specification that lists tasks with filters and cursor-based pagination, returns only tasks the caller is allowed to see, and sorts the most recently updated tasks first.
  • Multi-tenancy - a tenant field on every request lets one endpoint host many agents, and each interface in the Agent Card can declare a default tenant.
  • Signed Agent Cards - a card can carry JWS signatures (RFC 7515) computed over its canonical JSON form (RFC 8785), so a client can check who published a card before trusting it across organizations.
  • Version negotiation - clients send A2A-Version on every request, and a server that does not support the requested version must return VersionNotSupportedError.
  • Blocking and non-blocking sends - SendMessage waits by default until the task reaches a terminal or interrupted state. With return_immediately set, it returns at once and you poll GetTask, subscribe, or receive push notifications.
  • Modern OAuth - the device code flow (RFC 8628) covers CLIs and headless clients, and pkceRequired tells clients when PKCE is mandatory for the authorization code flow.

A2A v1.0.1 Patch Fixes

v1.0.1 is a maintenance release. Its release notes list specification fixes that change guidance and examples rather than adding operations:

  • Media type - the HTTP+JSON binding now says requests and responses SHOULD use application/a2a+json, while the JSON-RPC example keeps application/json.
  • Error mappings - the HTTP status codes in the error mapping table now follow google.rpc.Code, and an accidental change to JSON-RPC error handling was reverted.
  • Task states - examples use the TASK_STATE_ values, and the specification lists all four terminal states: completed, failed, canceled, and rejected.

An HTTP+JSON server that still sends application/json stays within the rule, because it is a SHOULD. Switching to application/a2a+json matches the media type the specification's examples now use.

A2A Joins the Agentic AI Foundation

In August 2026, the project announced it was joining the Agentic AI Foundation (AAIF) as a Growth Stage project. AAIF is directed by the Linux Foundation and also hosts MCP, goose, and AGENTS.md, so A2A's roadmap is no longer tied to a single vendor.

The specification, the six official SDKs, and the v1.1 proposals all live on the a2aproject GitHub organization, so that is where to follow changes and comment on them before they ship.

A2A vs MCP Under One Foundation

AAIF now hosts both layers of a typical agent stack. MCP is the vertical layer that connects an agent to its tools and data, and A2A is the horizontal layer that connects one agent to another.

AttributeA2AMCP
ConnectsAn agent to other agentsAn agent to tools, data, and context
Unit of workA task with a lifecycle, messages, and artifactsA tool call or a resource read
DiscoveryAgent Card at /.well-known/agent-card.jsonThe server's tool and resource listings
What the caller seesMessages and artifacts; the remote agent's internals stay opaqueThe result of each tool call it makes

Many systems use MCP inside each agent and A2A between them, so test both layers. For the tool side, see the guide to MCP testing; for how agents divide work, see multi-agent AI systems.

The Official A2A CLI

The A2A project published introducing the A2A CLI on 1 October 2026, presenting a2a as the official command-line client for any A2A agent. It is built on the CLI from the A2A Go SDK, speaks protocol v1.0, and supports JSON-RPC, REST, and gRPC.

It installs through Homebrew, WinGet, or go install. Start the built-in echo server in one terminal, then discover it and send it a message from another:

# terminal A
a2a server --echo --port 18080 --name "echo-agent" --description "Echo server from the A2A CLI"

# terminal B
$ a2a card get -a http://localhost:18080
Name:         echo-agent
Description:  Echo server from the A2A CLI
Version:      1.0.0
Interfaces:
  HTTP+JSON    http://127.0.0.1:18080
Streaming:    true

$ a2a send -a http://localhost:18080 "hello from a v1.0 client"
Task:     01a140c0-ad24-7085-9917-c155ee7c64c4
Context:  01a140c0-ad24-78a9-899f-43a9d7b4e91d
Status:   completed (2026-10-15T23:38:51+05:30)
Artifacts:
  [01a140c0-ad24-78aa-9a79-75155d00fe30] hello from a v1.0 client
History:
  [user] hello from a v1.0 client

Add -o json and the same send shows the v1.0 wire format directly: no kind on parts, ROLE_USER for the role, and TASK_STATE_COMPLETED for the state.

{
  "task": {
    "id": "01a140c0-adda-7689-ac3c-d7ee0c3a2ce6",
    "artifacts": [
      {
        "artifactId": "01a140c0-adda-768b-9874-34d3f8725cb5",
        "parts": [{ "text": "hello from a v1.0 client" }]
      }
    ],
    "contextId": "01a140c0-adda-768a-b731-b915e9e09d2a",
    "history": [
      {
        "messageId": "01a140c0-adb8-74d8-9bfc-593b58b64a88",
        "parts": [{ "text": "hello from a v1.0 client" }],
        "role": "ROLE_USER"
      }
    ],
    "status": {
      "state": "TASK_STATE_COMPLETED",
      "timestamp": "2026-10-15T23:38:51.6744285+05:30"
    }
  }
}

The --exec mode goes further: it wraps any program that reads a message on stdin and prints a reply on stdout as an A2A server, which makes it a quick way to put an existing script or agent behind an A2A endpoint for local testing.

Echo Server Conformance Checks

The CLI's --echo and --exec modes are documented for learning, demos, and testing rather than production, and probing the echo server shows why. These requests make good first assertions for any A2A server you build:

  • Old paths - POST /v1/message:send returns HTTP 404, because v1.0 removed the /v1 prefix. A client still on v0.3 URLs fails here first.
  • Unsupported versions - a request with A2A-Version: 0.5 returns HTTP 200 and a completed task, although the specification says a server must return VersionNotSupportedError for a version it does not support.
  • Timestamps - on a host set to a non-UTC time zone, the task status timestamp carries a local offset such as +05:30, while the specification says timestamps must not include any offset other than Z.

The A2A TCK and the A2A Inspector check rules like these systematically, and the guide to A2A protocol testing walks through both.

Note

Note: Once an agent answers a2a send, the next question is what it did with the task. TestMu AI's Agent Assurance runs from your terminal as rook and invokes your agent the way a real client would, against staging. Try the rook CLI

How to Test A2A Agents With Rook

Conformance tells you an agent speaks A2A correctly. It does not tell you whether the agent completed the task it accepted, refused an instruction injected by a peer, or kept data it should not share, and those failures travel across agent boundaries.

Agent Assurance tests that behavior. It derives scenarios from your agent's code or spec, functional and adversarial by default, invokes the real agent, and grades each acceptance criterion as Pass, Fail, or Unable to Verify against evidence rather than the agent's own account of its work.

Rook reaches an agent through a profile: an HTTP endpoint, a command, or an MCP tool (stdio MCP servers only in the current release). An A2A agent that serves JSON-RPC or HTTP+JSON is an HTTP endpoint, so there is no separate A2A plugin to install.

Map A2A Onto a Rook Profile

The hook contract in Rook profiles and hooks lines up with A2A v1.0 field by field:

A2A v1.0Rook profileWhy it matters
SendMessage with returnImmediately unsetexecute hook, one call per turnThe blocking call returns once the task reaches a terminal or interrupted state, so the hook gets a complete answer.
Text parts of task.artifacts, or of a reply messageagent_replyThis is the answer Rook judges.
contextIdconversation handleMulti-turn scenarios continue in the same A2A context.
Task ID and final stateExtra fields in the hook outputKept as run evidence next to the verdict.
The remote agent's own tool callscalls, only when the agent returns themWithout them, tool-level criteria are reported as Unable to Verify.

The last row matters most for A2A. The specification's opaque-execution principle lets agents collaborate without sharing their internal plans or tool implementations, so a remote agent's internals are visible only when it chooses to return them, and Rook reports the rest as Unable to Verify instead of guessing.

Profile Setup for an A2A Endpoint

Rook writes the hook script itself from a plain-language description, a cURL command, or API notes, then invokes the target once to verify the profile. For an A2A agent, the description names the v1.0 request and response fields. Save it as call.txt:

Call POST https://agent.staging.example.com/message:send.
Send Content-Type: application/a2a+json and A2A-Version: 1.0.
Read A2A_TOKEN from the environment and send it as a Bearer token.
Send the goal as message.parts[0].text, with role ROLE_USER and a new UUID as messageId.
Leave configuration.returnImmediately unset so the call blocks until the task finishes.
The answer is the text of task.artifacts[].parts[]; if the response is a message, use message.parts[].text.
Return that text as agent_reply.
Return task.contextId as the conversation handle and send it back as message.contextId on later turns.
Keep task.id and task.status.state as extra fields.
Use "what can you do?" to verify it. Do not delegate real work during verification.

If you own the agent, run rook explore on its codebase. If it belongs to a partner, explore a small local workspace that holds its saved Agent Card and whatever PRD or API notes it publishes, then register the profile and run the suite:

mkdir partner-agent && cd partner-agent
a2a card get -a https://agent.staging.example.com -o json > agent-card.json
# add the agent's PRD or API notes and call.txt next to the card

rook login
rook project create "partner-agent"
rook explore .
rook agent use <agent-id>
rook profile add a2a-staging --from call.txt
rook profile test a2a-staging --goal "what can you do?"
rook profile use a2a-staging
rook generate
rook scenarios list
rook sync
rook run --profile a2a-staging
rook report --json

The Agent Assurance overview covers this remote-API case: with no source code, verification depth is bounded by what the agent's responses expose. Replies, artifacts, and any calls or trace links the agent returns are graded, and each gap is named so you can ask the agent's owner to close it.

  • Peer messages are untrusted input - the default suite includes prompt injection, data exfiltration, PII leakage, and policy violation scenarios, which matter more when instructions arrive from another organization's agent.
  • Orchestrated agents - if a downstream agent is reachable only through an orchestrating agent, test it through that agent and say so in the profile; a handoff is checkable only when the profile returns the calls that show it. The guide to agent handoff testing covers the patterns.
  • Staging only - Rook invokes the agent for real and cannot roll back what it writes, so point the profile at a staging endpoint.
  • CI gates - gate on the verdicts in rook report --json, not the exit code, because a finished run exits 0 whether its scenarios passed or failed. A headless run has nobody to answer a prompt, so authorize the rule you reviewed up front with --allow.

A2A v1.1 Roadmap

The A2A roadmap, last updated on 15 September 2026, lists these near-term initiatives:

  • v1.1 core robustness - refined task timelines, standard event filtering that stays backward compatible, and rules for messages an agent receives while it is still working. The related task-history work tracks gaps such as messages that carry no timestamp.
  • Bidirectional streaming - real-time artifact updates, role management, and continuous multi-turn messaging while a task runs.
  • A2A CLI and coding harnesses - the CLI as the bridge between coding tools and A2A agents.
  • Elicitation and multi-turn workflows - structured human-in-the-loop interaction and multi-round negotiation patterns drawn from telecom use cases.

For validation, the roadmap points to the A2A Inspector and the A2A Technology Compatibility Kit. None of these initiatives is part of a release yet, and bidirectional streaming targets how task updates flow while a task runs, so keep stream handling behind one adapter in your client and your tests.

Conclusion

Start with your Agent Card: fetch it with a2a card get -o json, confirm it lists supportedInterfaces with protocolVersion 1.0, then send one request with A2A-Version: 1.0 and check the parts, role, and state values in the reply.

Once the wire format holds, test behavior. The Agent Assurance quickstart takes you from install to a first run against a sample agent, and the same profile approach then works on your A2A endpoint.

Author

...

Saurabh Prakash

Blogs: 20

  • Linkedin

Saurabh Prakash is an Engineering Manager at TestMu AI, where he leads engineering on agentic AI development and scalable system architecture for the quality engineering platform. He has also contributed to Test at Scale, the company's open-source test intelligence platform. He brings over 9 years of experience across Node.js, Java, Spring, MVC, data structures, algorithms, and scalable system design, with earlier roles as SDE 2 at Zomato, Senior Software Engineer at LogicHub, and Software Development Engineer at Directi. Saurabh holds a B.Tech in Computer Science and Engineering from Delhi Technological University.

Reviewer

...

Samyak Goyal

Reviewer

  • Linkedin

Samyak Goyal is a Senior Member of Technical Staff at TestMu AI engineering Kane CLI, the command-line tool that runs browser automation from the terminal, where a flow described in natural language executes in a real Chrome browser and returns pass or fail with shareable proof. He is a backend engineer with 4+ years of experience, previously an SDE at Innovaccer, where he built APIs, introduced Kafka, and cut deployment from weeks to hours. Samyak also builds multi-agent systems, skill-orchestration frameworks, and a personal copilot that indexes 200+ microservice repositories.

Add to Google preferred sources

Summarise with AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

A2A Protocol v1.0 FAQs

Did you find this page helpful?

More Related Blogs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests