ARCHITECTURE

Three planes.
One graph.

A command plane that dispatches signed operations, a data plane that ingests fleet telemetry, and an intelligence plane where governed AI agents detect and remediate — all reading and writing one unified entity graph.

01 — COMMAND PLANE
Dispatch & control
Ed25519-signed typed operations over a gRPC bidi stream. Delivery tracking, batch execution, offline queueing.
02 — DATA PLANE
Ingest & store
Metrics to TimescaleDB, logs to Loki, events over NATS JetStream. Drift detection and a hash-chained audit trail.
03 — INTELLIGENCE PLANE
Detect & remediate
Diagnostic, remediation, security and compliance agents — risk-scored by the decision engine, approval-gated when it matters.
UNIFIED ENTITY GRAPH — CLIENT · SITE · IDENTITY · ASSET · CONTRACT · TICKET · CONFIG · LICENSE · KNOWLEDGE
CONTROL PLANE — PYTHON / FASTAPI

A modular monolith that refuses to leak.

Fully async FastAPI on Postgres 16. Tenant isolation isn’t middleware — it’s row-level security enabled and forced on every tenant-scoped table, with an app role that cannot bypass it. Missing tenant context returns zero rows.

Modules split into separate services via a single env var when you outgrow one box — Docker Compose today, Kubernetes-ready by design.

AUTH
JWT (RS256) + Argon2 password hashing, RBAC, per-route rate limiting
ENROLLMENT
One-shot tokens → CA-signed mTLS client certs, Headscale preauth keys, Ed25519 signing keys, full endpoint lifecycle API
COMMAND CHANNEL
gRPC CommandService bidi-stream with a connection manager per daemon
OPEN SURFACE
HMAC-signed webhooks with retries · OAuth2 client_credentials (RFC 6749) · MCP server on the roadmap
API
24 REST endpoints across auth, tenants, users, endpoints, enrollment, webhooks, oauth — OpenAPI spec checked in and diff-guarded in CI
ENDPOINT DAEMON — RUST

One binary. Every platform. Tiny footprint.

A single Rust binary for Windows, Linux and macOS behind a cross-platform SystemAdapter — under 200MB RAM, connected home through a self-hosted WireGuard mesh with mTLS on top.

Local inference (ONNX / CoreML / OpenVINO) triages and classifies on-device — cutting bandwidth, working offline, and slashing API cost at fleet scale.

TRANSPORT
Headscale WireGuard mesh → mTLS gRPC → Ed25519 per-request signatures
EXECUTION
Typed operations only — no arbitrary shell. Snapshot / restore / rollback backup engine wraps every change
TELEMETRY
Streams metrics, logs and security events into the data plane pipeline
LOCAL AI
On-device triage and classification; <2.7GB RAM with inference enabled; fleet-wide model distribution
OPERATOR DASHBOARD — REACT 19

Types that can’t drift.

React 19 + Vite + Tailwind, with every API type generated from the checked-in OpenAPI spec. CI fails the build if backend and frontend drift by a single field. Login, tenants, endpoints, enrollment and webhooks are live today, with an MSP-admin tenant switcher.

LIVE TODAY
Login · tenants · endpoints · enrollment · webhooks · tenant switcher
TYPE SAFETY
OpenAPI codegen with CI drift guards — 22 vitest cases on the UI alone
COMING
Real-time telemetry over WebSocket, AI chat, compliance views
INFRASTRUCTURE

Grows from one box to a cluster.

TIER 1
1–50
endpoints
Single Docker Compose stack on one server. Up in an afternoon.
TIER 2
50–500
endpoints
Modules split into separate services — one env var, no rewrite.
TIER 3
500–5000+
endpoints
Kubernetes, clustered NATS, the same architecture scaled out.
POSTGRES + TIMESCALEDB · NATS JETSTREAM · LOKI · REDIS · S3/MINIO · HEADSCALE — ALL SELF-HOSTABLE
BUILD STATUS

Deliberately partial. Honestly reported.

Everything marked shipped passes real tests against real backing services — locally and in CI, on every push.

✓ SHIPPED & TESTED
Multi-tenant foundationRLS · JWT · RBAC · AUDIT
Endpoint enrollmentmTLS · ED25519 · LIFECYCLE
gRPC command channelBIDI STREAM
Webhooks + OAuth2HMAC · RFC 6749
Operator dashboard + CICODEGEN DRIFT GUARDS
⎋ IN FLIGHT / ROADMAP
Rust endpoint daemonNEEDS REAL HARDWARE
Telemetry + alertingPHASES 03–04
AI orchestratorLAYER 4
PSA · docs · procurement modulesBREADTH AFTER CORE

Want to run it yourself?

Join the waitlist