Human-in-the-loop for AI agents
Human-in-the-loop for your AI agent's users.
When your agent needs a person to approve or answer, Pushary sends the question to their phone and waits for the decision. Your users connect with one tap. No account, no app, no key. One tool call sends the question, blocks until they decide, fails closed if nobody answers, and writes the outcome to a durable ledger.
import { createPusharyServer } from "@pushary/server"
const px = createPusharyServer({ apiKey: process.env.PUSHARY_API_KEY! })
// Connect an end-user's phone once. Keyless, one tap, no app to install.
await px.enroll(user.id)
// Ask a real human. Blocks until they decide. Fail-closed on timeout.
const decision = await px.decisions.ask({
externalId: user.id,
type: "confirm",
question: "Approve a $480 refund to customer #4471?",
})
if (decision.approved) await issueRefund()Every framework
Add it to the agent you already built
The same two calls, in the idiom of your framework. Published adapters where they help, and the server or Python SDK everywhere else.
Vercel AI SDK
Ask a human from your Vercel AI SDK agent, answered on a phone.
npm i @pushary/ai-sdkLangGraph
Ask a human from your LangGraph agent, answered on a phone.
pip install pusharyCrewAI
Ask a human from your CrewAI agent, answered on a phone.
pip install pusharyOpenAI Agents SDK
Ask a human from your OpenAI Agents SDK agent, answered on a phone.
pip install pusharyEve
Ask a human from your Eve agent, answered on a phone.
npm i @pushary/eveMastra
Ask a human from your Mastra agent, answered on a phone.
npm i @pushary/serverLangChain
Ask a human from your LangChain agent, answered on a phone.
pip install pusharyMCP
Ask a human from your MCP agent, answered on a phone.
No install. One MCP server entry.Claude Agent SDK
Ask a human from your Claude Agent SDK agent, answered on a phone.
No install. One mcpServers entry.Hermes
Ask a human from your Hermes agent, answered on a phone.
pip install pusharyOpenClaw
Ask a human from your OpenClaw agent, answered on a phone.
npm i @pushary/serverOn a framework not listed here? The same two calls work anywhere @pushary/server or pip install pushary runs.
How it works
From ask to resume
Connect the phone once, ask a human where a wrong autonomous action has a cost, and act on the decision. The waiting, the delivery, and the record are handled for you.
- 01
Connect the phone that approves
Call enroll(externalId) with your own id for the user. They tap a one-tap link once to connect their phone. No account, no app, no key on their side.
- 02
Install the SDK
Use @pushary/server in TypeScript or pip install pushary in Python. On the Vercel AI SDK and Eve, use the @pushary/ai-sdk and @pushary/eve adapters.
- 03
Ask a human where it matters
Call decisions.ask inside the tool or step that guards the risky action. It sends the question to the person's phone and blocks until they answer.
- 04
Act on the fail-closed decision
If nobody answers in your window, the decision comes back denied, so a timeout never turns into an unapproved action. Every answer is written to a durable ledger.
A decision is a yes or no confirm, a multiple-choice select, or a free-text input. Every one is stored with its outcome and kept in the audit log.
FAQ
Questions, answered
Give your users the final say, on their phone.
Connect a user with one tap, ask a human with one call, and act on a fail-closed decision. The durable store and the audit log come with it.
Partner plan, $99 a month. Your users never see a Pushary login or bill.