Open Approvals website hero image

Open source · MIT

Keep a human in the loop on what your AI agents do

Open Approvals lets an AI agent pause and ask before it does something consequential. A shared approval queue, an agent-side client, and a simple protocol any approver surface can implement.

Agents are starting to take real, irreversible actions

As agents move from drafting text to doing things, some actions deserve a human’s sign-off first. Open Approvals gives your agent one line to pause on and a place for a person to say yes or no.

Send a messageSpend moneyRun a shell commandDelete dataDeploy to productionEmail a customer

What’s in the box

An approval layer, not a framework

Agent-side client

One call to create an approval request, then block until a human answers. Get back a clear decision: accept, decline, cancel, or timeout.

Shared approval queue

Requests and decisions live in one atomically-written store. Any process on the machine can raise a request or record a decision.

Documented protocol

A small, versioned protocol covers the store format and HTTP endpoints, so any approver surface or agent runtime can speak it.

Approver surfaces

Headless React hooks in open-approvals-react let a dashboard, desktop app, or phone list pending requests and tap Approve or Deny.

Why it’s built this way

Small, unopinionated, and easy to adopt

Open Approvals is a thin layer with zero runtime dependencies. It does one thing — get a human decision on an agent action — and stays out of the way of whatever framework, runtime, or UI you already use.

1

The agent pauses and asks before it does something consequential

2

Requests and decisions live in one shared, atomically-written queue

3

Any surface — dashboard, desktop app, or phone — can approve or deny

4

Requests from external agent runtimes and MCP elicitations share the queue

The loop

Request, review, resume

Request

The agent asks

Before a sensitive action, the agent creates an approval request and blocks — describing what it wants to do and why.

Review

A human decides

The request appears on any approver surface. A person reviews the details and taps Approve or Deny, wherever they are.

Resume

The decision flows back

The agent unblocks with the decision — accept, decline, cancel, or timeout — and continues, or safely backs off.

Install

One call to keep a human in the loop

agent.py
from open_approvals import create_approval_request, wait_for_approval

# Before a sensitive action, ask a human.
request = create_approval_request(
    requester="billing-agent",
    action="refund",
    description="Refund $240 to customer #1032",
)

decision = wait_for_approval(request["id"], timeout_seconds=300)
if decision["accepted"]:
    issue_refund()

Python (the agent side)

pip install open-approvals

React (the approver side)

npm install open-approvals-react

Give your agents a checkpoint

Open Approvals is free and open source under the MIT license. Drop it in wherever an agent needs a human’s yes before it acts.

MIT licensed · Python 3.11+ · zero runtime dependencies