vigil

eBPF-based runtime security for AI inference workloads

AI Workloads
Ollama
Gemini CLI
Claude Code
vLLM (coming soon)
llama.cpp (coming soon)
syscalls
block decision ↑
Linux Kernel
eBPF Programs (compiled C — bpf/probe.c + bpf/lsm.c)

Syscall Tracepoints

  • openat — file access
  • connect — outbound net
  • execve — process spawn

LSM Hooks

  • lsm/file_open
  • lsm/socket_connect
  • lsm/bprm_check_security
  • → BLOCK inline (-EPERM)
Process Lineage
trace_exec_lineage seeds watched_pids on entry_comm start · trace_fork_lineage propagates to children · trace_exit_lineage cleans up · only agent process tree emits events
Ring Buffer
lock-free kernel→userspace event stream · 16 MB · structured event records (FileOpen / NetConnect / Exec)
events stream
block map ↑
User-space Go Daemon
vigil daemon — single static binary (cilium/ebpf, no CGo)

loader

Loads eBPF .o, attaches tracepoints + LSM hooks, populates BPF maps from profile, seeds watched_pids from /proc, reads ring buffer.

profiles

YAML loader. Glob path matching (doublestar), CIDR network matching. Fields: denied_paths, allowed_paths, allowed_networks, entry_comm.

detector

Evaluates each Event against Profile. Returns Decision{Action, Reason}. Actions: Allow / Block / Skip.

audit

Writes one JSON line per Decision to io.Writer (stdout / file / syslog). SIEM-ready structured log.

ui

HTTP server (default :7394). Serves embedded SPA. SSE /events stream. /api/status. Enabled with --ui flag.

Profiles
ollama.yaml
gemini-cli.yaml
claude-code.yaml
vllm.yaml
llamacpp.yaml
overridable with --profile
JSON audit log / SSE
CLI commands
Output & CLI

Audit Logger

Structured JSON to stdout, file, or syslog. Plug into any SIEM (Splunk, Elastic, Datadog).

{"ts":"...","pid":1234,"comm":"ollama","event":"net_connect","action":"BLOCK","reason":"..."}

Web UI

Real-time event table via SSE. ALLOW/BLOCK badges. Filter by action + event type. Connection status. Served at localhost:7394.

CLI

vigil watch [--framework F] vigil watch --ui [--port N] vigil watch --profile path.yaml vigil profile list
Kernel / eBPF layer
User-space daemon (Go)
Output & CLI
Inline block path (LSM)