When an agent is about to spend money, send a message, or run a command, Open Approvals makes it stop and ask a person first. A shared approval queue, a small agent-side client, and one documented protocol any dashboard or app can implement.
Refund $240 to customer #1032
reason: duplicate charge, confirmed in Stripe
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.
The loop
Before a sensitive action, the agent creates an approval request and blocks, spelling out 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 either 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 · agent side
pip install open-approvalsReact · approver side
npm install open-approvals-reactFree 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