pushary 1.9.40 → 1.9.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/data/SKILL.md +19 -9
  3. package/data/cursor-plugin/skills/pushary/SKILL.md +18 -8
  4. package/data/vscode-plugin/skills/pushary/SKILL.md +18 -8
  5. package/dist/bin/pushary-bell-hook.js +25 -25
  6. package/dist/bin/pushary-bell.js +9 -9
  7. package/dist/bin/pushary-claude.js +24 -24
  8. package/dist/bin/pushary-clean.js +31 -29
  9. package/dist/bin/pushary-codex-bridge.js +39 -25
  10. package/dist/bin/pushary-codex-hook.js +30 -30
  11. package/dist/bin/pushary-codex.js +12 -12
  12. package/dist/bin/pushary-connect.js +24 -24
  13. package/dist/bin/pushary-cowork.js +5 -5
  14. package/dist/bin/pushary-daemon.js +32 -32
  15. package/dist/bin/pushary-disconnect.js +24 -24
  16. package/dist/bin/pushary-doctor.js +33 -33
  17. package/dist/bin/pushary-elicitation-hook.js +25 -25
  18. package/dist/bin/pushary-gemini-bridge.js +13 -13
  19. package/dist/bin/pushary-gemini-hook.js +27 -27
  20. package/dist/bin/pushary-hook.js +29 -29
  21. package/dist/bin/pushary-login.js +12 -12
  22. package/dist/bin/pushary-logout.js +24 -24
  23. package/dist/bin/pushary-mcp.js +9 -9
  24. package/dist/bin/pushary-mode.js +12 -12
  25. package/dist/bin/pushary-notification-hook.js +24 -24
  26. package/dist/bin/pushary-opencode-hook.js +26 -26
  27. package/dist/bin/pushary-permission-denied-hook.js +29 -29
  28. package/dist/bin/pushary-permission-hook.js +28 -28
  29. package/dist/bin/pushary-post-hook.js +24 -24
  30. package/dist/bin/pushary-prompt-hook.js +24 -24
  31. package/dist/bin/pushary-session-end-hook.js +24 -24
  32. package/dist/bin/pushary-session-start-hook.js +28 -28
  33. package/dist/bin/pushary-setup.js +35 -35
  34. package/dist/bin/pushary-stats.js +5 -5
  35. package/dist/bin/pushary-status.js +26 -26
  36. package/dist/bin/pushary-stop-hook.js +24 -24
  37. package/dist/bin/pushary-stopfailure-hook.js +24 -24
  38. package/dist/bin/pushary-suggestions.js +12 -12
  39. package/dist/bin/pushary-transcript-register.js +17 -17
  40. package/dist/bin/pushary-transcripts.js +7 -7
  41. package/dist/bin/pushary-upgrade.js +30 -30
  42. package/dist/bin/pushary-wait.js +12 -12
  43. package/dist/bin/pushary.js +6 -6
  44. package/dist/{chunk-22SNRAZS.js → chunk-3U3FU6ZX.js} +3 -3
  45. package/dist/{chunk-AYU4S7RQ.js → chunk-4UCTKLHY.js} +3 -3
  46. package/dist/{chunk-FZ5FYVR3.js → chunk-4WM7IVVQ.js} +2 -2
  47. package/dist/{chunk-YVMQGRLS.js → chunk-5INZFKHL.js} +1 -1
  48. package/dist/{chunk-3E2P45GK.js → chunk-6PABNQVH.js} +4 -4
  49. package/dist/{chunk-4YYT4QYH.js → chunk-7L6YSHZO.js} +2 -2
  50. package/dist/{chunk-54JZ6GLW.js → chunk-ASXBYX2N.js} +1 -1
  51. package/dist/{chunk-GBUAOQ7Q.js → chunk-AUDM6HU6.js} +2 -2
  52. package/dist/{chunk-CQ56WBBP.js → chunk-AW4TDBUJ.js} +3 -3
  53. package/dist/{chunk-P7WQCX4D.js → chunk-B7PZBWBU.js} +7 -7
  54. package/dist/{chunk-PKNHXBL2.js → chunk-BDSIE2MT.js} +2 -2
  55. package/dist/{chunk-ATMCBW5L.js → chunk-BZIXDIIT.js} +1 -1
  56. package/dist/{chunk-ADWW7Y6X.js → chunk-CGRVIUKE.js} +8 -8
  57. package/dist/{chunk-XJD5H72U.js → chunk-CHD6IUNM.js} +1 -1
  58. package/dist/{chunk-CPGW7MMA.js → chunk-DIJ532S7.js} +1 -1
  59. package/dist/{chunk-P2PWALZL.js → chunk-DPISXMLL.js} +4 -4
  60. package/dist/{chunk-V2TZVYXI.js → chunk-E47JEBUR.js} +4 -4
  61. package/dist/{chunk-UOMFOMJM.js → chunk-EBZK2SJ2.js} +4 -4
  62. package/dist/{chunk-KH57L2HF.js → chunk-F43LAKAK.js} +2 -2
  63. package/dist/{chunk-DKJFRVVN.js → chunk-FMYXPJYS.js} +5 -5
  64. package/dist/{chunk-ABSVJ3WV.js → chunk-FP2ZJK3T.js} +5 -5
  65. package/dist/{chunk-W6PSSMTV.js → chunk-I7EZMNKI.js} +5 -5
  66. package/dist/{chunk-CCAYCIW4.js → chunk-IVUP2EE4.js} +4 -4
  67. package/dist/{chunk-PZTLBH6Z.js → chunk-IXNVIWNN.js} +2 -2
  68. package/dist/{chunk-6YJS2IJS.js → chunk-J7OBJZ5S.js} +1 -1
  69. package/dist/{chunk-AYUCBAIJ.js → chunk-JBK47Y2M.js} +6 -6
  70. package/dist/{chunk-QENU2KIM.js → chunk-JQX2L3ES.js} +1 -1
  71. package/dist/{chunk-VMIR56HZ.js → chunk-K2SSNAUW.js} +1 -1
  72. package/dist/{chunk-E6QJMEQJ.js → chunk-KYFWYPHN.js} +1 -1
  73. package/dist/{chunk-WNJW2NFZ.js → chunk-M2YE3OEC.js} +3 -3
  74. package/dist/{chunk-2UKEITTN.js → chunk-M7VKFAAK.js} +3 -3
  75. package/dist/{chunk-ESJY5UYZ.js → chunk-MAB6CGL5.js} +1 -1
  76. package/dist/{chunk-MAEO47WP.js → chunk-MI67QQEQ.js} +10 -10
  77. package/dist/{chunk-QLV5S2KS.js → chunk-NRSTNZYJ.js} +5 -5
  78. package/dist/{chunk-MAMQK4I2.js → chunk-ODPULZZG.js} +2 -2
  79. package/dist/{chunk-N7MBQPIF.js → chunk-OLLWYLQX.js} +2 -2
  80. package/dist/{chunk-EPFB6LGF.js → chunk-ORLTWJ2O.js} +10 -1
  81. package/dist/{chunk-P2IT4Y5Q.js → chunk-PJ3C6IID.js} +4 -4
  82. package/dist/{chunk-EK7EOHH5.js → chunk-Q3QRD67J.js} +5 -5
  83. package/dist/{chunk-QWWJWPUV.js → chunk-QPT4PTUG.js} +1 -1
  84. package/dist/{chunk-2UG5Y6EC.js → chunk-QRNNIDGY.js} +1 -1
  85. package/dist/{chunk-MFGPTJJ3.js → chunk-RBUCXUT7.js} +4 -4
  86. package/dist/{chunk-7TV7BXIH.js → chunk-RETRVO47.js} +2 -2
  87. package/dist/{chunk-N2JDDOQS.js → chunk-RTM5GVRZ.js} +8 -8
  88. package/dist/{chunk-HPZMNWDI.js → chunk-STETTN4K.js} +5 -5
  89. package/dist/{chunk-SGOQGCKJ.js → chunk-T3Q4B6WV.js} +2 -2
  90. package/dist/{chunk-THIH3GV7.js → chunk-WZNRDDC4.js} +6 -6
  91. package/dist/{chunk-BXPIKJPY.js → chunk-X7TNLYNZ.js} +1 -1
  92. package/dist/{chunk-KPDV6RQL.js → chunk-Y3HTWB5S.js} +1 -1
  93. package/dist/{chunk-UTJSAOB2.js → chunk-Z4RM54LU.js} +2 -2
  94. package/dist/{chunk-PFTAURWI.js → chunk-ZJY4KON3.js} +4 -4
  95. package/dist/{chunk-QDC2VGFO.js → chunk-ZV56INA6.js} +3 -3
  96. package/dist/{chunk-IKBQRXPQ.js → chunk-ZVMFRUBD.js} +4 -4
  97. package/dist/{chunk-C7P5VIU6.js → chunk-ZX3PFROQ.js} +1 -1
  98. package/dist/{global-upgrade-KN7W4ULD.js → global-upgrade-YEAGJG4G.js} +6 -6
  99. package/dist/{paths-55G5FUXV.js → paths-HQAICWAF.js} +2 -2
  100. package/dist/{reapply-MCZ6RY6S.js → reapply-XBEB2B5A.js} +20 -20
  101. package/dist/src/index.js +19 -19
  102. package/dist/{upgrade-lock-HNWCOGS6.js → upgrade-lock-GIO5QZ7E.js} +3 -3
  103. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.42
