Changelog
Version history, new features, and breaking changes for Pushary
Antigravity CLI, Codex and corrected notes, October 2026
Current versions:
- CLI (
pushary, also published as@pushary/agent-hooks): 1.9.23 - Pushary for Mac: 0.1.66
- Server SDK (
@pushary/server): 2.2.1 - Python SDK (
pushary): 2.2.0
This page skipped the releases between July and October. Every CLI release has its own notes in the CLI changelog, and every Pushary for Mac release has notes on its releases page. This entry covers October 1 to 5.
Security
- A read-only check approved some commands that hide code. From October 1 to October 3, CLI 1.9.1 to 1.9.5 and the server's gate (which Pushary for Mac and the editor plugins use) treated a few shell forms as read-only when they are not: shell arithmetic (
$[ ]), subscripted parameters andprintf -vcan make the shell run text it was given as data. A command built that way could run without asking, with no rule of yours involved. An escaped;,&or|could also hide a destructive word from the check that keeps a broad Bash auto-approve away from destructive commands. CLI 1.9.6 and the server fixed both on October 3, andhermes-plugin-pushary0.5.9 shipped the same day. Update withnpx pushary@latest upgrade. Automatic updates install it at the next session start. - A
printfthat hides code was approved as a read. Through CLI 1.9.22, the server's gate passedprintfwith a numeric conversion such as%dor%xas read-only. zsh, the default shell on a Mac, evaluates the argument of a numeric conversion as arithmetic, so an argument like'PWD[$(command)]'ran the command without asking. CLI 1.9.23 and the server fixed it on October 5. Aprintfthat only prints text, or only plain numbers, still runs without asking. - Codex with approvals off ran a call you handed to your machine. With Codex's approval policy set to never, answering "Handle on your machine" on your phone let the call run, a destructive one included, because Codex has no prompt of its own there. Since CLI 1.9.23 and the October 5 server, that answer refuses the call. With Codex's own prompts on, the call still goes to that prompt.
- Antigravity CLI ran calls once a subscription ended. Pushary is agy's only gate, and when the subscription had ended a call Pushary would ask about ran with nothing asking. Since CLI 1.9.23 it is refused with a message that says to renew, or to disconnect agy so its own setting comes back.
New
- Antigravity CLI (
agy).pushary setupand Pushary for Mac connect it. Its shell commands, file writes and edits, and MCP calls wait for your answer on your phone or your Mac. Pushary is agy's only gate: when you have not chosen an agy mode, setup setstoolPermissiontoalways-proceed, and disconnecting puts it back. A call nobody answers, or one Pushary cannot decide, is blocked. Antigravity CLI - Phone start in Pushary for Mac. The Mac app can start agent sessions from your phone without the CLI. It is off by default. Turn it on in the app's Settings.
- fx in Pushary for Mac connects natively over MCP, with no Node needed.
- The CLI's
pair,sign-outanddisconnect fx.pairandsign-outare the new names forconnectandlogout, which still work. CLI reference
Changed
- New workspaces start on When I'm out. Existing workspaces keep their mode. Under When I'm out your phone is asked when you are away from the computer, and at the keyboard the agent's own prompt asks you. Since June these docs called When I'm out the default, while workspaces created on the web started on Every time. Now both agree.
- Agents with no prompt of their own ask your phone every time. When the Pushary CLI or the Cursor plugin runs the gate, these wait for your answer for your policy's timeout, under When I'm out and also while you are at the keyboard: Cursor file edits, sessions the CLI starts from your phone, Antigravity CLI, a Codex edit outside your agreed scope, and Codex with its approval policy set to never. Before, they were often refused with nobody asked. For Codex with approval never, a call nobody answers is now refused. Before, it ran once the wait ended. When nobody answers
- Codex asks less, and asks about scope. In Every time, Pushary asks before a Codex call only when it leaves the scope you agreed, matches a rule or preset you set, destroys, rewrites history, reaches the network, or deletes a file. A Codex edit outside your agreed scope is now asked or refused. Before, Codex applied it without asking.
- More read-only commands run without asking, for every agent.
rg,sort,uniq,sleep,pgrep,git branch --show-current, and Codex'swait_threadsandsend_message_to_thread. Options that run another program or write a file still ask. A deny rule now blocks read-only commands too. This is in CLI 1.9.12 and, through the server, in Pushary for Mac and the editor plugins from October 4. - An interrupted approval stops the call. When an approval is cancelled, expires, cannot be recorded or withdrawn, or Pushary for Mac quits or signs out while an agent waits, the call is stopped and the question is withdrawn. In Claude Code the stop also ends the agent's turn. Before, the server denied only that call, and Pushary for Mac sent it back to the agent's own prompt. This is on the server and in Pushary for Mac 0.1.66.
- The daily budget counts Pushary for Mac sessions. A Mac that runs agents only through the app can now reach the budget and stop its agents. The app sends token counts, never prices, and the server prices them. A session the CLI and the app both report is charged once.
- Pushary for Mac opens at login after a new install, and
brew uninstall --zaprevokes the Mac's device key on pushary.com before deleting it. pushary clean --everythingrevokes the keys the CLI wrote before removing them.
Fixed
- Cookie consent on pushary.com. PostHog captured nothing before consent, but it still stored its identity cookie and browser storage before you answered, and kept a cookie after Reject All. Since October 4 nothing is stored until you accept. Visitors in the EEA, the UK, Switzerland, Canada and Australia now have a "Cookie settings" link to change their answer, and the banner appears on your first click, key press or scroll instead of after a timer.
Corrections
- The CLI changelog entries for 1.9.8, 1.9.12, 1.9.13, 1.9.15, 1.9.17 and 1.9.18 were incomplete, and 1.9.17 said something the code does not do. They were corrected on October 4, and each corrected entry says what changed.
- Pushary for Mac 0.1.66 was released with no notes. They were added to its releases page on October 4. From the next release, the update window in the app shows the notes too.
- This page listed Server SDK 1.4.0 and 1.0.1 while 2.0.0 had shipped on September 5. The SDK versions and breaking changes below are now current.
Claude Agent SDK adapter, September 2026
@pushary/claude-agent-sdk 0.1.0 is a canUseTool for the Claude Agent SDK. Before a
tool that needs permission runs, it asks your user on their phone and returns allow or
deny. A denial, an expiry or no answer all deny, and cancelling the run stops the wait.
See the Claude Agent SDK page.
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.
Initial release, January 2026
Versions at release:
- 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.
Server SDK and Python SDK 2.0
Upgrade the framework adapter together with the SDK. Durable helpers now require an explicit idempotencyKey tied to the run and the step. The 0.3 LangGraph, Mastra and OpenAI Agents adapters support it. Earlier adapters must stay on the 1.x SDK until they are upgraded. Independent blocking calls no longer share a decision because their question text matches.
Version 2.1 changed how human gate keys are built. Finish operations already in progress on the SDK version that started them, or migrate their stored bindings yourself. Do not replay an operation that already ran through the new key scheme.
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
Server SDK and Python SDK 2.0.0, September 5, 2026
Durable helpers require an explicit idempotencyKey, independent blocking calls no longer reuse a decision by question text, and @pushary/mastra 0.3 requires an operationId for durable inputs. See Server SDK and Python SDK 2.0.
Platform 1.0.0 / SDK 1.0.5 / Server SDK 1.0.1
Initial release, no breaking changes.
SDK Versions
CLI (pushary)
Current: 1.9.18, also published as @pushary/agent-hooks. See the CLI changelog.
Client SDK (@pushary/sdk)
Current: 1.1.1
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: 2.2.1
Compatibility:
- Node.js 18.0.0 or higher
- TypeScript 5.0 or higher (optional)
- Works with Pushary API v1
Python SDK (pushary)
Current: 2.2.0
Compatibility:
- Python 3.9 or higher
Roadmap from January 2026
This is the push notifications roadmap as it was published in January 2026. It is kept here as published and is not a current plan.
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
Security fixes are listed on this page under the release that ships them, with what was affected and for how long. Report a vulnerability to business@pushary.com.
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:
Where each part of Pushary publishes its release notes:
- CLI: the CLI changelog, also inside the package on npm.
- Pushary for Mac: the releases page, and the update window in the app.
- Pushary app for iPhone and Android: the release notes in the App Store and Google Play.
- Framework adapters and SDKs: the
CHANGELOG.mdin each package on npm and PyPI. - Server changes: this page. A change on the server can change what your agents see without a new CLI or app release.
Breaking changes are listed under Breaking Changes with a migration guide.
Feedback
Have feedback or feature requests?
- Email: business@pushary.com
- Docs: the feedback buttons at the bottom of each docs page
- Enterprise customers: Contact your account manager
We review all feedback and use it to shape our roadmap.