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.
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.
Disk encryption, screen lock, antivirus, firewall and automatic updates, checked every hour on Windows, macOS and Linux and shown against each person in Keen.
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.
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.
Install the package. From our signed APT or RPM repository, or the signed Windows and macOS installers below.
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)
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.
Chained. Each envelope carries its sequence number and the SHA-256 hash of the one before, sealed in the same disk transaction that queues it. Keen shows whether every record follows on, and any queued evidence the agent had to discard is itself reported, so a gap always has an explanation.
Signed in batches. Each delivery carries a signed manifest listing every envelope's hash. A batch that changed in transit is rejected whole.
Signed requests. Every request is signed (HTTP Message Signatures, RFC 9421) over its encrypted body, bound to its endpoint, and accepted once within a five-minute window.
Kept with its custody record. Keen stores the exact signed bytes whenever its own redaction leaves them untouched, and otherwise records each change and the reason beside the original hash. Each record's checks are shown on its event page in Keen.
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.
Pinned to your Keen. Keen holds its own identity key, and its fingerprint ends every enrolment code. Before sending anything, the agent checks that the server proves it holds that key, and refuses one that does not, valid certificate or not.
Post-quantum encryption. Each request's key comes from two key exchanges at once: ML-KEM-768, the NIST post-quantum standard (FIPS 203), and the classical X25519. Reading it means breaking both, so traffic recorded today cannot be decrypted by a quantum computer built later. Bodies and responses use AES-256-GCM.
Only Keen can answer. Each request carries a one-time key that only Keen can read, and Keen encrypts its reply with it. The agent removes evidence from its queue only on a reply that opens, so nothing in between can acknowledge your evidence away.
Keys that expire. Keen replaces its encryption key every 30 days and erases old ones, so recorded traffic cannot later be opened with keys taken from Keen.
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:
Mode
Keen receives
events
Recognised events with their typed details. The original log line stays on the server, represented by its hash and position.
events_with_lines
The same events, each with its redacted log line.
all_lines
Everything 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
Check
Windows
macOS
Linux
Disk encryption
BitLocker per volume, including suspended protection
FileVault
LUKS, ZFS and swap, per mount
Screen lock
Inactivity policy, secure screen saver and sign-in on wake, per user
Screen lock delay and idle time
GNOME, KDE, Xfce, MATE, Cinnamon and XScreenSaver, per session
Antivirus
Defender health and signatures, registered products
XProtect, Defender
ClamAV, Defender for Linux, common EDR products
Firewall
Domain, private and public profiles
Application firewall and PF
nftables, iptables, firewalld, UFW
Automatic updates
Windows Update policy and history
Software Update settings
unattended-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
Pseudonyms at source. Usernames, user IDs and Windows SIDs become keyed pseudonyms on the device. Per-device (pairwise) pseudonyms keep the same person unlinkable across machines; shared (public) pseudonyms let Keen see one account across devices. You choose per agent.
Only declared fields. Each event type lists the fields it may carry and the fields it must never carry; anything else is dropped on the device, and the envelope records the removal.
Nothing listening. The agent has no inbound port, remote commands or plugins. It runs unprivileged under a hardened systemd unit, and the posture probes are fixed and read-only.
Verified transport, and then some. TLS certificates and hostnames are always verified and redirects refused; inside TLS, every request is encrypted to your Keen's own pinned key.
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.
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.
Autoscaling fleets can enrol themselves with an enrollment profile instead. See the Keen Agent guide for configuration, evidence mapping and troubleshooting.