EndpointSecurity Extension
The EndpointSecurity (ES) system extension is the ground truth tier of Quint’s architecture. It runs as a macOS system extension insideQuintAgent.app, using Apple’s EndpointSecurity framework to monitor file operations, process events, and agent lifecycle at the OS level. The extension communicates with the Go daemon over a Unix socket with auth handshake.
While the forward proxy captures intent (what agents ask models to do), the ES extension captures truth (what actually happens on disk). Divergence between the two is the highest-signal threat Quint can detect.
Architecture
Two ES Clients
The extension uses two separate EndpointSecurity clients with different roles:Scout (Client 1)
Subscribes toES_EVENT_TYPE_NOTIFY_EXEC only — every process launch on the machine. For each exec, it runs the 4-layer agent detection cascade. When an agent is found, it tells the Recorder to start watching that process and all its children.
Scout sees everything but does minimal work per event (just the detection check).
Recorder (Client 2)
Uses inverted muting (es_invert_muting): by default it receives zero events. When Scout activates a process via es_mute_process (which, under inverted muting, means “start watching”), the Recorder subscribes to all 9 event types for that process.
This design means the Recorder only receives events from confirmed AI agent processes — no noise from the rest of the system.
9 Event Types
Network events (
connect, sendto) are not available in the ES framework’s notify API. Network monitoring for agent traffic is handled by the forward proxy tier.Agent Detection Cascade
The extension detects AI agent processes through a 4-layer cascade, evaluated in priority order:Layer 1: Code Signing (Highest Confidence)
Uses the macOS code signing identity (signingID + teamID) that the kernel verifies cryptographically. This is unforgeable without the vendor’s signing key.
For vendors with few products (3 or fewer signing IDs), a TeamID-only match is accepted. This covers new products from a known AI vendor (e.g., if Anthropic ships a new tool signed with the same TeamID, it’s auto-detected). For vendors with many products (Microsoft), both TeamID and SigningID must match.
Layer 2: Path/Name (Fallback)
For unsigned or unknown-vendor tools, matches on process binary name (case-insensitive exact) and binary path (substring). Covers 21 platforms including Claude Code, Cursor, Copilot, Windsurf, Kiro, Codex, Aider, Cline, Continue, Augment, Goose, Gemini CLI, Amp, Zed, OpenCode, PearAI, Trae, Void, and Devin.Layer 3: Arg Match (Interpreters)
For interpreter processes (node, python, python3, bun, deno), checks command-line arguments for known agent script patterns. Catches cases like node /path/to/claude-code/main.js.
Layer 4: Parent Cascade (Lowest Confidence)
If the parent process is already tracked as an agent, the child inherits agent status. This captures the full process tree — when Claude Code forks a child process, that child is automatically watched.Unix Socket Transport
The extension communicates with the Go daemon over a Unix stream socket (AF_UNIX, SOCK_STREAM):
Auth Handshake
On connection, the extension sends an auth frame before any events:/etc/quint/es-auth-secret (readable by both the extension and daemon). The daemon validates the secret before accepting events.
Non-Blocking Writes
The socket is set toO_NONBLOCK so ES callback threads are never blocked by a slow or dead connection. If a write fails:
- The failed event is pushed back to the buffer
- The connection is marked dead
- The run loop reconnects after 2 seconds
- Buffered events drain on reconnection
recv(MSG_PEEK) returning EOF.
Event Payload
Each event sent over the socket includes:Installation & Entitlement
The ES extension ships insideQuintAgent.app, distributed via the .pkg installer:
- QuintAgent.app — host app that activates the system extension, shows status bar icon
- QuintEndpointExtension — the actual system extension binary
Requirements
- macOS 11+ (EndpointSecurity framework)
- System Extension approval (user consent dialog)
- Full Disk Access (for file event monitoring)
- Root/admin for installation
Relationship to NE
Quint ships a second system extension alongside ES: the Network Extension, which transparently redirects LLM API flows into the MITM pipeline. The two extensions are independent — separate bundles, entitlements, and approval flows — and a failure in one doesn’t affect the other. Both feed the same daemon and converge in theunisession.Tracker.
Tier Comparison
When both tiers run together, Quint detects intent vs. truth divergence — an agent that claims to read a file (Tier 1) but actually exfiltrates credentials (Tier 2) triggers a high-confidence alert. This is the foundation of Quint’s defense-in-depth architecture.