Pushary

Honest comparison

Novu asks people in chat and email.
Pushary asks them on their lock screen.

Novu is an open-source notification platform that grew a platform for agents. In a Novu chat, tool calls can carry approve and deny cards, and its human CLI can ask over Telegram, Slack or email. With Pushary, your agent calls decisions.ask(), your user answers on their phone, and your code gets the answer. If nobody answers in time, the action does not run.

Which one to pick

Novu has two ways to ask a person. In a Novu chat on Slack, Teams, WhatsApp or Telegram, approval cards gate an agent's tools. Outside a chat, its human CLI sends the question to Telegram, Slack or email and waits for the answer. Pushary sends the question to your user's lock screen, treats no answer as no, and keeps every decision where your API can look it up by id.

Pushary is for you if:

  • Your users should Approve or Deny from their phone's lock screen
  • Your users connect their phone once with a link
  • No answer must mean no, after a time you set
  • You want to look up any decision by id, with signed webhooks

Novu is for you if:

  • You are building a chat agent that lives in Slack, Teams, WhatsApp or Telegram
  • You want approval cards inside that conversation, with history in one thread
  • You want open-source notifications you can host yourself
  • You need an embeddable in-app inbox component
  • You want any agent to ask a person over Telegram, Slack or email

Where they differ

A card in a turn vs an answer in a call

Novu's own docs describe it: requesting tool approval posts the card and ends the turn, and the decision arrives later in a separate handler. That fits a chat runtime. Code in the middle of a workflow wants the opposite. decisions.ask() waits where it is called and returns the answer, so the next line of your function acts on it. For a longer wait, Pushary keeps the request, and your code picks the run back up when the answer arrives by webhook or polling.

What silence does

In Novu's documented model, a pending approval is denied when the user sends a new message. No expiry or reminder policy is documented for a card that simply goes unanswered. When its human CLI times out, the request stays pending and the command exits with code 11. Pushary puts silence on a clock you set. When the time runs out, the request closes as not approved, your agent is told, and the expiry is saved with the question.

Approve or deny, or a real answer

Novu's tool approval cards carry two buttons. Real oversight often needs more: pick which environment to roll back, choose a refund amount, type the sentence the agent should send. Pushary asks a yes/no question, a choice from a list, or for a typed answer. Yes/no questions are answered right on the lock screen. A choice or a typed answer opens the Pushary app, on a phone your user connected once with your link.

Where Novu wins

Novu's notification core is open source with a large community, self-hosting is real, and the in-app Inbox component is the fastest way to ship a notification center. Novu Connect solves hard plumbing for chat agents: webhook ingestion, identity resolution, and one thread across channels. Its human CLI lets any agent ask a person over Telegram, Slack or email. If your agent is a chat participant, or open source is a must, give Novu a serious look. Pushary puts the question on your user's lock screen, and no answer means no.

Feature comparison

FeaturePusharyNovu
Returns the person's answer to the code that is waitingCORE
Approve or Deny on the phone's lock screen
No answer means no, by default
Yes/no, a choice from a list, or a typed answer
Your users connect their phone with a linkCONNECT
Look up any decision by id in the API
Approve/deny cards on agent tool calls
Two-way agent conversations in Slack, Teams, WhatsApp, Telegram
Embeddable in-app notification inbox
Open-source notification core, self-hostable
Pricing
Partner $99/mo, public and self-serve
Free tier, paid plans from $30/mo

Competitor rows reflect Novu's public docs and pricing pages as of October 2026. Their agent platform is new and moving fast, so check their docs for current state.

Frequently asked questions

Doesn't Novu already have human-in-the-loop tool approval?

Yes, and it is real. Inside a Novu-run agent conversation, setting needsApproval on a tool (or calling ctx.toolApproval.request in a custom-code agent) posts an approve/deny card into the user's channel and pauses the agent's turn. The decision then arrives in a separate handler call. That is a turn-based pause inside Novu's conversation runtime. Outside a chat, Novu's human CLI sends the question to Telegram, Slack or email and waits for the answer. Pushary's decisions.ask() also waits and returns the answer, and the question goes to your user's lock screen.

What kinds of answers can each collect?

Novu's tool approval card is approve or deny. Its ask and choose flows, and its human CLI, can also collect a choice or a typed answer. Pushary asks your user a yes/no question, a choice from a list, or for a typed answer, and returns the answer to the code that asked.

What happens when nobody responds?

In Pushary, the action does not run. When the time you set runs out, the request closes as not approved and the expiry is saved. Novu's tool-approval docs show no timeout, reminder or expiry policy for a pending card. A new user message in the conversation auto-denies pending approvals, so the outcome depends on chat activity rather than a clock you set. When Novu's human CLI times out, the request stays pending and the command exits with code 11.

Where do the approvals live afterwards?

In Novu, they live in the conversation context (ctx.history). Its dashboard shows conversation history and tool activity, and its REST API reference documents no decisions resource to query. Pushary saves every question and answer. You can read any decision by id through the API. Add a callback URL and each answer is sent to your server as a signed webhook.

When is Novu the right choice?

In two clear cases. If you want open-source notifications (multi-channel workflows, digest and delay steps, an embeddable inbox) and might self-host, Novu is a strong pick. And if you are building a chat agent that lives in Slack, Teams, WhatsApp or Telegram, Novu Connect solves the channel plumbing, identity resolution and threading, with approval cards included. Its human CLI also lets any agent ask a person over Telegram, Slack or email. Pick Pushary when an agent must stop, reach a specific user on their phone's lock screen, and treat no answer as no.

Keep exploring

Approve or Deny from the lock screen.

Connect each user once with a link. Then ask before the risky step, and your code waits for the answer. No answer means no, and every answer is saved. Works with the Vercel AI SDK, LangGraph, CrewAI, Mastra, the OpenAI Agents SDK, Eve, Hermes and MCP.

Start free