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

View Source

Represents a task notification system message from the Claude CLI.

Emitted when a background task reaches a terminal state (completed, failed, or stopped). Contains the task output summary and final usage statistics.

Fields

  • :type - Always :system
  • :subtype - Always :task_notification
  • :task_id - Unique identifier for the task
  • :tool_use_id - Associated tool use block ID (optional)
  • :status - Terminal status atom (:completed, :failed, or :stopped)
  • :output_file - Path to the task output file
  • :summary - Human-readable summary of the task result
  • :usage - Final token and tool usage stats (optional map with total_tokens, tool_uses, duration_ms)
  • :uuid - Message UUID
  • :session_id - Session identifier

JSON Format

{
  "type": "system",
  "subtype": "task_notification",
  "task_id": "task_abc123",
  "tool_use_id": "toolu_abc123",
  "status": "completed",
  "output_file": "/tmp/task_abc123_output.json",
  "summary": "Analysis complete: found 3 issues",
  "usage": {
    "total_tokens": 5000,
    "tool_uses": 12,
    "duration_ms": 15000
  },
  "uuid": "...",
  "session_id": "..."
}

Summary

Functions

Creates a new TaskNotification from JSON data.

Type guard to check if a value is a TaskNotification.

Types

t()

@type t() :: %ClaudeCode.Message.SystemMessage.TaskNotification{
  output_file: String.t() | nil,
  session_id: String.t(),
  status: :completed | :failed | :stopped,
  subtype: :task_notification,
  summary: String.t() | nil,
  task_id: String.t(),
  tool_use_id: String.t() | nil,
  type: :system,
  usage: map() | nil,
  uuid: String.t() | nil
}

Functions

new(json)

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

Creates a new TaskNotification from JSON data.

The "status" string is parsed to an atom (:completed, :failed, or :stopped).

Examples

iex> TaskNotification.new(%{
...>   "type" => "system",
...>   "subtype" => "task_notification",
...>   "task_id" => "task_abc",
...>   "status" => "completed",
...>   "output_file" => "/tmp/output.json",
...>   "summary" => "Done",
...>   "session_id" => "session-1"
...> })
{:ok, %TaskNotification{type: :system, subtype: :task_notification, status: :completed, ...}}

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

task_notification?(arg1)

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

Type guard to check if a value is a TaskNotification.