Setup — MDM deployment
Push one profile from your MDM and every managed device enrolls, trusts the tenant CA, and reports its AI apps — zero end-user action.
Download your profile
Generated for your tenant with a dedicated, revocable enrollment key embedded — no terminal, no API key to paste. Capture stays OFF until you enable a host on the Guard tab.
Push four files. Touch zero devices.
Everything after the push is silent — each Mac enrolls, trusts your CA, activates its extensions, and starts reporting AI activity on its own. Steps 1–2 are governance (required); 3–4 add capture (optional). Deploy in order — base first, it approves the extensions the others need.
Trusts your tenant CA, approves the Waxell system extensions, and carries a revocable enrollment key — generated for your tenant. Drop it into your MDM's custom-profile slot.
The agent itself — one signed & notarized build for everyone, no key inside. Deploy as an Enterprise App; profile 1 makes it activate with no user prompt.
Adds on-device TLS capture (the transparent proxy) and the passive network filter. A separate profile so a capture-payload failure can't take governance down. Capture only runs for the hosts you enable on the Guard tab.
…proxymonitor.flowsprofile
…proxymonitor.contentprofile
sudo profiles list -all | grep -i "flowsprofile\|contentprofile"Supervised Macs only get this without a click. A Mac enrolled through Apple Business Manager activates the filter silently. One enrolled by hand does not — macOS still asks the user to turn the network extension on in System Settings, and until they do the profile is installed, the extension reads activated enabled, and no flows are recorded. Check with profiles status -type enrollment: Enrolled via DEP: No means one user action per device.
An MDM “Success” is not confirmation. Pushing a profile the device already has succeeds and changes nothing, and systemextensionsctl reporting activated enabled only means the extension was approved — not that anything told it to filter. If the command above prints nothing, no flows will ever arrive.
Force-installs the Waxell extension in Chrome, Edge, and Firefox. It reads browser AI chats (ChatGPT, Claude) from inside the page — no TLS interception, no ECH fight — and hands them to the agent's local bridge, which device-stamps + DLP-redacts before upload.
Only the profiles carry a secret (your tenant key) — keep them inside your MDM, don't email them around. The .pkg is public. Browser AI also has a network-level DNS-proxy profile as an advanced fallback — the extension is the default.
What the profile installs
Tenant CA trust
A per-tenant root CA, trusted fleet-wide via the universal cert-trust payload — works with any MDM, no SCEP.
System-extension allow
Pre-approves the Waxell network extension by Team ID, so it activates without a user prompt.
Managed config
The enrollment URL + tenant key + capture scope. The app reads it and configures the extension.
Deploy in 4 steps (Hexnode / Jamf / Kandji / Intune)
Download the profile
?hosts=… to pre-enable capture).Upload to your MDM
- Hexnode — Policies → macOS → Custom Configuration → upload each .mobileconfig as its own policy (base, and the capture one if used)
- Jamf Pro — Configuration Profiles → Upload → Custom Settings
- Intune — Devices → macOS → Configuration → Templates → Custom
- Kandji — Library → Add → Custom Profile
Deploy the agent app
Verify
Privacy & safety
- Interception is default-OFF — nothing is terminated until an admin enables capture per host on the Guard tab.
- TLS is terminated only for catalog AI hosts — never banking, health, or mail.
- Secrets & PII are DLP-redacted on-device — raw payloads never leave the machine.