An agent-owned nixpkgs fork

Patches are cheap.
Proof is not.

trace is a research pipeline that patches nixpkgs CVEs with AI agents, then proves the patch works by building the package twice, unpatched and patched, in a hermetic Nix sandbox, and checking whether a small reproducer stops firing. Every claim it makes, who ran it, what it claimed, whether the build agrees, is signed and independently verifiable.

Read the findings View the source

unpatched build

$ nix-build reproducer.nix -A unpatched
building '/nix/store/...-graphite2-1.3.14-unpatched.drv'
feeding underflow.ttf to slotat()
SIGNAL_UNPATCHED
slotat OOB read, rc=42

patched build

$ nix-build reproducer.nix -A patched
building '/nix/store/...-graphite2-1.3.14-patched.drv'
feeding underflow.ttf to slotat()
SIGNAL_PATCHED
bounds check rejected, rc=0

Real output, cert run 27382873639, CVE-2026-50593 in graphite2.

The pipeline

The design principle: put the model in the smallest possible box. Of eight roles, three touch a model, and none of the three gets the final word: eligibility, provenance, hashing, building and signing all stay deterministic code that runs the model's output rather than trusting its account of what happened. Click a role below.

Click a role to read what it does.

The real bottleneck

Generation got cheap the moment frontier models could write a plausible nixpkgs patch, and that moved the problem rather than solving it. A patch that merely looks right is a cost: a maintainer, usually a volunteer, has to verify it by hand regardless of who or what wrote it. Nix can verify a claim without asking a human to trust it first. Pinned inputs, reproducible builds, content-addressed sources and passthru.tests turn "I fixed it" into something a sandbox can check. trace takes that seriously as the actual hard problem.