AgentSight is a observability tool designed specifically for monitoring LLM agent behavior through SSL/TLS traffic interception and process monitoring. Unlike traditional application-level instrumentation, AgentSight observes at the system boundary using eBPF technology, providing comprehensive insights into AI agent interactions with minimal performance overhead.
β¨ Zero Instrumentation Required - No code changes, no new dependencies, no SDKs. Works with any AI framework or application out of the box.
wget https://github.com/eunomia-bpf/agentsight/releases/latest/download/agentsight && chmod +x agentsight
# Record Claude Code activity (Bun-based, requires --binary-path for statically-linked BoringSSL)
sudo ./agentsight record -c claude --binary-path ~/.local/share/claude/versions/$(claude --version | head -1)
# Record agent behavior from claude (old version)
sudo ./agentsight record -c "claude"
# Record agent behavior from gemini-cli (comm is "node")
sudo ./agentsight record -c "node"
# For Python AI tools (e.g. aider, open-interpreter)
sudo ./agentsight record -c "python"
# For Node.js apps with NVM (statically-linked OpenSSL)
sudo ./agentsight record -c node --binary-path ~/.nvm/versions/node/v20.0.0/bin/nodeVisit http://127.0.0.1:7395 to view the recorded data.
| Challenge | Application-Level Tools | AgentSight Solution |
|---|---|---|
| Framework Adoption | β New SDK/proxy for each framework | β Drop-in daemon, no code changes |
| Closed-Source Tools | β Limited visibility into operations | β Complete visibility into prompts & behaviors |
| Dynamic Agent Behavior | β Logs can be silenced or manipulated | β Kernel-level hooks for reliable monitoring |
| Encrypted Traffic | β Only sees wrapper outputs | β Captures real unencrypted requests/responses |
| System Interactions | β Misses subprocess executions | β Tracks all process behaviors & file operations |
| Multi-Agent Systems | β Isolated per-process tracing | β Global correlation and analysis |
AgentSight captures critical interactions that application-level tools miss:
- Subprocess executions that bypass instrumentation
- Raw encrypted payloads before agent processing
- File operations and system resource access
- Cross-agent communications and coordination
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI Agent Runtime β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β Application-Level Observability β β
β β (LangSmith, Helicone, Langfuse, etc.) β β
β β π΄ Can be bypassed β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β (Can be bypassed) β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€ β System Boundary
β π’ AgentSight eBPF Monitoring (Kernel-level) β
β βββββββββββββββββββ βββββββββββββββββββββββ β
β β SSL Traffic β β Process Events β β
β β Monitoring β β Monitoring β β
β βββββββββββββββββββ βββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Rust Streaming Analysis Framework β
β βββββββββββββββ ββββββββββββββββ ββββββββββ β
β β Runners β β Analyzers β β Output β β
β β (Collectors)β β (Processors) β β β β
β βββββββββββββββ ββββββββββββββββ ββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend Visualization β
β Timeline β’ Process Tree β’ Event Logs β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
-
eBPF Data Collection (Kernel Space)
- SSL Monitor: Intercepts SSL/TLS read/write operations via uprobe hooks
- Process Monitor: Tracks process lifecycle and file operations via tracepoints
- <3% Performance Overhead: Operates below application layer with minimal impact
-
Rust Streaming Framework (User Space)
- Runners: Execute eBPF programs and stream JSON events (SSL, Process, Agent, Combined)
- Analyzers: Pluggable processors for HTTP parsing, chunk merging, filtering, logging
- Event System: Standardized event format with rich metadata and JSON payloads
-
Frontend Visualization (React/TypeScript)
- Interactive timeline, process tree, and log views
- Real-time data streaming and analysis
- See "Web Interface Access" section for details
eBPF Programs β JSON Events β Runners β Analyzer Chain β Frontend/Storage/Output
- Linux kernel: 4.1+ with eBPF support (5.0+ recommended)
- Root privileges: Required for eBPF program loading
- Rust toolchain: 1.88.0+ (for building collector)
- Node.js: 18+ (for frontend development)
- Build tools: clang, llvm, libelf-dev
AgentSight runs in Docker with --privileged for eBPF, --pid=host to access host processes, -v /sys:/sys:ro for process monitoring, and -v /usr:/usr:ro -v /lib:/lib:ro for SSL library access (required to attach uprobes to shared libraries like libssl.so). Example:
# Monitor Python AI tools
docker run --privileged --pid=host --network=host \
-v /sys:/sys:ro -v /usr:/usr:ro -v /lib:/lib:ro \
-v $(pwd)/logs:/logs \
ghcr.io/eunomia-bpf/agentsight:latest \
record --comm python --log-file /logs/record.log
# Monitor Claude Code (mount home dir for binary access)
docker run --privileged --pid=host --network=host \
-v /sys:/sys:ro -v /usr:/usr:ro -v /lib:/lib:ro \
-v $HOME/.local/share/claude:/claude:ro \
-v $(pwd)/logs:/logs \
ghcr.io/eunomia-bpf/agentsight:latest \
record --comm claude --binary-path /claude/versions/2.1.39 --log-file /logs/record.log# Clone repository with submodules
git clone https://github.com/eunomia-bpf/agentsight.git --recursive
cd agentsight
# Install system dependencies (Ubuntu/Debian)
make install
# Build all components (frontend, eBPF, and Rust)
make build
# Or build individually:
# make build-frontend # Build frontend assets
# make build-bpf # Build eBPF programs
# make build-rust # Build Rust collector
Claude Code is a Bun-based application with BoringSSL statically linked and
symbols stripped. AgentSight auto-detects BoringSSL functions via byte-pattern
matching when --binary-path is provided:
# Find the Claude binary version
CLAUDE_BIN=~/.local/share/claude/versions/$(claude --version | head -1)
# Record all Claude activity with web UI
sudo ./agentsight record -c claude --binary-path "$CLAUDE_BIN"
# Open http://127.0.0.1:7395 to view timeline
# Advanced: full trace with custom filters
sudo ./agentsight trace --ssl true --process true --comm claude \
--binary-path "$CLAUDE_BIN" --server true --server-port 8080This captures:
- Conversation API:
POST /v1/messagesrequests with full prompt/response SSE streaming - Telemetry: heartbeat, event logging, Datadog logs
- Process activity: file operations, subprocess executions
Note: All SSL traffic in Claude flows through an internal "HTTP Client" thread, not the main "claude" thread. When
--binary-pathis specified, the--commfilter is automatically skipped for SSL monitoring (but still applied for process monitoring) to ensure traffic is captured correctly.
# Monitor aider, open-interpreter, or any Python-based AI tool
sudo ./agentsight record -c "python"
# Custom port and log file
sudo ./agentsight record -c "python" --server-port 8080 --log-file /tmp/agent.logFor Node.js applications installed via NVM that statically link OpenSSL, use
--binary-path to point to the actual Node.js binary:
# Monitor Gemini CLI or other Node.js AI tools
sudo ./agentsight record -c node --binary-path ~/.nvm/versions/node/v20.0.0/bin/node
# Or with system Node.js (uses dynamic libssl, no --binary-path needed)
sudo ./agentsight record -c node# Combined SSL and process monitoring with web interface
sudo ./agentsight trace --ssl true --process true --server true
# Custom port and log file
sudo ./agentsight record -c "python" --server-port 8080 --log-file /tmp/agent.logFor browser-specific plaintext capture, use the standalone browsertrace BPF
tool instead of sslsniff:
# Chrome / Chromium
sudo ./bpf/browsertrace --binary-path /opt/google/chrome/chrome
# Firefox on Ubuntu Snap
sudo ./bpf/browsertrace --binary-path /snap/firefox/current/usr/lib/firefox/firefoxNote: On Ubuntu,
/usr/bin/firefoxis often a wrapper script rather than the real browser ELF. Pointbrowsertraceat the actual Firefox binary.
For local MCP servers that communicate over stdio instead of HTTP/TLS, use
the standalone stdiocap BPF tool:
# Capture stdin/stdout/stderr payloads for a local MCP server process
sudo ./bpf/stdiocap -p <mcp_server_pid>AgentSight also includes a minimal MCP fixture for local testing under
docs/mcp-test/README.md. It provides both stdio
and HTTP test modes so you can generate predictable MCP traffic before wiring
it into the Rust collector.
# Run sslsniff directly on Claude binary
sudo ./bpf/sslsniff --binary-path ~/.local/share/claude/versions/2.1.39
# Run sslsniff on NVM Node.js
sudo ./bpf/sslsniff --binary-path ~/.nvm/versions/node/v20.0.0/bin/node --verbose
# Run browsertrace directly on Chrome
sudo ./bpf/browsertrace --binary-path /opt/google/chrome/chrome
# Run stdiocap directly on a local MCP server PID
sudo ./bpf/stdiocap -p 12345
# Run process tracer
sudo ./bpf/process -c pythonAll monitoring commands with --server flag provide web visualization at:
- Timeline View: http://127.0.0.1:7395/timeline
- Process Tree: http://127.0.0.1:7395/tree
- Raw Logs: http://127.0.0.1:7395/logs
Q: How does AgentSight differ from traditional APM tools? A: AgentSight operates at the kernel level using eBPF, providing system-level monitoring that is independent of application code. Traditional APM requires instrumentation that can be modified or disabled.
Q: What's the performance impact? A: Less than 3% CPU overhead due to optimized eBPF kernel-space data collection.
Q: Can agents detect they're being monitored?
A: Detection is extremely difficult since monitoring occurs at the kernel level without code modification.
Q: Which Linux distributions are supported? A: Any distribution with kernel 4.1+ (5.0+ recommended). Tested on Ubuntu 20.04+, CentOS 8+, RHEL 8+.
Q: Can I monitor multiple agents simultaneously?
A: Yes, use combined monitoring modes for concurrent multi-agent observation with correlation.
Q: How do I filter sensitive data?
A: Built-in analyzers can remove authentication headers and filter specific content patterns.
Q: Why doesn't AgentSight capture traffic from Claude Code or NVM Node.js?
A: These applications statically link their SSL library (BoringSSL for Claude/Bun, OpenSSL for NVM Node.js) instead of using system libssl.so. Use --binary-path to point to the actual binary so AgentSight can auto-detect SSL functions via byte-pattern matching. See the "Monitoring Claude Code" and "Monitoring Node.js AI Tools" sections for examples.
Q: Why does --comm claude not capture SSL traffic?
A: Claude Code's SSL traffic runs on an internal "HTTP Client" thread, not the main "claude" thread. The --comm filter in sslsniff matches thread name (from bpf_get_current_comm()), not process name. When using --binary-path, the collector automatically skips the --comm filter for SSL monitoring.
Q: "Permission denied" errors
A: Ensure you're running with sudo or have CAP_BPF and CAP_SYS_ADMIN capabilities.
Q: "Failed to load eBPF program" errors A: Verify kernel version meets requirements (see Prerequisites). Update vmlinux.h for your architecture if needed.
We welcome contributions! After cloning and building (see Installation above), you can:
# Run tests
make test
# Frontend development server
cd frontend && npm run dev
# Build debug versions with AddressSanitizer
make -C bpf debug- CLAUDE.md - Project guidelines and architecture
- collector/DESIGN.md - Framework design details
- docs/why.md - Problem analysis and motivation
MIT License - see LICENSE for details.
π‘ The Future of AI Observability: As AI agents become more autonomous and capable of self-modification, traditional observability approaches become insufficient. AgentSight provides independent, system-level monitoring for safe AI deployment at scale.


