# `AgentSessionManager.PermissionMode`
[🔗](https://github.com/nshkrdotcom/agent_session_manager/blob/v0.8.0/lib/agent_session_manager/permission_mode.ex#L1)

Normalized permission modes for agent session execution.

Each AI provider has its own mechanism for controlling tool permissions:

- **Claude**: `--permission-mode` flag with modes like `bypassPermissions`
- **Codex**: `--full-auto` and `--dangerously-bypass-approvals-and-sandbox` flags
- **Amp**: `--dangerously-allow-all` flag

This module defines a provider-agnostic set of permission modes that each
adapter maps to its SDK's native semantics.

## Modes

| Mode | Description |
|---|---|
| `:default` | Provider's default permission handling |
| `:accept_edits` | Auto-accept file edit operations (Claude-specific; no-op on others) |
| `:plan` | Plan mode — generate plan before executing (Claude-specific; no-op on others) |
| `:full_auto` | Skip permission prompts, allow all tool calls |
| `:dangerously_skip_permissions` | Bypass all approvals and sandboxing (most permissive) |

# `t`

```elixir
@type t() ::
  :default | :accept_edits | :plan | :full_auto | :dangerously_skip_permissions
```

# `all`

```elixir
@spec all() :: [t()]
```

Returns all valid permission modes.

# `normalize`

```elixir
@spec normalize(term()) :: {:ok, t() | nil} | {:error, String.t()}
```

Normalizes a permission mode value.

Accepts atoms, strings, or `nil`. Returns `{:ok, mode}` for valid values
or `{:error, reason}` for invalid ones. `nil` input returns `{:ok, nil}`.

# `valid?`

```elixir
@spec valid?(term()) :: boolean()
```

Returns `true` if the given value is a valid permission mode atom.

---

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