Skip to content

Module IX — security, guardrails & audit

Module IX is the defensive, cross-cutting layer of Olivares AI. It turns the estate’s events and the tamper-evident evidence ledger into findings, prioritized anomalies and reconstructible incident timelines, so a defender can see and prove what every agent did. It is detective by default: it observes and hands over evidence, and never sits in the agent’s data-path.

The module spans three bounded responsibilities:

  • Guardrails — a chain of deterministic, explainable detectors inspects agent text on the input, output and tool_args surfaces for secrets/PII, prompt-injection, jailbreak, disallowed content, output-schema violations and the OWASP Agentic Top 10. Detections carry framework references (OWASP LLM Top 10 2025, OWASP Agentic Top 10 2026, MITRE ATLAS) verbatim from primary sources, never invented. An optional, pluggable classifier (a hosted guardrail-LLM) runs behind the deterministic detectors: it can only add detections, never suppress one, and its failure is logged and ignored.
  • Anomaly detection — it correlates the Permitted-vs-Observed drift that module III computes with high-severity findings, and joins kernel-side and cooperative-side anti-evasion signals: an agent that silences its own telemetry is treated as a signal, not a blind spot.
  • Forensics / IR — it groups evidence into a case and reconstructs its timeline from the append-only, hash-chained ledger, verifying the chain and its signed checkpoints rather than trusting them. A tampered ledger is reported, not hidden.
  • Privileged-session recording — an immutable, replayable record of what a privileged operator session actually did on the product’s most sensitive module surfaces: one append-only frame per recorded action (who, when, route shape, permission, targets, outcome, request digest), hash-chained per session and anchored into the evidence ledger (open → periodic anchors → seal), so rewriting any frame breaks both the session chain and its signed ledger anchors. The gate runs before the action and is deny-closed: on a recorded surface, no appendable evidence trail means no privileged action.

Module IX is the first producer of the core Finding entity; it owns no ledger and no capture, it consumes them. On top of Finding it owns three entities: a mutable case (lifecycle openinvestigatingcontainedclosed, with an integrity snapshot taken at open time), an append-only case link that forms the chain of custody (the evidence set of an incident is itself evidence and cannot be rewritten), and a per-class enforcement policy — where the absence of a row means detective.

Its routes are mounted under the module API and wrapped with authn + tenant + authz, with namespaced read/write/admin permissions. Reading findings is plain (a finding is the alert itself); the recon-sensitive reads — the verified timeline, the SIEM export, the anomaly view and the standalone integrity verification — are privileged and self-audited: the act of looking is recorded in the same chain it inspects. Every mutation (triage, case lifecycle, enforcement posture) is self-audited too. Exports to WORM/SIEM (CEF, syslog, OTLP) carry per-line integrity fields so the chain can be re-verified offline by an external immutable store.

Module IX reacts to finding.reported (persisting other modules’ high-severity findings into the tenant’s security view) and to guardrail.observed, the detective-input channel of already-redacted observed text. It produces one FindingReport per detection on namespaced security_* routing keys, which downstream delivery routes to SIEM/Slack/PagerDuty and which compliance maps to controls. The live guardrail.observed feed comes from the runtime-ingestion layer described in the event bus reference: it is deny-closed and opt-in (off unless an operator enables it), and the inspected text is the connector’s already-redacted resource reference of a tool_args edge — never the raw argument.