Jamf MDM Deployment (macOS)
Deploy AI Endpoint Shield across your macOS fleet with Jamf Pro using a single install.sh script with auto-update.
Overview
AI Endpoint Shield is deployed to macOS devices from Jamf Pro with a single script, install.sh. The script:
Fetches the version manifest (
latest.json) from the URL you provideCompares the installed version against the manifest and exits early if the device is already current
Downloads the signed and notarized
.pkgand installs itWrites
config.env(token and feature flags) into the console user's home directoryLets the pkg's embedded
postinstallhandle file placement, LaunchAgent setup, and hook installation
No package upload to Jamf is required — the script downloads the pkg itself, so a new Akto release reaches your fleet without touching the Jamf policy.
Architecture
Script execution
Root (Jamf default) — auto-detects the console user
Installation type
Per-user (~/.akto-endpoint-shield/)
Services
LaunchAgents (run as the user, not system-wide)
Auto-update
Manifest (latest.json) — devices update at next login
Reinstall
FORCE_REINSTALL=true
Token storage
~/.akto-endpoint-shield/config/ (permissions 600)
Prerequisites
1. AKTO_API_TOKEN
From the Akto platform. Deployed via a Jamf encrypted script parameter.
2. AKTO_API_BASE_URL
Your Akto guardrails URL, e.g. https://<account_id>-guardrails.akto.io.
3. MANIFEST_URL
Provided by Akto during onboarding. Devices check this URL on each run to decide whether a newer version is available — this is what enables auto-update.
4. Jamf Pro access
Permissions to create and edit Scripts, Policies, and (optionally) Smart Groups and Extension Attributes.
5. Network access
Devices need HTTPS access to the manifest and pkg hosts, to https://<account_id>-guardrails.akto.io, and to https://ultron.akto.io.
Optional: Set a custom device name and email
Before the install policy runs, you can stage an identity.json file on the device so it shows up in Akto with a specific device name and email instead of whatever hostname and username Jamf reports. See Custom Device Name and Email.
Scripts
install.sh
Install or update AI Endpoint Shield
$4–$7, below
uninstall.sh
Remove the agent, LaunchAgents, config, and MCP server wrapping
None
Both run as root and auto-detect the logged-in user.
install.sh Jamf parameters
$4
AKTO_API_TOKEN
Your token — use a Jamf encrypted parameter
$5
AKTO_API_BASE_URL
https://<account_id>-guardrails.akto.io
$6
MANIFEST_URL
Provided by Akto — enables auto-update
$7
PKG_URL
Direct pkg URL — fallback if MANIFEST_URL is not set
Jamf reserves $1–$3 (mount point, computer name, username); install.sh ignores them and detects the console user itself.
Phase 1 — Upload scripts to Jamf Pro
Navigate to Settings → Computer Management → Scripts → + New.
Script 1: install.sh
Display Name:
Akto Endpoint Shield - InstallCategory: Security
Execution: Root (default — do not change)
Parameter Labels:
Parameter 4:
AKTO_API_TOKENParameter 5:
AKTO_API_BASE_URLParameter 6:
MANIFEST_URLParameter 7:
PKG_URL
Paste the contents of install.sh (provided by Akto) as the script body.
Extension Attribute (optional but recommended)
Navigate to Settings → Computer Management → Extension Attributes → + New.
Display Name:
Akto Endpoint Shield VersionData Type: String
Inventory Display: General
Input Type: Script
This lets you build a Smart Group (Computers → Smart Computer Groups → + New) on Akto Endpoint Shield Version is "Not Installed" to track coverage.
Phase 2 — Create the install policy
Navigate to Computers → Policies → + New.
General
Display Name:
Install Akto Endpoint ShieldEnabled: Yes
Triggers: Login (add Recurring Check-in as a catch-up if you like)
Execution Frequency: Ongoing
Category: Security
Ongoing is what enables auto-update. The script skips the reinstall when the installed version already matches the manifest, so running on every login is cheap and safe. Use Once per user per computer only if you deliberately want a one-time install with no updates.
Scripts
Add Akto Endpoint Shield - Install with Priority: Before, and fill in the parameters:
$4
AKTO_API_TOKEN
<your-token> (encrypted parameter)
$5
AKTO_API_BASE_URL
https://<account_id>-guardrails.akto.io
$6
MANIFEST_URL
Provided by Akto
$7
PKG_URL
Leave empty — the manifest provides the URL
Which MCP clients to protect and which hooks to install are managed from the Akto dashboard after install — no Jamf policy change needed.
Phase 3 — Uninstall policy (optional)
Navigate to Computers → Policies → + New.
Display Name:
Uninstall Akto Endpoint ShieldTrigger: Self Service only
Execution Frequency: Ongoing
Scripts:
Akto Endpoint Shield - Uninstall, Priority: BeforeScope: All Computers
Self Service: Make available, with a description such as "Remove Akto Endpoint Shield from your computer. This restores your MCP server configurations to their original state."
Background item approval (macOS 13+)
macOS 13 and later require every LaunchAgent label to be approved as a background item before launchd will start it. Without approval, a fully signed and notarized install can sit loaded but never running, with no logs.
Deploy a com.apple.servicemanagement configuration profile from Jamf that pre-approves Akto's Team Identifier, so users are never prompted. Without that profile, each user must approve the agent manually under System Settings → General → Login Items & Extensions → Allow in the Background.
Contact Akto for the Team Identifier and a sample profile payload.
Updating AI Endpoint Shield
Updates are automatic. When Akto releases a new version, the MANIFEST_URL in your policy points at the updated package, and devices upgrade on their next login — no Jamf policy change is needed.
To force an immediate reinstall: set $7 PKG_URL to the pkg URL provided by Akto (this bypasses the manifest version check) and run the policy manually.
Verification
On a pilot Mac, signed in as the target user:
check-config should print provisioned.
Checklist
Troubleshooting
No console user logged in
Script ran before login
Ensure the trigger is Login
Neither PKG_URL, PKG_PATH, nor MANIFEST_URL is set
All three sources empty
Set $6 MANIFEST_URL in the policy parameters
Already at latest version — nothing to do
Manifest version matches the installed version
Expected. Set FORCE_REINSTALL=true to override
Services show - instead of a PID
Token missing or invalid
Run check-config; check ~/.akto-endpoint-shield/logs/install.log
Services loaded but never start, no logs
macOS 13+ background item not approved
LaunchAgent won't load
Gatekeeper quarantined the plist
xattr -dr com.apple.quarantine ~/Library/LaunchAgents/io.akto.akto-endpoint-shield*
Files landed in /var/root
Policy ran with no console user, or the pkg was installed manually with sudo installer
Re-run at Login; remove /var/root/.akto-endpoint-shield
Device not in scope
User not in the scoped group
Verify the scope, or target All Computers
For device-level diagnosis, see macOS Troubleshooting. For EDR and antivirus exclusions, see Allowlist in Security Software.
File locations
/usr/local/bin/akto-endpoint-shield
Main binary
/Library/Application Support/Akto/
Asset bundle installed by the pkg — also where you stage identity.json (see Custom Device Name and Email)
~/.akto-endpoint-shield/bin/akto_endpoint_shield.sh
Per-user wrapper script
~/Library/LaunchAgents/io.akto.akto-endpoint-shield.plist
HTTP proxy service
~/Library/LaunchAgents/io.akto.akto-endpoint-shield-agent.plist
Agent service
~/.akto-endpoint-shield/config/
Token + feature flags (permissions 600)
~/.akto-endpoint-shield/logs/install.log
Install log
~/.akto-endpoint-shield/logs/agent.log
Agent runtime log
~/.akto-endpoint-shield/logs/proxy-server.log
HTTP proxy runtime log
/var/log/akto-endpoint-shield-install.log
Root-context install log
Useful Jamf commands
Security notes
The token is passed via a Jamf encrypted parameter and written to
~/.akto-endpoint-shield/config/with permissions 600.Binaries run as the user — there are no system-level daemons, and all user data stays under
~/.akto-endpoint-shield/.Limit Jamf policy editing to your security team, and rotate the token on your usual schedule; the install script updates the on-disk config on its next run.
Related documentation
Get support
In-app Intercom in the Akto dashboard
Last updated