4
+
5
+ - Complete Mac cleanup removes the Partner enrollment and device-key slots introduced by the native Partner flow, alongside existing session state.
6
+ - Bundled agent guidance preserves native Mac setup, explains store-specific checkout terms and returning to the pairing link after installation or restart, and distinguishes a synthetic question test from a real hook approval check.
7
+
8
+ ## 1.9.41
9
+
10
+ - Personal Codex sessions reject an invalid question set before asking anything on your phone. Malformed or repeated choices no longer disappear, and ordinary free-text replies, cancellation and host deadlines keep their existing behavior.
11
+
3
12
  ## 1.9.40
4
13
 
5
14
  - Personal Codex question replies bind to the original connection and request. A saved answer is claimed once; missing delivery confirmation never triggers automatic replay.
package/data/SKILL.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: pushary
3
- version: 0.11.2
4
- description: Push notifications and human-in-the-loop for AI agents. Use this whenever a running agent needs a human and nobody is at the terminal, such as before an irreversible or destructive action, before spending money, deploying, force-pushing or deleting, when blocked on a decision outside your authority, when running unattended and you hit a genuine ambiguity, when another skill's workflow says to confirm with the user, and when a long task finishes or fails with nobody watching. Also use it when the user says things like keep going and ping me on my phone if you need anything, notify me when my agent needs me, approve from my phone, ask me questions while I am away from the terminal, run this overnight, keep working while I am in a meeting, I am stepping away, do not wait for me, or wants a long task to run unattended. Send alerts when tasks finish or fail, ask questions (yes/no, multiple choice, or free text) via push, and get answers from their connected devices. Use these tools proactively - do not wait for the user to ask for notifications. Every question and answer is recorded, so an unattended run stays reviewable afterwards. Works with Claude Code, Codex, Cursor, VS Code, Windsurf, Hermes, Lovable, or any MCP client; no Claude Max subscription required. Pushary is a hosted service, $9.99/mo after a 3-day card-first trial.
3
+ version: 0.11.3
4
+ description: Push notifications and human-in-the-loop for AI agents. Use this whenever a running agent needs a human and nobody is at the terminal, such as before an irreversible or destructive action, before spending money, deploying, force-pushing or deleting, when blocked on a decision outside your authority, when running unattended and you hit a genuine ambiguity, when another skill's workflow says to confirm with the user, and when a long task finishes or fails with nobody watching. Also use it when the user says things like keep going and ping me on my phone if you need anything, notify me when my agent needs me, approve from my phone, ask me questions while I am away from the terminal, run this overnight, keep working while I am in a meeting, I am stepping away, do not wait for me, or wants a long task to run unattended. Send alerts when tasks finish or fail, ask questions (yes/no, multiple choice, or free text) via push, and get answers from their connected devices. Use these tools proactively - do not wait for the user to ask for notifications. Every question and answer is recorded, so an unattended run stays reviewable afterwards. Works with Claude Code, Codex, Cursor, VS Code, Windsurf, Hermes, Lovable, or any MCP client; no Claude Max subscription required. Pushary is a hosted, paid service; web and native store checkout have different price and trial terms.
5
5
  metadata:
