Autonomy
you can audit.
The point of AI remediation is trusting it at 3AM. That trust isn’t a promise — it’s enforced, layer by layer, between any actor and your clients’ endpoints.
Defense in depth, not defense in marketing.
Each layer holds independently once live. Three of five are implemented and tested on the command path today — Ed25519 signing, typed-operation execution, and Decision-Engine risk scoring sit between proposed work and endpoint execution, so a valid signed command still can’t skip the risk gate.
WireGuard mesh transport and mTLS have their keys and certs issued at enrollment today; wiring up verification on the transport itself is next. We’d rather tell you exactly where the line is than round up.
Low risk runs. Critical risk waits for a senior approver.
The decision engine scores every proposed action across five dimensions — reversibility, blast radius, criticality, change category, confidence — into a single 0–205 score. The score decides the path:
Every action. Every actor. Every reason.
The audit trail is hash-chained — every entry’s hash is computed from the previous entry’s hash plus its own payload, so tampering breaks the chain instead of hiding in it.
Real event types, not paraphrases: drift.detected, decision.assessed, approval.requested/approved, command.authorized. When a client asks “what happened at 3AM?”, that’s the actual log you show them.
Enforced by Postgres, not by promises.
Row-level security is enabled and forced on every tenant-scoped table. The application role carries NOBYPASSRLS — even a bug in our own code can’t cross tenants. Missing tenant context returns zero rows, not all rows. Above that sits RBAC: two system roles and seven tenant roles, checked against every route.
Triage can stay close to the endpoint.
The daemon includes a tiered local-LLM triage engine with signed model delivery and offline fallback. Provider routing, usage accounting, and enforceable per-tenant token budgets remain planned orchestration work — they are not presented here as shipped controls.