Quorvel gives your AI agents a durable memory, exactly-once execution, and human approvals — so a crash, a duplicate, or a bad decision never becomes a disaster.
$npm i @quorvel/core
Built to work with your stack — integrations, not endorsements
Ledger, approvals, recovery, and alerts — one source of truth, orbiting wherever your agents act.
Wrap your agent’s actions once. Spin the dial to move through recording, gating, and recovery — the page keeps scrolling normally.
Every action is written to a durable ledger with its inputs, outputs, status, and a cryptographic idempotency key — before a single side effect fires.
Policies decide what needs a human. Risky actions wait for approval from Slack, the dashboard, or your own UI — approve, reject, or edit before it ships.
Crash mid-flow? Resume exactly where you left off. Step failed? Compensations for prior steps run in reverse — making failure recoverable.
The difference between a demo and production is what happens when something breaks.
Six guarantees that turn a flaky agent into one you can ship to production.
Every action persisted before it runs — inputs, outputs, status, and a cryptographic idempotency key. Your agent’s black box recorder.
Retries, duplicate webhooks, and double-clicks collapse into a single committed action. No more accidental double refunds.
Set a policy and risky actions wait for approval from Slack, the dashboard, or your own UI. Approve, reject, or edit before it ships.
When step 4 fails, Quorvel runs your compensations for steps 1–3 in reverse. Partial workflows clean up after themselves.
A process dies mid-run? Quorvel replays from the last committed checkpoint — no lost work, no double-spends, no manual cleanup.
Failures, approvals, and stuck workflows ping you in Slack or email the instant they happen — with a deep link straight to the action.
One dashboard for the whole lifecycle — live ledger, pending approvals, replays, and alerts. No more guessing what your agent did.
Cloud, edge, or your own VPC — every action flows through one durable ledger. Designed so replays and approvals stay consistent no matter where the work runs.
Wrap any side effect in run(). Quorvel records it, dedupes it, gates it, and recovers it — you keep writing plain TypeScript. Same primitive, every stack.
import { HostedLedger, run } from '@quorvel/core' const ledger = new HostedLedger({ apiKey: process.env.QUORVEL_KEY }) // wrap a Vercel AI SDK tool — durable + exactly-once const refund = tool({ parameters: z.object({ charge: z.string(), amount: z.number() }), execute: (args) => run(ledger, 'issue_refund', () => stripe.refunds.create(args)) })
import { HostedLedger, run, requireApprovalWhen } from '@quorvel/core' const ledger = new HostedLedger({ apiKey: process.env.QUORVEL_KEY }) requireApprovalWhen(c => c.amount > 100) // inside your OpenAI function-call handler if (call.name === 'issue_refund') await run(ledger, 'issue_refund', () => stripe.refunds.create(call.arguments))
import { HostedLedger, run } from '@quorvel/core' const ledger = new HostedLedger({ apiKey: process.env.QUORVEL_KEY }) // wrap any MCP tool call in a durable action server.tool('issue_refund', schema, async (args) => run(ledger, 'issue_refund', () => stripe.refunds.create(args)))
Most agent demos work because nothing goes wrong on stage. Production is the part nobody films — the retry that double-charges, the crash mid-refund, the action no one can explain afterward. Quorvel exists for that part: record before you act, gate what’s risky, recover what breaks. Reliability isn’t a feature you bolt on. It’s the difference between a demo and a product.
Start free, scale when you ship. Usage-based, never per seat — with a flat-rate Scale tier when you go big.
For prototypes and side projects.
For teams shipping agents to real users.
For high-volume, mission-critical agents.
For regulated and large-scale orgs.
Stop hoping your agent makes it to the finish line. Give it a memory, a safety net, and a human in the loop — in three lines of code.