Skip to content

CLI Pulse 1.41.2

Choose a tag to compare

@JasonYeYuhe JasonYeYuhe released this 19 Jul 08:12
· 1 commit to main since this release

CLI Pulse 1.41.2 (build 94)

Permanently eliminates the recurring macOS prompt"CLI Pulse" would like to access data from other apps — including after app updates. Recommended for all users, especially anyone who saw that dialog repeatedly on 1.41.x.

What was wrong

The app's bundled background helper kept its socket and auth token inside the macOS app-group container. For an unsandboxed helper launched by launchd, every touch of that container triggers a macOS privacy consult (SystemPolicyAppData) — and for this helper, macOS never persisted the answer: clicking Allow recorded nothing, so the dialog came back on every helper start and after every app update (a fresh binary restarts the cycle). "Don't Allow" made it ask forever.

What 1.41.2 does

The helper's runtime files move to ~/.clipulse, a plain per-user directory that macOS does not gate. The privacy consult is never generated at all — there is no dialog to answer, nothing to re-approve on update, and no grant that can silently fail to persist. Measured on the affected machine: first container touch under launchd was 1–10 s (sometimes >20 s) and could prompt; the new location is ~29 ms and structurally cannot prompt.

Additional hardening that shipped with the move:

  • The directory is validated before receiving secrets (symlinks, wrong ownership, and foreign pre-planted directories are refused; loose permissions are tightened to 0700).
  • The app picks the live helper by actually connecting, so a stale socket file can no longer mask a healthy helper.
  • A CI guard now fails any future build in which the helper's daemon path touches a TCC-protected prefix again.

Compatibility

  • The separate Companion CLI Helper (.pkg) is unchanged and keeps working; the app automatically talks to whichever helper is live.
  • No action needed after updating. If you previously clicked "Don't Allow" on the dialog, no reset is required — the new version simply never asks.

Integrity

Signed with Developer ID, notarized and stapled. Verification battery: Gatekeeper accepted (Notarized Developer ID), helper embedded and confirmed to carry the fix, zero container access by the live daemon (lsof-verified), TCC database row count unchanged across a full daemon lifecycle.