MDM Deployment
Deploy Pulse Endpoint configuration via MDM using a Configuration Profile targeting the com.qlabs.pulse preference domain.
Jamf Pro
Navigate to Computers → Configuration Profiles → Application & Custom Settings → External Applications → Add → Custom Schema. Upload the JSON schema above.
Automated Deployment
A fully automated deployment requires two things: launching the app at login and auto-starting monitoring once the app is running.
Launch Pulse Endpoint at Login
Install the LaunchAgent PKG alongside the main Pulse Endpoint PKG to launch the app automatically when the user signs in. Alternatively, have users add Pulse Endpoint manually under System Settings → General → Login Items.
Silently approve Login Items via MDM (Required for 1.0b6+)
Pulse 1.0b6 registers its root helper daemon via SMAppService, which means macOS shows a "Background Item Added" notification and requires the user to approve Pulse Endpoint in System Settings → General → Login Items before the daemon can spawn. For fleet deployments, push a Managed Login Items configuration profile so the approval happens silently.
Use PayloadType = com.apple.servicemanagement and PayloadScope = System. Two rules cover the full Pulse surface area:
<key>PayloadType</key>
<string>com.apple.servicemanagement</string>
<key>PayloadScope</key>
<string>System</string>
<key>Rules</key>
<array>
<dict>
<key>RuleType</key>
<string>BundleIdentifier</string>
<key>RuleValue</key>
<string>com.qlabs.pulse</string>
<key>TeamIdentifier</key>
<string>W689L3M62P</string>
</dict>
<dict>
<key>RuleType</key>
<string>Label</string>
<key>RuleValue</key>
<string>com.qlabs.pulse.agent</string>
<key>TeamIdentifier</key>
<string>W689L3M62P</string>
</dict>
</array>- The first rule matches the
com.qlabs.pulseapp bundle. BTM cascades this approval to the embedded root helper daemon (com.qlabs.pulse.helper) via the parent/child relationship, so no separate helper rule is needed. - The second rule matches the GUI LaunchAgent (
com.qlabs.pulse.agent) by Label. This rule is required because the LaunchAgent ships in its own PKG and isn't embedded in the app bundle, so the parent-cascading doesn't reach it. - If you'd rather not maintain two rules, a single Team-Identifier rule approves anything signed by Qlab Software — simpler but a larger blast radius.
<key>PayloadType</key>
<string>com.apple.servicemanagement</string>
<key>PayloadScope</key>
<string>System</string>
<key>Rules</key>
<array>
<dict>
<key>RuleType</key>
<string>TeamIdentifier</string>
<key>RuleValue</key>
<string>W689L3M62P</string>
</dict>
</array>.mobileconfig file do not always set the BTM managed flag. Push the profile via your actual MDM (Jamf, Kandji, Intune, Mosyle, etc.) for the silent-approval effect. Verify with sfltool dumpbtm — entries should show flags: ...managed....FAQ Deployment Scenarios
Deploy and monitor continuously with Splunk
Fully automated — Pulse Endpoint launches at login, starts collecting immediately, and forwards everything to Splunk. No user interaction required.
Step 1: Install Pulse Endpoint
Deploy the Pulse Endpoint PKG and the LaunchAgent PKG via your MDM.
Step 2: Deploy MDM Configuration Profile
Create a profile for com.qlabs.pulse with these keys:
<key>autoStart</key>
<true/>
<key>uploadEnabled</key>
<true/>
<key>hecEndpoint</key>
<string>https://splunk.example.com:8088/services/collector/event</string>
<key>hecToken</key>
<string>YOUR-HEC-TOKEN</string>
<key>splunkIndex</key>
<string>main</string>Result
On next login, Pulse Endpoint launches automatically, begins collecting metrics, and uploads to Splunk every 5 minutes. No user interaction needed.
Time-limited troubleshooting session (e.g. 8 hours)
A user reports performance issues. Deploy Pulse Endpoint to capture 8 hours of data, then automatically stop. Data flows to Splunk for analysis.
Step 1: Install Pulse Endpoint
Deploy the Pulse Endpoint PKG and the LaunchAgent PKG via your MDM.
Step 2: Deploy MDM Configuration Profile
Create a profile for com.qlabs.pulse with these keys:
<key>autoStart</key>
<true/>
<key>captureDurationMinutes</key>
<integer>480</integer>
<key>uploadEnabled</key>
<true/>
<key>hecEndpoint</key>
<string>https://splunk.example.com:8088/services/collector/event</string>
<key>hecToken</key>
<string>YOUR-HEC-TOKEN</string>
<key>splunkIndex</key>
<string>main</string>Result
Pulse Endpoint launches, collects for exactly 8 hours, uploads to Splunk, then stops automatically. Remove the profile when done.
Silent/headless deployment with Splunk
Background-only monitoring with no menu bar icon or UI. Users never see Pulse Endpoint — it collects and uploads silently.
Step 1: Install Pulse Endpoint
Deploy the Pulse Endpoint PKG and the LaunchAgent PKG via your MDM.
Step 2: Deploy MDM Configuration Profile
Create a profile for com.qlabs.pulse with these keys:
<key>autoStart</key>
<true/>
<key>headlessMode</key>
<true/>
<key>uploadEnabled</key>
<true/>
<key>hecEndpoint</key>
<string>https://splunk.example.com:8088/services/collector/event</string>
<key>hecToken</key>
<string>YOUR-HEC-TOKEN</string>
<key>splunkIndex</key>
<string>main</string>Result
Pulse Endpoint runs entirely in the background. No menu bar icon, no popover, no dashboard. Metrics are collected and forwarded to Splunk silently.
Monitor a specific app across your fleet
You're evaluating a new app and want to measure its real CPU, memory, network, and disk impact across every Mac. Use watched processes to track it.
Step 1: Install Pulse Endpoint
Deploy the Pulse Endpoint PKG and the LaunchAgent PKG via your MDM.
Step 2: Deploy MDM Configuration Profile
Create a profile for com.qlabs.pulse with these keys:
<key>autoStart</key>
<true/>
<key>uploadEnabled</key>
<true/>
<key>hecEndpoint</key>
<string>https://splunk.example.com:8088/services/collector/event</string>
<key>hecToken</key>
<string>YOUR-HEC-TOKEN</string>
<key>splunkIndex</key>
<string>main</string>Step 3: Start monitoring with watched process via MDM script
Run this command on target machines (via MDM script or SSH):
/usr/local/bin/pulse --start --watch "AppName"Replace AppName with the exact process name (case-sensitive). You can watch multiple processes:
/usr/local/bin/pulse --start --watch "Slack" --watch "zoom.us"Result
Each watched process is sent to Splunk as a separate event with event_type: "watched_process", including CPU, memory, network, and disk metrics. Query in Splunk with:
index=main sourcetype="macos:pulse" event_type="watched_process" | stats avg(watched.cpu_percent) by hostname, watched.process_pattern