# `Vibe.Subagents`
[🔗](https://github.com/elixir-vibe/vibe/blob/v0.2.3/lib/vibe/subagents.ex#L1)

Supervised subagent orchestration.

Subagents are Vibe jobs, not detached prompts. LLM subagents create child Vibe
sessions so their work can be listed, inspected, cancelled, awaited, and
attached from the CLI or TUI. Job and schedule metadata is persisted through
Vibe's storage layer.

# `task_spec`

```elixir
@type task_spec() :: %{:task =&gt; String.t(), optional(atom()) =&gt; term()}
```

# `active`

```elixir
@spec active() :: [map()]
```

# `ask`

```elixir
@spec ask(
  String.t(),
  keyword()
) :: {:ok, term()} | {:error, term()}
```

# `await`

```elixir
@spec await(String.t(), timeout()) :: {:ok, term()} | {:error, term()}
```

# `cancel`

```elixir
@spec cancel(String.t()) :: :ok | {:error, term()}
```

Intentional facade for the public Vibe API boundary.

# `jobs`

```elixir
@spec jobs() :: [term()]
```

Intentional facade for the public Vibe API boundary.

# `result`

```elixir
@spec result(String.t()) :: {:ok, term()} | {:error, term()}
```

Intentional facade for the public Vibe API boundary.

# `run_many`

```elixir
@spec run_many(
  [task_spec() | map()],
  keyword()
) :: {:ok, [map()]} | {:error, term(), [map()]}
```

# `schedule`

```elixir
@spec schedule(
  String.t(),
  keyword()
) :: {:ok, term()} | {:error, term()}
```

Intentional facade for the public Vibe API boundary.

# `scheduled`

```elixir
@spec scheduled() :: [term()]
```

Intentional facade for the public Vibe API boundary.

# `start`

```elixir
@spec start(
  String.t(),
  keyword()
) :: {:ok, term()} | {:error, term()}
```

# `status`

```elixir
@spec status(String.t()) :: {:ok, term()} | {:error, term()}
```

Intentional facade for the public Vibe API boundary.

# `unschedule`

```elixir
@spec unschedule(String.t()) :: :ok | {:error, term()}
```

Intentional facade for the public Vibe API boundary.

---

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