Supply-chain hygiene for Emacs: LLM review of package upgrades
Emacs has no sandbox. Every package you install runs arbitrary Lisp with your full privileges: your files, your credentials, your network. This makes me really scared of installing new packages, or upgrading existing on…
Emacs has no sandbox. Every package you install runs arbitrary Lisp with your full privileges: your files, your credentials, your network. This makes me really scared of installing new packages, or upgrading existing ones. The packages most of us use are not vetted artifacts: MELPA builds from some repository (usually unsigned) commit, many packages are maintained by a single person, and nobody audits what lands in a given update. A maintainer's account takeover, or a repository sold to a new owner, turns M-x package-upgrade-all into remote code execution on your machine. There is even a subtler vector unique to this ecosystem: recipe redirection. A one-line change to a MELPA recipe can silently point an existing package name at a different repository. The answer isn't to stop upgrading, but to make upgrades deliberate: pin every package to an exact commit and review the diffs before merging anything. Manually reviewing diffs is not only cumbersome but needs a high level of expertise in Emacs Lisp, so my solution is to have an LLM do a first-pass security audit of the changes before they get to execute. This post showcases the setup I use, built on straight.el, Magit and gptel. Table of Contents The setup at a glance Step 1: verify the straight.el bootstrap Step 2: pin everything Step 3: review diffs before merging Step 4: LLM-powered review of the diff The upgrade workflow Caveats and final thoughts