FlowRunnerUx

fancy-flow

Flow-driven UX bridge — host effects become flow nodes (/ux).

Why
The flip side of running a flow is letting the flow drive your app — pop a toast, navigate, open a modal, pause for a human approval. Wiring that ad-hoc per node turns into a tangle, and there's no shared notion of "an autonomous thing just did X" that presence / logging / undo can hook into.
What
FlowRunnerUx is the headless flow-driven UX bridge — the counterpart to agent-integrations. The host registers named UX effects; useFlowRunnerUx turns each into a flow executor (kind ux_<effect>), registers a matching palette node, and broadcasts an AutoActivity event (source:"flow") per dispatch on the shared @particle-academy/fancy-auto-common bus that agent-integrations also uses. Human-in-the-loop is free: an effect that returns a Promise pauses the run until the user resolves it.
How
From the /ux subpath: const ux = useFlowRunnerUx({ effects: { toast: ({ message }) => toast({ title: message }) } }), then <FlowEditor initial={graph} executors={ux.executors} />. Call ux.registerKinds() once to add the effect nodes to the palette.