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

Public policy extension API.

This domain provides lightweight policy evaluation for tool governance
and output budget limits with explicit violation actions.

# `action`

```elixir
@type action() :: ASM.Extensions.Policy.Violation.action()
```

Violation action taken when a policy rule is triggered.

# `t`

```elixir
@type t() :: %ASM.Extensions.Policy{
  disallow_tools: MapSet.t(String.t()),
  max_output_tokens: non_neg_integer() | nil,
  on_budget_violation: action(),
  on_tool_violation: action()
}
```

# `enforcer_plug`

```elixir
@spec enforcer_plug(
  t(),
  keyword()
) :: {module(), keyword()}
```

# `evaluate`

```elixir
@spec evaluate(t(), ASM.Event.t(), map()) ::
  {:ok, map()} | {:violation, ASM.Extensions.Policy.Violation.t(), map()}
```

Pure policy evaluation.

Returns:
- `{:ok, next_ctx}` when no rule is violated
- `{:violation, violation, next_ctx}` when a rule is violated

# `new`

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

# `new!`

```elixir
@spec new!(keyword()) :: t()
```

---

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