# `Raxol.AgentClientProtocol.Schema.AgentTypes.InitializeRequest`
[🔗](https://github.com/DROOdotFOO/raxol-agent/blob/raxol_agent_client_protocol-v0.1.0/packages/raxol_agent_client_protocol/lib/raxol/agent_client_protocol/schema/agent_types.ex#L314)

The `initialize` request, sent by the client to negotiate protocol version
and capabilities.

Ported from the MIT `f1729/agent_client_protocol` (c) 2025 f1729; see NOTICE.md.

# `t`

```elixir
@type t() :: %Raxol.AgentClientProtocol.Schema.AgentTypes.InitializeRequest{
  _meta: map(),
  client_capabilities:
    Raxol.AgentClientProtocol.Schema.ClientTypes.ClientCapabilities.t() | nil,
  client_info:
    Raxol.AgentClientProtocol.Schema.AgentTypes.Implementation.t() | nil,
  protocol_version: Raxol.AgentClientProtocol.Schema.Version.t()
}
```

# `from_json`

```elixir
@spec from_json(term()) :: {:ok, t()} | {:error, term()}
```

Decodes an `initialize` request. Uses
`Raxol.AgentClientProtocol.Schema.Version.coerce/1` (tolerant of legacy
string protocol versions from older clients, e.g. Zed's date-string
handshake) since this is the initial handshake.

# `new`

```elixir
@spec new(Raxol.AgentClientProtocol.Schema.Version.t()) :: t()
```

# `to_json`

```elixir
@spec to_json(t()) :: map()
```

---

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