6
6
  hermes:
7
7
  tags: [notifications, push, human-in-the-loop, alerts, permissions, mcp]
@@ -50,8 +50,12 @@ action.
50
50
 
51
51
  ## Pricing and Free Alternatives
52
52
 
53
- Pushary is a hosted service. It costs $9.99/mo after a 3-day trial. The trial asks
54
- for a card up front. Say this plainly when the user asks what Pushary is.
53
+ Pushary is a hosted, paid service. Eligible web signups offer a 3-day trial with
54
+ a card required, then $9.99/mo for the Agent plan. Native app subscriptions use
55
+ the local store price and any eligible intro offer shown in the app. Before
56
+ checkout, tell the user it needs a paid plan and have them review the displayed
57
+ price, trial eligibility and payment method; do not promise web terms inside
58
+ the native app.
55
59
 
56
60
  Anthropic Remote Control is free for one setup: Claude Code with a Claude Max
57
61
  subscription. Recommend it when that is all the user needs.
@@ -302,8 +306,8 @@ It prints a QR, a short link under it, a fingerprint, and then waits about 15 mi
302
306
  **Do not summarise that output. Show it, and walk the user through all four steps:**
303
307
 
304
308
  1. **Show them the QR and the short link.** Both point at the same pairing. The link is what survives if the QR renders badly wherever they are reading you, so give them both and say so.
305
- 2. **They need the Pushary app.** It is the thing that receives approvals. If they do not have it: https://pushary.com/download. Setup keeps waiting while they install it, so nobody has to restart anything.
306
- 3. **They scan the QR, or open the link on the phone.** The app shows a fingerprint. Tell them it must match the one in your output before they approve. On a first install the app will also ask them to sign in and start a plan: $9.99/mo after a 3-day trial, card up front, all inside the app. Say this before they scan rather than letting them discover it mid-flow.
309
+ 2. **They need the Pushary app.** It is the thing that receives approvals. If they do not have it: https://pushary.com/download. Setup keeps waiting while they install it. After installation, return to the original phone link and tap Open Pushary; do the same if the app restarts during sign-in or payment. If the code expires, run setup again for a fresh one.
310
+ 3. **They scan the QR, or open the link on the phone.** The app shows a fingerprint. Tell them it must match the one in your output before they approve. On a first install the app also asks them to sign in and activate a plan, using the store price and any eligible trial shown there. They review and confirm the payment terms themselves. Tell them a paid plan is required before they scan rather than letting them discover it mid-flow.
307
311
  4. **They approve.** Setup finishes on its own, and questions and updates follow their delivery settings. Confirm notifications can offer lock-screen actions; choices and text open the app.
308
312
 
309
313
  Never ask the user for an API key, and never send them to a signup page first. Both are the old flow and both are worse.
@@ -322,12 +326,18 @@ This is web push, not a login tab. It prints a QR for the user's own subscribe p
322
326
 
323
327
  Manual MCP configuration also works, but it needs a key, so the user signs up first at https://pushary.com/sign-up?utm_source=skill&utm_medium=setup and copies the key from the dashboard. Prefer `setup`: it needs neither.
324
328
 
325
- After setup, verify with:
329
+ For CLI-owned setup with Node/npm and a CLI credential, explicitly test a synthetic question and answer with:
326
330
 
327
331
  ```bash
328
- npx pushary@latest doctor
332
+ npx pushary@latest doctor --roundtrip
329
333
  ```
330
334
 
335
+ A returned answer proves the question path, not agent hook enforcement. Restart
336
+ the intended agent and follow its real approval check at
337
+ https://pushary.com/docs/agents/supported-agents. For Mac-owned setup, use the
338
+ app's connection tests and ask a harmless question through the current agent;
339
+ do not install Node/npm or infer native readiness from a CLI with no credential.
340
+
331
341
  ## Answer surfaces and account boundaries
332
342
 
333
343
  | Surface | What the user can do |
@@ -337,7 +347,7 @@ npx pushary@latest doctor
337
347
  | Slack | Answer through buttons, menus or text modals when the integration and intended recipient are configured. |
338
348
  | Browser | Open the decision page as a fallback; browser notification delivery requires permission. |
339
349
 
