ClaudeCode.Message.SystemMessage.HookResponse (ClaudeCode v0.36.3)

View Source

Represents a hook response system message from the Claude CLI.

Emitted when a hook completes execution with its final result.

Fields

  • :type - Always :system
  • :subtype - Always :hook_response
  • :session_id - Session identifier
  • :uuid - Message UUID
  • :hook_id - Unique identifier for this hook execution
  • :hook_name - Name of the hook that executed
  • :hook_event - Event that triggered the hook
  • :output - Combined or processed output
  • :stdout - Standard output from the hook process
  • :stderr - Standard error from the hook process
  • :exit_code - Exit code of the hook process
  • :outcome - Outcome of the hook execution (:success, :error, or :cancelled)

JSON Format

{
  "type": "system",
  "subtype": "hook_response",
  "session_id": "...",
  "uuid": "...",
  "hook_id": "hook_abc123",
  "hook_name": "my_hook",
  "hook_event": "on_tool_start",
  "output": "done",
  "stdout": "done",
  "stderr": null,
  "exit_code": 0,
  "outcome": "success"
}

Summary

Functions

Type guard to check if a value is a HookResponse.

Creates a new HookResponse from JSON data.

Types

t()

@type t() :: %ClaudeCode.Message.SystemMessage.HookResponse{
  exit_code: integer() | nil,
  hook_event: String.t(),
  hook_id: String.t(),
  hook_name: String.t(),
  outcome: :success | :error | :cancelled | nil,
  output: String.t() | nil,
  session_id: String.t(),
  stderr: String.t() | nil,
  stdout: String.t() | nil,
  subtype: :hook_response,
  type: :system,
  uuid: String.t() | nil
}

Functions

hook_response?(arg1)

@spec hook_response?(any()) :: boolean()

Type guard to check if a value is a HookResponse.

new(json)

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

Creates a new HookResponse from JSON data.

The "outcome" string is parsed to an atom (:success, :error, or :cancelled).

Examples

iex> HookResponse.new(%{
...>   "type" => "system",
...>   "subtype" => "hook_response",
...>   "session_id" => "session-1",
...>   "hook_id" => "hook_abc",
...>   "hook_name" => "my_hook",
...>   "hook_event" => "on_tool_start",
...>   "exit_code" => 0,
...>   "outcome" => "success"
...> })
{:ok, %HookResponse{type: :system, subtype: :hook_response, outcome: :success, ...}}

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