ClaudeCode.Adapter behaviour (ClaudeCode v0.21.0)
View SourceBehaviour for ClaudeCode adapters.
Adapters handle the full lifecycle of a Claude Code execution environment: provisioning, communication, health checking, and cleanup.
Message Protocol
Adapters communicate with Session using the notification helpers:
notify_message(session, request_id, message)- A parsed message from Claudenotify_done(session, request_id, reason)- Query complete (reason: :completed)notify_error(session, request_id, reason)- Error occurrednotify_status(session, status)- Adapter status change (:provisioning | :ready | {:error, reason})
Usage
Adapters are specified as {Module, config} tuples:
{:ok, session} = ClaudeCode.start_link(
adapter: {ClaudeCode.Adapter.Local, cli_path: "/usr/bin/claude"},
model: "opus"
)The default adapter is ClaudeCode.Adapter.Local.
Summary
Callbacks
Returns cached server initialization info from the control handshake.
Returns the health status of the adapter's execution environment.
Sends an interrupt signal to stop the current generation.
Sends a control request to the adapter and waits for a response.
Sends a query to the adapter.
Starts the adapter process and provisions the execution environment.
Stops the adapter and cleans up resources.
Functions
Forwards an inbound control request from adapter to session.
Notifies the session that a request has completed.
Notifies the session that a request encountered an error.
Sends a parsed message to the session for a specific request.
Notifies the session of an adapter status change.
Types
Callbacks
Returns cached server initialization info from the control handshake.
This is an optional callback.
Returns the health status of the adapter's execution environment.
Sends an interrupt signal to stop the current generation.
This is an optional, fire-and-forget callback — the CLI stops generating and emits a result message. No response is expected.
@callback send_control_request(adapter :: pid(), subtype :: atom(), params :: map()) :: {:ok, map()} | {:error, term()}
Sends a control request to the adapter and waits for a response.
This is an optional callback — adapters that don't support the control
protocol simply don't implement it. Use function_exported?/3 to check.
@callback send_query( adapter :: pid(), request_id :: reference(), prompt :: String.t(), opts :: keyword() ) :: :ok | {:error, term()}
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, reason}when the query completes{:adapter_error, request_id, reason}on errors
Parameters
adapter- PID of the adapter processrequest_id- Unique reference for this requestprompt- The user's query stringopts- Query options (includes :session_id if resuming)
@callback start_link(session :: pid(), adapter_config()) :: {:ok, pid()} | {:error, term()}
Starts the adapter process and provisions the execution environment.
This should eagerly provision resources (find binary, start container, etc.)
and return {:error, reason} immediately if provisioning fails.
Parameters
session- PID of the Session GenServeradapter_config- Adapter-specific configuration keyword list
@callback stop(adapter :: pid()) :: :ok
Stops the adapter and cleans up resources.
Functions
Forwards an inbound control request from adapter to session.
@spec notify_done(pid(), reference(), done_reason()) :: :ok
Notifies the session that a request has completed.
Notifies the session that a request encountered an error.
Sends a parsed message to the session for a specific request.
Notifies the session of an adapter status change.
Status values:
:provisioning— adapter is starting up:ready— adapter is ready to accept queries{:error, reason}— provisioning failed