# `Cyclium.Actor`
[🔗](https://github.com/Cyclium/cyclium_ex/blob/main/lib/cyclium/actor.ex#L1)

Macro and GenServer for Cyclium actors.

## Usage

    defmodule MyApp.Agents.POStatus do
      use Cyclium.Actor

      actor do
        identifier :po_status
        domain :procurement
        synthesizer MyApp.Synthesizers.Procurement
        capabilities [:erp_read, :vendor_read, :email_write]

        max_concurrent_episodes 3
        episode_overflow :queue

        expectation :po_delivery_sla,
          trigger: {:schedule, :timer.hours(4)},
          description: "Open POs should have confirmed ETA within SLA",
          outputs: [:email, :slack],
          budget: %{max_turns: 12, max_tokens: 25_000, max_wall_ms: 120_000}

        expectation :po_stalled,
          trigger: {:event, "po.status_changed"},
          filter: %{new_status: "STALLED"},
          description: "Stalled POs get triaged",
          outputs: [:email, :slack, :issue]
      end
    end

---

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