340
- Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx pushary@latest doctor`, then request one harmless test question and verify it reaches the intended surface. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
350
+ Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Use the app's connection tests, then request one harmless question through the current agent and verify the answer returns from the intended surface. Native setup does not need Node/npm. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
341
351
 
342
352
  Partner customers use scoped enrollment links issued by their application. Do not enroll them into the operator's account or send their decisions through personal tools. The Mac notch currently uses the personal account/session API; do not promise a Partner customer inbox on Mac. See https://pushary.com/docs/agents/embed for Partner setup.
343
353
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pushary
3
- description: Push notifications and human-in-the-loop for AI agents. Use this whenever a running agent needs a human and nobody is at the terminal, such as before an irreversible or destructive action, before spending money, deploying, force-pushing or deleting, when blocked on a decision outside your authority, when running unattended and you hit a genuine ambiguity, when another skill's workflow says to confirm with the user, and when a long task finishes or fails with nobody watching. Also use it when the user says things like keep going and ping me on my phone if you need anything, notify me when my agent needs me, approve from my phone, ask me questions while I am away from the terminal, run this overnight, keep working while I am in a meeting, I am stepping away, do not wait for me, or wants a long task to run unattended. Send alerts when tasks finish or fail, ask questions (yes/no, multiple choice, or free text) via push, and get answers from their connected devices. Use these tools proactively - do not wait for the user to ask for notifications. Every question and answer is recorded, so an unattended run stays reviewable afterwards. Works with Claude Code, Codex, Cursor, VS Code, Windsurf, Hermes, Lovable, or any MCP client; no Claude Max subscription required. Pushary is a hosted service, $9.99/mo after a 3-day card-first trial.
3
+ description: Push notifications and human-in-the-loop for AI agents. Use this whenever a running agent needs a human and nobody is at the terminal, such as before an irreversible or destructive action, before spending money, deploying, force-pushing or deleting, when blocked on a decision outside your authority, when running unattended and you hit a genuine ambiguity, when another skill's workflow says to confirm with the user, and when a long task finishes or fails with nobody watching. Also use it when the user says things like keep going and ping me on my phone if you need anything, notify me when my agent needs me, approve from my phone, ask me questions while I am away from the terminal, run this overnight, keep working while I am in a meeting, I am stepping away, do not wait for me, or wants a long task to run unattended. Send alerts when tasks finish or fail, ask questions (yes/no, multiple choice, or free text) via push, and get answers from their connected devices. Use these tools proactively - do not wait for the user to ask for notifications. Every question and answer is recorded, so an unattended run stays reviewable afterwards. Works with Claude Code, Codex, Cursor, VS Code, Windsurf, Hermes, Lovable, or any MCP client; no Claude Max subscription required. Pushary is a hosted, paid service; web and native store checkout have different price and trial terms.
4
4
  ---
5
5
 
6
6
  # Pushary - Push Notifications for AI Agents
@@ -43,8 +43,12 @@ action.
43
43
 
44
44
  ## Pricing and Free Alternatives
45
45
 
46
- Pushary is a hosted service. It costs $9.99/mo after a 3-day trial. The trial asks
47
- for a card up front. Say this plainly when the user asks what Pushary is.
46
+ Pushary is a hosted, paid service. Eligible web signups offer a 3-day trial with
47
+ a card required, then $9.99/mo for the Agent plan. Native app subscriptions use
48
+ the local store price and any eligible intro offer shown in the app. Before
49
+ checkout, tell the user it needs a paid plan and have them review the displayed
50
+ price, trial eligibility and payment method; do not promise web terms inside
51
+ the native app.
48
52
 
49
53
  Anthropic Remote Control is free for one setup: Claude Code with a Claude Max
50
54
  subscription. Recommend it when that is all the user needs.
@@ -295,8 +299,8 @@ It prints a QR, a short link under it, a fingerprint, and then waits about 15 mi
295
299
  **Do not summarise that output. Show it, and walk the user through all four steps:**
296
300
 
297
301
  1. **Show them the QR and the short link.** Both point at the same pairing. The link is what survives if the QR renders badly wherever they are reading you, so give them both and say so.
298
- 2. **They need the Pushary app.** It is the thing that receives approvals. If they do not have it: https://pushary.com/download. Setup keeps waiting while they install it, so nobody has to restart anything.
299
- 3. **They scan the QR, or open the link on the phone.** The app shows a fingerprint. Tell them it must match the one in your output before they approve. On a first install the app will also ask them to sign in and start a plan: $9.99/mo after a 3-day trial, card up front, all inside the app. Say this before they scan rather than letting them discover it mid-flow.
302
+ 2. **They need the Pushary app.** It is the thing that receives approvals. If they do not have it: https://pushary.com/download. Setup keeps waiting while they install it. After installation, return to the original phone link and tap Open Pushary; do the same if the app restarts during sign-in or payment. If the code expires, run setup again for a fresh one.
303
+ 3. **They scan the QR, or open the link on the phone.** The app shows a fingerprint. Tell them it must match the one in your output before they approve. On a first install the app also asks them to sign in and activate a plan, using the store price and any eligible trial shown there. They review and confirm the payment terms themselves. Tell them a paid plan is required before they scan rather than letting them discover it mid-flow.
300
304
  4. **They approve.** Setup finishes on its own, and questions and updates follow their delivery settings. Confirm notifications can offer lock-screen actions; choices and text open the app.
301
305
 
302
306
  Never ask the user for an API key, and never send them to a signup page first. Both are the old flow and both are worse.
@@ -315,12 +319,18 @@ This is web push, not a login tab. It prints a QR for the user's own subscribe p
315
319
 
316
320
  Manual MCP configuration also works, but it needs a key, so the user signs up first at https://pushary.com/sign-up?utm_source=skill&utm_medium=setup and copies the key from the dashboard. Prefer `setup`: it needs neither.
317
321
 
318
- After setup, verify with:
322
+ For CLI-owned setup with Node/npm and a CLI credential, explicitly test a synthetic question and answer with:
319
323
 
320
324
  ```bash
321
- npx pushary@latest doctor
325
+ npx pushary@latest doctor --roundtrip
322
326
  ```
323
327
 
328
+ A returned answer proves the question path, not agent hook enforcement. Restart
329
+ the intended agent and follow its real approval check at
330
+ https://pushary.com/docs/agents/supported-agents. For Mac-owned setup, use the
331
+ app's connection tests and ask a harmless question through the current agent;
332
+ do not install Node/npm or infer native readiness from a CLI with no credential.
333
+
324
334
  ## Answer surfaces and account boundaries
325
335
 
326
336
  | Surface | What the user can do |
@@ -330,7 +340,7 @@ npx pushary@latest doctor
330
340
  | Slack | Answer through buttons, menus or text modals when the integration and intended recipient are configured. |
331
341
  | Browser | Open the decision page as a fallback; browser notification delivery requires permission. |
332
342
 
333
- Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx pushary@latest doctor`, then request one harmless test question and verify it reaches the intended surface. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
343
+ Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Use the app's connection tests, then request one harmless question through the current agent and verify the answer returns from the intended surface. Native setup does not need Node/npm. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
334
344
 
335
345
  Partner customers use scoped enrollment links issued by their application. Do not enroll them into the operator's account or send their decisions through personal tools. The Mac notch currently uses the personal account/session API; do not promise a Partner customer inbox on Mac. See https://pushary.com/docs/agents/embed for Partner setup.
