Fast and efficient
osquery management

osctrl is an open-source osquery fleet manager, implementing the osquery remote API as a TLS endpoint. Full visibility and control over your endpoints — from hundreds to hundreds of thousands of nodes.

MIT Licensed Written in Go Powered by osquery MCP ready Vulnerability monitoring Production ready at scale
What is osctrl?

One control plane for your entire osquery fleet

osquery gives you a SQL interface to every endpoint. osctrl makes that fleet manageable: enrollment, configuration, queries, logs, vulnerability monitoring, alerting and file carving — from a modern operator UI, a REST API, the CLI, or an AI agent over the Model Context Protocol.

osctrl platform showing endpoint management, live queries and fleet operations
Operate nodes, queries, carves and environments from one platform.
✨

Monitor everything

Track every system running osquery in real time — node status, activity, enrollment state and health across all your environments.

📦

Distribute configuration

Push osquery configuration and scheduled query packs to your entire fleet in seconds, organized by environment and tags.

📊

Collect all logs

Ingest status and result logs from every node and route them to your logging pipeline of choice.

⚡

Run on-demand queries

Launch distributed queries across any subset of nodes and get results back fast — with optional accelerated query reads.

🖥️

Node console

Open a read-only, shell-like console against any node, backed by osquery: ls, ps, stat, sql, .tables and more.

🗂️

Carve files & directories

Retrieve files and directories from remote endpoints for forensics and incident response, with permission-checked access.

🔔

Alert on what matters

Rule-based alerting on result, status and query logs — plus node state — fanned out to webhook and email channels, with cooldown, dedupe and hot reload.

📁

Browse node files

A per-node file explorer backed by accelerated, permission-checked osquery distributed queries — directory listings and stat without a shell.

🩺

Know your deployment is healthy

An optional health page fuses live database and Redis pings, per-service runtime stats, a TLS heartbeat and cached upgrade status.

New · Vulnerability monitoring

Know which of your endpoints are actually vulnerable

Your fleet already reports the packages it has installed. osctrl matches that inventory against public advisory data and shows you what is exposed — no new agent, no new collection, and the inventory never leaves your deployment.

📥

Inventory you already collect

Apply a vuln-linux, vuln-darwin or vuln-windows profile to an environment's schedule. The queries run daily in snapshot mode and osctrl-tls stores the result.

🗂️

Matched against OSV and KEV

osctrl-api syncs the OSV ecosystems your fleet actually reports, plus the CISA Known Exploited Vulnerabilities catalog, then re-matches the nodes whose inventory or advisories changed.

🚩

Severity that means something

Severity is scored locally from the CVSS vectors in each advisory. Anything CISA lists as known-exploited is flagged, so you can triage by what attackers are actually using.

🔕

Alerts that don't page you to death

A vuln_finding rule fires at the threshold you pick — kev, critical, high and so on. Findings are grouped per advisory and rate-capped, so a fleet-wide rollout can't flood your channels.

📋

Folded into posture

With posture enabled, nodes get a "Known vulnerabilities" control mapped to ISO 27001 A.8.8 — KEV or critical findings fail at critical weight, and clean-but-unassessed never reads as a pass.

🙈

Honest about what it can't see

Alpine, CentOS, SUSE and un-synced ecosystems are reported as not assessed rather than counted clean. A node with unassessed packages warns — silence is never mistaken for safety.

Off by default — enable it with --vuln-enabled. See how teams use it →

Components

Purpose-built services, one shared core

Every osctrl component is a small, focused service built on shared Go packages, backed by PostgreSQL and Redis.

osctrl-tls

The TLS endpoint implementing the osquery remote API. Handles node enrollment, configuration delivery, log ingestion, distributed queries and file carving for your entire fleet.

osctrl-api

The REST API service, secured with JWT authentication by default, with trusted proxy controls and audit logging. Powers the operator UI and any automation you build. Fully documented with OpenAPI.

Operator frontend

A modern React single-page application: nodes, environments, live and saved queries, carves, tags, users, enrollment, audit log, log sinks, auth providers, alerting, posture data, the node console and the file explorer — with live updates over SSE.

osctrl-cli

The operator command-line interface for scripting and administration — manage environments, nodes, queries and users from your terminal or CI, via API or direct DB mode.

osctrl-mcp New

A Model Context Protocol server — a standalone stdio binary, or hosted by osctrl-api at /api/v1/mcp. It gives AI agents permission-checked fleet inspection. Write tools are a separate switch, off by default.

Shared core (pkg/*)

Every service builds on the same Go packages: node state, environments, queries, carves, users and permissions, caching, the log pipeline, alerting, audit log, MFA, GeoIP, posture and health.

Explore the architecture and technology stack →

Why osctrl?

Built for security teams that operate at scale

⚙️

Massive scale

Proven from hundreds to hundreds of thousands of nodes without compromising performance.

🔐

Security-first defaults

JWT auth by default, optional MFA with passkeys and TOTP, trusted proxy controls and audit logging throughout. Vulnerability monitoring ships off until you turn it on.

🤖

Ready for AI agents

An MCP server exposes fleet inspection to Claude and other MCP clients, bounded by the token's own permissions.

🆓

Open source

MIT licensed, actively developed, and already used in production environments.

See what teams use osctrl for →

Quick start

Up and running in minutes

Spin up the full stack locally with Docker Compose — TLS endpoint, API, frontend, PostgreSQL and Redis included.

# Clone the repository
$ git clone https://github.com/jmpsec/osctrl.git
$ cd osctrl

# Prepare the environment file and development certificate
$ cp .env.example .env
$ make docker_dev_certs

# Build and run everything in Docker
$ make docker_dev_build
$ make docker_dev_up

The operator frontend comes up at https://localhost:8444.

Full installation options: Docker, provisioning script, or building from source →

Take control of your osquery fleet

Free, open source, and ready to deploy today.