# `Jido.Messaging.AgentRunner`
[🔗](https://github.com/agentjido/jido_messaging/blob/v1.0.0/lib/jido_messaging/agent_runner.ex#L1)

GenServer that manages an agent's participation in a specific room thread.

Each assigned thread gets its own AgentRunner process that:
- Subscribes to room-level `message_added` signals
- Filters down to one room/thread assignment
- Invokes the configured handler
- Delivers replies through `Jido.Messaging.Deliver`

# `agent_config`

```elixir
@type agent_config() :: %{
  :agent_id =&gt; String.t(),
  :handler =&gt; (map(), map() -&gt;
                 {:reply, String.t()} | :noreply | {:error, term()}),
  :name =&gt; String.t(),
  optional(:mention_handles) =&gt; [String.t()],
  optional(:trigger) =&gt; atom()
}
```

# `t`

```elixir
@type t() :: %Jido.Messaging.AgentRunner{
  agent_config: map(),
  agent_id: binary(),
  instance_module: any(),
  room_id: binary(),
  subscribed: boolean(),
  thread_id: binary()
}
```

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `get_state`

Get current runner state.

# `schema`

Returns the Zoi schema.

# `start_link`

Start an AgentRunner for an assigned room thread.

Required options:
- `:room_id`
- `:thread_id`
- `:agent_id`
- `:agent_config`
- `:instance_module`

# `stop`

Gracefully stop the runner.

# `via_tuple`

Generate a registry via tuple.

# `whereis`

Check if a thread-scoped agent runner is running.

---

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