A2A extension v1
This URI identifies an Agent2Agent (A2A) protocol extension. An agent that declares it reports harness errors as harness error objects:
https://agenterrors.org/ext/a2a/v1
This page summarizes the A2A binding in the editor's copy of the draft. If they differ, the draft is authoritative.
Declaring the extension
Declare the extension in the Agent Card with required set to false. Agents still report errors in the base A2A form, so clients that do not support the extension keep working.
"capabilities": {
"extensions": [
{ "uri": "https://agenterrors.org/ext/a2a/v1", "required": false }
]
}
Task failures
When a task ends because of a harness error, the status message carries a text part with the detail text and a data part with the harness error object. The task state depends on the code:
| Harness error code | Task state |
|---|---|
harness.cancelled | canceled |
policy.model_refusal, policy.guardrail_triggered, policy.content_filtered | rejected |
| all other codes | failed |
Conditions that let the task continue, such as waiting for human approval or credentials, use input-required or auth-required and are not reported as harness errors.
Example
{
"id": "task-123",
"status": {
"state": "failed",
"message": {
"role": "agent",
"parts": [
{ "kind": "text", "text": "Stopped after reaching the 50-turn limit." },
{ "kind": "data", "data": {
"type": "https://agenterrors.org/problems/harness-error",
"title": "Maximum Turns Exceeded",
"code": "loop.max_turns_exceeded",
"origin": "harness",
"retryable": false,
"limit": { "name": "turns", "value": 50, "observed": 50 }
} }
]
}
}
}
Delegating agents
An agent that delegates to a remote agent reports the remote failure as upstream.agent_failed and places the received object in causes. Each agent wraps the received object instead of rewriting it, so the original code and origin stay visible at the outermost level.