What is Agent Beacon

Agent Beacon is the world's first open-source telemetry layer for AI agents.

Agent activity is fragmented across runtimes and environments, from endpoints and CI to browsers and the cloud. Beacon captures that activity and normalizes agent telemetry into a single, unified schema.

Beacon supports 21+ local agent runtimes and every major surface agents run on. It ships as a lightweight endpoint binary and TypeScript SDK, installs with one command or fleet-wide through MDM, and forwards telemetry to major SIEM, observability, and data platforms.

Learn more in the Agent Beacon documentation.

High-Level Architecture

Beacon captures activity where each agent actually runs, then normalizes it into a single OpenTelemetry-based event model.

  • Sourceslocal agents through hooks, plugins, and local OpenTelemetry; browser chat through an optional extension; agents in code through the TypeScript SDK; CI pipelines through a temporary collector; and cloud agents through sandbox hooks.
  • Beacon — collect, normalize, store, correlate, and detect. Every surface lands in one event model, one durable JSONL log, one session timeline, and one local detection engine.
  • Destinations — inspect events in the local dashboard, retain JSONL, or forward the same stream into the major enterprise-grade SIEMs, log aggregators, and object storage.

Collection, processing, and inspection stay local by default; the same normalized event model extends to CI, cloud-agent, and SDK paths under customer control. See the open-source architecture reference for the full breakdown by surface, or the system architecture overview to compare it with the managed path.

Supported Surfaces

Agent Runtimes

Local Agents

Runtime Collection path Telemetry coverage
Antigravity CLI Native hooks Prompt, pre-tool, post-tool, stop, invocation, command, and file
Claude Code Local OTLP export plus optional hooks Prompt, command, tool, file, approval, API/model lifecycle, MCP connection, subagent, and session
Claude Cowork Admin-configured OTLP Prompt, assistant response, approval, command, tool, file, MCP, session, model, token usage, and runtime-reported cost
Cline Managed plugin hooks Prompts, task lifecycle and errors, tool lifecycle and results, commands with exit codes, file reads/edits with diffs, MCP activity, and token usage/cost
Codex CLI Local OTLP plus a session identity hook Session, prompt, approval, tool results, and per-user/session/model turn token usage
Cursor Native hooks Prompt, tool, shell command, MCP-like activity, approval, and file edits
Devin CLI Native hooks Session, prompt, pre-tool, post-tool, permission request, stop, session end, approval, and file
Devin Desktop Cascade/Windsurf hooks Prompt, command, MCP tool, file read, and file write
Factory Droid OTLP HTTP plus optional hooks Session, prompt, write/edit/create tool use, stop, and session end
fx (Vercel Labs) Poll of fx's own session records under ~/.fx/sessions/ through beacon endpoint fx sync; events land a turn late and cannot gate a tool call Session start, prompts, tool calls, commands with exit codes and output, file reads/creates/edits with diffs, MCP tool calls, agent messages, compaction, and token usage/cost. No approval or session-end record, because fx persists neither
Gemini CLI Opt-in local OTLP Prompts, tool calls, MCP activity, file operations, and approval-related events
GitHub Copilot CLI MDM-managed OTLP HTTP Prompt, session, tool, and approval-like activity
Grok Build Native hooks Session, prompt, pre-tool, post-tool, failed tool, stop, session end, command, and file
Hermes Agent Shell hooks Prompt, observed tool, command, file, approval request and response, session lifecycle, and subagent stop
Muse Code Native hooks through a managed hooks file Session start, prompt, pre-tool, post-tool, permission request/approval, subagent, context compaction, stop, command, and file. No session end or token usage, because Muse emits neither on a hook
Oh My Pi Managed extension hooks Session lifecycle, prompts, tool lifecycle and results, approval decisions with the session's approval mode, commands including operator ! and $, file reads/writes/edits with diffs, MCP activity, agent reasoning, and token usage/cost
OpenClaw Gateway Gateway-configured OTLP/HTTP OTLP logs, traces, and metrics from the Gateway diagnostics plugin
OpenCode Managed plugin hooks Prompts, assistant output and reasoning, model usage/cost, tool lifecycle and results, commands, file/web/MCP activity, approvals, and session errors
OpenHands Native hooks merged into the repository's own .openhands/hooks.json Session start and end, prompt, pre-tool, post-tool, failed tool, command with exit code and output, file read/modify with exact before/after diffs, and MCP tool calls. No approval decisions or token usage, because OpenHands exposes neither on a hook
Pi Managed extension hooks Session lifecycle, prompts, tool lifecycle and results, commands including operator !, file reads/writes/edits with diffs, agent reasoning, and token usage/cost
Prime Agent Managed extension hooks Session lifecycle, prompts, tool lifecycle and results, commands including operator !, file reads/writes/edits with diffs, agent reasoning, and token usage/cost
Qwen Code Native hooks Session, prompt, pre-tool, post-tool, failed tool, permission request/approval, subagent, stop, session end, command, and file
VS Code Copilot Chat OTel plus optional preview hooks Copilot session, prompt, model, and tool activity, plus extra lifecycle detail through optional hooks

