# A2A conformance (/docs/a2a/conformance)



The Nylorun Runtime serves A2A 1.0 on the JSON-RPC binding, for every Agent it
serves over A2A. It passes the A2A TCK, apart from the failures listed with
each release's results. This statement holds from `@nylorun/runtime`
0.37.0-beta.

## What is served [#what-is-served]

| Area of A2A 1.0    | Served                                                                                                                                                                                                                                                                          |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Binding            | JSON-RPC 2.0 over HTTP(S), listed in the Agent Card's `supportedInterfaces` with protocol version 1.0.                                                                                                                                                                          |
| Version            | `A2A-Version: 1.0`. A request with no version is read as 0.3 and refused with `VersionNotSupportedError`.                                                                                                                                                                       |
| Messages           | `SendMessage`, blocking or with `returnImmediately`.                                                                                                                                                                                                                            |
| Tasks              | `GetTask` with `historyLength`, `ListTasks` with its filters and paging, and `CancelTask`.                                                                                                                                                                                      |
| Push notifications | All four config methods, and the config inside `SendMessage`, when the Runtime has a push secret (`NYLORUN_A2A_PUSH_SECRET`). Delivered at least once, with the config's token and authentication, and signed with Standard Webhooks. See [Push notifications](/docs/a2a/push). |
| Task states        | All of them. An interrupted task continues on the same `taskId`.                                                                                                                                                                                                                |
| Parts              | `text`, `raw`, `url`, and `data`, in and out. Artifacts carry the turn's files.                                                                                                                                                                                                 |
| Extensions         | Declared on the card, activated with `A2A-Extensions`, and echoed when activated. All are optional: a client that activates none gets plain A2A 1.0. See [Profile v2](/docs/a2a/profile/v2).                                                                                    |
| Agent Card         | One per Agent, from the Runtime and through `createA2aHandler()`'s `/.well-known/agent-card.json`. `pushNotifications` is true when the Runtime has a push secret, and `streaming` is false.                                                                                    |
| Errors             | A2A error codes, with `google.rpc.ErrorInfo`. A task another caller owns answers as not found.                                                                                                                                                                                  |

## Documented choices [#documented-choices]

| Where                       | What a client should know                                                                                                                                                                                         |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Blocking `SendMessage`      | It waits up to the Runtime limit `a2aWaitMs`, 5 minutes by default. Past that, the answer is the task, still `WORKING`. Use `returnImmediately` and push for long tasks.                                          |
| Approvals                   | An approval pauses the task as `AUTH_REQUIRED`, with the request under [`interactions/v1`](/docs/a2a/interactions/v1). A client without that extension sees a text question, and its text reply does not approve. |
| A message to a busy context | It is queued and answered with the task that will take it. A client can ask for the stricter answer, `CONTEXT_BUSY`, with `metadata.delivery: "reject"`.                                                          |

## Not served [#not-served]

| Part of A2A 1.0                                                                                                       | What to use                                                                                                                                                                  |
| --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Streaming: `SendStreamingMessage` and `SubscribeToTask`                                                               | Push notifications, and `GetTask`.                                                                                                                                           |
| The HTTP+JSON and gRPC bindings                                                                                       | The JSON-RPC binding.                                                                                                                                                        |
| Standard authentication straight to the Runtime: OAuth client credentials, and security schemes on the Runtime's card | Call through `createA2aHandler()` on your server, which checks callers its own way and lists its own security schemes on the card, or with an application key and a subject. |
| `GetExtendedAgentCard` (`extendedAgentCard: false`)                                                                   | The public Agent Card.                                                                                                                                                       |
| A2A 0.3 clients                                                                                                       | A2A 1.0.                                                                                                                                                                     |
| Signed Agent Cards                                                                                                    | None.                                                                                                                                                                        |

## How it is checked [#how-it-is-checked]

CI runs the A2A TCK against a published example agent for every release
candidate. A failure that is not on the release's list of known failures
blocks the release. The profile's own conformance suite covers the extensions,
push signing and retries, queued messages, and `ListTasks` paging.

## Latest TCK results [#latest-tck-results]

The A2A TCK results are published with each Runtime release, starting with
`@nylorun/runtime` 0.37.0-beta, together with that release's known failures.
