# `ADK.Agent.ParallelAgent`
[🔗](https://github.com/zeroasterisk/adk-elixir/blob/main/lib/adk/agent/parallel_agent.ex#L1)

Runs sub-agents concurrently using `Task.async_stream`, collecting all events.

## Examples

    agent = ADK.Agent.ParallelAgent.new(
      name: "fan_out",
      sub_agents: [research_agent, analysis_agent, summary_agent]
    )

# `t`

```elixir
@type t() :: %ADK.Agent.ParallelAgent{
  description: String.t(),
  name: String.t(),
  parent_agent: term(),
  sub_agents: [ADK.Agent.t()],
  timeout: pos_integer()
}
```

# `build`

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

Create a parallel agent with validation.

Returns `{:ok, agent}` or `{:error, reason}`.

# `clone`

```elixir
@spec clone(t(), map() | nil) :: t()
```

Clone this agent with optional updates. See `ADK.Agent.Clone`.

# `new`

```elixir
@spec new(keyword()) :: t()
```

Create a parallel agent.

## Examples

    iex> agent = ADK.Agent.ParallelAgent.new(name: "fan_out", sub_agents: [])
    iex> agent.name
    "fan_out"

---

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