Harden containers based on what they actually do at runtime.
Tracepod watches your workloads through an eBPF sensor and records every file they touch. From that record it builds a minimised OCI image, SBOMs you can sign with cosign, and a manifest of everything it removed. Nothing goes into the image that your workload didn’t use.
# Install the eBPF sensor
$ git clone https://github.com/tracepod/tracepod
$ helm install tracepod ./tracepod/helm/tracepod \
--namespace tracepod --create-namespace
# Grab the recorded profile once your workload has run
$ kubectl exec -n tracepod ds/tracepod-sensor -- \
cat /profiles/$CONTAINER_ID/files.json > manifest.json
# Build and push the hardened image
$ harden build --manifest manifest.json \
--source acme/web:1.4.2 \
--push registry.local/web:hardened
Files: 730 (315 direct, 217 inferred-runtime, …)
Confidence: Medium (79/100)
Layer: 17.2 MiB (down from 46.2 MiB)
Pushed: registry.local/web:hardened
From recording to registry
Profile a workload once. The same recording drives the minimised image, the confidence score, and the SBOMs.
Profile
The eBPF sensor attaches kprobes to running containers and records every openat() call, scoped to the container’s cgroup. No kernel module to install.
Minimise
The new image layer contains the recorded files, their ELF shared-library dependencies, and language-runtime companions. Every file is tagged with the reason it was included.
Score
A confidence score is computed from the observation-source breakdown and profiling coverage. If the recording has gaps, the score says so before you ship.
Sign & attest
syft generates CycloneDX and SPDX SBOMs for the minimised image, with optional cosign signing. A removal manifest records every package that was dropped.
Every file in the image can tell you why it’s there.
Most container-slimming tools hand you a flat file list and a smaller number. Tracepod keeps the evidence. Each path in the manifest records whether the sensor saw it opened, an ELF dependency pulled it in, a language-runtime rule added it, or a person put it there. The confidence score is computed from that record, and it drops when profiling coverage has gaps.
A minimised image that crashes in production is worse than not hardening at all. The score exists so you find out before you deploy, not after.
Read the concept docs{ "files": { "/usr/local/bin/python3.12": { "source": "direct", "access_modes": ["r", "x"], "count": 312 }, "/lib/x86_64-linux-gnu/libc.so.6": { "source": "inferred-elf", "access_modes": ["r", "m"] }, "/usr/local/lib/python3.12/encodings/": { "source": "directory-inclusion" } } }
Everything you need is free and open source.
The platform takes it further.
- ✓eBPF sensorCO-RE kprobe sensor, ring buffer consumer, cgroup filtering
- ✓Image builder (hardener)Minimised OCI image, ELF resolver, directory-inclusion mode
- ✓
hardenCLIBuilds and pushes the minimised image from a recorded profile. Standalone static binary; works with nothing but the sensor output. - ✓Helm chartSensor DaemonSet with RBAC and ServiceAccount, ready for any containerd cluster
- ✓GitHub ActionHarden, smoke-test, and SBOM images in your release pipeline
- ✓CycloneDX + SPDX SBOMs + removal manifestSBOMs generated by syft, with optional cosign signing, plus a manifest of every package the hardening removed
Runs in your cluster alongside the sensor; no data leaves your infrastructure. Includes the tracepod CLI and everything in open source, plus:
- ✓Web dashboardFleet view of workloads, builds, validations, and compliance
- ✓Sandbox validationRun the hardened container in an ephemeral sandbox; detect missing files before you ship
- ✓Auto-fix loopFailed validations trigger a rebuild that includes the missing paths, then a re-run. Up to three rounds, unattended.
- ✓Build-time CVE deltagrype scans the source and hardened images on every build and reports exactly which findings the hardening removed
- ✓One-click apply + drift detectionPatch the live workload; dashboard alerts when it drifts from the hardened ref
- ✓Fleet policy & complianceNamespace-scoped policies: min coverage, hardened required, validated required
- ✓OpenVEX export with reachabilityMachine-readable VEX documents based on whether a vulnerable component is in the minimised image
- ✓Webhooks + source-image watchingAuto-rebuild when the source image changes; push outcomes to any endpoint
- ✓RBAC + audit logSign-in reuses your cluster’s existing identity; Viewer, Operator, and Admin roles; append-only audit trail
AGPL-3.0 licensed
The core toolchain is fully open. Inspect the code, run it yourself, contribute upstream.
CycloneDX + SPDX SBOMs
Both formats, signed with cosign, so the output fits whichever scanner your security team already runs.
CO-RE, no kernel module
Pure eBPF with Compile Once, Run Everywhere. Runs on kernel 6.8+ without rebuilding anything per node.
Kubernetes-native
Deploys as a DaemonSet, authenticates with TokenReview, and reuses your existing registry secrets. No side-car injection, no admission webhook.
Try it on one workload.
Install the open-source tools, profile one deployment, and compare the image sizes. If the numbers convince you, talk to us about running it across the fleet.