Skip to main content
Use this flow to test package-based AI Watch 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.
macOS and Windows support 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, x64 Windows, or x86_64 Linux
  • An organization API key with the Shadow AI Scan role, created in Settings → Organization API keys
  • Your Runlayer tenant host URL (for example, https://your-instance.runlayer.com)
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 operating-system tab in the setup guide. For an existing configuration, open its menu and select View deployment setup.

macOS — install and configure

1

Download the signed package

On the macOS tab, download the signed aiwatch-<version>-macos-arm64.pkg selected by your Client Updates policy.
2

Install the package

From the directory containing the download, run:
The package installs /usr/local/bin/aiwatch, the scan LaunchAgent, the hook bootstrap LaunchDaemon, and the hourly update LaunchDaemon.
3

Write the managed preferences

Replace the host and organization API key below. Set Mode, its paired legacy Enforcement value, Sessions, and the discovery and scan-tuning values (DetectProcesses, DetectContainers, ProjectDepth, ProjectTimeout) to match the Test Device configuration:
Pair Mode and legacy Enforcement as follows. See Endpoint modes for the behavior of each mode.Set Sessions to true to collect session data, or false to disable it. Monitor with Sessions disabled is scan-only and does not install hooks.Set DetectProcesses, DetectContainers, ProjectDepth, and ProjectTimeout to match the Test Device configuration’s discovery and scan-tuning settings; the values shown in the in-app setup guide already reflect them.
4

Grant Full Disk Access

Without MDM, there is no PPPC profile to grant Full Disk Access automatically. Open System Settings → Privacy & Security → Full Disk Access, select +, press Command-Shift-G, and add:
Enable the entry before scanning. Without this permission, macOS can prevent AI Watch from reading project configurations under protected locations such as ~/Desktop, ~/Documents, and ~/Downloads.macOS 13 and newer may also show a one-time Background Item Added notification because no MDM Login Items profile pre-approves the scan LaunchAgent.
5

Apply hooks when enabled

If Mode is Protect or Enforce, or Sessions is enabled, run:
Restart your AI clients after the bootstrap completes so they load the installed hook configurations. Skip this step for scan-only Monitor (Mode=monitor, Sessions=false).

Verification

On a test Mac after installation and configuration:
In the Runlayer dashboard, navigate to Shadow → 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.loginitems.mobileconfig is scoped to the same device group as the .pkg, then force an MDM sync and check:
On macOS 13+, expect the Runlayer item to show enabled allowed visible. macOS 12 and older ignore the Login Items payload; the notification control only exists on macOS 13+.
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. 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

By default, the root com.runlayer.aiwatch.update LaunchDaemon checks hourly and installs the backend-selected signed + notarized .pkg. An MDM Custom App push or another manual installer run remains a fallback, but the next hourly tick will restore the backend-selected target. To hold a manually pushed version, set AutoUpdate=false in managed preferences or align the backend rollout policy first. The package preinstall removes only the previous /usr/local/lib/runlayer/aiwatch/ onedir tree before PackageKit deploys the new payload, so obsolete modules and version metadata cannot survive an upgrade or rollback. The separate Runlayer CLI installation is preserved. Mid-scan upgrades are safe — macOS lets you unlink an open file, and the running aiwatch keeps its mapped pages until the next LaunchAgent tick picks up the new version. Postinstall intentionally leaves an already-loaded updater running so it cannot terminate its own installer transaction; the hourly cadence remains stable. 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.

Windows — install and configure

Windows testing uses the same signed x64 MSI as an Intune deployment, but installs it directly on one device.
1

Download the signed MSI

On the Windows tab of the Test Device setup guide, download aiwatch-<version>-win-x64.msi.
2

Install with the generated configuration

Open PowerShell as Administrator in the download directory and run the command rendered by the setup guide. It includes the selected host, organization API key, Mode, Sessions, discovery, scan-tuning, and update settings:
The MSI installs aiwatch.exe, writes configuration under HKLM\Software\Runlayer\AIWatch, and registers the AIWatchScan, AIWatchHooks, and AIWatchUpdate tasks under \Runlayer.
3

Restart AI clients when hooks are enabled

If Mode is Protect or Enforce, or Sessions is enabled, restart running AI clients after installation so they load their hook configurations. The hook task is a no-op for scan-only Monitor (Mode=monitor, Sessions=false).
4

Verify

In an elevated PowerShell window:
In Runlayer, open Shadow → Devices and confirm the Windows device appears. See Intune verification for detailed task and log checks.

Linux — install and configure (Detect only)

Linux packages run all-user scans every 15 minutes through cron. They do not install hooks or support endpoint modes or Sessions. See Linux support before installing; do not install inside WSL.
1

Download a package

On the Linux tab of the Test Device setup guide, download the x86_64 package for the distribution:
  • .deb for Debian or Ubuntu
  • .rpm for RHEL, Rocky, Alma, Fedora, or Amazon Linux
2

Install

3

Write the non-secret Detect configuration

Keep the organization API key out of this world-readable file:
4

Write the root-only credentials

5

Scan and verify

In Runlayer, open Shadow → Devices and confirm the Linux device appears with Detect = Active and Protect / Enforce / Sessions = Disabled. That disabled state is expected. See the full Linux guide for legacy distributions, updates, and troubleshooting.