- macOS
- Windows
1
Prepare the deployment
In Settings → Client Updates, pin the currently deployed
AI Watch version so hourly update checks are no-ops during removal.
Unscope the device from the regular AI Watch installer assignment so
your MDM cannot reinstall AI Watch.
2
Run the uninstall package
Deploy the signed and notarized
aiwatch-uninstall-<version>.pkg
from the AI Watch release as a one-time root/system package.The uninstall package is standalone and payload-free: it does not
depend on the installed aiwatch binary, and its version is
independent of the installed package version. The latest uninstall
package removes any previously installed AI Watch version, including
devices that are already broken or partially removed. It removes
Runlayer hook entries across local users and enterprise locations
while preserving third-party hooks, unloads the AI Watch launchd
jobs, removes package-owned files and browser native-messaging
hosts, resets the AI Watch TCC entry, and forgets both the AI Watch
receipt and its own disposable receipt. Running pkgutil --forget
by hand is not a substitute — it only forgets the installer receipt
and removes nothing.3
Restart AI clients and browsers
Restart running AI clients and supported browsers on the device so
they stop reading cached hook and extension policy. The uninstaller
restarts the macOS preferences daemon first to evict stale policy from
its cache. In particular, restart Firefox so it reloads its system
preferences policy.
4
Unscope profiles
Keep the deployment profile assigned until the uninstall package
reports success, then unscope it yourself:
- Merged deployment profile:
com.runlayer.aiwatch
- Tenant configuration profile:
com.runlayer.aiwatch.config - PPPC / Full Disk Access profile:
com.runlayer.aiwatch.pppc - Login Items profile:
com.runlayer.aiwatch.loginitems
5
Verify removal
Spot-check that the package is gone:Grok CLI and Devin CLI cleanup is best effort: the uninstaller sweeps
their standard hook paths, but custom or legacy layouts can remain.
Check those clients manually.
macOS retained state and exceptions
The standalone macOS uninstaller removes current Runlayer hook entries; it is not a snapshot restore of every setting that existed before installation. It deliberately retains:~/.runlayerlogs, scan cache and state, device identity, enrollment markers, and the scan lock because this directory can be shared with the full Runlayer CLIrunlayer-aiwatchitems in each user’s login keychain because a root installer cannot purge another user’s login keychain/Library/Logs/Runlayer/aiwatch-uninstall.log, which records the result of each cleanup phase- empty shared client settings files and parent directories, including
~/.claude/settings.json,~/.qwen/settings.json, and~/.config/devin/config.json
- VS Code Claude hook-location values set to
falseare removed rather than restored to an earlier value. - Codex
features.hooksand GeminihooksConfig.enabledremain at their current values because other hooks may depend on them. - Rewritten JSONC files preserve configuration semantics, but lose comments and original formatting.
- Managed
GrokHomelocations are swept. Per-user shell overrides such asGROK_HOME,QWEN_HOME, andCOPILOT_HOMEare not discoverable by the root uninstaller and must be checked manually.
aiwatch hook and runlayer hook forms. If the full CLI should keep its hooks, run
runlayer setup hooks --install again after removing AI Watch.
Disable hooks before uninstalling (optional)
For a staged decommission — hooks off across the fleet now, packages removed over the following days — or for Windows fleets stuck on MSIs older than 0.30.9, switch the deployment to Detect-only while AI Watch is still installed. Its own reconciler then removes Runlayer hook entries on its normal hourly schedule while preserving third-party hooks. Under Settings → AI Watch → Manage settings, set Mode to Monitor, Sessions off, and Track MCP tool usage without content off. For older or offline clients, also push the same fallback values through your MDM:aiwatch setup hooks install --mdm as root (macOS,
/usr/local/bin/aiwatch) or SYSTEM (Windows,
C:\Program Files\Runlayer\AIWatch\aiwatch.exe), then confirm with
aiwatch setup hooks check --mdm — exit 0 means the device is compliant
with the Detect-only hook state.
Legacy script-based installs
For macOS fleets that used the original script-based Detect rollout, follow Legacy macOS Detect Cleanup. That page removes the oldrunlayer-scan wrapper, per-user LaunchAgent, old
PPPC profile, and script logs while preserving unrelated user CLI state.
For custom Windows script or hand-rolled Scheduled Task deployments, remove
the MDM script or task assignment, then remove any custom task, script, or
log paths your deployment created. The packaged MSI registers its own tasks
under the \Runlayer Task Scheduler folder and removes them on uninstall, so
this section only applies to bespoke deployments you built yourself.