# `CliSubprocessCore.ProviderFeatures`
[🔗](https://github.com/nshkrdotcom/cli_subprocess_core/blob/v0.1.0/lib/cli_subprocess_core/provider_features.ex#L1)

Canonical provider feature metadata for the built-in CLI profiles.

This module is the public, authoritative source for:

- provider-native permission mode terminology and CLI flag rendering
- provider-local partial features such as Ollama-backed model routing

# `manifest`

```elixir
@type manifest() :: %{
  provider: atom(),
  permission_modes: %{optional(atom()) =&gt; permission_manifest()},
  partial_features: %{optional(atom()) =&gt; partial_feature_manifest()}
}
```

# `partial_feature_manifest`

```elixir
@type partial_feature_manifest() :: %{
  supported?: boolean(),
  activation: map() | nil,
  model_strategy: atom() | nil,
  compatibility: map() | nil,
  notes: [String.t()]
}
```

# `permission_manifest`

```elixir
@type permission_manifest() :: %{
  native_mode: atom(),
  cli_args: [String.t()],
  cli_excerpt: String.t() | nil,
  label: String.t()
}
```

# `manifest`

```elixir
@spec manifest(atom()) :: {:ok, manifest()} | :error
```

# `manifest!`

```elixir
@spec manifest!(atom()) :: manifest()
```

# `partial_feature`

```elixir
@spec partial_feature(atom(), atom()) :: {:ok, partial_feature_manifest()} | :error
```

# `partial_feature!`

```elixir
@spec partial_feature!(atom(), atom()) :: partial_feature_manifest()
```

# `permission_args`

```elixir
@spec permission_args(atom(), atom() | String.t()) :: [String.t()]
```

# `permission_mode`

```elixir
@spec permission_mode(atom(), atom() | String.t()) ::
  {:ok, permission_manifest()} | :error
```

# `permission_mode!`

```elixir
@spec permission_mode!(atom(), atom() | String.t()) :: permission_manifest()
```

---

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