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

Normalizes permission modes into a common runtime model.

Normalized set:

- `:default`
- `:auto`
- `:bypass`
- `:plan`

# `native_mode`

```elixir
@type native_mode() :: atom()
```

# `normalization`

```elixir
@type normalization() :: %{normalized: normalized_mode(), native: native_mode()}
```

# `normalized_mode`

```elixir
@type normalized_mode() :: :default | :auto | :bypass | :plan
```

# `provider`

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

# `canonical_provider`

```elixir
@spec canonical_provider(provider()) :: provider()
```

# `normalize`

```elixir
@spec normalize(provider(), atom() | String.t()) ::
  {:ok, normalization()} | {:error, ASM.Error.t()}
```

# `normalize!`

```elixir
@spec normalize!(provider(), atom() | String.t()) :: normalization()
```

# `normalized_modes`

```elixir
@spec normalized_modes() :: [normalized_mode()]
```

# `valid_modes`

```elixir
@spec valid_modes(provider()) :: [atom()]
```

---

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