Fleet with MDMValidate the rollout

Validate deployment

Use this page after Windows, macOS, or Linux package deployment. Package-manager success is only the first checkpoint. AgentKeeper success requires fresh runtime health plus live evidence from the...

Use this page after Windows, macOS, or Linux package deployment. Package-manager success is only the first checkpoint. AgentKeeper success requires fresh runtime health plus live evidence from the selected AI agent.

Use the deployment test checklist when you need a repeatable validation report for your change record.

Health ladder

StepRequired proofNotes
PackageRuntime package installed at the expected versionMDM detection can start here.
ServiceAgentKeeperRuntime, com.agentkeeper.runtime, or agentkeeper-runtime.service is runningWindows service, macOS LaunchDaemon, or Linux systemd health is necessary but not sufficient.
Install provenanceNon-secret package/provider evidence matches the pinned releaseWindows and macOS write last-install.json; Linux reports package NEVRA, source SHA, install source, and deployment provider from root-owned state.
EnrollmentPer-device credential is validEnrollment token exchange must produce a device credential.
PolicyLast policy fetch succeededCached policy can keep local flow fail-open while degradation remains visible.
GatewayMCP gateway binary is present when Full Integrity depends on gateway routingCheck the packaged Windows, macOS, or Linux path. Presence is not enforcement proof; a real client call must be routed through Gateway.
HooksExpected surface appears in hook matrixMissing or waiting-for-user hooks are not Full Integrity.
Self-testSynthetic event reaches AgentKeeperSelf-test proves delivery, not live protection.
Live eventReal agent event appears from the selected surfaceRestart the selected agent before testing.
Dashboard evidenceWorkstations/Setup show fresh healthCheck state, timestamps, runtime mode, and restart-required.
Known BLOCKA supported pre-execution path blocks a controlled policy testOnly pre-execution hook or gateway paths can block.

Linux commands

rpm -q agentkeeper-runtime
sudo rpm -V agentkeeper-runtime
systemctl is-active agentkeeper-runtime.service
systemctl is-active agentkeeper-reconcile.timer
sudo agentkeeper status --json
sudo agentkeeper doctor --json
sudo agentkeeper reconcile --source validation --json
journalctl -u agentkeeper-runtime.service -u agentkeeper-reconcile.service --since -30min

The package verification command prints nothing when all packaged files match. Confirm operating_system=linux, the expected distribution/version, architecture=amd64, source SHA, package NEVRA, Gateway version, and catalog version. Workstations and AI Discovery must agree on provider Native Linux RPM, workstation, target user, service/package state, and each surface limitation.

Claude Code certification requires a real allowed action and a real PreToolUse denial from the target VDI. A filesystem self-test or a preseeded row is not active enforcement evidence.

Windows commands

Run these from an elevated PowerShell session. support-bundle reads service logs and protected runtime state, so non-admin developer shells can fail even when the runtime is healthy.

Get-Service AgentKeeperRuntime
& "C:\Program Files\AgentKeeper\agentkeeper.exe" status --json
& "C:\Program Files\AgentKeeper\agentkeeper.exe" doctor
& "C:\Program Files\AgentKeeper\agentkeeper.exe" heartbeat --json
Test-Path "C:\Program Files\AgentKeeper\agentkeeper-mcp-gateway.exe"
& "C:\Program Files\AgentKeeper\agentkeeper.exe" support-bundle --redact

macOS commands

sudo launchctl print system/com.agentkeeper.runtime
sudo "/Library/Application Support/AgentKeeper/bin/agentkeeper" status --program-data "/Library/Application Support/AgentKeeper" --install-dir "/Library/Application Support/AgentKeeper" --json
sudo "/Library/Application Support/AgentKeeper/bin/agentkeeper" doctor --program-data "/Library/Application Support/AgentKeeper" --install-dir "/Library/Application Support/AgentKeeper"
sudo "/Library/Application Support/AgentKeeper/bin/agentkeeper" heartbeat --program-data "/Library/Application Support/AgentKeeper" --install-dir "/Library/Application Support/AgentKeeper" --json
sudo "/Library/Application Support/AgentKeeper/bin/agentkeeper" support-bundle --program-data "/Library/Application Support/AgentKeeper" --install-dir "/Library/Application Support/AgentKeeper" --redact

For a healthy universal macOS enrollment, status must show:

  • enrollment_state="enrolled"
  • managed_profile_state="ready"
  • hook_matrix.config_json=true
  • credential_state="valid"
  • the expected provider, deployment, and selected-surface coverage
  • targeting_mode="active_console_user"

enrollment_state="managed_token_missing" means the non-secret metadata profile is ready but the provider's After-install token-staging script has not completed. hook_matrix.runtime_hook=true by itself means only that the packaged runtime hook exists. It does not prove that an AI agent points to it. A fresh live Activity event after a full app restart is the final attribution check.

The universal macOS enrollment is device-scoped and needs no username in the MDM profile. It can issue the per-device credential before first login. With no regular user signed in, active_console_user can be empty and maintenance_state="waiting_for_user"; this does not invalidate machine enrollment. After sign-in or a user switch, the runtime resolves the active console account through macOS Directory Services and reconciles that account on its next one-minute maintenance tick. It never scans /Users or guesses a user from a home-directory name.

Console checks

In Workstations, AI Discovery, and Activity, inspect:

  • Protection state: Full Integrity, Basic Coverage, Mixed, Standby, Degraded, Missing, or Unknown. Standby is expected when Runtime is installed and reporting but no AI-agent activity exists in the last 24 hours.
  • Runtime mode and install source.
  • Package/runtime version.
  • Hook matrix.
  • Credential state.
  • Policy fetch health.
  • Last command preflight.
  • Last HTTP evaluate.
  • Last self-test.
  • Last live event.
  • Last repair result.
  • Restart-required state.

Package detection versus runtime health

Use package and service detection to decide whether the software is installed and the local runtime is alive. Do not fail package detection only because credential_state is not yet valid; enrollment exchange and the first heartbeat can follow package installation. Use credential, policy, hook matrix, self-test, live event, and known BLOCK as separate gates before expanding the deployment.

Enforcement boundary

Self-test proves that the local runtime can send a synthetic event to AgentKeeper. It does not prove the target AI agent loaded the hook. Live protection starts only after the agent sends a real runtime event on a supported pre-execution path. After-only, audit-only, or telemetry-only surfaces can record and investigate activity, but they cannot retroactively block the completed action.

Expansion checklist

Before broad assignment, each validation device group should show:

  1. Package and service installed on every scoped device.
  2. Root/admin-only install provenance with version/provider/install-source evidence and no enrollment token.
  3. No enrollment token in package metadata, managed preferences, service command line, LaunchDaemon plist, or world-readable file. The root-only staged token is absent after a successful exchange.
  4. No per-device username mapping in the universal macOS MDM profile.
  5. Fresh per-device credential status.
  6. Healthy policy fetch.
  7. MCP gateway binary present when the selected surface needs gateway routing for Full Integrity.
  8. Hook matrix for the selected surface after a regular user signs in.
  9. One self-test event.
  10. One real live event after app restart.
  11. One controlled BLOCK on a supported pre-execution path.
  12. Clean rollback or uninstall on one test workstation.