Three concerns.
One graph.
A command surface that dispatches signed operations, a data surface that ingests fleet telemetry, and an intelligence surface where the decision engine risk-scores every proposed action — three concerns, one modular monolith today, all reading and writing one unified entity graph.
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.
One binary. Every platform. Tiny footprint.
A single Rust binary for Windows, Linux and macOS — enrollment, telemetry, signed-command execution, and a live on-device inference loop are implemented today, designed for a 200MB RAM ceiling and backed by 110 daemon-side tests.
Local inference triages and classifies on-device — cutting bandwidth and working offline. We’d rather ship the daemon honestly-scoped today than promise a wrapper around vaporware.
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 — and the same generated client now backs a mobile app too.
Grows from one box to a cluster.
Deliberately partial. Honestly reported.
Everything marked shipped passes real tests against real backing services — locally and in CI, on every push. See the Platform page for what drift detection, policy packs, and identity sync actually do.