Overview
Use this runbook when your security team wants Jamf Pro to deploy Beacon on managed Macs and forward supported Anthropic, OpenAI, and Cursor endpoint telemetry to AWS S3. This guide is intentionally specific to S3. It covers local products that run on the Mac:- Anthropic Claude Code
- OpenAI Codex CLI
- Cursor
Security Outcome
After rollout:- Beacon is installed under
/opt/beacon. - The local collector runs as
com.beacon.endpoint.collector. - The S3 forwarder runs as
com.beacon.endpoint.s3-forwarder. - Claude Code hooks write local runtime telemetry.
- Cursor hooks write local runtime telemetry.
- Codex CLI sends OTLP logs and token metrics to Beacon’s local collector.
- Runtime telemetry is written locally to
/var/log/beacon-agent/runtime.jsonl. - Inventory telemetry is written locally to
/var/log/beacon-agent/inventory_state.jsonl. - Vector uploads both JSONL streams to your S3 bucket.
Product Coverage
Prerequisites
Prepare these before touching Jamf:- A signed and notarized Beacon endpoint
.pkgthat includes/opt/beacon/bin/vector. - Claude Code, Codex CLI, and Cursor installed on the target Macs where those products are in scope.
- A pilot Jamf Smart Group.
- A target AWS S3 bucket.
- An S3 prefix root such as
beacon-prod. - AWS credentials, profile, web identity, or role material available to the Jamf S3 policy at install time.
s3:PutObjectpermission for the selected bucket prefix.- A security decision that prompt, command, tool, file, model, and inventory telemetry may be written to customer-controlled S3.
runtime or inventory:
AWS Permission
Scope write access to the Beacon prefix:0600.
Jamf Policy Plan
Create these policies in order:
Keep policies 2, 3, and 4 separate during rollout. That makes failures easier to triage and avoids hiding user-context failures behind package installation success.
Step 1: Install Beacon Package
In Jamf Pro:- Upload the signed Beacon endpoint
.pkg. - Create a policy named
Beacon - Install Package. - Add the package with the install action.
- Scope it to your pilot Smart Group.
- Run it before the S3, Cursor, or Codex policies.
Step 2: Configure S3 And Claude Code
Create a Jamf script namedBeacon - Configure S3 Forwarding.
Use this wrapper:
Create a policy named
Beacon - Configure S3 and Claude Code:
- Scope it to Macs where the package has installed.
- Run it only when a normal interactive console user is logged in.
- Add the script above.
- Fill parameters 4-10.
- Deliver AWS credentials through your approved Jamf secret or identity mechanism.
Use Jamf parameters for non-secret values such as bucket, region, and prefix. Avoid putting long-lived access keys directly in ordinary policy parameter fields or policy logs.
This policy:
- Installs the S3 Vector forwarder.
- Repairs the Beacon system endpoint.
- Starts
com.beacon.endpoint.collector. - Creates
/var/log/beacon-agent/runtime.jsonl. - Creates
/var/log/beacon-agent/inventory_state.jsonl. - Grants the console user append access to Beacon logs.
- Installs Claude Code hooks for the console user.
- Starts
com.beacon.endpoint.s3-forwarder.
Optional: Enable Endpoint Self-Updates
Beacon package self-updates are off by default. To let Beacon apply future signed package updates after the Jamf install, add a Jamf Files and Processes payload or post-install policy command:Enable automatic package self-updates
Enable check-only update monitoring
auto mode verifies release manifest checksums, Developer ID signature, and Gatekeeper install assessment before applying a signed package. check-only mode writes update status events to /var/log/beacon-agent/system.jsonl without downloading or applying packages.
Step 3: Configure Cursor Hooks
Create a Jamf script namedBeacon - Configure Cursor Hooks.
Use this wrapper:
Create a policy named
Beacon - Configure Cursor Hooks:
- Scope it to Macs where the package has installed.
- Run it only when a normal interactive console user is logged in.
- Add the script above.
- Set parameter 4 to
cursor. - Ask users to fully restart Cursor after the policy runs.
Step 4: Configure Codex CLI
Codex CLI runtime telemetry is OTLP-based. It reads OTLP settings from~/.codex/config.toml.
Use your standard Jamf user-context mechanism or managed config approach to ensure each Codex user has this block:
Validate A Deployed Mac
Run these checks on a target Mac after each policy completes.1. Confirm Services
running.
2. Confirm Local Files
3. Confirm S3 Forwarder Config
4. Confirm Hook And Codex Config
Run as the logged-in user:beacon-hooks. Codex should include [otel], [otel.exporter."otlp-grpc"], and [otel.metrics_exporter."otlp-grpc"].
5. Generate Local Test Events
Write a synthetic endpoint event:6. Generate Product Events
Generate a Claude Code event:7. Confirm S3 Delivery
Vector batches uploads. Production configs usetimeout_secs = 300, so allow up to five minutes.
Troubleshooting
No S3 Objects
Check the forwarder:launchctl reports Could not find service "com.beacon.endpoint.s3-forwarder",
the S3 files may still be present but the optional LaunchDaemon is not loaded.
When the saved S3 environment exists, rerun the packaged installer to rewrite
the Vector config and plist and start the service:
Cursor Hooks Are Missing
Confirm the hook policy ran while a user was logged in. The helper exits when the console user isroot or loginwindow.
Run the hook policy again after login, then restart Cursor.
Claude Code Events Are Missing
Confirm the S3 helper ran while a user was logged in, then check Claude settings as that user:Codex Events Are Missing
Confirm Codex CLI is installed and the user config includes OTel:Inventory Is Empty
Force inventory and inspect the local file:Cloud Or Admin Products Are Missing
Claude Cowork, Claude Code cloud agents, Cursor Cloud Agents, CI agents, and SDK-instrumented OpenAI or Anthropic applications are not configured by this Mac MDM policy. Use their runtime-specific setup pages and validate those events at the collector or destination they target.Related
Claude with Jamf and S3
Review the Claude-specific S3 helper and validation flow.
Claude Code
Review Claude Code endpoint telemetry coverage.
Codex CLI
Review OpenAI Codex CLI endpoint telemetry coverage.
Cursor
Review Cursor hook telemetry coverage.