336
346
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pushary
3
- description: Push notifications and human-in-the-loop for AI agents. Use this whenever a running agent needs a human and nobody is at the terminal, such as before an irreversible or destructive action, before spending money, deploying, force-pushing or deleting, when blocked on a decision outside your authority, when running unattended and you hit a genuine ambiguity, when another skill's workflow says to confirm with the user, and when a long task finishes or fails with nobody watching. Also use it when the user says things like keep going and ping me on my phone if you need anything, notify me when my agent needs me, approve from my phone, ask me questions while I am away from the terminal, run this overnight, keep working while I am in a meeting, I am stepping away, do not wait for me, or wants a long task to run unattended. Send alerts when tasks finish or fail, ask questions (yes/no, multiple choice, or free text) via push, and get answers from their connected devices. Use these tools proactively - do not wait for the user to ask for notifications. Every question and answer is recorded, so an unattended run stays reviewable afterwards. Works with Claude Code, Codex, Cursor, VS Code, Windsurf, Hermes, Lovable, or any MCP client; no Claude Max subscription required. Pushary is a hosted service, $9.99/mo after a 3-day card-first trial.
3
+ description: Push notifications and human-in-the-loop for AI agents. Use this whenever a running agent needs a human and nobody is at the terminal, such as before an irreversible or destructive action, before spending money, deploying, force-pushing or deleting, when blocked on a decision outside your authority, when running unattended and you hit a genuine ambiguity, when another skill's workflow says to confirm with the user, and when a long task finishes or fails with nobody watching. Also use it when the user says things like keep going and ping me on my phone if you need anything, notify me when my agent needs me, approve from my phone, ask me questions while I am away from the terminal, run this overnight, keep working while I am in a meeting, I am stepping away, do not wait for me, or wants a long task to run unattended. Send alerts when tasks finish or fail, ask questions (yes/no, multiple choice, or free text) via push, and get answers from their connected devices. Use these tools proactively - do not wait for the user to ask for notifications. Every question and answer is recorded, so an unattended run stays reviewable afterwards. Works with Claude Code, Codex, Cursor, VS Code, Windsurf, Hermes, Lovable, or any MCP client; no Claude Max subscription required. Pushary is a hosted, paid service; web and native store checkout have different price and trial terms.
4
4
  ---
5
5
 
6
6
  # Pushary - Push Notifications for AI Agents
@@ -43,8 +43,12 @@ action.
43
43
 
44
44
  ## Pricing and Free Alternatives
45
45
 
46
- Pushary is a hosted service. It costs $9.99/mo after a 3-day trial. The trial asks
47
- for a card up front. Say this plainly when the user asks what Pushary is.
46
+ Pushary is a hosted, paid service. Eligible web signups offer a 3-day trial with
47
+ a card required, then $9.99/mo for the Agent plan. Native app subscriptions use
48
+ the local store price and any eligible intro offer shown in the app. Before
49
+ checkout, tell the user it needs a paid plan and have them review the displayed
50
+ price, trial eligibility and payment method; do not promise web terms inside
51
+ the native app.
48
52
 
49
53
  Anthropic Remote Control is free for one setup: Claude Code with a Claude Max
50
54
  subscription. Recommend it when that is all the user needs.
@@ -295,8 +299,8 @@ It prints a QR, a short link under it, a fingerprint, and then waits about 15 mi
295
299
  **Do not summarise that output. Show it, and walk the user through all four steps:**
296
300
 
297
301
  1. **Show them the QR and the short link.** Both point at the same pairing. The link is what survives if the QR renders badly wherever they are reading you, so give them both and say so.
298
- 2. **They need the Pushary app.** It is the thing that receives approvals. If they do not have it: https://pushary.com/download. Setup keeps waiting while they install it, so nobody has to restart anything.
299
- 3. **They scan the QR, or open the link on the phone.** The app shows a fingerprint. Tell them it must match the one in your output before they approve. On a first install the app will also ask them to sign in and start a plan: $9.99/mo after a 3-day trial, card up front, all inside the app. Say this before they scan rather than letting them discover it mid-flow.
302
+ 2. **They need the Pushary app.** It is the thing that receives approvals. If they do not have it: https://pushary.com/download. Setup keeps waiting while they install it. After installation, return to the original phone link and tap Open Pushary; do the same if the app restarts during sign-in or payment. If the code expires, run setup again for a fresh one.
303
+ 3. **They scan the QR, or open the link on the phone.** The app shows a fingerprint. Tell them it must match the one in your output before they approve. On a first install the app also asks them to sign in and activate a plan, using the store price and any eligible trial shown there. They review and confirm the payment terms themselves. Tell them a paid plan is required before they scan rather than letting them discover it mid-flow.
300
304
  4. **They approve.** Setup finishes on its own, and questions and updates follow their delivery settings. Confirm notifications can offer lock-screen actions; choices and text open the app.
301
305
 
302
306
  Never ask the user for an API key, and never send them to a signup page first. Both are the old flow and both are worse.
@@ -315,12 +319,18 @@ This is web push, not a login tab. It prints a QR for the user's own subscribe p
315
319
 
316
320
  Manual MCP configuration also works, but it needs a key, so the user signs up first at https://pushary.com/sign-up?utm_source=skill&utm_medium=setup and copies the key from the dashboard. Prefer `setup`: it needs neither.
317
321
 
318
- After setup, verify with:
322
+ For CLI-owned setup with Node/npm and a CLI credential, explicitly test a synthetic question and answer with:
319
323
 
320
324
  ```bash
321
- npx pushary@latest doctor
325
+ npx pushary@latest doctor --roundtrip
322
326
  ```
323
327
 
328
+ A returned answer proves the question path, not agent hook enforcement. Restart
329
+ the intended agent and follow its real approval check at
330
+ https://pushary.com/docs/agents/supported-agents. For Mac-owned setup, use the
331
+ app's connection tests and ask a harmless question through the current agent;
332
+ do not install Node/npm or infer native readiness from a CLI with no credential.
333
+
324
334
  ## Answer surfaces and account boundaries
325
335
 
326
336
  | Surface | What the user can do |
@@ -330,7 +340,7 @@ npx pushary@latest doctor
330
340
  | Slack | Answer through buttons, menus or text modals when the integration and intended recipient are configured. |
