# `Jido.AI.Plugins.TaskSupervisor`
[🔗](https://github.com/agentjido/jido_ai/blob/v2.4.0/lib/jido_ai/plugins/task_supervisor.ex#L1)

Plugin that creates and manages a per-instance Task.Supervisor for Jido.AI agents.

In Jido 2.0, each agent instance requires its own task supervisor to properly
scope async operations (like LLM streaming and tool execution) to the agent's
lifecycle.

This plugin is automatically added to Jido.AI agents to handle supervisor creation
and cleanup.

## Supervisor Storage

The supervisor PID is stored in `agent.state.__task_supervisor_skill__` (the plugin's
internal state) and is accessed by directives via `Directive.Helpers.get_task_supervisor/1`.

## Lifecycle

- **mount**: Creates a new anonymous Task.Supervisor
- **Automatic cleanup**: The linked supervisor terminates when the agent stops

## Usage

This plugin is automatically included when using `Jido.AI.Agent`. Manual
inclusion is not typically needed.

## Implementation Notes

This plugin has no actions - it only provides lifecycle hooks for supervisor
management. The supervisor PID is stored in the plugin's state under the internal
key `__task_supervisor_skill__`.

# `__plugin_metadata__`

```elixir
@spec __plugin_metadata__() :: map()
```

Returns metadata for Jido.Discovery integration.

This function is used by `Jido.Discovery` to index plugins
for fast lookup and filtering.

# `actions`

```elixir
@spec actions() :: [module()]
```

Returns the list of action modules provided by this plugin.

# `capabilities`

```elixir
@spec capabilities() :: [atom()]
```

Returns the capabilities provided by this plugin.

# `category`

```elixir
@spec category() :: String.t() | nil
```

Returns the plugin's category.

# `config_schema`

```elixir
@spec config_schema() :: Zoi.schema() | nil
```

Returns the Zoi schema for per-agent configuration.

# `description`

```elixir
@spec description() :: String.t() | nil
```

Returns the plugin's description.

# `manifest`

```elixir
@spec manifest() :: Jido.Plugin.Manifest.t()
```

Returns the plugin manifest with all metadata.

The manifest provides compile-time metadata for discovery
and introspection, including capabilities, requirements,
signal routes, and schedules.

# `mount`

```elixir
@spec mount(term(), map()) :: {:ok, map() | nil} | {:error, term()}
```

Initialize plugin state when mounted to an agent.

Creates and stores the Task.Supervisor PID.

# `name`

```elixir
@spec name() :: String.t()
```

Returns the plugin's name.

# `otp_app`

```elixir
@spec otp_app() :: atom() | nil
```

Returns the OTP application for config resolution.

# `plugin_spec`

```elixir
@spec plugin_spec(map()) :: Jido.Plugin.Spec.t()
```

Returns the plugin specification with optional per-agent configuration.

## Examples

    spec = MyModule.plugin_spec(%{})
    spec = MyModule.plugin_spec(%{custom_option: true})

# `requires`

```elixir
@spec requires() :: [tuple()]
```

Returns the requirements for this plugin.

# `schedules`

```elixir
@spec schedules() :: [tuple()]
```

Returns the schedules for this plugin.

# `schema`

```elixir
@spec schema() :: Zoi.schema() | nil
```

Returns the Zoi schema for plugin state.

# `signal_patterns`

```elixir
@spec signal_patterns() :: [String.t()]
```

Returns the signal patterns this plugin handles.

# `signal_routes`

```elixir
@spec signal_routes() :: [tuple()]
```

Returns the signal routes for this plugin.

# `singleton?`

```elixir
@spec singleton?() :: boolean()
```

Returns whether this plugin is a singleton.

# `state_key`

```elixir
@spec state_key() :: atom()
```

Returns the key used to store plugin state in the agent.

# `subscriptions`

```elixir
@spec subscriptions() :: [Jido.Plugin.sensor_subscription()]
```

Returns the sensor subscriptions for this plugin.

# `tags`

```elixir
@spec tags() :: [String.t()]
```

Returns the plugin's tags.

# `vsn`

```elixir
@spec vsn() :: String.t() | nil
```

Returns the plugin's version.

---

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