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

Runtime contract for provider backends.

Both landed backend lanes satisfy this behaviour:

- `ASM.ProviderBackend.Core`
- `ASM.ProviderBackend.SDK`

Lane selection is owned by `ASM.ProviderRegistry` and remains orthogonal to
`execution_mode`.

# `close`

```elixir
@callback close(pid()) :: :ok
```

# `end_input`

```elixir
@callback end_input(pid()) :: :ok | {:error, term()}
```

# `info`

```elixir
@callback info(pid()) :: ASM.ProviderBackend.Info.t()
```

# `interrupt`

```elixir
@callback interrupt(pid()) :: :ok | {:error, term()}
```

# `send_input`

```elixir
@callback send_input(pid(), iodata(), keyword()) :: :ok | {:error, term()}
```

# `start_run`

```elixir
@callback start_run(map()) ::
  {:ok, pid(), ASM.ProviderBackend.Info.t()} | {:error, term()}
```

# `subscribe`

```elixir
@callback subscribe(pid(), pid(), reference()) :: :ok | {:error, term()}
```

---

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