Pushary

Honest comparison

Knock delivers the approval message.
Pushary returns the decision.

Knock is cross-channel notification infrastructure with an agent toolkit whose approval flow you assemble from webhooks and your own pending state. Pushary is the managed loop: enroll(externalId) connects a person's phone with one tap, and decisions.ask() blocks until they answer, failing closed on silence.

The real question

Both products can put an approval in front of a person, so the choice comes down to which half of the problem you want to own. With Knock, delivery is managed and the decision loop is yours: their docs describe human-in-the-loop as an inherently asynchronous interaction, where your code receives a webhook and resumes the paused tool. With Pushary, the loop is the product: one call creates the decision, blocks on the answer, enforces the fail-closed timeout, and writes the outcome to a ledger.

Pushary is for you if:

  • You want one call that blocks until a real person decides
  • Silence has to mean no, enforced by the platform rather than your code
  • Your end-users should connect a phone with one tap, no app of yours to ship
  • You want a queryable ledger of every question and answer
  • You work in Python as well as TypeScript

Knock is for you if:

  • You need high-volume product notifications across email, in-app, push, SMS, Slack, and Teams
  • You want templates, batching, digests, and a user preference center
  • You already run Knock and want approvals riding your existing workflows
  • Your approvers already live in Slack or your own app's feed
  • You are comfortable building the webhook endpoint and pending state for approvals

Why it matters

The loop, managed or assembled

Knock's requiresHumanInput defers the tool call and hands the resume to your webhook handler, so the pending state, the correlation, and the retry story live in your codebase. Pushary's decisions.ask() holds the agent on a durable wait and returns the human's answer as the call result. The difference shows up in week two, when a deploy lands mid-approval and the wait either survives in the ledger or vanishes with your process.

Fail-closed as a platform guarantee

Knock's human-in-the-loop docs do not document a timeout or deny-on-silence default, so whether an unanswered approval blocks the agent depends on code every team writes for itself. Pushary resolves every unanswered decision to not approved when the window closes, and the expiry lands in the ledger next to the question.

Enrollment is the hidden half

In Knock, an approval recipient is a pre-identified Knock user with channel data in place, and phone push means your own mobile app with your own APNs or FCM credentials. Pushary's enroll(externalId) turns your own user id into a reachable phone with one keyless tap, no app of yours required, which is what makes asking your customers, rather than just your team, practical.

Where Knock wins

As notification infrastructure, Knock is genuinely strong: one workflow engine across email, in-app feeds, push, SMS, Slack, and Teams, with templates, batching, preferences, and engagement tracking, plus a real free developer tier and enterprise posture. If you need to send a lot of product messages reliably on many channels, Knock is the right tool, and Pushary does not try to be that. Pushary covers agent notifications as a capability of the decision layer, and it stops there.

Feature comparison

FeaturePusharyKnock
One call that blocks until a human answersCORE
Fail-closed on timeout, enforced by the platform
Keyless one-tap end-user phone enrollmentENROLL
Phone delivery without shipping your own mobile app
Durable decisions ledger (queryable record of every answer)
Human-in-the-loop helpers for the Vercel AI SDK
Signed webhooks on resolution
Email, SMS, and in-app feed channels
Templates, batching, digests, user preference center
High-volume cross-channel notification engine
Pricing
Partner $99/mo, public and self-serve
Free tier + usage-based (see their pricing)

Competitor rows reflect Knock's public docs and pricing page as of July 2026. Their toolkit is in beta and evolving, so check their docs for current state.

Frequently asked questions

Does Knock support human-in-the-loop for AI agents?

Yes, and it is worth describing precisely. Knock's Agent Toolkit has a requiresHumanInput helper that routes a tool call into a Knock workflow and sends an actionable message. Their docs describe the interaction as inherently asynchronous: the agent immediately gets a waiting-for-input result, and when the person responds, Knock fires a webhook to your app, where your code resumes the tool call. You build the webhook endpoint, the pending state, and the resume logic. Pushary packages that loop as one managed call, decisions.ask(), which blocks until the answer exists and fails closed if it never comes.

What happens on a timeout in each product?

Pushary enforces fail-closed centrally: if nobody answers inside the window, decisions.ask() reports not approved, and the pending decision survives restarts because it lives in a durable ledger. Knock's human-in-the-loop docs do not document a timeout or a deny-on-silence default, so expiry behavior is left to the code you write around the webhook.

Can each product reach an end-user's phone?

Knock can send push notifications through your own mobile app using your own APNs or FCM credentials and device tokens, and SMS through your provider. Pushary provides the phone side itself: the end-user taps one keyless link, and delivery uses native app push or PWA push notifications with no app for you to ship and no push credentials for you to manage.

Which frameworks does each cover for approvals?

Knock's human-in-the-loop helpers are exposed for the Vercel AI SDK adapter, with the toolkit in beta as a TypeScript package as of July 2026. Pushary ships @pushary/ai-sdk for the Vercel AI SDK, @pushary/eve for Eve, and documented two-call patterns for LangGraph, LangChain, CrewAI, Mastra, the OpenAI Agents SDK, Hermes, OpenClaw, and MCP clients, in TypeScript and Python.

When is Knock the right choice?

When the job is product notification infrastructure: high volumes across email, in-app feeds, push, SMS, Slack, and Teams, with templates, batching, digests, and a preference center. Knock is excellent at that, and if you already run it, its agent toolkit lets approvals ride your existing workflows. Pushary is the right choice when the job is a decision: the agent must stop, a specific person must answer on their phone, silence must mean no, and the outcome must be on the record.

Keep exploring

Two calls, and your agent can ask a human.

enroll(externalId) connects the phone. decisions.ask() blocks on the answer, fail-closed, with every outcome in a durable ledger. Works with the Vercel AI SDK, LangGraph, CrewAI, Mastra, the OpenAI Agents SDK, Eve, Hermes, and MCP.