Browser Chat

Runtime Collection path Telemetry coverage
Claude.ai Managed browser extension over local OTLP Prompt, assistant response, tool call, and token usage from the claude.ai chat stream
ChatGPT Managed browser extension over local OTLP Prompt, assistant response, and tool call from the chatgpt.com chat stream

CI Agents

Runtime Collection path Telemetry coverage
CI agent telemetry Temporary local collector through beacon ci exec or beacon ci start / beacon ci finish Supported agent prompt, tool, command, file, and run context emitted during the job

Cloud Agents

Runtime Collection path Telemetry coverage
Anthropic OpenLLMetry instrumentation through @asymptote/sdk Anthropic model call spans, errors, and OpenTelemetry attributes
Claude Agent SDK Query wrapper through Observe.wrapClaudeAgentQuery() Query root spans with Beacon-compatible prompt attributes
Claude Code Cloud Agents Cloud sandbox hooks with direct GCS or S3 upload Session, prompt, tool, command, file, and lifecycle
Cursor Cloud Agents Cloud sandbox hooks with direct GCS or S3 upload Follow-up prompts, tool, shell command, file, subagent, and compaction once project hooks are active
Devin Cloud Agents Org-wide API poll through beacon cloud devin pull, with GCS upload Session, prompt, agent message, status, pull request, and ACU usage at message level; the autonomous agent runs no in-sandbox hooks
OpenAI OpenLLMetry instrumentation through @asymptote/sdk OpenAI model call spans, errors, and OpenTelemetry attributes
Vercel AI SDK Tracer handoff through experimental_telemetry AI SDK model call and tool spans where telemetry is enabled

Output Destinations

Beacon writes endpoint telemetry to local JSONL by default and supports customer-controlled forwarding into SIEM, log aggregation, and object storage destinations, plus an opt-in managed path to the Asymptote dashboard.

Asymptote Managed

Destination Support path
Asymptote Managed Vector http forwarder over endpoint JSONL with a per-device key approved in the browser; revocable from the dashboard

Security Information and Event Management (SIEM)

Destination Support path
CrowdStrike Falcon LogScale HEC Optional endpoint forwarding with LogScale ingest tokens during install or repair
Microsoft Sentinel Azure Monitor Agent and Data Collection Rule content pack over local JSONL
Rapid7 InsightIDR Custom Logs webhook content pack over local JSONL
Splunk HEC Optional endpoint forwarding during install or repair
Sumo Logic HTTP Logs & Metrics Source content pack over local JSONL
Wazuh Localfile configuration and Beacon Wazuh content pack

Log Aggregation

Destination Support path
AWS CloudWatch Logs Vector content pack over local JSONL using customer-managed AWS credentials
Customer-managed log pipelines Forwarding from local Beacon JSONL under customer control
Datadog Datadog Agent custom log collection over local JSONL
Elastic Filebeat or Elastic Agent content pack over local JSONL

Object Storage

Destination Support path
AWS S3 Vector over endpoint JSONL, CI upload, or direct compressed snapshots from supported cloud agents
Google Cloud Storage Vector and packaged macOS helpers over endpoint JSONL, CI upload, or direct compressed snapshots from supported cloud agents

Local

Destination Support path
Local JSONL Default endpoint log and local dashboard source

MDM Deployment

Every version tag publishes native packages that perform the system-mode install themselves: they register and start the service, write machine-wide configuration, and point the interactive user's agent runtimes at the local collector. Homebrew and release archives remain available for CLI installs.

Platform Package Service manager Notes
macOS Signed, notarized .pkg (Apple Silicon) launchd Jamf Pro, Fleet, and Rippling assets; Homebrew for single machines
Linux .deb / .rpm (amd64, arm64) systemd Supervised fallback without systemd
Windows .msi (x64) Service Control Manager Unsigned for now; verify the published .sha256

