A2A.AgentCard (A2A v0.2.0)

Copy Markdown View Source

Decoded agent card from the A2A discovery endpoint.

Contains the agent's identity, capabilities, and skills as returned by GET /.well-known/agent-card.json. This is the wire-format struct used by clients; server-side agents define their card via the agent_card/0 callback.

Example

{:ok, card} = A2A.Client.discover("https://agent.example.com")
card.name   #=> "my-agent"
card.skills #=> [%{id: "greet", name: "Greet", ...}]

Summary

Types

capabilities()

@type capabilities() :: %{
  optional(:streaming) => boolean(),
  optional(:push_notifications) => boolean(),
  optional(:state_transition_history) => boolean(),
  optional(:extended_agent_card) => boolean()
}

provider()

@type provider() :: %{organization: String.t(), url: String.t()}

skill()

@type skill() :: %{
  id: String.t(),
  name: String.t(),
  description: String.t(),
  tags: [String.t()]
}

supported_interface()

@type supported_interface() :: %{
  url: String.t(),
  protocol_binding: String.t(),
  protocol_version: String.t()
}

t()

@type t() :: %A2A.AgentCard{
  capabilities: capabilities(),
  default_input_modes: [String.t()],
  default_output_modes: [String.t()],
  description: String.t(),
  documentation_url: String.t() | nil,
  icon_url: String.t() | nil,
  name: String.t(),
  protocol_version: String.t() | nil,
  provider: provider() | nil,
  security: [%{required(String.t()) => [String.t()]}],
  security_schemes: %{required(String.t()) => A2A.SecurityScheme.t()},
  skills: [skill()],
  supported_interfaces: [supported_interface()],
  url: String.t(),
  version: String.t()
}