Human-in-the-loop and dynamic fan-out

interrupt() pauses the graph for human input, then Send() fans one node out to dynamic parallel branches that fan back in

Human-in-the-loop and dynamic fan-out interrupt() pauses the graph for human input, then Send() fans one node out to dynamic parallel branches that fan back in 01 / Graph runtime 02 / Human-in-the-loop 03 / Send branches Pause + resume Dynamic fan-out Invoke · run graph · Graph runtime › Pause + resume Invoke run graph interrupt() · checkpoint + pause · Graph runtime › Pause + resume · waiting interrupt() checkpoint + pause waiting Human review · approve or edit · Human-in-the-loop › Pause + resume Human review approve or edit Resume · Command(resume=...) · Graph runtime › Dynamic fan-out Resume Command(resume=...) Branch · dynamic task · Send branches › Dynamic fan-out · x N Branch dynamic task x N Reducer · fan back in · Graph runtime › Dynamic fan-out Reducer fan back in state input Send() x N results Legend User UI Agent logic Policy Tool action Context / trace

interrupt()

  • • Saves graph state to a checkpoint
  • • Surfaces a payload for a human to act on
  • • Command(resume=...) re-enters at the same node

Send API

  • • One node emits N Send objects at runtime
  • • Each Send starts an independent parallel branch
  • • Branch count is data-driven, not fixed

Fan back in

  • • Branches write to a shared reducer channel
  • • The graph waits for every branch to finish
  • • Results merge before the next super-step