Extension Types
The A2A documentation highlights four common patterns you’ll see in the wild:- Data-only extensions: expose structured data in the Agent Card without altering request/response flow.
- Profile extensions: constrain or enrich existing message/task semantics (for example, requiring specific DataPart schemas or metadata-based sub-states).
- Method extensions (extended skills): add new RPC methods beyond the core protocol.
- State machine extensions: add new states or transitions to the task state machine.
Where Extensions Are Used in the Protocol
Extensions plug into A2A in a few standardized places:-
Agent Card declaration: Agents list
AgentExtensionentries insideAgentCapabilities.extensions, including a URI, description, and whether it is required. -
Request activation (service parameters): Clients indicate which extensions they want to use
via the
A2A-Extensionsservice parameter (e.g., an HTTP header with a comma-separated list of URIs). -
Message extensions: Messages can include an
extensionslist and extension-specific metadata. This allows strongly typed context on message sends and on TaskStatus messages. -
Artifact extensions: Artifacts can also include an
extensionslist and extension-specific metadata to describe generated content.
Activation and Negotiation
Extensions are off by default. A client activates them per request (for HTTP bindings, this is theA2A-Extensions header). Agents activate the subset they support and should echo the activated set
in the response. Unsupported extensions can be ignored for that request.
If an agent marks an extension as required, clients must activate and follow it; otherwise the
agent should reject the request.
Versioning and Compatibility
- Extension URIs should include a version identifier.
- Breaking changes require a new URI.
- If an unsupported version is requested, the agent should ignore it unless the extension is
required, and it must not silently fall back to another version.
Limits and Design Rules
Extensions must not change core data structures or add new enum values. Put additional attributes inmetadata and annotate semantics there.
Extension specs should document:
- The canonical URI(s)
- Schemas for
AgentExtension.params - Schemas for any extension data passed in messages or artifacts
- New RPC methods or request/response flows (if any)
- Dependencies on other extensions (and whether they are required)
Idiomatic Usage Patterns (Examples)
1) Declaring support in the Agent Card
2) Activating an extension for a request
3) Annotating artifacts
4) Profile-style metadata on TaskStatus
Profile extensions often express “sub-states” or stricter semantics by adding metadata to theTaskStatus.message.