# `ClaudeAgentSDK.Session`
[🔗](https://github.com/nshkrdotcom/claude_agent_sdk/blob/v0.9.2/lib/claude_agent_sdk/session.ex#L1)

Helper functions for working with Claude sessions.

Provides utilities to extract session metadata from message lists.

# `calculate_cost`
[🔗](https://github.com/nshkrdotcom/claude_agent_sdk/blob/v0.9.2/lib/claude_agent_sdk/session.ex#L40)

```elixir
@spec calculate_cost([ClaudeAgentSDK.Message.t()]) :: float()
```

Calculates total cost from messages.

## Examples

    messages = ClaudeAgentSDK.query("Analyze code") |> Enum.to_list()
    cost = ClaudeAgentSDK.Session.calculate_cost(messages)
    # => 0.025

# `count_turns`
[🔗](https://github.com/nshkrdotcom/claude_agent_sdk/blob/v0.9.2/lib/claude_agent_sdk/session.ex#L60)

```elixir
@spec count_turns([ClaudeAgentSDK.Message.t()]) :: non_neg_integer()
```

Counts conversation turns (assistant messages).

## Examples

    messages = ClaudeAgentSDK.query("Multi-step task") |> Enum.to_list()
    turns = ClaudeAgentSDK.Session.count_turns(messages)
    # => 5

# `extract_model`
[🔗](https://github.com/nshkrdotcom/claude_agent_sdk/blob/v0.9.2/lib/claude_agent_sdk/session.ex#L74)

```elixir
@spec extract_model([ClaudeAgentSDK.Message.t()]) :: String.t() | nil
```

Extracts the model used from messages.

## Examples

    messages = ClaudeAgentSDK.query("Hello") |> Enum.to_list()
    model = ClaudeAgentSDK.Session.extract_model(messages)
    # => "claude-sonnet-4-5-20250929"

# `extract_session_id`
[🔗](https://github.com/nshkrdotcom/claude_agent_sdk/blob/v0.9.2/lib/claude_agent_sdk/session.ex#L20)

```elixir
@spec extract_session_id([ClaudeAgentSDK.Message.t()]) :: String.t() | nil
```

Extracts the session ID from a list of messages.

## Examples

    messages = ClaudeAgentSDK.query("Hello") |> Enum.to_list()
    session_id = ClaudeAgentSDK.Session.extract_session_id(messages)
    # => "550e8400-e29b-41d4-a716-446655440000"

# `get_summary`
[🔗](https://github.com/nshkrdotcom/claude_agent_sdk/blob/v0.9.2/lib/claude_agent_sdk/session.ex#L96)

```elixir
@spec get_summary([ClaudeAgentSDK.Message.t()]) :: String.t()
```

Gets a summary of the conversation.

Returns first assistant message (truncated to 200 chars).

## Examples

    messages = ClaudeAgentSDK.query("Build feature") |> Enum.to_list()
    summary = ClaudeAgentSDK.Session.get_summary(messages)
    # => "I'll help you build that feature. First, let me..."

---

*Consult [api-reference.md](api-reference.md) for complete listing*
