# `ACP.Agent`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L1)

Behaviour defining the interface that all ACP-compliant agents must implement.

Agents handle requests from clients and execute tasks using language models and tools.

Required callbacks: `initialize/1`, `authenticate/1`, `new_session/1`, `prompt/1`, `cancel/1`.
Optional callbacks have default implementations that return `{:error, method_not_found}`.

# `result`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L11)

```elixir
@type result(t) :: {:ok, t} | {:error, ACP.Error.t()}
```

# `authenticate`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L17)

```elixir
@callback authenticate(ACP.AuthenticateRequest.t()) ::
  result(ACP.AuthenticateResponse.t())
```

Authenticate the client.

# `cancel`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L26)

```elixir
@callback cancel(ACP.CancelNotification.t()) :: :ok | {:error, ACP.Error.t()}
```

Cancel ongoing operations for a session.

# `ext_method`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L36)
*optional* 

```elixir
@callback ext_method(ACP.ExtRequest.t()) :: result(ACP.ExtResponse.t())
```

Handle extension method requests. Optional.

# `ext_notification`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L39)
*optional* 

```elixir
@callback ext_notification(ACP.ExtNotification.t()) :: :ok | {:error, ACP.Error.t()}
```

Handle extension notifications. Optional.

# `initialize`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L14)

```elixir
@callback initialize(ACP.InitializeRequest.t()) :: result(ACP.InitializeResponse.t())
```

Negotiate protocol capabilities.

# `load_session`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L29)
*optional* 

```elixir
@callback load_session(ACP.LoadSessionRequest.t()) :: result(ACP.LoadSessionResponse.t())
```

Load an existing session. Optional - defaults to method_not_found error.

# `new_session`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L20)

```elixir
@callback new_session(ACP.NewSessionRequest.t()) :: result(ACP.NewSessionResponse.t())
```

Create a new conversation session.

# `prompt`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L23)

```elixir
@callback prompt(ACP.PromptRequest.t()) :: result(ACP.PromptResponse.t())
```

Process a user prompt within a session.

# `set_session_mode`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/agent.ex#L32)
*optional* 

```elixir
@callback set_session_mode(ACP.SetSessionModeRequest.t()) ::
  result(ACP.SetSessionModeResponse.t())
```

Set the current mode for a session. Optional.

---

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