Packages
claude_code
0.14.0
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.1
0.32.2
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Claude Agent SDK for Elixir – Build AI agents with Claude Code
Current section
Files
Jump to
Current section
Files
lib/claude_code/adapter.ex
defmodule ClaudeCode.Adapter do
@moduledoc """
Behaviour for ClaudeCode adapters.
Adapters handle the communication layer between Session and Claude.
The CLI adapter (`ClaudeCode.Adapter.CLI`) manages a persistent Port subprocess.
The Test adapter (`ClaudeCode.Adapter.Test`) provides mock message delivery for testing.
## Message Protocol
Adapters communicate with Session by sending messages:
- `{:adapter_message, request_id, message}` - A parsed message from Claude
- `{:adapter_done, request_id}` - Query complete (ResultMessage received)
- `{:adapter_error, request_id, reason}` - Error occurred
## Usage
To use a custom adapter, pass the `:adapter` option when starting a session:
# For testing with stubs
{:ok, session} = ClaudeCode.start_link(
adapter: {ClaudeCode.Test, MyApp.Chat}
)
The default adapter is `ClaudeCode.Adapter.CLI` which manages the Claude CLI subprocess.
"""
@doc """
Starts the adapter process.
The adapter should link to the session for lifecycle management.
Returns `{:ok, pid}` on success.
## Parameters
- `session` - PID of the Session GenServer
- `opts` - Session options (api_key, model, etc.)
"""
@callback start_link(session :: pid(), opts :: keyword()) ::
{:ok, pid()} | {:error, term()}
@doc """
Sends a query to the adapter.
The adapter should send messages back to the session via `send/2`:
- `{:adapter_message, request_id, message}` for each message
- `{:adapter_done, request_id}` when the query completes
- `{:adapter_error, request_id, reason}` on errors
## Parameters
- `adapter` - PID of the adapter process
- `request_id` - Unique reference for this request
- `prompt` - The user's query string
- `session_id` - Optional session ID for conversation continuity
- `opts` - Query options
"""
@callback send_query(
adapter :: pid(),
request_id :: reference(),
prompt :: String.t(),
session_id :: String.t() | nil,
opts :: keyword()
) :: :ok | {:error, term()}
@doc """
Stops the adapter gracefully.
"""
@callback stop(adapter :: pid()) :: :ok
end