Your agent works. It also has one or two actions that, on a bad day, you really don't want it doing alone. You don't need an approval platform for that — you need one call around the dangerous line.
The direct answer
Wrap the risky action in gate.require(). It creates an approval, routes it to a human in Slack (or the reviewer console), and long-polls until they decide. On approved it returns and your code proceeds; on rejected or expired it throws — so the action simply never runs.
1. Create the gate
import { createGate } from "@seal-dev/sdk";
const gate = createGate({
apiKey: process.env.SEAL_API_KEY!,
baseUrl: "https://api.your-org.com",
});2. Wrap the risky call
Put the gate immediately before the irreversible step. Pass the action, the policyKey that decides whether it needs a human, and the payload the reviewer will see:
await gate.require({
action: "payments.refund",
policyKey: "refunds.over_100",
payload: { orderId, amount },
context: { reason: agentReasoning }, // shown to the reviewer, never evaluated
});
// Only reached if a human approved (or the policy auto-allowed).
await stripe.refunds.create({ payment_intent: orderId, amount });If the policy returns allow, require() resolves instantly with no human involved. If it returns require_approval, it blocks until someone decides. Rejected or expired requests throw a typed error you can catch and log.
3. A human decides
The reviewer gets the action, payload, and the agent's reasoning in Slack, and approves or rejects in one tap — no dashboard round-trip required. Every decision is written to an append-only, hash-chained audit trail in the same transaction as the state change, so you can always prove who approved what.
What you get without building it
The hard parts are invariants, not UI: fail-closed evaluation of untrusted input, a verdict and its audit record committing atomically, and a log with no edit path. Those ship correct by construction — you write one await.
Works with any stack
gate.require() is a plain async call, so it drops into LangChain, CrewAI, LangGraph, a raw loop, or a tool behind the MCP proxy — anywhere your agent is about to do something it can't undo.
Start free with 1,000 approvals a month and put a human in the loop before the next irreversible call — not after.