S3 Forwarding Overview
Use this flow to test a managed Claude Code deployment on a pilot Mac where Beacon writes local endpoint events to/var/log/beacon-agent/runtime.jsonl and a packaged Vector service forwards those events to AWS S3.
Beacon remains the local JSONL producer. AWS credentials, bucket policy, encryption, lifecycle, retention, and access logging stay in AWS, host identity, or MDM secret tooling.
Package Requirements
Build or obtain a signed and notarized Beacon macOS package that includes:packaging/macos/jamf/claude/common/repair-hooks.shpackaging/macos/jamf/claude/s3/install-forwarder.shpackaging/macos/jamf/claude/s3/repair-hooks-and-forwarder.shpackaging/macos/jamf/claude/s3/run-forwarder.sh
BEACON_APP_SIGN_IDENTITY signs the payload binaries with hardened runtime. PKG_SIGN_IDENTITY signs the package with pkgbuild. NOTARYTOOL_PROFILE submits the package to Apple notary service and staples the result.
AWS Setup
Create a dedicated bucket prefix for the pilot and grant the identity used by the Vector process permission to write only that prefix:Jamf Policy
Install the Beacon package first, then run the combined helper from a policy scoped to the pilot Mac:| Parameter | Environment variable | Value |
|---|---|---|
| 4 | BEACON_S3_BUCKET | Required S3 bucket name |
| 5 | AWS_REGION | Required AWS region |
| 6 | BEACON_S3_PREFIX | Optional prefix, default beacon/runtime |
| 7 | BEACON_S3_STORAGE_CLASS | Optional storage class, default STANDARD |
| 8 | BEACON_VECTOR_READ_FROM | Optional Vector read position, default end |
| 9 | BEACON_OTLP_GRPC_PORT | Optional Beacon OTLP gRPC port, default 4317 |
| 10 | BEACON_OTLP_HTTP_PORT | Optional Beacon OTLP HTTP port, default 4318 |
- writes
/Library/Application Support/Beacon/Forwarders/s3-vector.toml - writes
/Library/Application Support/Beacon/Forwarders/s3-vector.envwith mode0600 - starts
com.beacon.endpoint.s3-forwarder - repairs the Beacon system endpoint
- prepares
/var/log/beacon-agent/runtime.jsonlfor user-run hooks - installs Claude Code hooks for the interactive console user
- writes a manual Claude hook smoke event
Manual Pilot Command
For a one-Mac pilot without Jamf policy parameters, install the signed package and run:Validate Delivery
Confirm local state on the Mac:Troubleshooting
If objects do not arrive, check that Vector is running, that/tmp/com.beacon.endpoint.s3-forwarder.err is empty or actionable, that the env file contains the expected bucket and region, and that the identity available to the Vector LaunchDaemon has s3:PutObject for the selected prefix.
If Claude hook events do not appear in /var/log/beacon-agent/runtime.jsonl, rerun the policy while an interactive user is logged in, then fully restart Claude Code.
