Flags, experiments, plans and permissions for AI agents.
One call. One answer.
Your users want control. They just don't want to be asked. Throtl decides what your agent may do for each user, and tells you which gate decided.
In a conversation
Sam says "send that automatically next time". What should your agent say back?
The answer depends on Sam's plan, the rollout, your experiment and Sam's history. Change them and watch the reply change. Throtl returns the reason for you and a safe sentence for Sam.
Why one call
Every tool controls one gate. Your agent's action passes through all of them.
A user can grant your agent permission to act, while their plan doesn't include it and your experiment is holding it back. Decide those separately and you get three answers and a bug.
Five tools and an if
A flag tool, an experiment tool, Stripe, a needsApproval function and an approvals table. Nobody can say why it sent that.
A classifier that doesn't know your user
Global auto-approve judges the action, not the person. It can't know Sam is on Free, in a holdout, and has never paid this payee.
Approval routers that never learn
They get the question to a human, then ask again tomorrow. Users approve the same thing forever, until they stop reading.
of people open to agents want to approve every purchase one makes.
Global Payments, 2026of permission prompts get approved anyway, most without a second look.
Anthropic, Claude CodeAsk every time and people stop reading. Never ask and one bad send ends up in a screenshot. Agents should earn their way, inside the plan and the test each user is in.
Run it, don't redeploy it
Change the rules in Throtl, not in your code.
Flags, ramps, experiments and plans live in Throtl as data. Ramp from 20% to 50%, end a test or change what Free can do, and your agent picks it up in seconds. No pull request, no deploy.
- 14:02Priya ramped auto-send 20% → 50%, "undo rate flat for 48h"
- 09:40Tom set Free to always ask for payment.send
- YesterdayHoldout q4-global started, 5% of users
Every change is audited
Who changed what, when and why, next to the decisions it affected. Roll back in one click.
Watch each group fill
See every rollout and experiment arm fill in real time, with exposures, sample size and how approval and undo rates are moving.
Your users' answers are inputs too
"Always ask me about payments." "Send these automatically." Every approval, edit and undo, per user and per action, shapes the next decision. Feature flags never see any of it.
How it works
One call before every action.
- Wrap the action. Works with Claude Agent SDK, OpenAI Agents SDK, Vercel AI SDK, LangGraph, Mastra and MCP.
- Throtl decides. Flag, experiment, plan and earned trust in a fixed order. The lowest wins, and it's named.
- Every answer teaches it. Approvals earn trust and undos cost it, inside the limits your plans and tests set.
// npm i @throtl/sdk
import throttle from "@throtl/sdk";
const d = await throttle.can({
agent: "inbox", subject: "sam", action: "email.send",
});
d.decision // "ask"
d.binding // "experiment:send-autonomy"
d.message // "Can I send this to Sam's client?"
await throttle.record(d.id, "approved");
An open standard
Six levels of agent autonomy.
Like the levels for self-driving cars, but earned per user and per action. Open for anyone to adopt, with Throtl as the reference implementation.
- L0Suggest
- L1Ask
- L2Heads up
- L3Act and tell
- L4Act and summarise
- L5Autonomous
Give your agent a throttle, not a leash.
We're onboarding a small group of agent teams before launch. Built by people who've run experiments for 200M+ players and shipped an AI agent platform in a regulated money app.