# `ASM.Extensions.ProviderSDK.Claude`
[🔗](https://github.com/nshkrdotcom/agent_session_manager/blob/v0.9.2/lib/asm/extensions/provider_sdk/claude.ex#L1)

Discovery metadata and bridge helpers for the optional Claude-native ASM
extension namespace.

This namespace lives above ASM's normalized kernel.

It does not implement Claude's richer control semantics itself. Instead it:

- publishes discovery metadata for the optional Claude-native surface
- derives `ClaudeAgentSDK.Options` from ASM-style configuration, including
  normalized execution-surface data for CLI-backed families
- starts `ClaudeAgentSDK.Client` when callers explicitly opt into the
  SDK-local control family

The actual control family remains in `claude_agent_sdk`.

# `available?`

```elixir
@spec available?() :: boolean()
```

# `client_module`

```elixir
@spec client_module() :: module()
```

Returns the SDK-local Claude client module.

# `control_protocol_module`

```elixir
@spec control_protocol_module() :: module()
```

Returns the Claude SDK control protocol module.

# `extension`

```elixir
@spec extension() :: ASM.Extensions.ProviderSDK.Extension.t()
```

# `hooks_module`

```elixir
@spec hooks_module() :: module()
```

Returns the Claude SDK hooks module.

# `native_capabilities`

```elixir
@spec native_capabilities() :: [atom()]
```

# `native_surface_modules`

```elixir
@spec native_surface_modules() :: [module()]
```

# `permission_module`

```elixir
@spec permission_module() :: module()
```

Returns the Claude SDK permission module.

# `sdk_app`

```elixir
@spec sdk_app() :: atom()
```

# `sdk_module`

```elixir
@spec sdk_module() :: module()
```

# `sdk_options`

```elixir
@spec sdk_options(keyword(), keyword()) :: {:ok, struct()} | {:error, ASM.Error.t()}
```

Derives `ClaudeAgentSDK.Options` from ASM-style Claude configuration.

`native_overrides` remains the explicit home for Claude-native options such as
hooks, permission callbacks, SDK MCP servers, file checkpointing, or thinking
configuration. Execution-surface placement stays on `asm_opts`.

# `sdk_options_for_session`

```elixir
@spec sdk_options_for_session(term(), keyword(), keyword()) ::
  {:ok, struct()} | {:error, ASM.Error.t()}
```

Derives `ClaudeAgentSDK.Options` from an ASM session plus optional ASM/native
overrides.

# `start_client`

```elixir
@spec start_client(keyword(), keyword(), keyword()) ::
  GenServer.on_start() | {:error, ASM.Error.t() | term()}
```

Starts `ClaudeAgentSDK.Client` from ASM-style Claude configuration.

ASM configuration stays on the first argument. Claude-native options live in
`native_overrides`. Direct runtime overrides such as `:execution_surface` or
`:control_request_timeout_ms` live in `client_opts`.

# `start_client_for_session`

```elixir
@spec start_client_for_session(term(), keyword(), keyword(), keyword()) ::
  GenServer.on_start() | {:error, ASM.Error.t() | term()}
```

Starts `ClaudeAgentSDK.Client` from an ASM session plus optional ASM/native
overrides.

---

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