TroubleshootingInstall troubleshooting

Enterprise install troubleshooting

Start with the symptom. Avoid rerunning broad installer logic until you know whether the failure is package, service, enrollment, policy, hook, live-event, or dashboard freshness.

Start with the symptom. Avoid rerunning broad installer logic until you know whether the failure is package, service, enrollment, policy, hook, live-event, or dashboard freshness.

SymptomWhat it usually meansFirst checkRepair
No macOS PKG download is shownThe universal PKG feed is unavailable or failed closedDownload artifacts and version.jsonDo not build a customer package from the source ZIP or substitute a legacy script. Contact AgentKeeper support for release status.
macOS PKG installed but no workstation appearsMDM installed the package, but profile delivery, token staging, or enrollment did not completeenrollment_state, managed_profile_state, hook_matrix.config_json, and credential_state; then /Library/Logs/AgentKeeper/install.logFix missing or invalid metadata in the computer-level com.agentkeeper.runtime profile. If enrollment_state=managed_token_missing, rerun the provider's After-install token-staging script. Then run the installed remediation helper. The service checks changes each minute; network failures retry with backoff.
macOS status reports enrollment_state=managed_profile_incompleteA required key is absent or empty in the computer-level com.agentkeeper.runtime profile. Editing a <key> name instead of the <string> value below it removes that settingmanaged_profile_state="incomplete" and the status note The macOS runtime is installed but its managed profile is incomplete.; maintenance_error_code=managed_profile_incompleteRestore the missing key, keeping <key> names exactly as documented and replacing only the <string> value. Redeploy the profile, then run the installed remediation helper.
macOS profile is complete and the token was staged, but the Mac never enrollsThe profile's mdm_deployment_id does not equal the deployment ID signed into the Enterprise Installer token, so the server rejects the enrollment as a scope mismatch. A left-in placeholder value produces this, not a missing-key errormaintenance_state="retry_scheduled" with maintenance_error_code="enrollment_rejected"; then compare the profile's mdm_deployment_id with the deployment ID on the tokenCorrect mdm_deployment_id in the profile, or create a token whose deployment ID matches it, and redeploy the profile. A rejected attempt discards that Mac's staged token, so rerun the provider's After-install token-staging script, then run the installed remediation helper.
macOS remediation says hooks were repaired, but status is not enrolledHook reconciliation ran without a valid per-device credentialRequire enrollment_state=enrolled, hook_matrix.config_json=true, and credential_state=valid before treating result=repaired, configured=true, or coverage_state=preseeded as healthyDeliver the metadata profile and After-install token script, then rerun the current package's remediation helper. enrollment.json is retry state, not config.json; never copy or rename it.
Service not runningWindows service, macOS LaunchDaemon, or Linux systemd unit failed to startGet-Service AgentKeeperRuntime, launchctl print system/com.agentkeeper.runtime, or systemctl status agentkeeper-runtime.serviceStart the service, inspect platform logs, and redeploy the pinned package if binary or service metadata is missing.
Credential state is invalidEnrollment token exchange failed or per-device credential storage failedcredential_state, maintenance_error_code, and maintenance_next_retry_at in statusCorrect or rotate the Enterprise Installer token. On macOS, rerun the provider's After-install token-staging script, then the enrollment-aware remediation helper; do not put the token in the profile or run a generic hook repair first.
Policy fetch stale or failingRuntime is installed but cannot fetch policylast_policy_fetch and HTTP status in status/doctorCheck app origin, proxy, DNS, TLS inspection, and org policy availability.
Gateway binary missingThe platform package is incomplete, or a standalone Windows/macOS Gateway download was blocked or mismatchedCheck gateway_binary in status and the packaged path: C:\Program Files\AgentKeeper\agentkeeper-mcp-gateway.exe, /usr/local/bin/agentkeeper-mcp-gateway, or /usr/bin/agentkeeper-mcp-gatewayRedeploy the same verified package. For standalone Windows/macOS, verify the approved archive and checksum. Linux RPM repair is offline and must not download from GitHub. Do not expand to Full Integrity until present and real routing is proven.
Hooks missing after valid enrollmentRuntime has not applied the selected surfaceConfirm enrollment_state=enrolled and credential_state=valid, then inspect the hook matrixRun the package-matched reconcile/remediation helper, verify selected surfaces, and restart the target app. Never repair hooks first on an unenrolled Mac.
Claude Code shows 0 hooks configured on LinuxClaude has not loaded the current root-managed AgentKeeper entriesagentkeeper status --json, then /status and /hooks in a newly started Claude sessionUpgrade to the current signed RPM and fully restart Claude Code. Package reconciliation preserves existing managed policy and migrates earlier AgentKeeper drop-in entries automatically; do not add user-level hooks.
macOS enrolled before login, but user hooks are waitingMachine enrollment succeeded before a regular console session existedtargeting_mode=active_console_user, active_console_user, maintenance_state, and the hook matrixSign in with a regular account, then wait for the one-minute maintenance tick or run the installed remediation helper. Do not add a username to the MDM profile. The runtime never scans /Users or guesses from folder names.
Windows waiting for user sessionMDM installed as SYSTEM before a developer session was availableRuntime status and WTS user evidenceLet the device retry after sign-in; keep the documented Windows identity behavior.
Self-test passes but Activity is emptySynthetic delivery works, but no real agent event has runLast self-test versus last live eventRestart the selected AI agent and run a harmless tool action.
PASS missingThe policy/logging settings may not retain pass events, or the source is after-onlyActivity filters and policy settingsCheck log-all-tool-calls and source capability before treating it as an install failure.
BLOCK missingThe tested surface may not be an enforceable pre-execution pathLast command preflight and verdict traceTest a supported pre-execution hook or gateway route; after-only telemetry cannot block.
Restart requiredHooks or plugin state changed after the app startedrestart_required=true in runtime statusFully restart the selected AI agent, then run one live event.
Mixed stateSome selected surfaces are healthy and others are degradedHook matrix per surfaceRepair or remove the degraded surface from the validation scope until validated.
RPM installed, not enrolledThe package correctly contains no customer tokenagentkeeper status --json and /etc/agentkeeperPipe a current Enterprise Installer token to enroll-enterprise --token-stdin with explicit deployment/user fields.
Linux socket failureRuntime service is stopped, /run was recreated, or service hardening blocked startupsystemctl status agentkeeper-runtime and ls -l /run/agentkeeper/runtime.sockRestart the service; never relax socket peer authentication or copy the device credential into user scope.
Linux repair blockedAn existing JSON/TOML file is malformedagentkeeper reconcile --json and the reported path hashRepair the customer file manually from its timestamped backup, then rerun reconcile. AgentKeeper will not overwrite malformed content.
Linux RPM removal refusedAgentKeeper could not safely remove an owned hook or managed Gateway routeagentkeeper uninstall-integrations --jsonRepair the reported customer config and retry. Do not force-remove the binary while an IDE still routes through it.
Cowork unsupportedRHEL/Rocky is outside Anthropic's current Linux desktop/Cowork distribution contractAI Discovery limitationAgentKeeper keeps the available discovery evidence and reports the limitation. Cowork enforcement is unavailable on RHEL/Rocky.
SSSD target user not foundThe domain user was not resolvable when enrollment/reconciliation rangetent passwd 'DOMAIN\\user'Correct SSSD/domain connectivity and rerun reconcile. Do not crawl /home or substitute an unverified local username.
Proxy or custom CA failureGo runtime cannot establish outbound TLSjournalctl, HTTPS_PROXY, and SSL_CERT_FILE in /etc/agentkeeper/runtime.envInstall the enterprise CA in system trust or set an approved CA bundle, then restart. Do not disable TLS verification.
SELinux denialEnforcing policy blocked a required file/socket/network actionausearch -m avc -ts recentCapture the AVC and use the release-certified policy/status. Do not globally set SELinux permissive.

