
Open source · MIT
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.
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.
What’s in the box
One call to create an approval request, then block until a human answers. Get back a clear decision: accept, decline, cancel, or timeout.
Requests and decisions live in one atomically-written store. Any process on the machine can raise a request or record a decision.
A small, versioned protocol covers the store format and HTTP endpoints, so any approver surface or agent runtime can speak it.
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
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.
The agent pauses and asks before it does something consequential
Requests and decisions live in one shared, atomically-written queue
Any surface — dashboard, desktop app, or phone — can approve or deny
Requests from external agent runtimes and MCP elicitations share the queue
The loop
Before a sensitive action, the agent creates an approval request and blocks — describing what it wants to do and why.
The request appears on any approver surface. A person reviews the details and taps Approve or Deny, wherever they are.
The agent unblocks with the decision — accept, decline, cancel, or timeout — and continues, or safely backs off.
Install
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-approvalsReact (the approver side)
npm install open-approvals-reactOpen 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