Overview
Works on any Mac with Python 3, including Macs older than macOS 13. Allow HTTPS togetunbound.ai, raw.githubusercontent.com, github.com and your organization’s backend and gateway hosts. They follow --backend-url and --gateway-url in your install command.
1. Copy your install command
Open Configure in Unbound. On a dedicated deployment, use your own dashboard address.1
Choose scope
Select My org (MDM).
2
Choose what to install
Keep Govern coding agent actions on. Keep Seed events from past activity on if you want past Claude Code, Codex and GitHub Copilot sessions imported.
3
Run the install command
Select the macOS tab and copy the command. If it starts with
sudo bash, copy from the Linux tab instead. The Python command is the same on both.--api-key is your admin API key. One key covers the whole fleet, and each Mac uses it to fetch its own device key.
Keep the command exactly as copied. You paste it into the policy in step 3.
2. Create the script
Go to Settings → Computer Management → Scripts → New. Name itUnbound daily onboard and paste this into the Script tab:
--backfill. Daily runs never import a session twice.
On the Options tab, label Parameter 4 Install command. This label replaces “Parameter 4” on the policy in step 3. Jamf reserves $1 to $3, which is why the script reads $4.
The script only uses root-owned interpreters. A Homebrew or /usr/local python can be replaced by the logged-in user, and this script runs as root.
3. Create the policy
Go to Computers → Policies → New.1
General
Name it
Unbound daily onboard. Set Trigger to Recurring Check-in and Execution Frequency to Once every day.2
Scripts
Select Configure, then Add next to
Unbound daily onboard. Under Parameter Values, paste the whole command from step 1 into Install command.3
Scope
Add one test Mac for now, then save.
Troubleshooting
Remove Unbound
First disable theUnbound daily onboard policy or remove the Macs from its scope. If you skip this, the next check-in installs Unbound again. Then run:
/Library/Application Support/Unbound.
Two things are left on purpose. Each user’s own ~/.unbound/config.json stays, so a developer who set Unbound up themselves is not logged out by a fleet rollback — delete that file, or run unbound nuke as that user, to remove it. And the inventory already reported for the device stays in the dashboard: clearing a device stops new reports rather than erasing old ones. Seven days after its last report the device is marked Stale on AI Tools Discovery and counted on the Stale Devices card on the dashboard home.
