AI Watch on macOS and Windows supports Monitor, Protect, Enforce, and Sessions.
Linux is Detect only and ignores the configuration’s endpoint Mode and
Sessions settings. For a managed rollout, use
Deploy AI Watch.
Prerequisites
- Local administrator or root access to the test device
- A supported package platform: Apple Silicon macOS 14+, x64 Windows, or x86_64 Linux with glibc 2.17+
- Your Runlayer tenant host URL, such as
https://your-instance.runlayer.com
Install
- macOS AI Watch
- Windows AI Watch
- Linux AI Watch
- macOS CLI/desktop
- Windows CLI/desktop
- Linux CLI/desktop
1
Install and configure
Paste this command in Terminal:The script resolves the signed package selected by your Client Updates
policy, verifies its checksum, Runlayer Developer ID signature, and
notarization, installs it, and writes the Test Device bootstrap
configuration. Approve the
sudo prompt when asked. If hooks are
enabled, restart running AI clients after setup.2
Grant Full Disk Access and verify
Without MDM, macOS cannot grant Full Disk Access automatically. Open
the settings page and reveal the binary:Add the revealed binary to Full Disk Access and enable it. macOS 13
and newer may show a one-time Background Item Added notification;
no action is required.In Runlayer, open Shadow AI → Devices and confirm the test Mac appears.
downloads.runlayer.com.
An MDM profile overrides local Test Device configuration. On macOS, Managed
Preferences under
/Library/Managed Preferences take precedence over the
local /Library/Preferences domain.Manual installation fallback
Use these steps if the hosted bootstrap script cannot run. Download the resolved installer from the Test Device setup guide first.macOS AI Watch
macOS AI Watch
For package version 0.29.15 or newer:Versions before 0.29.15 do not include
aiwatch setup config, so the
one-command installer stops and sends you here. Install the package, write
the local preference domain, and kickstart hooks when enabled:Windows AI Watch
Windows AI Watch
Run from the MSI download directory:The MSI writes bootstrap configuration under
HKLM\Software\Runlayer\AIWatch and registers AIWatchScan,
AIWatchHooks, and AIWatchUpdate under \Runlayer.Linux AI Watch
Linux AI Watch
The one-command installer automatically selects the standard package for
glibc 2.35+ or the Write the world-readable host configuration and separate root-only key:Never put the organization API key in
glibc2.17 variant for glibc 2.17–2.34. For a manual
install, the standard packages below require glibc 2.35 or newer; older
distributions need a tagged artifact and the
legacy install commands.Install the standard package for your distribution:config.json; it is world-readable
by design. See the full Linux guide for supported
distributions, updates, and troubleshooting.macOS CLI/desktop
macOS CLI/desktop
For package version 0.29.15 or newer:For an older package:The final
launchctl kickstart fires the first update check immediately,
so the device converges on the Client Updates policy target instead of
waiting for the hourly com.runlayer.cli.update schedule.Windows CLI/desktop
Windows CLI/desktop
For CLI version 0.30.7 or newer, run from the MSI download directory:The MSI writes bootstrap configuration under Those older MSIs delay the first
HKLM\Software\Runlayer\CLI
and registers the CLIUpdate and CLISchedule scheduled tasks under
\Runlayer. CLIUpdate is locked to SYSTEM and Administrators, so a
non-elevated session cannot start it after the MSI UAC prompt. The task’s
first check runs as SYSTEM about two minutes after registration, then
hourly, so the device converges on the Client Updates policy target
without a parent-session kick.MSIs before 0.30.7 ignore the CLI_HOST / CLI_ORG_API_KEY properties.
Install without them, then write the registry values from an elevated
prompt:CLIUpdate check by about an hour. The
elevated prompt can start the task immediately; 0.30.7 and newer do not
need that kick.Linux CLI/desktop
Linux CLI/desktop
The one-command installer automatically selects the standard package for
glibc 2.35+ or the For CLI version 0.30.8 or newer, write the shared host configuration and
root-only key with:Never put the organization API key in
glibc2.17 variant for glibc 2.17–2.34. For a manual
install, the standard packages below require glibc 2.35 or newer.Install the standard package for your distribution:setup config preserves local non-policy settings, writes config.json
as 0644, and keeps the organization key only in the 0600 credentials file.
The explicit wrapper command triggers the first Client Updates policy
check; cron repeats it hourly.For an older package, write the same files manually:config.json; it is world-readable
by design. Existing installs need one package upgrade to 0.30.8 or newer
before the hourly full-CLI updater exists.Verification
On a test Mac after installation and configuration:Common post-deploy issues
Users see 'Background Item Added' after install
Users see 'Background Item Added' after install
On a manual test-device install, this one-time macOS 13+ notification is expected because no MDM Login Items profile pre-approves the scan LaunchAgent.On a managed deployment, confirm Expect the Runlayer item to show
com.runlayer.aiwatch.mobileconfig (which carries the Login Items payload) is scoped to the same device group as the .pkg, then force an MDM sync and check:enabled allowed visible.Gatekeeper blocks the package
Gatekeeper blocks the package
Verify you are deploying the official signed and notarized release artifact:Expected: a Developer ID Installer signature for Anysource Inc. and
source=Notarized Developer ID.Full Disk Access is enabled but TCC still denies access
Full Disk Access is enabled but TCC still denies access
For a manual install, confirm Expected:
/usr/local/lib/runlayer/aiwatch/aiwatch is enabled under System Settings → Privacy & Security → Full Disk Access. For MDM, the PPPC profile pins Full Disk Access to identifier com.runlayer.aiwatch and Developer ID team AF2M8HC7A2.Confirm the installed binary matches:Authority=Developer ID Application: Anysource Inc. (AF2M8HC7A2) and Identifier=com.runlayer.aiwatch. Custom or ad-hoc signed builds will not satisfy the PPPC CodeRequirement.Customize scan schedule (optional)
The bundled LaunchAgent ships with a 15-minuteStartInterval. Most tenants don’t need to change it, and the interval is an operational tuning knob, not a security control — Detect coverage comes from the scan itself, not its cadence. On a managed fleet, push the script below via your MDM’s recurring-script mechanism (Jamf Policy, Kandji Custom Script, SimpleMDM Script, etc.). On a manual test Mac, run it directly with administrator access:
The next
.pkg upgrade resets StartInterval to the bundled default — the override script must run on a recurring schedule, or be re-applied after each upgrade.Upgrade
The rootcom.runlayer.aiwatch.update LaunchDaemon checks hourly and installs the signed + notarized .pkg at the version selected by your Runlayer tenant. An MDM Custom App push or another manual installer run remains a fallback, but the next hourly tick will restore the selected version. To hold a manually pushed version, pin it in Client Updates first.
Upgrades replace the previous /usr/local/lib/runlayer/aiwatch/ install cleanly, so obsolete modules and version metadata cannot survive an upgrade or rollback. The separate Runlayer CLI installation is preserved. Mid-scan upgrades are safe — a running scan finishes on the old version, and the next LaunchAgent tick picks up the new one.
MDM Configuration Profiles are unchanged across version upgrades. Preferences written manually under com.runlayer.aiwatch also remain in place.