Flowplane
Flowplane is a human-in-the-loop (HITL) control plane. It adds a first-class approval layer — "pause this step until a human decides" — on top of the durable engine you already use (Inngest, Temporal, Trigger.dev), or Flowplane's own bundled engine.
You keep your workflow code, your engine, and your infra. Flowplane owns the decision: who needs to approve, what they see, the policy that gates it, the quorum, the SLA, and the durable record of what was decided and why.
The one-liner
Durable execution is a solved, crowded space. Flowplane doesn't compete with it — it sits on top and makes the human decision a first-class, AI-native object.
The decision-first model
The root object in Flowplane is a decision, not a run. A decision is keyed by the engine's run (engine + externalRunId + stepRef) — it does not require Flowplane to execute your steps. Your engine runs the work; Flowplane tracks the decision on top of it.
That inversion is what lets Flowplane work with engines it doesn't control: you add awaitApproval as one step inside your own function, the engine pauses (via its own wait-for-event/signal primitive), and Flowplane records a pending decision. When a human decides, Flowplane signals the engine to resume. Flowplane is a step in your path — never the orchestrator.
What you get
awaitApproval— pause for a human decision from inside your existing function, without handing Flowplane control of the workflow.- Rich context — reviewers see the actual AI output, fields, diffs, and tool calls, not a bare yes/no prompt.
- Policy gate — declarative rules decide whether a human is even needed, with an AI-judged option bounded by a mandatory floor.
- Quorum — configurable M-of-N approvals; reject-wins by default.
- SLA + reminders — decisions never rot silently.
- The Inbox — a reviewer-first dashboard, plus email (Slack/DocuSign coming).
Start with the Quickstart, or read the core concepts first.