# `AgentWorkshop.Profiles`
[🔗](https://github.com/joshrotenberg/agent_workshop/blob/main/lib/agent_workshop/profiles.ex#L1)

Reusable agent templates.

Define profiles once, instantiate agents from them on demand.
Useful for orchestrators that spin up ephemeral agents for specific tasks.

## Usage

    profile(:coder, "You write clean code.", max_turns: 15)
    profile(:reviewer, "Review only.", model: "opus", allowed_tools: ["Read", "Bash"])

    # Create an agent from a profile
    from_profile(:coder, :coder_bug_42)

    # List available profiles
    profiles()

# `profile_def`

```elixir
@type profile_def() :: %{role: String.t() | nil, opts: keyword()}
```

# `clear`

```elixir
@spec clear() :: :ok
```

Clear all profiles.

# `define`

```elixir
@spec define(atom(), String.t() | nil, keyword()) :: :ok
```

Define a profile.

# `get`

```elixir
@spec get(atom()) :: profile_def() | nil
```

Get a profile definition.

# `list`

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

List all profile names.

# `remove`

```elixir
@spec remove(atom()) :: :ok
```

Remove a profile.

---

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