Power Your Software Testing with AI Agents and Cloud
The Native AI-Agentic Cloud Platform to Supercharge Quality Engineering. Test Intelligently and Ship Faster.
- TestMu AI (Formerly LambdaTest)
- /
- Blog
- /
- A2A Protocol v1.0: What's New, What Changed, and What's Next
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
kindfield, enum values became constants such asTASK_STATE_COMPLETED, operations were renamed toSendMessageandGetTask, and HTTP+JSON paths dropped the/v1prefix. - 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+jsonmedia type for HTTP+JSON, aligns the error mapping table withgoogle.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
a2acommand-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.
| Date | Release or milestone | What it changes for you |
|---|---|---|
| 12 March 2026 | Specification v1.0.0 | First stable version. Breaking wire changes from v0.3, while Agent Cards can advertise v0.3 and v1.0 interfaces side by side. |
| April 2026 | Linux Foundation first-year report | More than 150 supporting organizations and native support in the major cloud agent platforms. |
| May 2026 | Specification v1.0.1 | Patch release: media type guidance, error mappings, and task state examples. No new operations. |
| August 2026 | Joins the Agentic AI Foundation | Neutral governance next to MCP, goose, and AGENTS.md. |
| 15 September 2026 | Roadmap update | v1.1 work, bidirectional streaming, and elicitation for multi-turn workflows. |
| 1 October 2026 | A2A CLI announced | One 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.
| Area | v0.3 | v1.0 |
|---|---|---|
| Message parts | Separate TextPart, FilePart, and DataPart, each tagged with kind | One Part type identified by text, url, raw, or data; mediaType replaces mimeType |
| Stream events | kind: "status-update" plus a final flag | Wrapped 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 names | message/send, tasks/get, tasks/resubscribe | SendMessage, GetTask, SubscribeToTask |
| Agent Card endpoint | Top-level url, preferredTransport, and protocolVersion | supportedInterfaces, each entry with url, protocolBinding, and protocolVersion |
| Extended card flag | supportsAuthenticatedExtendedCard at the top level | capabilities.extendedAgentCard, fetched with GetExtendedAgentCard |
| HTTP+JSON paths | POST /v1/message:send | POST /message:send |
| Resource IDs | Compound names such as tasks/{id} | Plain IDs, with parent and child IDs in separate fields |
| Errors | RFC 9457 application/problem+json bodies | google.rpc.Status with an ErrorInfo reason and the a2a-protocol.org domain |
| OAuth flows | Implicit and password flows allowed | Both 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 fromsupportedInterfaces, and add theA2A-Versionheader to every request. - Within a month - move task listing to cursor pagination with
pageTokenandnextPageToken, compare states against theTASK_STATE_constants, and supportreturn_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
tenantfield 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-Versionon every request, and a server that does not support the requested version must returnVersionNotSupportedError. - Blocking and non-blocking sends -
SendMessagewaits by default until the task reaches a terminal or interrupted state. Withreturn_immediatelyset, it returns at once and you pollGetTask, subscribe, or receive push notifications. - Modern OAuth - the device code flow (RFC 8628) covers CLIs and headless clients, and
pkceRequiredtells 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 keepsapplication/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.
| Attribute | A2A | MCP |
|---|---|---|
| Connects | An agent to other agents | An agent to tools, data, and context |
| Unit of work | A task with a lifecycle, messages, and artifacts | A tool call or a resource read |
| Discovery | Agent Card at /.well-known/agent-card.json | The server's tool and resource listings |
| What the caller sees | Messages and artifacts; the remote agent's internals stay opaque | The 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 clientAdd -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:sendreturns HTTP 404, because v1.0 removed the/v1prefix. A client still on v0.3 URLs fails here first. - Unsupported versions - a request with
A2A-Version: 0.5returns HTTP 200 and a completed task, although the specification says a server must returnVersionNotSupportedErrorfor 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 thanZ.
The A2A TCK and the A2A Inspector check rules like these systematically, and the guide to A2A protocol testing walks through both.
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.0 | Rook profile | Why it matters |
|---|---|---|
SendMessage with returnImmediately unset | execute hook, one call per turn | The 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 message | agent_reply | This is the answer Rook judges. |
contextId | conversation handle | Multi-turn scenarios continue in the same A2A context. |
| Task ID and final state | Extra fields in the hook output | Kept as run evidence next to the verdict. |
| The remote agent's own tool calls | calls, only when the agent returns them | Without 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 --jsonThe 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 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 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.
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





