Security
What lpm installs, signs and sends
lpm is open source, and every build comes from a public GitHub workflow. This page is the one to send whoever has to approve it: how to check a download, what the app changes on a computer, what it sends over the network, and how to report a problem.
- Mac builds are signed with Apple Developer ID N7S7ZCZ5P7 and notarized by AppleSigned
- Every build has a SHA-256 checksum on its GitHub releaseAll builds
- The desktop app, the CLI and lpm Link send no analytics or telemetryNone
- iPhone push alerts are sealed on your computer before they reach the relaySealed
- Windows and Linux builds are a beta and aren't code-signed yetBeta
Where the builds come from
Each release is built by GitHub Actions from its tagged commit, in the public release workflow, and published as a GitHub release. The Mac builds are signed with Apple Developer ID N7S7ZCZ5P7, then notarized by Apple and stapled, so Gatekeeper opens them. The Windows installer and the Linux packages aren’t code-signed yet, so SmartScreen can warn about the installer, and the checksum is how you confirm the file.
Check a download
Compare the file’s SHA-256 with the one GitHub lists for it. For the Windows and Linux beta, which isn’t code-signed yet, this is the check that matters.
- macOS
shasum -a 256 <file>- Windows (PowerShell)
Get-FileHash <file> -Algorithm SHA256- Linux
sha256sum <file>
SHA-256 checksums for v0.7.47Oct 29, 2026
Compare after downloading. Only the macOS builds are signed, so for the Windows and Linux beta the checksum is the integrity check. View release
- macOS:
shasum -a 256 <file> - Windows (PowerShell):
Get-FileHash <file> -Algorithm SHA256 - Linux:
sha256sum <file>
- macOS Apple Silicon (arm64)30.2 MB
- c904c65f35932b0c6bab381a18ebf4f4a538e33fce62504f65161781005c97b5
- macOS Intel (x86_64)31.5 MB
- 0e61d006da2de6a3198ba9b8789add67a3d5649269b1b40ebd9f401c8f9b3308
- Windows installer (x64)24.3 MB
- 86f07b54e73fd61a0bd9d2991c241436a60bdfd1126701986fe1cfe0cf83ad7c
- Linux .deb (amd64)31.8 MB
- 0dd5faff6e89d2663e114285436f24df200af88694eb215dd5040dfdf50d1490
- Linux .rpm (amd64)31.8 MB
- fefeaf90e40d155acdec77f03cc00f10c07b001d6b031029197201abdab33b6d
- Linux AppImage (amd64)107.5 MB
- e13ced41adfcc3d2e5d14af24f492fea334fb047dc20d5484a49aa96eb07b174
On a Mac, check the signature too
After moving lpm to Applications, these should report a valid signature, “source=Notarized Developer ID” and TeamIdentifier=N7S7ZCZ5P7.
- The signature is intact
codesign --verify --deep --strict --verbose=2 /Applications/lpm.app- Gatekeeper accepts it as notarized
spctl --assess --type execute --verbose /Applications/lpm.app- It was signed by lpm's developer team
codesign -dv /Applications/lpm.app 2>&1 | grep TeamIdentifier
What lpm changes on your computer
lpm runs only the commands you configure, as your own user. It keeps its settings and project config in ~/.lpm, with project notes encrypted on disk. To show what each agent is doing, it adds status hooks for Claude Code, Codex, Gemini CLI and Cursor CLI. Installing Agent tools adds the lpm command and the lpm skills for your agents.
Removing all of it
Choose Remove app in lpm's settings: it stops your projects and removes the lpm command, its agent skills, its Claude Code and Codex hooks and its Claude Code status line. On macOS it also moves the app to the Trash and can erase settings, project config and notes. On Windows, finish in Settings → Apps → Installed apps; on Linux, remove the package or delete the AppImage. Both keep your settings in ~/.lpm.
By hand on macOS: quit lpm, trash lpm.app, delete /usr/local/bin/lpm and ~/.lpm, then remove the lpm hooks in ~/.claude and ~/.codex and the lpm skills in ~/.claude/skills and ~/.agents/skills.
What leaves your computer
Nothing that lets lpm read your code. These are the only connections the apps make:
- Update checks
- The desktop app asks GitHub's releases API for the latest version at launch and every 24 hours. Updates download from GitHub Releases.
- AI features
- Commit messages, Generate with AI and prompt rewrites run through the agent CLI you installed, under your own account. lpm hosts no model.
- Your other devices
- Paired computers, servers and phones connect directly. When both sides run a current lpm, the link is encrypted and pinned to each machine's identity.
- Built-in Tailscale
- Only if you sign in to Tailscale in lpm. Then it joins your tailnet through Tailscale's servers, under your own Tailscale account.
- Push alerts
- Only if you pair a phone. Each alert is sealed on your computer with a key only it and your phone hold, then relayed through lpm’s server to Apple or Google. They see that an alert went to your device, never what it says.
- Shared tabs
- Only when you share a tab with someone’s browser. It joins through lpm’s relay, encrypted end to end between their browser and your computer.
- This website
- lpm.cx uses Google Analytics to count visits. The apps don’t. Details are in the privacy policy.
Report a vulnerability
Please report it privately, not in a public issue: open a private security advisory on GitHub. Include what you found, how to reproduce it, and the lpm version (Settings → About, or lpm --version). The fix ships in a release, with credit to you if you’d like it.