Skip to content

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.

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.47

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.