Checks
A control is a query, not a checkbox
Every check is osquery SQL plus one JEXL expression over the JSON result. Anybody who reads SQL can audit what the control actually asserts. Your auditor included.
Catalog
19 macOS checks on first boot
FileVault, firewall, Gatekeeper, SIP, screen lock, automatic updates, remote login, sharing services. Seeded against permanent keys, so upgrades never duplicate or overwrite what you have edited. Windows and Linux are not covered yet.
Blocked apps
One rule per application
An app arrives as a Homebrew cask and an .app bundle; one rule carries every matcher it needs (bundle id, app name, Homebrew formula), so the admin sees one row and one reason rather than four patterns.
Agent
One small binary per machine
A Java CLI that builds to a native image and starts in about 20 ms. It runs osqueryi, evaluates the expressions locally and posts the result. No daemon, no kernel extension, no MDM.
Consent
Checking is free. Reporting is deliberate.
Running the checks tells you where you stand and costs nothing. Filing the report is a separate, explicit yes, so a laptop can be checked and fixed as often as it takes before anything lands on a dashboard.
Identity
Device-flow OIDC, no agent config
The agent carries no identity configuration. It asks the server for the issuer, client id and scopes, then discovers the endpoints itself. The same binary works against Keycloak and Microsoft Entra ID without a rebuild.
Dashboard
The fleet at a glance
Compliant, non-compliant, missing and pending, counted and filterable. Drill into any run to see the raw osquery JSON that produced the verdict.
Cycles
Deadlines that enforce themselves
One reporting workflow runs per device at all times. Report inside the window and the cycle closes; miss it and a MISSING report is filed automatically and the next cycle starts.
Mail
Told, not surprised
People get the outcome of their own run and a reminder before a deadline. Sending is fire-and-forget by design: an SMTP server that is down must never fail a report upload.
Inventory
It knows what is installed
Each run also takes stock of the machine: application bundles a person installed, plus Homebrew formulae and casks. That gives a blocked-app rule something to match, and answers "who still has that?" without anybody being asked.
Security
Deny by default
Unannotated endpoints are refused at build time, not at review time. Two roles: people see their own reports, admins see the fleet and hold the CRUD.
Devices
People have more than one laptop
One account, many machines. Each device reports independently under its own hostname and carries its own compliance state.