.pkg. It installs the self-contained bundle to /usr/local/lib/runlayer/runlayer/, symlinks /usr/local/bin/runlayer, and adds two package-owned launchd jobs: an hourly root updater (com.runlayer.cli.update) and an hourly per-user scheduler (com.runlayer.cli.schedule). The updater is enabled by default but silently exits until managed Host and OrgApiKey values are available. Skill sync also defaults on but waits for Host and either SkillSyncOrgApiKey or OrgApiKey. The base deployment needs no Configuration Profiles.
Prerequisites
- An MDM with package deployment — Jamf Pro, Kandji, SimpleMDM, Mosyle, Workspace ONE, Intune, or any MDM that can deploy a
.pkg - Apple Silicon (arm64) Macs
- The signed
runlayer-<version>-macos-arm64.pkgfrom your Runlayer downloads access
Deployment Steps
1
Upload the .pkg
Upload
runlayer-<version>-macos-arm64.pkg as a Custom App (or equivalent package item) in your MDM — Jamf Pro, Kandji, SimpleMDM, Mosyle, Workspace ONE, Intune, or any MDM with package deployment.2
Scope to your devices
Scope the app to the device groups that should have the CLI. No profiles, PPPC grants, or additional payloads are required for the base install.
Skill sync (optional)
Turn on managed skill sync and devices install the skills you select in Runlayer — and keep them current — on an hourly tick.1
Push the config keys
Add these keys to a Configuration Profile for the dedicated
com.runlayer.cli preference domain. The CLI reads this domain first, then fills missing values from com.runlayer.aiwatch. If you already deploy AI Watch, its Host and OrgApiKey work as fallbacks; use the dedicated domain only for CLI-specific values or overrides.AutoUpdate and SyncSkills are opt-out switches: omitting them leaves each feature enabled once its required host and key are present.2
Push the login-items profile
Upload
com.runlayer.cli.loginitems.mobileconfig (published next to the .pkg in the release assets) as-is and scope it with the package. It pre-approves the scheduler agent on macOS 13+, so users never see a “Background Item Added” notification.--username overrides identity detection and --quiet suppresses non-error output:
runlayer schedule runs all due registered tasks once, using the same entrypoint as the package’s hourly per-user scheduler.
Fleet-wide, each device reports its skill-sync status on its device page under Shadow AI.
Upgrades and removal
- Upgrade — once managed
HostandOrgApiKeyvalues are present, devices install the backend-selected version themselves within the hour.AutoUpdatedefaults totrue; set it tofalseto opt out. For a one-off update, runrunlayer updatewith an organization API key. You can also push a newer.pkgthrough the same MDM item; installers upgrade in place. - Remove — unscope the app in your MDM, or run
uninstall-runlayer.sh(ships in the repo undercli/packaging/macos/) as root to remove the bundle, both launchd jobs, and the package receipt.
Verification
On a target device, confirm the binary resolves onPATH: