KeenConnect evidence, understand risks and manage your ISMS.

KEEN AGENT 0.3.0

Evidence you can check.

Keen Agent sends what your servers did and how your workstations are set up straight into Keen, as signed evidence that keeps people's identities on the device.

Linux servers · Windows, macOS and Linux workstations
Open source, Apache-2.0 · Signed packages and installers

The Keen Mitigator, a purple alligator auditing a checklist
THE MITIGATOR

Every record signed,
every gap accounted for.

Evidence forPatchingPrivileged accessAuthenticationSecurity monitoringEndpoint protection

WHAT IT DOES

Your systems, already
telling the story.

01 / SERVERS

Activity, recognised.

Package installs and upgrades, SSH logins, sudo commands, audited system calls and OSSEC alerts become typed events. Choose per log whether Keen gets recognised events, the lines behind them, or everything.

Choose what you send →
02 / WORKSTATIONS

Posture, measured.

Disk encryption, screen lock, antivirus, firewall and automatic updates, checked every hour on Windows, macOS and Linux and shown against each person in Keen.

See what's checked →
03 / TRUST

Signed, sealed and private.

Every record is signed by the device's own key and chained to the one before, and everything is encrypted end to end to your Keen with post-quantum cryptography. Usernames and account IDs become pseudonyms before anything leaves the machine.

Why you can rely on it →

THREE STEPS

Running in minutes.

  1. Register it in Keen. Admin → Keen Agents gives you a single-use enrolment code for the server or workstation. It ends with your Keen's identity fingerprint, so the agent only ever talks to the Keen that issued it.
  2. Install the package. From our signed APT or RPM repository, or the signed Windows and macOS installers below.
  3. Enrol. Paste the code into KEEN Setup on a workstation, or run keen-agent -command enroll on a server. Evidence starts arriving straight away.

THE TECHNICAL CHAPTER

How Keen Agent works.

One record per fact

Keen Agent turns each recognised event or measured setting into one evidence envelope in the Universal Evidence Utility (UEU) format. An envelope names its event type from an event catalogue (for example software.package.changed or endpoint.screen_lock.observed), the device and collector that produced it, the outcome, and typed facts: true or false, numbers and times where the catalogue says so. A setting a collector cannot measure is simply omitted, and each run also reports which checks it could not complete, so Keen can tell “not measured” from “failing”.

A workstation's screen lock, as Keen receives it (abridged)
{
  "event_type": "endpoint.screen_lock.observed",
  "event_time": "2026-10-27T06:43:38.095Z",
  "source": { "application_id": "keen-posture", "component": "windows_user_policy" },
  "subject": { "identifier_type": "pairwise",
               "identifier": "hmac-sha256:d5d35e70…" },
  "observation": {
    "scope": "user",
    "facts": { "automatic_lock_configured": true,
               "lock_after_seconds": 900,
               "lock_paths": ["secure_screen_saver"] } },
  "privacy": { "personal_data_included": false,
               "transformations": ["subject-pseudonymised"] },
  "integrity": { "sequence": 42, "previous_evidence_hash": "sha256:abab…" }
}

Keys, signatures and the chain

When a device enrols, it creates its own Ed25519 key pair and proves to Keen that it holds the private key; Keen keeps only the public key, and the private key never leaves the device. The agent renews its key before it expires.

Encrypted end to end, post-quantum

TLS only protects traffic as far as whatever holds a certificate for your Keen's address: a reverse proxy, a CDN or load balancer, an inspecting middlebox on a workstation's network, or an impostor that obtained a certificate. So Keen Agent encrypts everything it sends, enrolment code included, to your Keen itself.

Signatures, for the device's key, Keen's identity and the evidence itself, use Ed25519. A future quantum computer could forge those, but a forgery only helps an attacker who is active at the time; recorded traffic cannot be impersonated after the fact, and passing off forged evidence as historical still needs write access to Keen. Since Go 1.24 the agent's TLS client also offers a hybrid post-quantum key exchange, a second layer wherever your reverse proxy supports it.

Choose what servers send

Each log source has an evidence mode, and Keen sets the most each server may send:

ModeKeen receives
eventsRecognised events with their typed details. The original log line stays on the server, represented by its hash and position.
events_with_linesThe same events, each with its redacted log line.
all_linesEverything above, plus every other line from the source.

Filters drop noise on the server before anything is queued, by field, value or network, for example health checks from your load balancer.

Workstation posture

