Skip to main content
Use this flow to test package-based AI Watch or Runlayer CLI/desktop on one device without enrolling it in an MDM. A single Test Device configuration and organization API key can report from macOS, Windows, and Linux.
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
The organization API key (Shadow AI Scan role) is generated automatically when you create the Test Device configuration below — don’t create one by hand.
Record the organization API key when the configuration is created. Runlayer only shows the full secret once. If the Test Device guide later shows <YOUR_API_KEY> and you no longer have the secret, delete the configuration and create a new one.
Create the configuration under Settings → MDM configuration → Add new → Test Device, then select the platform tab in the setup guide. For an existing configuration, open its menu and select View deployment setup. The guide generates the commands below with your tenant host and key filled in.

Install

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.
The bootstrap scripts are public, but target resolution and every package download require your tenant host and organization API key. They do not send the key to 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.
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:
Run from the MSI download directory:
The MSI writes bootstrap configuration under HKLM\Software\Runlayer\AIWatch and registers AIWatchScan, AIWatchHooks, and AIWatchUpdate under \Runlayer.
The one-command installer automatically selects the standard package for glibc 2.35+ or the 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:
Write the world-readable host configuration and separate root-only key:
Never put the organization API key in config.json; it is world-readable by design. See the full Linux guide for supported distributions, updates, and troubleshooting.
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.
For CLI version 0.30.7 or newer, run from the MSI download directory:
The MSI writes bootstrap configuration under 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:
Those older MSIs delay the first CLIUpdate check by about an hour. The elevated prompt can start the task immediately; 0.30.7 and newer do not need that kick.
The one-command installer automatically selects the standard package for glibc 2.35+ or the 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:
For CLI version 0.30.8 or newer, write the shared host configuration and root-only key with:
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:
Never put the organization API key in 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.
The verification below applies to macOS AI Watch installs (scripted or manual). For Windows and Linux, use the verify steps in their tabs above.

Verification

On a test Mac after installation and configuration:
In the Runlayer dashboard, navigate to Shadow AI → Devices and confirm the test Mac appears.

Common post-deploy issues

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 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:
Expect the Runlayer item to show enabled allowed visible.
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.
For a manual install, confirm /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:
Expected: 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-minute StartInterval. 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 root com.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.
If you’ve overridden StartInterval via Custom Script, the upgrade resets it to the bundled default. Re-apply the override script on a recurring schedule.

Uninstall

For full package and hook cleanup guidance, see Remove AI Watch.

Troubleshooting

For deployment diagnostics and common macOS package issues, see Troubleshooting.