# `ASM.Provider`
[🔗](https://github.com/nshkrdotcom/agent_session_manager/blob/v0.9.2/lib/asm/provider.ex#L1)

Provider definition data used by the backend registry.

# `provider_name`

```elixir
@type provider_name() :: :amp | :claude | :codex | :codex_exec | :gemini | atom()
```

# `t`

```elixir
@type t() :: %ASM.Provider{
  aliases: [provider_name()],
  core_profile: module(),
  display_name: String.t(),
  example_support: ASM.Provider.ExampleSupport.t(),
  feature_manifest: map(),
  metadata: map(),
  name: provider_name(),
  options_schema: keyword(),
  profile: ASM.Provider.Profile.t(),
  sdk_runtime: module() | nil
}
```

# `example_support`

```elixir
@spec example_support(t() | provider_name()) ::
  {:ok, ASM.Provider.ExampleSupport.t()} | {:error, ASM.Error.t()}
```

# `example_support!`

```elixir
@spec example_support!(t() | provider_name()) :: ASM.Provider.ExampleSupport.t()
```

# `feature_manifest`

```elixir
@spec feature_manifest(t() | provider_name()) ::
  {:ok, map()} | {:error, ASM.Error.t()}
```

# `feature_manifest!`

```elixir
@spec feature_manifest!(t() | provider_name()) :: map()
```

# `resolve`

```elixir
@spec resolve(t() | provider_name()) :: {:ok, t()} | {:error, ASM.Error.t()}
```

# `resolve!`

```elixir
@spec resolve!(t() | provider_name()) :: t()
```

# `supported_providers`

```elixir
@spec supported_providers() :: [provider_name()]
```

# `supports_feature?`

```elixir
@spec supports_feature?(t() | provider_name(), atom()) :: boolean()
```

---

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