CheckWindowsmacOSLinux
Disk encryptionBitLocker per volume, including suspended protectionFileVaultLUKS, ZFS and swap, per mount
Screen lockInactivity policy, secure screen saver and sign-in on wake, per userScreen lock delay and idle timeGNOME, KDE, Xfce, MATE, Cinnamon and XScreenSaver, per session
AntivirusDefender health and signatures, registered productsXProtect, DefenderClamAV, Defender for Linux, common EDR products
FirewallDomain, private and public profilesApplication firewall and PFnftables, iptables, firewalld, UFW
Automatic updatesWindows Update policy and historySoftware Update settingsunattended-upgrades, DNF automatic, rpm-ostree

Keen shows each device against the person it belongs to and judges every check with versioned rules. Set your own targets, such as “screens lock within 15 minutes” or “antivirus signatures at most three days old”, as effectiveness measures, and Keen judges each device against your policy and records the measured value beside every result.

Privacy and security by design

The full specification of the evidence format and the protocol is in the agent's evidence format documentation, and Keen's administrator guide covers operation in detail.

INSTALL

Install Keen Agent 0.3.0.

Every package, installer and repository is signed with the mig5 release key. Check its fingerprint before trusting it:

RELEASE KEY FINGERPRINT54A9 1143 AE0A B4F7 743B 01FE 888E D1B4 23A3 BC99Download the public key

Debian and Ubuntu

sudo mkdir -p /usr/share/keyrings
curl -fsSL https://mig5.net/static/mig5.asc | sudo gpg --dearmor -o /usr/share/keyrings/mig5.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/mig5.gpg] https://apt.mig5.net $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/mig5.list
sudo apt update
sudo apt install keen-agent

APT checks the repository's signature on every update.

Fedora 43 and 44

sudo rpm --import https://mig5.net/static/mig5.asc
sudo tee /etc/yum.repos.d/mig5.repo > /dev/null << 'EOF'
[mig5]
name=mig5 Repository
baseurl=https://rpm.mig5.net/$releasever/rpm/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mig5.net/static/mig5.asc
EOF
sudo dnf upgrade --refresh
sudo dnf install keen-agent

DNF checks both package and repository signatures.

Windows and macOS

PlatformInstallerSignature
Windows (x64)keen-posture-0.3.0-windows-amd64.msi.asc
Windows (Arm64)keen-posture-0.3.0-windows-arm64.msi.asc
macOS (Apple silicon and Intel)keen-posture-0.3.0-macos-universal.pkg.asc
All filesSHA256SUMS.asc

The newest release is always at /downloads/keen-agent/latest/, and every release stays at its own versioned address. Windows installers are also Authenticode-signed and the macOS package is Developer ID signed and notarised by Apple.

Verify your download

Import the release key once, check its fingerprint matches the one above, then check the signature of the checksums and the checksum of the installer.

macOS and Linux

curl -fsSL https://mig5.net/static/mig5.asc | gpg --import
gpg --fingerprint 54A91143AE0AB4F7743B01FE888ED1B423A3BC99
gpg --verify SHA256SUMS.asc SHA256SUMS
shasum -a 256 --check --ignore-missing SHA256SUMS
pkgutil --check-signature keen-posture-0.3.0-macos-universal.pkg

On macOS, install GPG Suite or brew install gnupg for gpg. gpg --verify must report a good signature from the key above.

Windows (PowerShell)

Invoke-WebRequest https://mig5.net/static/mig5.asc -OutFile mig5.asc
gpg --import mig5.asc
gpg --fingerprint 54A91143AE0AB4F7743B01FE888ED1B423A3BC99
gpg --verify SHA256SUMS.asc SHA256SUMS
Get-FileHash .\keen-posture-0.3.0-windows-amd64.msi -Algorithm SHA256
Get-AuthenticodeSignature .\keen-posture-0.3.0-windows-amd64.msi

Install Gpg4win for gpg. The hash must match the line for the installer in SHA256SUMS, and the Authenticode status must be Valid.

Then enrol

Workstations

Open KEEN Setup after installing, enter your Keen address and the enrolment code from Admin → Keen Agents, and approve the administrator prompt. Setup enrols the device and starts hourly checks.

Servers

sudoedit /etc/keen-agent/config.yaml        # endpoint and sources
sudo install -o root -g keen-agent -m 0640 /dev/null /etc/keen-agent/enrollment-code
sudoedit /etc/keen-agent/enrollment-code    # paste the code
sudo -u keen-agent keen-agent -command enroll
sudo rm /etc/keen-agent/enrollment-code
sudo systemctl enable --now keen-agent

Autoscaling fleets can enrol themselves with an enrollment profile instead. See the Keen Agent guide for configuration, evidence mapping and troubleshooting.