How it works
One line.
That's it.
Your existing tool. One decorator. The agent pauses, a human reviews, then it runs. Or doesn't.
@require_approval // ← just this
def delete_user(user_id):
# your existing tool. unchanged.
db.delete(user_id)
01Shareable URL
One link. No login. No app. The reviewer opens it, sees everything, decides.
02Rich context
Attach any JSON. The reviewer sees exactly what the agent sees. No surprises.
03Webhooks
Decision fires instantly. HMAC-signed. Your agent resumes or halts. No polling.
04MCP Tools
Claude Code, Cursor, LangChain. Any MCP client gets approval tools for free.
05Mail integration
The agent writes the email. A human reads it first. One flag: require_approval=True.
06Audit trail
Who approved. When. What they saw. Immutable. You didn't configure anything.