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

Behaviour defining the interface that ACP-compliant clients must implement.

Clients are typically code editors that provide the interface between users and AI agents.

Required callbacks: `request_permission/1`, `session_notification/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/client.ex#L11)

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

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

```elixir
@callback create_terminal(ACP.CreateTerminalRequest.t()) ::
  result(ACP.CreateTerminalResponse.t())
```

Create a new terminal and execute a command. Optional.

# `ext_method`
[🔗](https://github.com/f1729/agent-client-protocol-elixir/blob/main/lib/acp/client.ex#L49)
*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/client.ex#L52)
*optional* 

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

Handle extension notifications. Optional.

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

```elixir
@callback kill_terminal_command(ACP.KillTerminalCommandRequest.t()) ::
  result(ACP.KillTerminalCommandResponse.t())
```

Kill terminal command without releasing. Optional.

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

```elixir
@callback read_text_file(ACP.ReadTextFileRequest.t()) ::
  result(ACP.ReadTextFileResponse.t())
```

Read content from a text file. Optional.

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

```elixir
@callback release_terminal(ACP.ReleaseTerminalRequest.t()) ::
  result(ACP.ReleaseTerminalResponse.t())
```

Release a terminal. Optional.

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

```elixir
@callback request_permission(ACP.RequestPermissionRequest.t()) ::
  result(ACP.RequestPermissionResponse.t())
```

Request permission from the user for a tool call operation.

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

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

Handle session update notifications from the agent.

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

```elixir
@callback terminal_output(ACP.TerminalOutputRequest.t()) ::
  result(ACP.TerminalOutputResponse.t())
```

Get terminal output and exit status. Optional.

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

```elixir
@callback wait_for_terminal_exit(ACP.WaitForTerminalExitRequest.t()) ::
  result(ACP.WaitForTerminalExitResponse.t())
```

Wait for terminal command to exit. Optional.

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

```elixir
@callback write_text_file(ACP.WriteTextFileRequest.t()) ::
  result(ACP.WriteTextFileResponse.t())
```

Write content to a text file. Optional.

---

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