Jamf Pro rollout
Roll out pavri-endpointd to a macOS fleet via Jamf Pro using a Configuration
Profile + signed .pkg + postinstall script.
1. Prerequisites
- Pavri tenant + admin role.
- Jamf Pro admin access; permission to create Configuration Profiles and Policies.
- Signed
pavri-endpointd.pkg(Developer ID + Notarization). Signing is gated on CAP-3.8 — see the CAP-3.8 row indocs/05-PHASED-ROADMAP.md(internal).
2. Token mint
In the Pavri dashboard, navigate to Settings → Endpoints → Add Endpoint → Mint enrollment token. Tokens are single-use per endpoint, 24-hour TTL. Mint one token per Jamf scope (smart group or static group) — re-use across endpoints within the scope is supported because the gateway tracks per-endpoint enrollment state.
3. Substitution markers
Edit infra/mdm/jamf/pavri-endpointd.mobileconfig before upload to Jamf:
| Marker | Replace with |
|---|---|
${GATEWAY_URL} | Your tenant's gateway URL (e.g. https://gateway.your-org.pavri.ai) |
${ENROLLMENT_TOKEN} | The token you minted in step 2 |
${ORG_ID} | Your pavri org_id (visible at /admin/tenant in the dashboard) |
For the full list of supported environment variables and command-line flags, see Sensor deployment reference.
4. Package signing
Jamf delivers your .pkg. The package itself must be Developer-ID-signed and
Apple-notarized (Apple's Gatekeeper enforces this). Until CAP-3.8 ships the ES
entitlement build, the sensor runs in observe-mode-only (Tier 2 kauth/FSEvents
fallback). See macOS observer tiers.
5. Staged rollout
- Create a Jamf smart group
pavri-pilot(5% of fleet, criterion: user email). - Scope the Configuration Profile and Policy to
pavri-pilot. - Set the tenant default protection-profile to
observemode at/admin/protection-profiles. - After 1 week of clean telemetry: expand the smart group to 25%, switch tenant
default to
soft_enforce. - After 1 further week: expand to 100% and switch to
enforce.
6. Rollback
- Per-endpoint emergency: at
/admin/endpoints/{endpoint_id} → Set protection mode → observe— takes effect immediately, no MDM touch required. - Fleet-wide emergency: at
/admin/protection-profiles → set tenant default to observe. - Full uninstall via Jamf: scope an uninstall policy that runs
/usr/local/bin/endpointctl uninstall-nm-manifests --browser=alland thenpkgutil --forget com.pavri.endpointd, followed byrm /usr/local/bin/pavri-endpointd.
7. Post-install verification
On any enrolled endpoint:
# Verify the binary is present.
ls -l /usr/local/bin/pavri-endpointd
# Verify the LaunchDaemon is loaded and running.
sudo launchctl print system/com.pavri.endpointd | grep -E 'state|pid'
# Verify native-messaging manifests are healthy for any browsers in scope.
/usr/local/bin/endpointctl status-nm-manifests --browser=all
Confirm the endpoint shows up at /admin/endpoints in the dashboard within 60 seconds
of the heartbeat interval.
Files in this rollout
infra/mdm/jamf/pavri-endpointd.mobileconfig— Configuration Profile (env vars).infra/mdm/jamf/install.sh— postinstall (validates plist, loads LaunchDaemon, installs NM manifests).infra/mdm/jamf/README.md— short on-disk reference for Jamf operators.