One engine. A JSON graph. Every hop observable.
GUTS is a Python backend that owns one LLM agent engine and exposes it through hot-swappable component slots. The topology of a turn — which roles run, in what order, with what branches and retries — is a small validated graph over a closed 9-primitive vocabulary. Draw it on the canvas; watch the node-event stream as it runs.
Replay of a real run
Three ideas, one API
Component slots
Goal, planner, executor, evaluator — each a swappable slot with named implementations. Swap them at runtime, no restart: the next turn runs on what is active.
Graphs as data
The turn's topology is a JSON document over a closed 9-primitive vocabulary (prompt, plan, act, research, route, parallel, merge, critic, gate). Validated at save — the canvas can't draw what the engine won't run.
Event streams
Every run emits a per-node event stream (start, result, done, skipped, retry, failure…). That stream is the canvas seam — the UI you just watched replays a real one.