Changelog
Version history, new features, and breaking changes for Pushary
Enforced approval gates, August 2026
Until now every adapter shipped one shape: a tool the model chooses to call. A model in a hurry can decline to call it, which makes it a suggestion. Every framework we support had already shipped a real gate the runtime evaluates before a tool runs, and no adapter of ours used it. This wave uses all of them, so "ask a human" and "this cannot happen without a yes" become two things you pick between. See the adapters guide.
Current SDK versions:
- Server SDK (
@pushary/server): 1.4.0 - Python SDK (
pushary): 1.4.0
New
@pushary/ai-sdkpusharyApproval/pusharyToolApproval. Plugs into the AI SDK'stoolApproval, which runs before a tool executes. Gate one tool by name, a named set, or the whole run. Needsai@7; the ask tool still works fromai@5.@pushary/openai-agentsandpushary-openai-agents:resolvePusharyInterruptions/resolve_pushary_interruptions. The OpenAI Agents SDK'sneedsApprovalonly decides that a human is needed and then stops the run withresult.interruptions; nothing asks anyone. This asks about each interruption in order, approves or rejects it on the run state, and hands a denial back to the model as the rejection message.@pushary/mastraresolvePusharyApprovals. The same split in Mastra:requireApprovalsuspends the run, this asks and then resumes or declines. With norunspassed it drains the agent's own suspended runs, so a background worker can clear a whole thread.@pushary/server/adaptersandpushary.adapters. The kernel every official adapter is built on, now public in both languages. Writing an adapter for an in-house harness is a thin binding overaskExternalUser,createDurableDecisionandcreateGaterather than a reimplementation of idempotency, fail-closed semantics and callback verification.
Changed
- Every adapter now shares one kernel instead of carrying its own copy of the same ~150 lines. Public APIs are unchanged, and a bug fixed in the kernel is fixed in all of them at once.
@pushary/everequireseve@0.31or newer, and its README'spusharyApprovalexample was wrong: Eve names a tool by its file path, sodefineTooltakes nonamefield and does requiredescription. The old snippet did not compile.- The three PyPI adapters now run in CI. They never had before.
Framework adapters, July 2026
New wrapper packages so each framework gets a ready-made human-in-the-loop tool, not a
snippet to paste. Every one is a thin, fail-closed wrapper over the same two-call
contract (enroll + decisions.ask), so there is no new durability to trust. See the
adapters guide.
New
@pushary/langgraph/pushary-langgraph. A blockingask_humanfor a LangGraph node, pluspushary_interruptthat wraps LangGraph's nativeinterrupt()for a durable, webhook-resumed wait. The idempotency key is derived fromexternal_id + node + question, so a node that re-runs on resume never pages the human twice.@pushary/mastra.createPusharyAskToolfor a blocking approval, andpusharyApprovalStepfor a durable Mastra workflow step that suspends and resumes on a signed webhook.@pushary/durable. Orchestrator-agnostic building blocks for Inngest, Temporal, and Vercel Workflow:createApprovalopens the decision,resolveApprovalverifies and parses the callback in one call. No framework dependency of its own.@pushary/openai-agents/pushary-openai-agents. A function tool for the OpenAI Agents SDK that bindsexternalIdin code, so a prompt-injected model cannot ask the wrong person.pushary-crewai.make_ask_human_tool(external_id)returns a CrewAIBaseToolthat replaces the consolehuman_input=Trueprompt with a phone approval.- Hermes partner tools.
hermes-plugin-pushary0.4.0 addspushary_enrollandpushary_ask_end_user, so a Hermes agent in gateway mode can ask its own end-users durably over the REST decisions ledger.
Partner platform, July 2026
Current SDK versions:
- Server SDK (
@pushary/server): 1.3.2 - Python SDK (
pushary): 1.3.2
This wave hardens the embed decisions path for partners running human-in-the-loop for their own end-users.
New
- Reachability signal. A decision addressed to an end-user now returns
reachable,reachableChannels, anddeviceCountat create time, so an approve-gate can tell "no human was reachable" apart from "the human declined." PassrequireReachable: trueto refuse with a 409 instead of opening a decision that reaches nobody. Embed - Callbacks echo your context. The signed webhook body is now
{ correlationId, answer, value, answeredAt, context }.answerstays canonical (valueis an alias), andcontextechoes whatever you passed at create time, so a stateless handler can carry its own run id through the callback without keeping a map. NewparseDecisionCallbackhelper in both SDKs. - Per-end-user (bound) keys. Mint a key bound to one end-user for a session with
keys.issue({ externalId }), hand it to the agent, and revoke it withkeys.revoke(keyPrefix). A bound key can only create or resolve decisions and enroll that exact user, over both the REST API and MCP, so a prompt-injected agent acting for one user can never reach another.
Remote Control, July 2026
Current agent-side version:
- Agent hooks (
@pushary/agent-hooks): 0.46.0
This wave closes the distance between "my agent stopped and I am not at my desk" and "I handled it from my phone." Your phone now shows what each agent actually did, answers its real questions, warns you when one dies, and can drive an agent that has gone completely idle — from the same pushary claude you already run, no flag.
New
- Reach an idle agent from your phone — by default. Run
pushary claudeand you get the exact native Claude Code terminal. The moment you send an instruction from your phone, Pushary takes the wheel and drives the agent, even if it was sitting fully idle; press Ctrl-] to take the terminal back. It is the same session throughout, so nothing is lost across the hand-off. No flag to remember: the reach is on whenever you launch throughpushary claude. It sets itself up on first run and uses your existing Claude login, never a key of ours.--remotestarts headless for a kick-off-and-walk-away run. With no Pushary key, or for a one-shot-pprint,pushary claudestays a transparent passthrough that behaves exactly likeclaude. - Real questions on your phone. When your agent asks a multiple-choice question, the options are pushed to your phone and your tap answers it in place, instead of the question waiting at a terminal picker.
- Live plan mirror. As the agent updates its to-do list, your phone shows the checklist ticking off, so you can watch progress without reading the terminal. Control Panel
- Real completion summaries. The finish notification now says what the agent actually finished, taken from its last message, instead of a generic "done."
- Rate-limit and crash alerts. If a session dies on a rate limit, an overload, or an auth or billing error, your phone gets told instead of the run going silent.
- More tools reach your phone. Tools that per-tool matching could never gate (web fetch, web search, sub-agent Task calls, and MCP tools) now route their approval to your phone as well. Policies
- Session presence. A session appears the moment it starts and drops to offline the moment it truly closes, rather than only looking idle between turns. Control Panel
Changed
- Remote mode needs no setup step. The first preview asked you to install the Agent SDK by hand and run
claude setup-tokenif you signed in with a subscription. Nowpushary claude --remotefetches what it needs on first run and uses your existing Claude login, whether that is a subscription, an API key, Bedrock, or Vertex, so a plain install is all it takes. It reuses theclaudeyou already have rather than shipping its own copy, so the download stays small. - In Claude Code's auto, plan, and don't-ask modes, Pushary now steps out of the way instead of pushing a second approval on top of Claude Code's own. Auto mode no longer buzzes your phone for calls it was going to approve anyway.
pushary upgradenow rewrites your Claude Code settings, so newly added hooks take effect on upgrade instead of staying inert until a fresh setup.pushary doctornow checks every installed hook and tells you the one command to fix a missing one.
Fixed
- Failed tool calls are visible again. The post-tool hook was reading the wrong response field, so a tool that errored could look like it succeeded. Receipts and status now reflect real failures.
Intelligence Layer, June 2026
Current agent-side version:
- Agent hooks (
@pushary/agent-hooks): 0.14.0
Pushary started reading your decision history and proposing rules from it. It now shows what every agent is working on, records what they actually did, and brings the same depth to Codex that Claude Code already had.
New
- Policy Autopilot. Pushary mines your approval history and suggests the rules you keep approving by hand. Approve
git push14 times in a repo, get a one-tap rule that auto-approves it. Your phone buzzes less every week. Policies - Fleet Board. Fire several prompts and walk away. One board shows every agent as a card with its task title and live state (working, waiting on you, done, errored), answerable inline. Control Panel
- Agent Receipts. Every session ends with a receipt of what changed: files edited, commands run, commits created. Paths and command heads only, never your code. Searchable and exportable. (Agent Pro / Team.)
- Weekly digest. One email a week: how many times your agents stopped to ask, how many your policies cleared automatically, and the rules worth adding next.
- Codex native hooks. Codex now gets the full control loop through its native hooks: per-tool policy, phone approvals, the kill switch, task titles, and receipts. Setup writes
~/.codex/hooks.jsonon Codex 0.122 and above, with a notify fallback for older versions. Codex setup - Arg-aware policies. Rules now match command shape, not just tool name:
Bash(npm test:*),Bash(git status), or a bareBash. "Always denyrm -rf" is finally something you can express. Policies - Mobile-aware onboarding. Sign up on a phone and the flow connects your phone first, then emails you the one-line setup command for when you are back at your computer. No more dead-ending on a terminal step.
Changed
- A rule set to deny with a zero-second timeout now denies instantly with no push, instead of pushing and timing out into a deny. If you had such a rule, the push will stop. That is the rule doing what it says.
- The policies panel and the subscription page were redesigned: plain-language rules with controls behind a tap, and a calm billing page in place of the upgrade wall.
Fixed
- Accepted policy suggestions and saved rules take effect on the agent immediately, instead of waiting up to five minutes for the local cache to expire.
- The append-only audit trail now also pins the tool and command-target columns, so the immutable record covers receipts.
Awareness Layer — May 2026
Current agent-side version:
- Agent hooks (
@pushary/agent-hooks): 0.9.0
The multi-agent control layer for AI coding agents. Run agents in parallel, see which one is blocked, and stay in control from your phone.
New
- Per-agent identity. Every session is keyed by
sessionId+ a hashedmachineId, so parallel windows of the same agent no longer collapse into one row. Control Panel - Multi-agent control panel &
list_sessions. A read-only MCP tool and dashboard view of the live fleet, with a Blocked Queue that floats the agent waiting on you to the top. Control Panel - Kill switch. Halt a runaway session from the dashboard or the lock screen — denies every tool call, even auto-approved ones, until you release it. (Agent Pro / Team.) Kill Switch
- Permission policy editor. Set per-tool approval mode, timeout, and timeout action in the dashboard. Policies
- Teach-on-Tap. "Always allow this tool" on the decision page mints a durable auto-approve policy. Policies
- Append-only audit trail + export. Database-enforced immutable record of every question, approval, and notification, with CSV/JSON export. (Agent Pro / Team.) Audit Trail
- Delivery receipts, fallback & telemetry. Web-push acknowledgment tracking, latency telemetry, and an email fallback for undelivered agent approvals. Receiving Notifications
- Agent pricing tiers. Free / Agent / Agent Pro / Team, every paid plan a card-first 7-day trial. Pricing
Fixed
- Parallel-agent decision loss. Ending one session no longer cancels another live session's pending approval — cleanup is now scoped to the finishing session.
- Per-session rate limits. Approval questions are bounded per session (3) and per site (25) so a fan-out of agents is never throttled by a single one.
- MCP scaling. Replaced a full Redis keyspace scan with a per-site pending-question index.
Latest Release - January 2026
Current versions:
- Client SDK (
@pushary/sdk): 1.0.5 - Server SDK (
@pushary/server): 1.0.1 - Platform: 1.0.0
Initial public release of Pushary push notification platform.
Features
Client SDK (@pushary/sdk)
- Browser push notification support (Chrome, Firefox, Safari, Edge, Opera)
- Service worker integration
- Auto-prompt and manual permission flow
- Subscriber identification with external IDs
- Tag-based segmentation
- Click and impression tracking
- iOS Safari PWA support
- Retry queue for offline reliability
- Device detection utilities
- TypeScript support with full type definitions
Server SDK (@pushary/server)
- Complete REST API client for Node.js
- Subscriber management (list, get, update, delete, count)
- Campaign management (create, update, send, pause, resume, stats)
- Template management for reusable notifications
- Direct notification sending (by subscriber ID, external ID, or tags)
- Flow automation (trigger-based notification sequences)
- TypeScript support with full type definitions
Platform Features
- Multi-site support with isolated VAPID keys
- Team collaboration with role-based access
- A/B testing for campaigns (Starter plan and above)
- Flow automation with triggers and steps
- Analytics dashboard with delivery and engagement metrics
- Rate limiting per plan tier
- Plan-based feature gating
- Subscriber segmentation with tags and filters
- Campaign scheduling
- Data retention based on plan
Authentication
- Two-tier API key system:
- Site Key (
pk_xxx) for client-side use - Full API Key (
pk_xxx.sk_xxx) for server-side use
- Site Key (
- Domain validation for client requests
- SHA-256 hashed API key storage
- Rate limiting per workspace and plan
Integrations
- Shopify integration (via extension)
- Webhook support for events
- REST API for custom integrations
API Endpoints
Client SDK Endpoints:
POST /api/v1/subscribe- Subscribe to notificationsPOST /api/v1/unsubscribe- Unsubscribe from notificationsPOST /api/v1/track- Track eventsPOST /api/v1/identify- Set external ID and tagsPOST /api/v1/subscription-change- Update subscription endpointGET /api/v1/site/:siteSlug- Get site configuration
Server API Endpoints:
POST /api/v1/server/send- Send notifications directlyGET /api/v1/server/subscribers- List subscribersGET /api/v1/server/subscribers/:id- Get subscriberPATCH /api/v1/server/subscribers/:id- Update subscriberDELETE /api/v1/server/subscribers/:id- Delete subscriberGET /api/v1/server/subscribers/count- Get subscriber countGET /api/v1/server/campaigns- List campaignsPOST /api/v1/server/campaigns- Create campaignGET /api/v1/server/campaigns/:id- Get campaignPATCH /api/v1/server/campaigns/:id- Update campaignDELETE /api/v1/server/campaigns/:id- Delete campaignPOST /api/v1/server/campaigns/:id/send- Send campaignPOST /api/v1/server/campaigns/:id/pause- Pause campaignPOST /api/v1/server/campaigns/:id/resume- Resume campaignGET /api/v1/server/campaigns/:id/stats- Get campaign statisticsGET /api/v1/server/templates- List templatesPOST /api/v1/server/templates- Create templateGET /api/v1/server/templates/:id- Get templatePATCH /api/v1/server/templates/:id- Update templateDELETE /api/v1/server/templates/:id- Delete templateGET /api/v1/server/flows- List flowsPOST /api/v1/server/flows- Create flowGET /api/v1/server/flows/:id- Get flowPATCH /api/v1/server/flows/:id- Update flowDELETE /api/v1/server/flows/:id- Delete flowPOST /api/v1/server/flows/:id/activate- Activate flowPOST /api/v1/server/flows/:id/pause- Pause flow
Pricing Plans
- Free: 100 subscribers, 500 notifications/month
- Starter: 5K subscribers, 25K notifications/month - €29/month
- Growth: 25K subscribers, 100K notifications/month - €99/month
- Enterprise: Unlimited, custom pricing
Known Limitations
- Free plan does not have API access (client SDK only)
- iOS Safari requires PWA installation (not available in browser tab)
- Service worker must be at root path (
/pushary-sw.js) - HTTPS required (except localhost for development)
- Rate limits vary by plan (100-1000 requests/minute)
- Data retention: 7-90 days depending on plan
Migration Guides
For New Users
No migration needed. Follow the Getting Started guide to begin.
Future Migrations
As Pushary evolves, migration guides will be added here for major version updates.
Deprecation Policy
Policy
- Breaking changes will be announced at least 90 days in advance
- Deprecated features remain functional during deprecation period
- Migration guides provided for all breaking changes
- Enterprise customers receive dedicated migration support
Current Deprecations
No deprecations at this time.
Breaking Changes
Platform 1.0.0 / SDK 1.0.5 / Server SDK 1.0.1
Initial release - no breaking changes.
SDK Versions
Client SDK (@pushary/sdk)
Current: 1.0.5
Compatibility:
- Works with Pushary API v1
- Supports all modern browsers (see Browser Support)
- Service worker compatible with all supported browsers
Server SDK (@pushary/server)
Current: 1.0.1
Compatibility:
- Node.js 18.0.0 or higher
- TypeScript 5.0 or higher (optional)
- Works with Pushary API v1
Upcoming Features
We're constantly improving Pushary. Here's what's on the roadmap:
Q1 2026
- Advanced segmentation with computed properties
- Webhook event stream
- Campaign A/B testing enhancements
- Custom notification actions
- Rich notification templates
Q2 2026
- Mobile SDKs (React Native, Flutter)
- Advanced analytics dashboard
- Predictive send time optimization
- Multi-language template support
- Workflow builder UI
Q3 2026
- AI-powered notification optimization
- Advanced automation rules
- Custom integrations marketplace
- Geo-targeting
- Time zone optimization
Future
- SMS and email channels
- In-app messaging
- Push notification previews
- Advanced permission prompts
- Message scheduling AI
Want to influence the roadmap? Contact us at business@pushary.com
Security Updates
We take security seriously. Security updates are released as needed and communicated via:
- Email to all workspace owners
- Dashboard notifications
- Status page updates
Current Status: All systems operational
API Versioning
Pushary uses URL-based API versioning:
- Current:
/api/v1/ - Future versions will be announced with migration guides
Version Support:
- Latest version: Full support
- Previous version: Security updates only (12 months)
- Older versions: No support
Getting Updates
Stay informed about new features and changes:
Documentation:
- This changelog is updated with every release
- Breaking changes are highlighted
- Migration guides provided when needed
Communication:
- Email announcements for major releases
- Dashboard notifications for updates
- Status page for incidents
Community:
- GitHub Discussions (coming soon)
- Twitter: @pushary (coming soon)
- Discord community (coming soon)
Feedback
Have feedback or feature requests?
- Email: business@pushary.com
- Dashboard: Send feedback button
- Enterprise customers: Contact your account manager
We review all feedback and use it to shape our roadmap.