ClaudeCode.Message.ResultMessage (ClaudeCode v0.36.3)

View Source

Represents a result message from the Claude CLI.

Result messages are the final message in a conversation, containing the final response, timing information, token usage, and cost.

String.Chars Protocol

Result implements String.Chars, so you can use it directly with IO.puts/1 or string interpolation:

{:ok, result} = ClaudeCode.query(session, "Hello")
IO.puts(result)  # prints just the result text

Matches the official SDK schema for successful results:

{
  type: "result",
  subtype: "success",
  uuid: string,
  duration_ms: float,
  duration_api_ms: float,
  is_error: boolean,
  num_turns: int,
  result: string,
  stop_reason: string | null,
  session_id: string,
  total_cost_usd: float,
  usage: object,
  modelUsage: {model: ModelUsage},
  permission_denials: PermissionDenial[],
  structured_output?: unknown
}

And for error results:

{
  type: "result",
  subtype: "error_max_turns" | "error_during_execution" | "error_max_budget_usd" | "error_max_structured_output_retries",
  uuid: string,
  duration_ms: float,
  duration_api_ms: float,
  is_error: boolean,
  num_turns: int,
  session_id: string,
  total_cost_usd: float,
  usage: object,
  modelUsage: {model: ModelUsage},
  permission_denials: PermissionDenial[],
  errors: string[]
}

Summary

Functions

Creates a new Result message from JSON data.

Types

subtype()

@type subtype() ::
  :success
  | :error_max_turns
  | :error_during_execution
  | :error_max_budget_usd
  | :error_max_structured_output_retries
  | String.t()

t()

@type t() :: %ClaudeCode.Message.ResultMessage{
  duration_api_ms: float(),
  duration_ms: float(),
  errors: [String.t()] | nil,
  fast_mode_state: String.t() | nil,
  is_error: boolean(),
  model_usage: %{required(String.t()) => ClaudeCode.Model.Usage.t()},
  num_turns: non_neg_integer(),
  permission_denials: [ClaudeCode.Session.PermissionDenial.t()],
  result: String.t() | nil,
  session_id: String.t(),
  stop_reason: ClaudeCode.Message.stop_reason() | nil,
  structured_output: any() | nil,
  subtype: subtype(),
  total_cost_usd: float(),
  type: :result,
  usage: ClaudeCode.Usage.t(),
  uuid: String.t() | nil
}

Functions

new(json)

@spec new(map()) :: {:ok, t()} | {:error, atom() | {:missing_fields, [atom()]}}

Creates a new Result message from JSON data.

Examples

iex> Result.new(%{"type" => "result", "subtype" => "success", ...})
{:ok, %Result{...}}

iex> Result.new(%{"type" => "assistant"})
{:error, :invalid_message_type}