# `Jido.AI.Effects.Applier`
[🔗](https://github.com/agentjido/jido_ai/blob/v2.4.0/lib/jido_ai/effects/applier.ex#L1)

Shared helpers to normalize, filter, and apply effectful tool results.

# `result_tuple`

```elixir
@type result_tuple() :: {:ok, term(), [term()]} | {:error, term(), [term()]}
```

# `stats`

```elixir
@type stats() :: %{
  received_count: non_neg_integer(),
  allowed_count: non_neg_integer(),
  dropped_count: non_neg_integer(),
  dropped_effects: [term()]
}
```

# `apply_result`

```elixir
@spec apply_result(
  Jido.Agent.t(),
  term(),
  Jido.AI.Effects.Policy.t() | map() | keyword() | nil
) ::
  {Jido.Agent.t(), [term()], stats(), result_tuple()}
```

Applies filtered effects from a result envelope to an agent.

Returns `{updated_agent, directives, stats, filtered_result}`.

# `filter_result`

```elixir
@spec filter_result(term(), Jido.AI.Effects.Policy.t() | map() | keyword() | nil) ::
  {result_tuple(), stats()}
```

Filters effects from a result envelope according to policy.

Returns `{filtered_result, stats}`.

# `normalize_result`

```elixir
@spec normalize_result(term()) :: result_tuple()
```

Normalizes a result envelope to canonical `{:ok|:error, value, effects}` shape.

---

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