BEFORE THE AGENT ACTS,
SOMEONE DECIDES.

AgentGate stops any LangChain, CrewAI, OpenAI Agents SDK, or hand-built agent at the exact moment it's about to send, delete, deploy, or pay — and hands that one decision to a human in Slack or Teams, before it happens instead of after.

Agent requests
send_email()
Routed to
#approvals
Decided by
@sarah
Result
CLEARED · 0:41

The problem

Fast and hard to undo is the dangerous combination.

Agents are getting capable enough to actually do things — not draft an email, send it; not suggest a deploy, ship it. That's the whole point of building them. But "autonomous" and "unsupervised" aren't the same thing, and right now most teams don't have a real answer for the gap between them — just a hope that nothing expensive goes wrong.

AgentGate isn't a safety net for every action an agent takes. It's a checkpoint for the small number that are irreversible if it gets it wrong.

delete_customer_datacritical
transfer_fundscritical
deploy_to_productioncritical
modify_permissionshigh
send_emailhigh

How it works

Four stages, one interruption.

One method call in your agent's code. Everything after that is AgentGate's job, not yours.

01

Requested

The agent calls gate.request_approval() with the action, risk tier, and context — then blocks, waiting.

LOGGED
02

Routed

A card posts to Slack or Microsoft Teams — whichever channels the org has connected — with the full context attached.

IN REVIEW
03

Decided

A human clicks Approve or Reject. Rejections require a reason. Nothing else in the system can skip this step.

DECIDED
04

Resolved

The waiting call returns. The agent proceeds, stops, or — if nobody answered in time — treats silence as no.

CLEARED / HELD

The manifest

Everything that ships in the box.

Not a wrapper around a single Slack message. A full approval system: the SDK your agent calls, the channels humans respond in, and the record of what happened.

ItemWhat it does — and why it matters
01Python SDKOne call — request_approval() — async or sync, with typed results and typed exceptions.Why: you write four lines, not a queueing system.
02Slack integrationA real bot: interactive Approve/Reject buttons, a reason modal on reject, HTTP callbacks with signature verification.Why: your team already lives in Slack — the decision happens where they already are.
03Microsoft Teams integrationIncoming Webhook + Adaptive Card, resolved through signed, single-use links — no Azure app registration required.Why: Teams shops don't get left out because Slack was easier to build first.
04Risk tiersLow / medium / high / critical — set explicitly, or auto-classified from the action name and context, configurable per org.Why: a typo in a Slack message and a $50k wire transfer shouldn't wait the same 30 minutes.
05Timeouts & auto-expiryEvery request has a deadline. A background worker marks it timed-out the moment nobody answers in time.Why: fails safe — silence blocks the action, it never defaults to yes.
06Live dashboardPending count, approvals over time, risk distribution, and a filterable table you can approve or reject directly from.Why: you shouldn't need to read Slack scrollback to know what's outstanding.
07Full audit logEvery request, every decision, who made it and why, exportable to CSV.Why: "an agent did something bad" becomes a five-minute lookup, not an investigation.
08Multi-tenant by defaultEach org signs up, gets its own API key and its own isolated data — nothing shared, nothing crossed.Why: you're not the only team using your own AgentGate instance.
09Hardened by defaultAPI keys hashed at rest, integration tokens encrypted, rate limits on by default.Why: this is the thing standing between an agent and real actions — it doesn't get to be the weak link.
10Self-hostableSQLite for local dev, Postgres for real traffic, Docker Compose or your own infrastructure — no vendor lock.Why: the audit trail of your agents' decisions is not something you should have to trust to someone else's database.

Who's stopping at the gate

Five ways teams are already using it.

send_email
Sales agent drafts a pricing proposal to a prospect
High
deploy_to_production
DevOps agent wants to ship a build that touches payments
Critical
delete_customer_data
Data agent proposes purging churned-customer records
Critical
transfer_funds
Finance agent wants to pay a vendor invoice
Critical
modify_permissions
Support agent grants a contractor admin access
High

Under the hood

Nothing about this is a black box.

Open architecture

FastAPI, Postgres, a Next.js dashboard. Read the code, self-host it, or run it next to your own infrastructure.

Fails closed

No response before the deadline is treated as a rejection, never an approval. Silence never means yes.

Your record, not ours

The audit log lives in your database. Export it, query it, keep it as long as compliance requires.

Get started

Give your agents a gate before they need one.

Get started free →