Two planes. The eBPF agent runs on your Linux hosts — it can't run on Cloudflare, because it needs a kernel. Everything else — site, docs, console, API, and database — is the control plane, and it all lives on Cloudflare's edge.
Four Cloudflare resources make up the control plane. The agent is the one piece that runs on your infrastructure, not Cloudflare's.
Serves the marketing site (/), docs (/docs), the console SPA (/app), and the agent installer (/install.sh) from Cloudflare's global edge.
The control plane: /v1/signup, /v1/ingest, /v1/sessions, /v1/findings. Validates tokens, classifies findings server-side, and is the only component with a binding to D1.
Tables: orgs, ingest_tokens, sessions (recording payload inline for now), findings. Reached only through the Worker's binding.
Holds the raw recording payloads (and, ahead, evidence-export packs). D1 keeps only a pointer + summary, so storage costs stay ~50× lower than inline in D1.
Runs on your Linux hosts (CI runners, k8s nodes, VMs) with hostPID + eBPF privileges. Records an attributed session and POSTs it to the Worker. Never runs on Cloudflare — it needs a kernel.
Two paths cross the boundary into Cloudflare: the agent writing a recording, and the operator reading it back.
/v1/ingest with Authorization: Bearer ar_live_… over HTTPS.curl|sh — and dedupes./v1/sessions, /v1/findings) with the token — CORS-enabled.push)--enforce kills a task on a forbidden action (kernel)watch DaemonSet auto-records agents by name