Overview
Fleet can deploy and inventory the local Beacon endpoint agent on managed Macs. Beacon’s Fleet support uses the signed and notarized macOS.pkg as Fleet software, while the endpoint agent writes local JSONL telemetry without requiring a hosted account, remote policy fetch, or Fleet API credentials.
What Fleet manages
Package layout
The macOS package includes Beacon binaries, endpoint helper scripts, and Fleet assets:Requirements and caveats
- Fleet Premium. Custom software packages are a Premium feature and must be added to a specific team. They cannot be added to All teams.
- Apple Silicon only. The signed, notarized endpoint
.pkg(BeaconEndpointAgent-<version>-arm64.pkg) is arm64. Intel Macs are not covered by that artifact. - Scripts enabled on
fleetd. Software install and Fleet scripts requirefleetd --enable-scripts. Scripts are enabled by default when you use Fleet MDM. - Self-hosted package storage. If you self-host Fleet, configure an S3 bucket for Fleet to store uploaded installers and raise load-balancer timeouts to at least five minutes for package upload.
- Do not put S3 or self-update enablement in the package post-install script. If a Fleet post-install script exits non-zero,
fleetduninstalls the package. Enable self-updates and S3 forwarding with separate Fleet scripts after install. - Self-updates are off by default and apply only to the Apple Silicon system package install. Endpoints need network access to the GitHub release manifest unless you set
BEACON_UPDATE_MANIFEST_URL. - S3 forwarding reuses the packaged Vector helper at
/opt/beacon/jamf/claude/s3/install-forwarder.sh. There is no separate Fleet-only forwarder binary. Release packages include/opt/beacon/bin/vector. - Fleet’s default
.pkguninstall only removes.appbundles. Beacon lives under/opt/beacon, so supply a custom uninstall script that calls the packaged cleanup helper.
Deploy with Fleet
Upload the signed and notarized.pkg as Fleet software and scope it to a pilot team or label. The package postinstall performs the default system install, so no post-install script is required for the common deployment path. See Deploy software for Fleet’s package, script, and targeting model.
1
Upload the Beacon package
Upload the signed and notarized Beacon macOS package as Fleet software. The package installs Beacon binaries under
/opt/beacon and includes Fleet helper scripts and inventory queries.2
Scope to a pilot
Scope the software to a pilot team or label before broader rollout.
3
Add policies or labels
Add queries from
/opt/beacon/fleet/queries as Fleet policies or labels to track install state, service health, log freshness, config state, and runtime log writability.4
Optionally enable endpoint self-updates
Beacon package self-updates are off by default. To opt in during rollout,
add a Fleet script or policy command that runs one of the following after the
package install completes:For visibility without automatic package installation, enable check-only
mode instead:Both commands require root and are intended for the system package install.
Enable automatic package self-updates
Enable check-only update monitoring
auto mode installs newer compatible signed packages from the release
manifest after package verification and health checks. check-only mode
writes local update status events to /var/log/beacon-agent/system.jsonl but
does not download or apply packages.5
Optionally configure S3 forwarding
After the package is installed, run a Fleet script that starts Vector
forwarding. Do not put that script in the package post-install. See
Beacon with Fleet and S3.
6
Validate the deployment
Run the Fleet validation helper on a managed Mac:
Fleet scripts
Fleet scripts are installed under/opt/beacon/fleet/scripts:
Use the install script when a workflow needs explicit parameters or a reinstall action.
Fleet install script positional arguments:
Inventory with queries
Add queries from/opt/beacon/fleet/queries as Fleet policies or labels. They cover package, service, log, and config presence and freshness.
Available queries:
beacon-version.sqlcollector-service-health.sqllast-event-age-seconds.sqlconfigured-harnesses.sqlruntime-log-writable.sqlsplunk-hec-forwarding.sqlfalcon-vector-forwarder-health.sqls3-vector-forwarder-health.sqls3-vector-forwarding-configured.sql
- Beacon install state is not
not_installed. - Collector service health is
running. - Last runtime event age is less than
86400. - Endpoint config state is
present. - Runtime log state is
present. - Splunk HEC config state is
configuredwhen HEC export is required. - S3 Vector forwarder health is
runningwhen S3 forwarding is required. - S3 Vector forwarding state is
configuredwhen S3 forwarding is required.
Repair and uninstall
Use/opt/beacon/fleet/scripts/repair.sh for endpoints where policies report a stale or unhealthy install. Include gemini in the harness argument, for example claude,codex,gemini, when the repair workflow should manage Gemini CLI telemetry settings. Configure GitHub Copilot CLI separately by deploying COPILOT_OTEL_ENABLED=true and OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318 in Copilot’s launch environment.
Use /opt/beacon/fleet/scripts/uninstall.sh to remove endpoint service files. Set BEACON_KEEP_LOGS=1 or the first uninstall argument to preserve runtime logs during removal. Set BEACON_KEEP_CONFIG=1 or the second uninstall argument to preserve harness telemetry configuration.
Troubleshooting
Beacon is not installed
Beacon is not installed
If the Beacon version query reports
not_installed, confirm the Fleet software install completed and that the package is scoped to the host.On the device, verify that the expected files exist:Collector service is not running
Collector service is not running
Check endpoint status and launchd state:If the service file or collector configuration drifted, run
/opt/beacon/fleet/scripts/repair.sh.Runtime events are stale or missing
Runtime events are stale or missing
Verify that the runtime log exists and is writable:If validation succeeds but events remain stale, confirm the configured harnesses match the agent harnesses installed or configured for the device and that the local collector ports are not in use by another process. For GitHub Copilot CLI, confirm Copilot’s launch environment includes
COPILOT_OTEL_ENABLED=true and points OTLP HTTP at the local Beacon collector.Splunk HEC is not configured
Splunk HEC is not configured
Check Fleet install script arguments 6 and 7, or the
BEACON_SPLUNK_HEC_ENDPOINT and BEACON_SPLUNK_HEC_TOKEN environment variables used by the install workflow.Use splunk-hec-forwarding.sql to verify whether endpoint configuration contains a Splunk destination. On the device, confirm the non-secret destination fields:Endpoint self-update is not running
Endpoint self-update is not running
Check update mode, launchd state, and local system update events:If the updater is disabled or missing, run the Fleet script or policy command
that enables the desired mode:To trigger an urgent update check from Fleet, run the scheduled updater path
immediately:
S3 Vector forwarder is not running
S3 Vector forwarder is not running
Confirm the release package includes Vector and that the Fleet S3 script ran after install:If the environment file is missing, rerun
beacon-configure-s3-forwarding.sh from Fleet. Do not echo AWS secrets in script output. Vector batches uploads for up to five minutes.Related
Beacon with Fleet and S3
Upload the package, enable self-updates, and forward runtime plus inventory JSONL to S3.
MDM deployment
Review the shared macOS MDM deployment model and package layout.
Log forwarding
Forward Beacon events into Wazuh, Splunk HEC, Falcon LogScale, Elastic, Datadog, Sumo Logic, Rapid7 InsightIDR, or customer-managed pipelines.

