Egret Roadmap
Egret is an open-source runtime security agent for CI/CD and Linux hosts: eBPF-based egress filtering, network/process/file monitoring, and audit-mode policy generation. It ships as a CLI and a GitHub Action, with an optional self-hosted dashboard. No server, no account, no phone-home.
This is the user-facing roadmap: what Egret is, what works today, and where it’s going. Released changes are in CHANGELOG.md.
The core promise
The agent (CLI + eBPF) is server-agnostic, and every layer above it is
optional. No headline feature ever requires the GitHub App or the dashboard.
Egret talks outward only through (1) the files it writes (report.json, SARIF, a
signed attestation) and (2) an optional POST to a dashboard you run. Setting
EGRET_INGEST_URL is the entire “use the self-hosted part” switch - leave it unset
and everything stays local.
The three tiers (all additive, all optional)
| Tier | What | Where it runs |
|---|---|---|
| 1 - Agent | eBPF CLI + GitHub Action: monitor & enforce a job’s egress/process/file behaviour, emit a report + SARIF | your runner, zero infra |
| 2 - GitHub App | Server-less PR checks, sticky comments, a Renovate-style “allowlist this endpoint” dashboard issue | GitHub, no server |
| 3 - Egret Nest | Optional self-hosted dashboard: history, drift, fleet view, multi-tenant RBAC | a box you run |
Tiers 2 and 3 are pure Go + web (no eBPF) and run on any OS. Only the agent’s kernel probes need Linux.
What works today
Agent (Tier 1)
- Monitoring (audit mode) - production-ready. eBPF probes capture every outbound
connection (IPv4 + IPv6, real dest + port), the process tree, and writes to
protected paths, evaluate them against a
policy.yaml, and write a Markdown/JSON report + a GitHub job summary. Audit mode never blocks - it’s the safe default and is fully validated. - Enforcement (block mode) - a live-validated boundary on bare/VM hosts. A DNS
proxy + cgroup-scoped nftables default-deny confines the build to an allowlist.
The build runs de-privileged (
no_new_privs+ dropped capabilities, so it can’tsudoits way out), lingering processes are killed at teardown, and a built-in self-probe refuses to run if it can’t confirm confinement (fail-closed). This is security-reviewed and live-validated on a bare/VM host and confines correctly in a namespaced container in testing. On GitHub-hostedcontainer:runners it’s still being validated across topologies - audit mode is the recommendation there for now. - Policy: domain allowlist (
allowed-endpoints, with*.wildcards), raw IP/CIDR allowlist (allowed-ips),block-raw-ip, protected paths, disallowed processes, andextends:for a shared base policy (local ororg://). - Action inputs:
command,policy,mode, SARIF upload,fail-on-violations, optionalingest-url/ingest-token(POST to your dashboard),disable-sudo.
GitHub App (Tier 2) - egret github check / comment / dashboard, the
audit→allowlist-PR loop, and extends: org://… all work with a plain GITHUB_TOKEN
or an App token.
Egret Nest dashboard (Tier 3) - at v0.1.1, feature-complete and
security-reviewed: run ingest + SQLite storage, per-repo egress-over-time, new-endpoint
drift, org fleet view, and enterprise auth (GitHub OAuth / OIDC / local + TOTP),
org→repo→run RBAC, scoped ingest tokens, audit log, TLS. Configurable via env or an
admin UI. The dashboard has its own repository and roadmap
(NX1X/Egret-Nest-Dashboard).
Supply chain - releases ship SHA256SUMS, SLSA build provenance, and a keyless
cosign signature; the Action verifies the binary before use.
What’s next (toward v1.0)
The whole product (agent + Action + dashboard) reaches v1.0 together. The remaining work is on the agent:
- Block mode as a confinement boundary on every CI platform - finish validating
it on GitHub-hosted
container:/ cgroup-namespaced runners (the self-probe already fails closed if it can’t confirm confinement), and pin the build’s resolver. - Kernel coverage - verify the eBPF probes across ≥2 kernel versions.
- Whole-job tracing - trace every step transparently, without wrapping a
command. - Release polish - App-Manifest one-click install, arm64 builds.
The agent ships tagged pre-1.0 releases (currently v0.1.3, on the Marketplace as
“Egret Security Action”) on the road to v1.0; the dashboard is at v0.1.1. v1.0.0
is the combined product gate.
Beyond v1.0
- Deeper egress coverage - UDP/DoH/DoT/QUIC and CDN/SNI-fronting cases that connect()-based probes don’t see.
- Per-step attribution and a bundled versioned block-list. (Dogfooding - Egret guarding its own CI in audit mode - shipped in v0.1.3.)
- Deliberately out of the core (dashboard-tier or never): cross-run anomaly detection, web analytics, and any live phone-home threat feed - the zero-infra, no-phone-home promise is permanent.
Egret’s scope is deliberately narrow: runtime egress control + monitoring, not CI workflow static-analysis. That boundary is a settled design decision.
Distribution
Open-core: the agent, Action, and App stay OSS (Apache-2.0). Optional paid layers later (hosted Nest, support, curated allowlists) never change the core promise. The GitHub App can be published by any account; a paid Marketplace listing would need an org-owned, verified App.