Skip to main content

Overview

Rippling IT with Device Management can deploy Beacon to managed Macs by uploading the signed endpoint package as a custom installer and assigning it to a Supergroup. Beacon’s package postinstall creates the system endpoint, configures supported local runtimes, and writes telemetry to local JSONL without requiring a hosted Beacon account or Rippling API credentials. Rippling provides the deployment and targeting layer: Beacon remains local-first on the endpoint. The package does not call the Rippling API, and normal hook execution does not depend on Rippling being reachable.

Prerequisites

Before deployment:
  • Enroll target Macs in Rippling MDM and connect the Rippling Agent.
  • Obtain the signed and notarized BeaconEndpointAgent-<version>-arm64.pkg. The current endpoint package is for Apple Silicon Macs.
  • Confirm that the package contains /opt/beacon/bin/vector when the deployment will use GCS forwarding.
  • Create a pilot Supergroup that targets assigned Apple Silicon Macs and the employees who should receive Beacon.
  • Verify in the pilot that Rippling custom Bash scripts run as root. Beacon’s system install, LaunchDaemons, system logs, and forwarding configuration require root.
Rippling’s public documentation confirms custom installer and recurring Bash script deployment, but it does not document script execution identity, installer-to-script dependency ordering, or protected arbitrary-file delivery. Treat those behaviors as pilot acceptance gates in your Rippling tenant.

Package layout

The macOS package installs:
The jamf path is retained for compatibility with the packaged macOS MDM helpers. The endpoint and GCS scripts used in the Rippling flow do not call Jamf APIs. Package postinstall creates the default system endpoint:
The collector listens only on localhost by default:

Deploy with Rippling

1

Upload Beacon as a custom installer

In the Rippling Devices app, upload the signed Beacon .pkg as a custom installer. Configure it as system-level software and assign it to the pilot Supergroup.The package postinstall performs the base system installation. A separate script is not required to start the collector.
2

Confirm package installation

Wait for the device to connect, then review software installation status, pending actions, and the activity log in Rippling. Validate a pilot Mac:
3

Deploy a reconciliation script

Use a recurring custom Bash script for configuration that depends on a logged-in user or on files delivered separately. The script should fail clearly until its prerequisites exist and be safe to rerun.Start every system reconciliation script with:
Recurrence allows a device to converge after package installation, user login, or credential delivery without depending on undocumented action ordering.
4

Validate local telemetry

Validate endpoint configuration and write a synthetic event:
5

Expand the Supergroup

Broaden the deployment only after package status, script output, collector health, and local events remain healthy for the pilot population.

Claude Code and user hooks

The package configures Claude Code’s local OTLP settings during system installation when an interactive user is available. Claude Code hooks are per-user and should be reconciled while a non-root console user is logged in. For Claude-specific repair, deploy a recurring root script. Keep the helper’s verbose output local because its smoke test prints recent runtime and inventory events:
The helper:
  • repairs the Beacon system endpoint;
  • prepares runtime and inventory JSONL files;
  • grants the active console user append access;
  • installs Claude Code hooks for that user;
  • writes a synthetic hook event and validates the endpoint.
It exits non-zero when no interactive console user is present. This is expected during login-window or pre-enrollment runs; let the recurring Rippling script retry after user login.

Inventory and remediation

Rippling can report software install state, MDM status, Agent status, pending actions, and activity logs. Beacon-specific service and event freshness are best checked with a recurring Bash script whose metadata-only output Rippling can display or export:
Do not export beacon endpoint status --json through Rippling script output. Its last_event field contains the complete most recent endpoint event. Use a separate recurring reconciliation script for unhealthy or newly assigned devices. Repair the base system endpoint explicitly:
For Claude Code plus GCS forwarding, use the combined helper documented in Claude with Rippling and GCS.

Updates

Prefer deploying each new signed package through Rippling so software ownership stays with the MDM. Assign the new custom installer to the pilot Supergroup first, verify the collector and existing forwarder restart, and then broaden the assignment. Rippling’s public documentation does not describe version comparison or supersedence behavior for uploaded custom installers. Test package upgrades in your tenant before production rollout. Beacon package self-updates remain off by default. If your organization chooses Beacon-managed updates, run one of these commands from a root reconciliation script:
Apply verified Beacon package updates
Report updates without applying them

Uninstall and offboarding

Do not rely only on removing the custom installer from a Supergroup. Rippling can automatically remove managed software, but its public documentation does not establish that removal will run Beacon’s cleanup helper. Use this sequence:
  1. Remove the device from recurring Beacon configuration scripts.
  2. Copy the cleanup helper to a temporary root-only path while /opt/beacon still exists.
  3. Remove or unassign the Beacon custom installer so Rippling does not reinstall it after cleanup.
  4. Run the copied helper from a one-time root script.
  5. Review warnings and verify that services, files, and the package receipt are gone.
  6. Remove any separately managed forwarding credential.
  7. Revoke the corresponding cloud credential after endpoint cleanup is confirmed.
The full cleanup makes a best-effort removal of Beacon LaunchDaemons, endpoint and forwarder configuration, package files and receipts, and Beacon-managed active-user configuration. It reports some failures as warnings, so inspect its output and verify the result. Set BEACON_KEEP_LOGS=1 to retain local logs or BEACON_CLEAN_ALL_USERS=1 to clean Beacon-owned configuration for all local users.

Troubleshooting

Confirm the Mac is assigned to a user in the target Supergroup, is enrolled in Rippling MDM, and has a connected Rippling Agent. Review pending actions and the device activity log. Rippling waits to install assigned software on an unassigned device until it is assigned to a qualifying user.
Check the script output for the explicit id -u guard. Do not work around this by installing Beacon in user mode: the managed endpoint requires system LaunchDaemons and system-owned configuration. Confirm root execution behavior with Rippling support for your tenant.
Check status and launchd state:
Then run an explicit system repair:
Also confirm that ports 4317, 4318, and 13133 are not occupied by another process.
Confirm a non-root console user was logged in when the recurring hook repair ran. Review the safe summary in Rippling and the root-only local reconciliation log, rerun the wrapped helper, and fully restart Claude Code before testing a new session.

Rippling references

Claude with Rippling and GCS

Deploy Beacon, configure Claude Code hooks, and forward runtime plus inventory telemetry to GCS.

MDM deployment

Review the shared macOS MDM deployment model and package layout.

Claude Code

Review the Claude Code telemetry surface and local configuration.

GCS command reference

Validate the system GCS forwarding path from the Beacon CLI.