The macOS package also ships GCS forwarder helpers under /opt/beacon/jamf/claude/gcs/ that run bundled Vector as a launchd job. Connecting a system-mode endpoint to Asymptote Managed is interactive today: an admin runs sudo beacon endpoint connect --system on the machine and approves it in the console user's browser. Headless enrollment tokens for MDM fleets are planned as a follow-up.

Dashboard and Local Detection

Beacon includes a local, read-only dashboard for validating endpoint activity without a hosted backend. It reads runtime.jsonl, where Beacon writes endpoint activity, alongside the sibling inventory_state.jsonl of periodic Cursor and Claude Code configuration inventory. Storage and retention behavior is summarized in the local testing and logs docs.

For offline threat detection, beacon scan runs open threat rules over local telemetry with no network access. See the Threat Rules spec and the generated rule field reference for rule format, CEL matching, fixtures, and supported event fields.

Start Here

Quickstart

See the Quickstart docs for the full setup paths.

First-Run Onboarding

The first time you run beacon endpoint install in a terminal, Beacon asks for your email and whether this is work or personal use, and sends that to Asymptote once. Knowing who runs Beacon is how we decide which runtimes and integrations to build next. It happens once per machine and never runs non-interactively: MDM deployments, package postinstall scripts, --system installs, CI, --dry-run, and piped stdin all skip it silently, and BEACON_ONBOARDING=0 turns it off. Exactly what is sent, and nothing else:

Field Example
Email you enter [email protected]
Work, personal, or evaluating work
OS, architecture, OS version darwin, arm64, 15.5
Beacon version and install method v0.0.31, homebrew
Names of agent runtimes on this machine claude_code, cursor
A random install ID 64871b2b…

Never sent: prompts, file contents, commands, telemetry events, repository names, or anything else Beacon captures. The endpoint agent itself stays local-only; this is one HTTP request at install time, not an ongoing channel, unless you connect the machine to Asymptote Managed.

The same first-run prompt ends with one more question, where should this machine's agent telemetry go?, answered with the arrow keys:

  • Keep it on this machine (the default, so Enter never forwards anything). Local JSONL and local dashboard.
  • Forward to your own infrastructure: a SIEM, observability platform, or an S3/GCS bucket you own. Beacon points you at the log forwarding docs and the install stays local until you set up a pack.
  • Forward to Asymptote Managed: runs beacon endpoint connect after the install. Your browser opens the Asymptote dashboard, a member of your organization approves this specific device, and a Vector forwarder starts shipping the runtime and inventory JSONL with a per-device key. Nothing recorded before the approval is sent, and the device can be revoked from the dashboard at any time.

The answer stays on the machine and is never sent. Local and own-infrastructure answers are recorded at once and the question is not asked again; the Asymptote answer is recorded once the machine is connected, so a failed install or connection is asked again on the next interactive install. beacon endpoint install --connect skips the question and connects; BEACON_MANAGED_INGEST=0 hides the Asymptote option. See beacon endpoint connect and Asymptote Managed forwarding.

See the first-run onboarding docs for fleet attribution without a terminal, inspecting or clearing the record, and deletion requests.

For Security & IT Teams

Start with the security and IT quickstart and managed deployment guidance for rollout, validation, retention, and SIEM forwarding. For vendor review, see the security review.

For Developers

Install the released CLI with Homebrew, or build from source. The Homebrew formula depends on the tap's own vector formula (Vector is not in homebrew-core), so a Homebrew install can connect to Asymptote Managed without a second step; on Linux, install the vector package from vector.dev if you want managed forwarding.

brew tap asymptote-labs/tap
brew install beacon
beacon version
cd cli/beacon
make build

To verify a change against a real Claude Code session rather than only synthetic payloads, beacon-sandbox runs one in a disposable Linux sandbox and checks what Beacon actually captured:

cd beacon-sandbox
go run ./cmd/beacon-sandbox doctor
go run ./cmd/beacon-sandbox run --scenario s02-bash-command

See Verify Beacon In A Sandbox for setup, coverage, and limitations.

The browser extension is a separate, optional component that builds on its own. It needs a running Beacon endpoint to post to, and its test suite replays recorded chat streams through the real extension in headless Chromium, so it needs no login and no network:

cd browser-extension
npm ci
npm run build          # load dist/ unpacked in Chrome
npm test               # replay e2e

See browser-extension/README.md for what it captures and retains.

Star Growth

License

MIT