I wrote sieve last week to replace trivy in my homelab. A few people asked how to actually get it going, so this is the short version. The long version is docs/SETUP.md in the repo.
One thing I've done differently this time: the guide is tested. A GitHub job pulls the commands out of SETUP.md and runs them on a brand new Ubuntu machine every week. If a step breaks, the job goes red before you find out the hard way.
That's a real run from today. Funny thing is, a fresh GitHub runner isn't clean: 32,445 findings, 9 of them actively exploited (all kernel tool packages with no fix yet), 31 fixable.
Install
You need Linux and Python 3.10 or newer. No database, no server, no API key.
pipx install git+https://github.com/casareanderson/sieve
sieve --version
If it says command not found, run pipx ensurepath and open a new terminal.
Scan the box you're on
sieve host --limit 10
First run is the slow one, it downloads the CISA known-exploited list and the EPSS scores and asks OSV.dev about every package. After that it's cached.
Read it top down. A ⚠ in the KEV column means someone's exploiting it right now. A massive number with "0 fixable" is normal on a patched box, most of it is "affected, no fix released yet".
The exit code is the useful bit for cron: 0 nothing known-exploited, 1 at least one KEV finding, 2 part of the scan failed.
Scan your containers
This needs root, because container filesystems live under /proc/<pid>/root:
sudo "$(command -v sieve)" containers
Or run the collector on another Docker host with nothing installed there except python3:
sieve collector | ssh root@dockerhost python3 - > packages.tgz
sieve containers --from-tar packages.tgz
Put it on a timer
The line I'd actually use, only shouts about things you can fix:
0 7 * * 1 sieve all --fixable-only --min-severity high
There's also a Docker image and a GitHub Action, both in the guide.
What CI can't prove
Not much for this one. The weekly run covers install, host scan, JSON output, a real container scan and the Docker image. It can't tell you how your own distro feeds behave: Fedora, RHEL and Arch get their Python and container language packages checked, not the OS ones.
Full guide: github.com/casareanderson/sieve/blob/main/docs/SETUP.md
Anyone else running a scanner on a timer at home? What do you do with the "no fix yet" pile?
🤖 Drafted with AI assistance from my own homelab notes, logs and repos, then reviewed and edited before publishing.

Top comments (0)