Runtime detection
The attack isn't in the manifest. It's in what runs.
Lockfiles, SBOMs, and dependency scans describe what your build is supposed to be. Protet watches what it actually executes — and that's where supply-chain attacks live.
Declared isn't executed
A manifest is a statement of intent. It lists which packages and which versions — not what those packages do once the build runs them. That gap is the whole attack surface: a postinstall hook that pipes curl into bash, a dependency that only turns malicious the moment it's installed, an attacker running commands as your CI with credentials the runner happens to hold. None of it appears in anything declared. It only appears in the execution.
What only execution reveals
Build-time payloads. A package can look clean and still run anything at install or build time. Protet sees the command a postinstall script actually executed — the fetch, the pipe into a shell, the write to a cron file — not just a package name in a lockfile.
Attacks with no package at all. A hijacked runner or a stolen CI credential is simply an attacker running commands as your build. There's no dependency to scan, no manifest entry, nothing declared — the only signal is the behavior itself.
Dependency confusion. A package that resolves ahead of your intended internal one is identical to a legitimate dependency in an SBOM. What it does once installed and running is where the attack becomes visible.
How Protet reads it
Protet scores the execve command sequence your build runs with a model trained specifically on real attack behavior — not a rules list someone has to keep current, and not a general-purpose model prompted to guess whether a command "looks" suspicious. Every flagged window points at the exact command that drove the verdict, so an analyst sees the reasoning, not just a number.
Collection is decoupled from detection, so it runs wherever your builds already do — eBPF on Kubernetes, a drop-in GitHub Action, or your own collector. Verdicts ship as OCSF findings into the SIEM you already run, and the whole pipeline can run on-prem, fully air-gapped. See how it works for the pipeline end to end, or watch it flag real packages every day.