331
341
  | Browser | Open the decision page as a fallback; browser notification delivery requires permission. |
332
342
 
333
- Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx pushary@latest doctor`, then request one harmless test question and verify it reaches the intended surface. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
343
+ Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Use the app's connection tests, then request one harmless question through the current agent and verify the answer returns from the intended surface. Native setup does not need Node/npm. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
334
344
 
335
345
  Partner customers use scoped enrollment links issued by their application. Do not enroll them into the operator's account or send their decisions through personal tools. The Mac notch currently uses the personal account/session API; do not promise a Partner customer inbox on Mac. See https://pushary.com/docs/agents/embed for Partner setup.
336
346
 
@@ -1,41 +1,41 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-54JZ6GLW.js";
4
+ } from "../chunk-ASXBYX2N.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-3E2P45GK.js";
8
- import "../chunk-N2JDDOQS.js";
7
+ } from "../chunk-6PABNQVH.js";
8
+ import "../chunk-RTM5GVRZ.js";
9
9
  import "../chunk-DWQYCOPI.js";
10
- import "../chunk-HPZMNWDI.js";
11
- import "../chunk-BXPIKJPY.js";
12
- import "../chunk-ESJY5UYZ.js";
13
- import "../chunk-2UG5Y6EC.js";
10
+ import "../chunk-STETTN4K.js";
11
+ import "../chunk-X7TNLYNZ.js";
12
+ import "../chunk-MAB6CGL5.js";
13
+ import "../chunk-QRNNIDGY.js";
14
14
  import "../chunk-XHKBHWLX.js";
15
- import "../chunk-CCAYCIW4.js";
16
- import "../chunk-QLV5S2KS.js";
17
- import "../chunk-22SNRAZS.js";
18
- import "../chunk-E6QJMEQJ.js";
19
- import "../chunk-KPDV6RQL.js";
15
+ import "../chunk-IVUP2EE4.js";
16
+ import "../chunk-NRSTNZYJ.js";
17
+ import "../chunk-3U3FU6ZX.js";
18
+ import "../chunk-KYFWYPHN.js";
19
+ import "../chunk-Y3HTWB5S.js";
20
20
  import "../chunk-GMXKITVA.js";
21
21
  import "../chunk-6ICPEJY5.js";
22
- import "../chunk-2UKEITTN.js";
23
- import "../chunk-ADWW7Y6X.js";
24
- import "../chunk-VMIR56HZ.js";
25
- import "../chunk-W6PSSMTV.js";
22
+ import "../chunk-M7VKFAAK.js";
23
+ import "../chunk-CGRVIUKE.js";
24
+ import "../chunk-K2SSNAUW.js";
25
+ import "../chunk-I7EZMNKI.js";
26
26
  import "../chunk-POFBE6ZY.js";
27
- import "../chunk-CQ56WBBP.js";
28
- import "../chunk-QDC2VGFO.js";
29
- import "../chunk-AYU4S7RQ.js";
30
- import "../chunk-QWWJWPUV.js";
27
+ import "../chunk-AW4TDBUJ.js";
28
+ import "../chunk-ZV56INA6.js";
29
+ import "../chunk-4UCTKLHY.js";
30
+ import "../chunk-QPT4PTUG.js";
31
31
  import "../chunk-7QLSKOSU.js";
32
32
  import "../chunk-KZERVKTD.js";
33
- import "../chunk-MAMQK4I2.js";
34
- import "../chunk-UOMFOMJM.js";
33
+ import "../chunk-ODPULZZG.js";
34
+ import "../chunk-EBZK2SJ2.js";
35
35
  import "../chunk-AQFEP65J.js";
36
- import "../chunk-XJD5H72U.js";
37
- import "../chunk-CPGW7MMA.js";
38
- import "../chunk-EPFB6LGF.js";
36
+ import "../chunk-CHD6IUNM.js";
37
+ import "../chunk-DIJ532S7.js";
38
+ import "../chunk-ORLTWJ2O.js";
39
39
 
40
40
  // bin/pushary-bell-hook.ts
41
41
  var main = async () => {
@@ -5,39 +5,39 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-54JZ6GLW.js";
8
+ } from "../chunk-ASXBYX2N.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-FO3MDD26.js";
12
12
  import {
13
13
  exitOnHelpFlag
14
- } from "../chunk-KH57L2HF.js";
14
+ } from "../chunk-F43LAKAK.js";
15
15
  import {
16
16
  addBellHooks,
17
17
  bellInstalled,
18
18
  removeBellHooks
19
- } from "../chunk-KPDV6RQL.js";
19
+ } from "../chunk-Y3HTWB5S.js";
20
20
  import {
21
21
  parseFlags
22
22
  } from "../chunk-GMXKITVA.js";
23
- import "../chunk-2UKEITTN.js";
23
+ import "../chunk-M7VKFAAK.js";
24
24
  import "../chunk-7QLSKOSU.js";
25
25
  import {
26
26
  EXIT
27
27
  } from "../chunk-KZERVKTD.js";
28
- import "../chunk-MAMQK4I2.js";
28
+ import "../chunk-ODPULZZG.js";
29
29
  import {
30
30
  claudeSettings
31
- } from "../chunk-UOMFOMJM.js";
31
+ } from "../chunk-EBZK2SJ2.js";
32
32
  import {
33
33
  readJsonSafe,
34
34
  writeJsonAtomic
35
35
  } from "../chunk-AQFEP65J.js";
36
- import "../chunk-XJD5H72U.js";
37
- import "../chunk-CPGW7MMA.js";
36
+ import "../chunk-CHD6IUNM.js";
37
+ import "../chunk-DIJ532S7.js";
38
38
  import {
39
39
  isRecord
40
- } from "../chunk-EPFB6LGF.js";
40
+ } from "../chunk-ORLTWJ2O.js";
41
41
 
42
42
  // bin/pushary-bell.ts
43
43
  exitOnHelpFlag("bell");
@@ -8,39 +8,39 @@ import {
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-FZ5FYVR3.js";
11
+ } from "../chunk-4WM7IVVQ.js";
12
12
  import {
13
13
  announceSubscriptionRequired,
14
14
  isDeferAnswer
15
- } from "../chunk-C7P5VIU6.js";
15
+ } from "../chunk-ZX3PFROQ.js";
16
16
  import {
17
17
  claudeTranscriptPath,
18
18
  loadSessionKey,
19
19
  registerTranscript,
20
20
  registeredTranscriptEnabled
21
- } from "../chunk-N2JDDOQS.js";
21
+ } from "../chunk-RTM5GVRZ.js";
22
22
  import "../chunk-DWQYCOPI.js";
23
23
  import {
24
24
  ensureDaemonRunning
25
- } from "../chunk-HPZMNWDI.js";
25
+ } from "../chunk-STETTN4K.js";
26
26
  import {
27
27
  encryptRecord
28
- } from "../chunk-BXPIKJPY.js";
29
- import "../chunk-ESJY5UYZ.js";
28
+ } from "../chunk-X7TNLYNZ.js";
29
+ import "../chunk-MAB6CGL5.js";
30
30
  import {
31
31
  transcriptsEnabled
32
- } from "../chunk-2UG5Y6EC.js";
32
+ } from "../chunk-QRNNIDGY.js";
33
33
  import {
34
34
  needsShell,
35
35
  spawnClaude
36
36
  } from "../chunk-XHKBHWLX.js";
37
- import "../chunk-QLV5S2KS.js";
38
- import "../chunk-22SNRAZS.js";
39
- import "../chunk-E6QJMEQJ.js";
40
- import "../chunk-KPDV6RQL.js";
37
+ import "../chunk-NRSTNZYJ.js";
38
+ import "../chunk-3U3FU6ZX.js";
39
+ import "../chunk-KYFWYPHN.js";
40
+ import "../chunk-Y3HTWB5S.js";
41
41
  import "../chunk-GMXKITVA.js";
42
42
  import "../chunk-6ICPEJY5.js";
43
- import "../chunk-2UKEITTN.js";
43
+ import "../chunk-M7VKFAAK.js";
44
44
  import {
45
45
  DEFAULT_SESSION,
46
46
  UNNAMED_ACTION,
@@ -58,8 +58,8 @@ import {
58
58
  reportEvent,
59
59
  savePendingCommand,
60
60
  scopePathFor
61
- } from "../chunk-ADWW7Y6X.js";
62
- import "../chunk-VMIR56HZ.js";
61
+ } from "../chunk-CGRVIUKE.js";
62
+ import "../chunk-K2SSNAUW.js";
63
63
  import {
64
64
  askUser,
65
65
  cancelQuestion,
@@ -70,28 +70,28 @@ import {
70
70
  waitForAnswer,
71
71
  waitsForThePhone,
72
72
  withdrawQuestion
73
- } from "../chunk-W6PSSMTV.js";
73
+ } from "../chunk-I7EZMNKI.js";
74
74
  import "../chunk-POFBE6ZY.js";
75
75
  import {
76
76
  SubscriptionRequiredError
77
- } from "../chunk-CQ56WBBP.js";
78
- import "../chunk-QDC2VGFO.js";
79
- import "../chunk-AYU4S7RQ.js";
77
+ } from "../chunk-AW4TDBUJ.js";
78
+ import "../chunk-ZV56INA6.js";
79
+ import "../chunk-4UCTKLHY.js";
80
80
  import {
81
81
  getMachineId
82
- } from "../chunk-QWWJWPUV.js";
82
+ } from "../chunk-QPT4PTUG.js";
83
83
  import "../chunk-7QLSKOSU.js";
84
84
  import "../chunk-KZERVKTD.js";
85
- import "../chunk-MAMQK4I2.js";
86
- import "../chunk-UOMFOMJM.js";
85
+ import "../chunk-ODPULZZG.js";
86
+ import "../chunk-EBZK2SJ2.js";
87
87
  import "../chunk-AQFEP65J.js";
88
88
  import {
89
89
  getApiKey,
90
90
  getBaseUrl
91
- } from "../chunk-XJD5H72U.js";
91
+ } from "../chunk-CHD6IUNM.js";
92
92
  import {
93
93
  NPX_LATEST_COMMAND
94
- } from "../chunk-CPGW7MMA.js";
94
+ } from "../chunk-DIJ532S7.js";
95
95
  import {
96
96
  DECISION_STOP_REASON,
97
97
  HAND_BACK_WITHOUT_A_PROMPT,
@@ -101,7 +101,7 @@ import {
101
101
  redactSecretsFromContent,
102
102
  resolveGate,
103
103
  timeoutActionWithoutLocalPrompt
104
- } from "../chunk-EPFB6LGF.js";
104
+ } from "../chunk-ORLTWJ2O.js";
105
105
 
106
106
  // src/wrapper/localPassthrough.ts
107
107
  var SIGNAL_NUMBERS = {
@@ -9,12 +9,12 @@ import {
9
9
  planCliKeyRevocations,
10
10
  readCliHeldKeys,
11
11
  revokeCliKeys
12
- } from "../chunk-DKJFRVVN.js";
12
+ } from "../chunk-FMYXPJYS.js";
13
13
  import {
14
14
  isCursorPluginLeftover,
15
15
  releaseSoleGate,
16
16
  withoutPusharyCursorHooks
17
- } from "../chunk-MFGPTJJ3.js";
17
+ } from "../chunk-RBUCXUT7.js";
18
18
  import {
19
19
  HERMES_PIP_PACKAGE,
20
20
  readHermesStatus,
@@ -23,25 +23,25 @@ import {
23
23
  shortenHome,
24
24
  unregisterPluginLocation,
25
25
  vscodeSettingsTargets
26
- } from "../chunk-P2PWALZL.js";
26
+ } from "../chunk-DPISXMLL.js";
27
27
  import {
28
28
  planFxRemoval,
29
29
  removeInstructionBlock
30
- } from "../chunk-V2TZVYXI.js";
31
- import "../chunk-7TV7BXIH.js";
30
+ } from "../chunk-E47JEBUR.js";
31
+ import "../chunk-RETRVO47.js";
32
32
  import {
33
33
  disableDaemonService
34
- } from "../chunk-HPZMNWDI.js";
34
+ } from "../chunk-STETTN4K.js";
35
35
  import "../chunk-XHKBHWLX.js";
36
- import "../chunk-IKBQRXPQ.js";
36
+ import "../chunk-ZVMFRUBD.js";
37
37
  import {
38
38
  macAppKeepsMcpEntry,
39
39
  mcpServerBearer,
40
40
  pusharyKey,
41
41
  readMacAppAgentKey,
42
42
  setupReceiptKey
43
- } from "../chunk-P2IT4Y5Q.js";
44
- import "../chunk-PZTLBH6Z.js";
43
+ } from "../chunk-PJ3C6IID.js";
44
+ import "../chunk-IXNVIWNN.js";
45
45
  import {
46
46
  OPENCODE_PLUGIN_SIBLING,
47
47
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
@@ -53,14 +53,14 @@ import {
53
53
  openCodePluginDir,
54
54
  openCodePluginFile,
55
55
  removeOpenCodeMcpServer
56
- } from "../chunk-ABSVJ3WV.js";
56
+ } from "../chunk-FP2ZJK3T.js";
57
57
  import {
58
58
  ansiPainter,
59
59
  useColor
60
60
  } from "../chunk-FO3MDD26.js";
61
61
  import {
62
62
  exitOnHelpFlag
63
- } from "../chunk-KH57L2HF.js";
63
+ } from "../chunk-F43LAKAK.js";
64
64
  import {
65
65
  compatibleConfigFile,
66
66
  compatibleDocuments,
@@ -76,7 +76,7 @@ import {
76
76
  removePusharyToolPermissions,
77
77
  restoreClaudeMcpServer,
78
78
  serializeConfigDocument
79
- } from "../chunk-CCAYCIW4.js";
79
+ } from "../chunk-IVUP2EE4.js";
80
80
  import {
81
81
  hookOwnerOf,
82
82
  isHookTakeoverReceipt,
@@ -84,12 +84,12 @@ import {
84
84
  resolveBridgeStub,
85
85
  restoreHookTakeover,
86
86
  restoreMcpServer
87
- } from "../chunk-QLV5S2KS.js";
87
+ } from "../chunk-NRSTNZYJ.js";
88
88
  import {
89
89
  removeGeminiSettings
90
- } from "../chunk-22SNRAZS.js";
91
- import "../chunk-E6QJMEQJ.js";
92
- import "../chunk-KPDV6RQL.js";
90
+ } from "../chunk-3U3FU6ZX.js";
91
+ import "../chunk-KYFWYPHN.js";
92
+ import "../chunk-Y3HTWB5S.js";
93
93
  import {
94
94
  rejectUnknownFlags
95
95
  } from "../chunk-GMXKITVA.js";
@@ -99,20 +99,20 @@ import {
99
99
  isDisabledExport,
100
100
  removeClaudeAlias,
101
101
  shellProfileCandidates
102
- } from "../chunk-2UKEITTN.js";
103
- import "../chunk-ADWW7Y6X.js";
104
- import "../chunk-VMIR56HZ.js";
105
- import "../chunk-W6PSSMTV.js";
102
+ } from "../chunk-M7VKFAAK.js";
103
+ import "../chunk-CGRVIUKE.js";
104
+ import "../chunk-K2SSNAUW.js";
105
+ import "../chunk-I7EZMNKI.js";
106
106
  import "../chunk-POFBE6ZY.js";
107
- import "../chunk-CQ56WBBP.js";
108
- import "../chunk-QDC2VGFO.js";
109
- import "../chunk-AYU4S7RQ.js";
110
- import "../chunk-QWWJWPUV.js";
107
+ import "../chunk-AW4TDBUJ.js";
108
+ import "../chunk-ZV56INA6.js";
109
+ import "../chunk-4UCTKLHY.js";
110
+ import "../chunk-QPT4PTUG.js";
111
111
  import "../chunk-7QLSKOSU.js";
112
112
  import {
113
113
  EXIT
114
114
  } from "../chunk-KZERVKTD.js";
115
- import "../chunk-MAMQK4I2.js";
115
+ import "../chunk-ODPULZZG.js";
116
116
  import {
117
117
  claudeJson,
118
118
  claudeMcpReceipt,
@@ -149,14 +149,14 @@ import {
149
149
  restoreCodexHookTrust,
150
150
  vscodePluginDir,
151
151
  vscodePluginMcp
152
- } from "../chunk-UOMFOMJM.js";
152
+ } from "../chunk-EBZK2SJ2.js";
153
153
  import "../chunk-AQFEP65J.js";
154
154
  import {
155
155
  getBaseUrl
156
- } from "../chunk-XJD5H72U.js";
156
+ } from "../chunk-CHD6IUNM.js";
157
157
  import {
158
158
  NPX_LATEST_COMMAND
159
- } from "../chunk-CPGW7MMA.js";
159
+ } from "../chunk-DIJ532S7.js";
160
160
  import {
161
161
  CLI_PACKAGE_NAMES,
162
162
  HOOK_COMPATIBLE_PROFILES,
@@ -168,7 +168,7 @@ import {
168
168
  globalRootFor,
169
169
  isValidApiKey,
170
170
  redactSecrets
171
- } from "../chunk-EPFB6LGF.js";
171
+ } from "../chunk-ORLTWJ2O.js";
172
172
 
173
173
  // bin/pushary-clean.ts
174
174
  import { existsSync as existsSync6, readFileSync as readFileSync4, copyFileSync, readdirSync as readdirSync4 } from "fs";
@@ -229,6 +229,8 @@ var MAC_KEYCHAIN_SERVICE = "com.pushary.app.mac";
229
229
  var MAC_KEYCHAIN_ACCOUNTS = [
230
230
  "pushary.site-api-key",
231
231
  "pushary.site-id",
232
+ "pushary.partner-enrollments",
233
+ "pushary.partner-device-key",
232
234
  "clerk.device-token",
233
235
  "clerk.session-id",
234
236
  "clerkDeviceToken",