Default mode: Reason-Act cycle.
Each iteration:
- Build a Request from current messages + tools + system prompt.
- Call the provider (one-shot, not streaming — streaming is an optimisation landing in PR 4).
- Extract tool calls (native, or TextTagged fallback via
ExAthena.ToolCalls). - If no tool calls: emit
{:content, text}, setfinish_reason: :stop, and halt. - If tool calls: run them (parallel-safe ones concurrently, mutating ones serially), append results, continue.
Budget + mistake-counter checks happen between iterations in the kernel. This mode only implements the turn-by-turn behaviour.