Features

Observe everything. Enforce what matters.

Egret runs your command under eBPF and records what it actually does. In audit mode it only logs; in block mode it enforces a default-deny egress policy. Same binary, one flag.

Network egress

Records every outbound connection - PID, process, IP, port, and domain when DNS is correlated. See exactly what your build talks to.

Egress enforcement

Block mode is default-deny with a domain allowlist, backed by a local DNS proxy and an nftables dynamic allow set. Fail-closed teardown.

Process tree

Observes execve/fork through eBPF to reconstruct the whole process tree of a run - what spawned what.

File writes

Flags writes to protected paths - .git/, ~/.ssh/, /etc/ - so a compromised step tampering with your source is visible.

Audit mode

Observe a run, then emit a ready-to-paste suggested allowlist. Start in audit, graduate to block with confidence.

Reports everywhere

Markdown + JSON + SARIF, written to the GitHub Actions job summary and uploaded to Code Scanning. No server required.

Two modes

Audit or block.

audit

The safe default. Watches and reports - never interrupts a build. Use it to learn what your pipeline legitimately talks to, then generate a policy from the observed run.

block

Default-deny egress with a domain allowlist, backed by a local DNS proxy and an nftables dynamic allow set. Non-allowlisted connections are dropped and logged; teardown is fail-closed.

A validated confinement boundary on bare/VM hosts; container & GitHub-hosted runner enforcement is still being validated - use audit there.

Zero infrastructure

No server. No account. No phone-home.

Egret writes Markdown, JSON, and SARIF reports and appends to the GitHub Actions job summary. Nothing leaves your runner unless you explicitly point it at an ingest URL you control. The agent never requires the GitHub App or the Nest dashboard.

How enforcement works →