Capture for support

Collect these before escalation:

  • OS/distribution, architecture, package/runtime/gateway/catalog version, package NEVRA, install source, and deployment provider.
  • agentkeeper status --json.
  • agentkeeper doctor.
  • Redacted support bundle.
  • MDM assignment name, deployment id, and last run result.
  • Workstation id and latest protection state in AgentKeeper.
  • The exact selected surfaces and whether the app was restarted after install.

Do not send raw enrollment tokens, fleet API keys, Microsoft Graph secrets, or unredacted support bundles through normal email.

On macOS, config.json and State/credential.json are runtime-generated only after a successful enrollment exchange. If enrollment.json exists, it is bootstrap retry state. Never copy, rename, or hand-edit any of these files. If a bootstrap file was copied to config.json, do not create a credential or perform manual file surgery. The device remains installed_unhealthy and hook reconciliation remains blocked. Refresh the metadata profile, stage a fresh token through the provider's root After/Post-install script, and validate the result. A successful exchange atomically writes the legitimate config and credential. If a token appears in a screenshot, profile, log, or support message, revoke it and create a replacement.

On macOS, install.log is the enrollment log; runtime.log can be empty before enrollment. Capture only safe state transitions before creating the redacted support bundle:

sudo grep -Eh 'Managed-profile enrollment|runtime maintenance state=|postinstall completed' \
  "/Library/Logs/AgentKeeper/install.log" \
  "/Library/Logs/AgentKeeper/runtime.err.log" 2>/dev/null

sudo "/Library/Application Support/AgentKeeper/bin/agentkeeper" support-bundle \
  --program-data "/Library/Application Support/AgentKeeper" \
  --install-dir "/Library/Application Support/AgentKeeper" \
  --redact