SOC Operations
The security stack raises the alerts. This is what reads them - a local analyst that works the nightly report end to end and hands a human a short list. It runs on the box, and there is no cloud model in the loop.
The one rule everything else follows from: the model never adjudicates. A deterministic guardrail makes every authorization call; the local LLM does volume triage and investigation; a human keeps every verdict. The interesting engineering was never the model - it was the deterministic shell around it, and treating the model's own input as hostile.
What it does
Every night at 04:00 the pipeline pulls 24h of Wazuh / Suricata / VPN / CVE telemetry, has a local model (Ornith, a 9B) triage and investigate it, writes the report's Executive Summary itself, and pushes a morning digest to Telegram. It is fully local - the only thing that ever leaves the box is an explicit threat-intel lookup (a hash or IP the analyst chooses to check).
The pipeline at a glance
The tiers
- Deterministic floor - authorization is code, not opinion. A "sensitive action"
(new admin account, a cleared log, a promiscuous NIC) is only
KNOWNif a matching operator note authorized it in the window; no note, it flags - regardless of what the model thinks, because the model is never asked. - L1 - a fast per-alert classifier. Runs at temperature 0 with its output constrained by a grammar, so the decoder is physically incapable of emitting anything but a verdict. It closes the obvious.
- L2 - the investigator. Gets a fixed set of read-only tools, reviews the whole report item by item, and has to say what each thing actually is - never "requires human review to determine scope."
- Human - keeps the final verdict, always.
It reads the actual event
The difference a real investigation makes, on one finding that used to page every night:
The honest bits
- It runs on CPU. Ornith is a hybrid (Gated-DeltaNet + attention) architecture whose recurrence is CPU-bound and does not offload usefully to this box's 4 GB GPU - I measured it, and matching threads to physical cores won by more than any partial offload (the hardware notes and the inference-tuning write-up). At 04:00 the wall-clock does not matter.
- It is a 9B. Small models compress and occasionally mis-format; the whole design leans on the deterministic floor and the tools so the model is never trusted with a load-bearing call - it gathers and phrases, it does not decide authorization.