# `A2A.AgentExtension`
[🔗](https://github.com/actioncard/a2a-elixir/blob/main/lib/a2a/agent_extension.ex#L1)

Declaration of a protocol extension supported by an agent.

Mirrors the `AgentExtension` object from the A2A v1.0 spec. Used both as a
struct embedded in `AgentCard.capabilities.extensions` and as the value
returned by an `A2A.Extension` module's `declaration/1` callback.

## Fields

  * `:uri` — unique identifier for the extension (required)
  * `:description` — human-readable description of how the agent uses it
  * `:required` — if `true`, clients must declare support via the
    `A2A-Extensions` request header; otherwise the server returns
    `ExtensionSupportRequiredError` (-32008). Defaults to `false`.
  * `:params` — optional extension-specific configuration parameters

## Examples

    %A2A.AgentExtension{
      uri: "https://a2a-protocol.org/extensions/timestamp",
      description: "Adds timestamps to messages and artifacts"
    }

    %A2A.AgentExtension{
      uri: "https://a2a-protocol.org/extensions/secure-passport",
      description: "Personalization via signed passport",
      required: true,
      params: %{"version" => "1.0"}
    }

# `t`

```elixir
@type t() :: %A2A.AgentExtension{
  description: String.t() | nil,
  params: map() | nil,
  required: boolean(),
  uri: String.t()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
