privacycommand is a privacy tool, so it should be able to survive its own audit.

No analytics

privacycommand ships no analytics SDKs. There is no telemetry endpoint, no install counter, and no crash-report bucket. Nobody is told that you installed it or what you pointed it at. You can check this rather than take our word for it: drop privacycommand.app onto its own window and read the telemetry callout. It should be empty.

Every outbound call

Five, all narrow. The first three happen on privacycommand’s own account; the last two only when you ask for a feature that fetches something: All analysis runs locally. The inspected bundle’s contents never leave your machine, and privacycommand never uploads a report anywhere. The last two rows are downloads into your machine, not uploads out of it.

The privileged helper

Opt-in, narrow, and there is no general run-as-root path. See The privileged helper. It validates callers by code signature on connect — an Apple anchor plus a Team ID matching its own — but only when the helper binary itself carries a Team Identifier. That is the case for any Developer ID build, including every release. A helper that is unsigned, ad-hoc signed, or built with Xcode’s “Sign to Run Locally” has no Team ID to compare against, and in that state it accepts every connecting process. Treat a locally built helper as reachable by anything running as you.

Things worth knowing

Reports can contain sensitive strings. Hard-coded hostnames, internal domains, secret names, and file paths from your machine. Read an export before sharing it — see Exporting reports. The kill switch changes system state. It writes a pf anchor and edits /etc/pf.conf, restoring the original on removal. It is system-wide while armed. See Network kill switch. A monitored run executes untrusted code on your machine unless you use VM mode. Ghidra is third-party. If you enable decompilation, that’s Ghidra’s code running on your machine under its own terms.

What a clean report does not mean

privacycommand makes no claim to detect malware. Static analysis can be defeated by an adversary who wants to hide, and dynamic analysis only observes the code paths a run happens to exercise. A clean report means the signals privacycommand extracts didn’t look noteworthy. Treat it as evidence, not as a verdict.

Reporting a vulnerability

Please don’t open a public issue. Email security@privacykey.org, or use GitHub’s private advisory form. We aim to respond within 72 hours. Especially interested in: anything that lets an unauthorised process reach the helper, any path from analysing a malicious bundle to code execution on the host, and anything that causes privacycommand to transmit data beyond the calls listed above.