Open-core · AGPL-3.0 · Kubernetes-native

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.

bash

# 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

How it works

From recording to registry

Profile a workload once. The same recording drives the minimised image, the confidence score, and the SBOMs.

01

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.

02

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.

03

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.

04

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
manifest.json (excerpt)
{
  "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"
    }
  }
}
directobserved by eBPF
inferred-elfELF shared-lib dependency
inferred-runtimelanguage-runtime companion
manualuser-added override

Everything you need is free and open source.
The platform takes it further.

Open Source
AGPL-3.0
  • eBPF sensorCO-RE kprobe sensor, ring buffer consumer, cgroup filtering
  • Image builder (hardener)Minimised OCI image, ELF resolver, directory-inclusion mode
  • harden CLIBuilds 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
View open-source tools
Platform
Pro

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
Contact us

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.