Use case · LangGraph
Human-in-the-loop approvals for LangGraph
LangGraph has interrupts for human input, but you still own the reviewer surface, the policy, and the audit trail. Drop gate.require() into a node and Seal handles routing to Slack, enforcing the verdict, and recording a tamper-evident log — so a graph can pause on exactly the risky edges.
async function transferNode(state) {
await gate.require("payments.transfer", state.transfer);
}Where it fits
- ›Gate a node that performs an irreversible action mid-graph
- ›Require approval only when state crosses a policy threshold
- ›Record which human resumed the graph and why
Frequently asked questions
How is Seal different from LangGraph's interrupt?+
interrupt() pauses the graph and hands control back to your app; you still build the approval UI, policy, and audit trail. Seal is the approval control itself — Slack routing, verdict enforcement, and a hash-chained log — callable from inside a node.
Can I use Seal with LangGraph checkpoints?+
Yes. gate.require() is a plain async call inside a node, so it composes with checkpointing and resumable graphs without special wiring.