Skip to main content

lib/agent_sea/role.ex

defmodule AgentSea.Role do
  @moduledoc "An agent's role: its capabilities, system prompt, goals and delegation policy."

  @enforce_keys [:name]
  defstruct [
    :name,
    :description,
    :system_prompt,
    :backstory,
    capabilities: [],
    goals: [],
    constraints: [],
    can_delegate: true,
    can_receive_delegation: true,
    max_concurrent_tasks: 1
  ]

  @type t :: %__MODULE__{
          name: String.t(),
          description: String.t() | nil,
          system_prompt: String.t() | nil,
          backstory: String.t() | nil,
          capabilities: [AgentSea.Capability.t()],
          goals: [String.t()],
          constraints: [String.t()],
          can_delegate: boolean(),
          can_receive_delegation: boolean(),
          max_concurrent_tasks: pos_integer()
        }
end