Packages
claude_code
0.34.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/message/system_message/status.ex
defmodule ClaudeCode.Message.SystemMessage.Status do
@moduledoc """
Represents a status message from the Claude CLI.
Emitted when the CLI transitions between processing states, such as
thinking, tool use, or other activity phases.
## Fields
- `:status` - The current status string (e.g., "thinking", "tool_use")
- `:permission_mode` - The current permission mode (optional)
- `:uuid` - Message UUID
- `:session_id` - Session identifier
## JSON Format
```json
{
"type": "system",
"subtype": "status",
"status": "thinking",
"permissionMode": "default",
"uuid": "...",
"session_id": "..."
}
```
"""
use ClaudeCode.JSONEncoder
alias ClaudeCode.Session.PermissionMode
@enforce_keys [:type, :subtype, :session_id, :status]
defstruct [
:type,
:subtype,
:status,
:permission_mode,
:uuid,
:session_id
]
@type t :: %__MODULE__{
type: :system,
subtype: :status,
status: String.t(),
permission_mode: atom() | nil,
uuid: String.t() | nil,
session_id: String.t()
}
@doc """
Creates a new Status from JSON data.
## Examples
iex> Status.new(%{
...> "type" => "system",
...> "subtype" => "status",
...> "status" => "thinking",
...> "session_id" => "session-1"
...> })
{:ok, %Status{type: :system, subtype: :status, ...}}
iex> Status.new(%{"type" => "assistant"})
{:error, :invalid_message_type}
"""
@spec new(map()) :: {:ok, t()} | {:error, atom()}
def new(%{"type" => "system", "subtype" => "status", "status" => status, "session_id" => session_id} = json) do
{:ok,
%__MODULE__{
type: :system,
subtype: :status,
status: status,
permission_mode: PermissionMode.parse(json["permission_mode"]),
uuid: json["uuid"],
session_id: session_id
}}
end
def new(%{"type" => "system", "subtype" => "status"}), do: {:error, :missing_required_fields}
def new(_), do: {:error, :invalid_message_type}
@doc """
Type guard to check if a value is a Status.
"""
@spec status?(any()) :: boolean()
def status?(%__MODULE__{type: :system, subtype: :status}), do: true
def status?(_), do: false
end