macOS Troubleshooting
Validate and troubleshoot an AI Endpoint Shield installation on macOS — version, LaunchAgents, config, logs, hooks, and the common failure modes.
Overview
This page covers post-installation validation and troubleshooting of AI Endpoint Shield on macOS — checking the version, LaunchAgents and processes, where config lives, the logs the agent writes, verifying IDE hooks, and common fixes. Use it if Akto was installed but is not sending data, or stopped working after a restart.
30-second health check
Paste this into Terminal:
BIN=/usr/local/bin/akto-endpoint-shield
echo "--- Version ---"
"$BIN" --version 2>&1
echo "--- Config status ---"
"$BIN" check-config --path ~/.akto-endpoint-shield/config 2>&1
echo "--- Services ---"
launchctl list | grep akto-endpoint-shield || echo "(none loaded)"
echo "--- Processes ---"
ps aux | grep -E "akto-endpoint-shield" | grep -v grep || echo "(none running)"A healthy result looks like:
A version string (e.g.
akto-endpoint-shield version v1.1.134), not an errorConfig status prints
provisionedBoth
io.akto.akto-endpoint-shieldandio.akto.akto-endpoint-shield-agentlisted, each with a PID in the first column — not-At least one
akto-endpoint-shieldprocess
If any of these don't match, keep reading — the matching section explains what to check, and Common issues and fixes has a symptom → fix table.
Checking the installed version
This prints immediately, before anything else the agent does, so it works even if config or the network is broken. If it errors instead of printing a version, the binary is missing, quarantined, or the wrong architecture — see Install location and files.
Install location and files
/usr/local/bin/akto-endpoint-shield
Main binary
/usr/local/lib/akto-endpoint-shield/
Bundled runtime (includes the mitmproxy virtualenv when the optional system proxy is enabled)
/Library/Application Support/Akto/
Asset bundle installed by the pkg (hooks, scripts, config seed; also where identity.json is staged, see Custom Device Name and Email)
~/.akto-endpoint-shield/
Per-user tree — bin/, hooks/, config/, logs/
Presence and trust check:
Quarantine attribute present — Gatekeeper may refuse to run it. Clear it:
x86_64only on an Apple Silicon Mac — the binary needs Rosetta 2:Current Akto builds are universal, so this points at a stale install.
spctlrejects it — the notarization ticket is missing or a security tool is intercepting. Reinstall from the Akto-provided pkg.
Also confirm the pkg receipt is on the machine:
Provisioning markers
The agent writes marker files after it finishes first-run provisioning. Missing markers mean it never completed setup, which is why hooks aren't installed:
Root misinstall
If the pkg was installed by hand with sudo installer -pkg ... rather than through MDM, the postinstall runs as root and drops everything into root's home instead of the user's:
Fix by removing /var/root/.akto-endpoint-shield and re-running the install through your MDM policy, or by launching the pkg as the signed-in user.
LaunchAgents and services
Akto runs as LaunchAgents in the user's GUI session — there are no system daemons for the core services.
io.akto.akto-endpoint-shield
Local HTTP service the agent and hooks use internally
io.akto.akto-endpoint-shield-agent
Main background agent — heartbeats to the dashboard, applies config/policy changes, keeps IDE hooks up to date
io.akto.akto-endpoint-shield-detector
Detects which AI tools/IDEs are installed
io.akto.akto-endpoint-shield-system-proxy
Optional system-wide HTTPS inspection proxy (LaunchDaemon; only if your organization has it enabled)
Their plists live in ~/Library/LaunchAgents/. Check status:
The first column is the PID and the second is the last exit status:
1234 0 io.akto...
Running normally
- 0 io.akto...
Loaded but not running — most often BTM approval, see below
- 78 io.akto...
Exited with an error — check the logs
(nothing listed)
The plist was never loaded — reinstall, or bootstrap manually
Check the plists themselves:
RunAtLoad must be true, and the referenced binary must exist. A literal %USER% or a /Users/root/ path in a <string> value means the install ran without a console user — re-run it at login.
Restart the services (after a config change, or to force a hook re-check):
See why a loaded service isn't running:
Background items (BTM approval)
macOS 13 and later require every LaunchAgent label to be approved as a background item before launchd will start it. This is separate from code signing and notarization: a fully signed, notarized install can sit loaded, never running, with zero logs forever if BTM hasn't approved the label.
This is the most common cause of "installed successfully, but nothing happens" on modern macOS.
In sfltool dumpbtm output, look at the Disposition: line. [enabled, allowed, notified] is healthy; [disabled, ...] or a pending/requires-approval state means launchd will not start the service.
Fixes, in order of preference:
MDM profile (fleet-wide, no user prompt) — deploy a
com.apple.servicemanagementconfiguration profile from Jamf, Mosyle, or your MDM that pre-approves Akto's Team Identifier. Contact Akto for the Team Identifier and a sample payload.Manual approval (single machine) — open System Settings → General → Login Items & Extensions → Allow in the Background, find the Akto Endpoint Shield entry, and turn the toggle on.
To see what the system logged around install time:
Running processes
You should normally see two or three akto-endpoint-shield processes. If nothing appears:
Restart the services (command above) and re-check after a few seconds.
If a process appears and disappears within seconds every time, something is killing it — most commonly an antivirus/EDR tool. See Security software conflicts.
To see the exact startup error, run the binary in the foreground:
Read the first few lines, then press Ctrl+C. Common messages:
AKTO_API_TOKEN is not set
Config missing or unreadable — see Config values and location
AKTO_API_BASE_URL is not set
Same as above
address already in use
Another Akto process holds the port — pkill -f akto-endpoint-shield, then restart the services
failed to install mitmproxy
No internet access during install — check network and re-run the installer
Don't use the legacy wrapper (~/.akto-endpoint-shield/bin/akto_endpoint_shield.sh) for this test. It only reads plaintext config and reports a false "config not found" on any device with encrypted config. Run the binary directly.
Listening ports
If nothing is listening but processes exist, the service failed to bind — run the foreground test above to see the bind error.
Config values and location
Akto stores its configuration (your account token, dashboard URL, and feature switches) encrypted on disk, keyed to this Mac's hardware IOPlatformUUID. The file is not human-readable, and only this machine can decrypt it.
Your user profile
~/.akto-endpoint-shield/config/config.env.enc
Root (only if misinstalled)
/var/root/.akto-endpoint-shield/config/config.env.enc
On a device that hasn't been updated in a while you may instead see a plain config.env — same idea, older format, still supported. If both exist, the agent reads the encrypted one; the plaintext copy should have been removed at migration and is safe to delete.
Check whether config is present and valid (does not print any secret values):
provisioned
0
Healthy — token and settings are present and readable
not-provisioned
2
Device was never given credentials — re-run the installer with your Akto token
undecryptable
3
Config exists but can't be decrypted (restored from another Mac's backup, or a logic-board swap) — this device must be reinstalled, it cannot be repaired in place
Read specific non-secret values, e.g. to confirm which dashboard this machine reports to:
Do not run get-config ... AKTO_API_TOKEN and paste the output anywhere — screenshots, tickets, chat. That value is your account's secret credential. Akto support can verify it against your account without you ever displaying it.
Config keys you may be asked about:
AKTO_API_TOKEN
Your organization's Akto account credential (secret — never share)
AKTO_API_BASE_URL
Your Akto dashboard's URL for this account
AGENT_ID
This device's unique identifier, shown on the Akto dashboard
ENABLE_PROMPT_HOOKS_* / ENABLE_MCP_HOOKS_*
Per-IDE switches for whether guardrail hooks are installed (on by default)
ENABLE_SYSTEM_PROXY
Whether the optional system-wide HTTPS proxy is on (off by default)
AKTO_TCC_GUARD
Whether the agent skips Desktop/Documents/Downloads to avoid TCC prompts
Permissions should be 600:
Token mismatch between profiles. If a root misinstall left a second config behind, the two can carry different tokens and produce intermittent 401s:
Device identity
Useful when a device is installed and healthy but doesn't show up on the dashboard, or shows up twice.
This should match the device label shown for this machine in the Akto dashboard, unless you've overridden it with an identity.json file (see Custom Device Name and Email). A Mac restored from another machine's image inherits that machine's UUID, which both collides on the dashboard and makes the encrypted config undecryptable — it needs a reinstall.
Logs
All logs below are plain text.
Install log (user)
~/.akto-endpoint-shield/logs/install.log
Step-by-step output of the last install/update, including every IDE hook installer's own output
Install log (root context)
/var/log/akto-endpoint-shield-install.log
What the MDM script and pkg postinstall did, before a user profile was detected
Agent
~/.akto-endpoint-shield/logs/agent.log
Main agent runtime — heartbeats, config reloads, hook maintenance
HTTP service
~/.akto-endpoint-shield/logs/proxy-server.log
Local HTTP service runtime
Detector
~/.akto-endpoint-shield/logs/detector.log
AI tool/IDE detection runs
System proxy
/var/log/akto-endpoint-shield/system-proxy.log
Only present if the optional proxy feature is enabled
OpenCode plugin
~/.config/opencode/akto/logs/akto-guardrails.log
OpenCode guardrail plugin activity
View recent activity:
Hook installation output goes into install.log, prefixed with each installer's script name — there is no separate file per IDE:
Hook execution (prompt block/allow) decisions are recorded on the Akto dashboard, not in a local file.
Verifying IDE hooks
Akto installs guardrail hooks into each supported IDE/CLI so it can inspect prompts and tool calls. Check whichever tools you use:
Claude Code
jq '.hooks | keys' ~/.claude/settings.json
Cursor
jq '.hooks.beforeSubmitPrompt' ~/.cursor/hooks.json
Gemini CLI
grep -i akto ~/.gemini/settings.json
Codex CLI
grep -i akto ~/.codex/config.toml
GitHub Copilot CLI
ls ~/.copilot/hooks/
VS Code Copilot
ls ~/.vscode/copilot/hooks/akto/
Kiro CLI
ls ~/.kiro/hooks/akto/
OpenCode
ls ~/.config/opencode/plugin/akto-guardrails-plugin.js
A JSON block or a matching line means the hook is installed. Nothing means that tool's hooks weren't installed — because the tool wasn't detected on the machine, its feature switch (ENABLE_PROMPT_HOOKS_*, see Config values and location) is off for your account, or first-run provisioning never completed (see Provisioning markers).
Check that registered hook commands actually point at files that exist — a common failure after manual edits to IDE settings:
Hook commands should use absolute paths. A leading ~ is not expanded when bash runs non-interactively, so a ~/-prefixed hook command fails silently.
If hooks worked before and stopped working, the background agent re-checks and restores them automatically — wait for its next check-in cycle (typically a few minutes), or restart the agent service to force it immediately.
System-wide proxy (optional)
Some accounts have an optional feature enabled where Akto routes AI-tool traffic through a local HTTPS-inspecting proxy. This only applies if your organization has turned it on.
If mitmdump isn't installed and no certificate is listed, the feature is simply not enabled for your account — this is normal and not an error.
If it is enabled but tools warn about an untrusted certificate, re-import the CA:
Security software conflicts
Antivirus and EDR products are a common cause of "installed, but nothing runs". Enumerate what's present:
Also check the OS-level gates:
If a security tool is present and the binary keeps being killed or quarantined, add the exclusions in Allowlist in Security Software and give your security administrator the SHA256 hash from Install location and files.
Folder access (TCC) prompts
macOS may prompt for access to Desktop, Documents, and Downloads. These are optional — the agent works without them, but MCP-related file scanning coverage is reduced.
If the prompts were declined and you want to grant access later, open System Settings → Privacy & Security → Files and Folders and enable the folders for Akto Endpoint Shield. To suppress the prompts entirely fleet-wide, set AKTO_TCC_GUARD=true (the default in MDM deployments) or deploy a PPPC configuration profile from your MDM.
Common issues and fixes
Services show - instead of a PID, no logs at all
macOS 13+ background item not approved
Device not appearing on the dashboard
Not provisioned, or the agent isn't running
Run check-config; see Config values and location
Services loaded but exit immediately
Missing token, port conflict, or EDR
Foreground test in Running processes
Binary won't execute at all
Quarantine attribute, or an x86_64-only binary on Apple Silicon
check-config reports undecryptable
Mac restored from another machine's image, or a logic-board swap
Reinstall — this can't be repaired in place
A specific IDE's hooks aren't showing up
Tool not detected, feature flag off, or provisioning incomplete
Hooks registered but silently do nothing
Hook command uses ~ instead of an absolute path
Everything worked, then stopped after a restart
RunAtLoad false, or BTM approval revoked
LaunchAgents and services, then BTM
Device shows up twice, or under the wrong name
Machine cloned from another device's image
Full automated diagnostic
For a single comprehensive report covering everything above plus security-software conflicts, BTM state, Jamf staging, and install-time forensics:
Get
diagnose_mac.shfrom Akto support (it is also included in the installer package).Run it and save the output:
Send
~/Desktop/akto-diag.txtto Akto support.
The script only reads information from your machine — it makes no changes — and never prints your API token.
Reinstall / uninstall (last resort)
If nothing above resolves the issue:
Run the uninstall script provided by Akto (
uninstall.sh), or trigger the uninstall policy from your MDM's Self Service.Restart the Mac.
Re-run the install through your MDM policy, or the installer package provided by your IT team.
Wait 2–3 minutes, then check the dashboard for the device to reappear.
If the problem persists after reinstall, run the diagnostic above and send the report to Akto support along with what you observed.
Related documentation
Windows Troubleshooting — the same checks for Windows
Allowlist in Security Software — antivirus and EDR exclusions
Custom Device Name and Email: override the auto-detected hostname and username
macOS Standalone Installation — the end-user install walkthrough
Get support
When contacting Akto support, include the diagnostic report, the installed version, and what you observed and when it started. Never include the raw AKTO_API_TOKEN value in a ticket, chat, or screenshot.
In-app Intercom in the Akto dashboard
Last updated