Build log Mini SOC.
One Mac Studio watching a real network. Rules raise the alerts. A local model assesses them and says when it isn't sure. A person makes the call. No alert data leaves the building.
Live since 25 September 2026. The monitor reads a UniFi network every two minutes, and deterministic rules decide whether anything is an alert. Qwen 3.8-27B, running on the same Mac at 8-bit, assesses each alert in 20 to 90 seconds and escalates anything it isn't confident about. It cannot close an alert. Only I can.
What the Mini SOC is for
The goal is to automate as much of home and small-business security and connectivity management as can be shown to be safe. Show it first. Then automate it.
Every kind of action climbs the same ladder, one step at a time.
| Step | What the Mini SOC does | Who acts |
|---|---|---|
| 1. Observe | Records and shows. The baseline's shadow mode works this way. | Nobody |
| 2. Recommend | Says what to do and why. | Me |
| 3. Propose | Prepares the change. | Me, with one click |
| 4. Act and report | Makes a narrow, reversible change and logs it. | The Mini SOC, with an undo |
An action moves up a step only on a measured record from the step below: how often it was wrong, and how often I overruled it. Today everything sits at observe or recommend. The first candidate for the upper steps is moving an unknown new device into an isolated network.
Why build it
Most homelab SOC projects on GitHub stop once the plumbing works. They skip the question a SOC manager would ask first: can the model's verdict be trusted, and where does a person have to stay in the loop?
After 25 years in cybersecurity, I've watched alert pipelines fail in the same place: the dismissal nobody reviews. An AI tier moves that point. It doesn't remove it. This build puts a local model into a real pipeline and measures where it helps, where it's wrong, and what it costs to keep a person in charge.
How the Mini SOC decides
| Tier | What it is | What it decides |
|---|---|---|
| L1 | Deterministic rules | Whether something is an alert. Yes or no. |
| L2 | Qwen 3.8-27B, MLX 8-bit, on the same Mac Studio | What the alert most likely means, and how sure it is. Unsure means escalate. |
| Human | Me | Whether to act, and whether the alert is closed. |
The rules watch for a device the network has never seen, a changed device name, two devices reporting the same name, a configuration change, an admin login from a new address, and UniFi's own security detections. None of them reads what a device name says. They fire on change.
Thinking mode is off. Simon Willison's verdict on Qwen 3.8-27B's default setting, on 16 August 2026: "It's absolutely not a good way to run the model, especially on consumer hardware." For sorting an alert, it doesn't earn the wait.
The guardrails
- The model can't close, dismiss or silence an alert. Notifications come from the rules. If text inside the data talks the model into "benign", the alert still stands.
- Read-only by construction. The code can make eight kinds of request to the network controller, all of them reads. Two are queries sent as POST, for the event log and the flow log. Anything else raises an error before it leaves the machine. (The credential in use has more rights than the job needs. Replacing it is on the list.) Writes will come one earned action at a time, through a separate component with its own narrow credential, an allowlist per action, an undo and an audit log. The reader stays read-only.
- Every decision is on the record. Which rule fired and at what version, which model and quantisation, a hash of the prompt, the raw output, and what I decided.
- Nothing leaves the building. No cloud model, and no cloud fallback when the local one is down. An alert without an assessment says so.
What the traffic shows, and what it can't
The gateway logs every flow it routes. The Mini SOC reads that log every 15 minutes and keeps daily totals per device: which services, which domains, which countries, how much. Two things are built on it. A recommended VLAN for each device, where the device type comes first and traffic is the evidence. And a baseline of what normal looks like for each device.
The log has a blind spot. Two devices on the same network talk through the switch, and the gateway never sees it. On a flat network, "no local traffic seen" proves nothing. It becomes evidence once devices sit on separate VLANs, where every attempt to reach a neighbour crosses the gateway and shows up as blocked.
The first test made the case for fixed rules. Qwen put the game console in the media VLAN. The rule says a console needs the internet and nothing else. No traffic showed another device using it, so the rule won and the placement waits for me.
The baseline learns for 14 days, then runs in shadow mode. Deviations are listed and never sent as alerts, and I mark each one expected or suspicious. That gives a false-alarm rate for each kind of deviation before any of them is allowed to page. Measure it, then trust it.
Where the Mini SOC stands
| Part | State | Since |
|---|---|---|
| Read-only collector, polls the network controller every two minutes | Live | 25 Sep 2026 |
| L1 rules: deterministic checks, alert or no alert | Live | 25 Sep 2026 |
| L2 triage: Qwen 3.8-27B assesses each alert and escalates when unsure | Live | 26 Sep 2026 |
| Decision log: rule version, model, prompt hash, raw output, my call | Live | 26 Sep 2026 |
| MCP server: read-only query tools for an AI assistant | Live | 25 Sep 2026 |
| Recommended actions: the model picks from a fixed list each rule allows, and never executes one | Live | 26 Sep 2026 |
| Desktop widget and menu-bar status | First version | 26 Sep 2026 |
| Local web UI to classify alerts: every classification becomes a training label | First version | 26 Sep 2026 |
| Rogue access points: a network copying yours is always high; the building (crowded or isolated) only changes how unrelated networks read | Live | 27 Sep 2026 |
| Where each device is connected: switch or access point, port, speed and address | Live | 28 Sep 2026 |
| Asset inventory: every device the network has seen, when and where, and the controller's fingerprint of it | Live | 28 Sep 2026 |
| Traffic per device, from the gateway's flow log, kept as capped daily totals | Live | 28 Sep 2026 |
| Recommended VLAN per device: device type first, traffic as evidence, the model's pick checked by fixed rules | First version | 28 Sep 2026 |
| Per-device baseline: learning until 12 Oct, then shadow mode to measure false alarms before anything pages | First version | 28 Sep 2026 |
| Ongoing alerts grouped into one issue per device, with an occurrence count; repeats are summarised instead of paging again | Live | 28 Sep 2026 |
| Where an admin login came from: city and network from a local IP database, no address sent anywhere | Live | 29 Sep 2026 |
| Triage mode: work through the open issues one at a time | First version | 29 Sep 2026 |
| Security alerts show the blocked flow behind them: source, destination, rule, and what doesn't add up | Live | 2 Oct 2026 |
| Threat alerts grouped as one incident around the device they target; closing an issue closes only what was on screen | Live | 3 Oct 2026 |
| Audit sampling of events no rule matched | Next | |
| Measurement: verdict stability, latency, what the model changes versus rules alone | Next | |
| A credential that can only read | Next | |
| LoRA fine-tuning of the local model on those labels (a first run needs about 300) | Next | |
| Connectivity: internet uptime and latency, Wi-Fi health, access point, switch and NAS health | Next | |
| Automation ladder: proposals I approve with one click, then narrow actions that run on their own (first: isolating an unknown new device) | Next | |
| Second site, phone alerts, air quality | Later |
Build log
-
Week two: fewer alerts, one incident view
What did the Mini SOC do in its second week on a real network?
4,878 polls, one failure, 13 alerts, 16 training labels. Threat alerts now group as an incident around the device they target, and closing an issue closes only what you saw.
-
Week one: from alerts to issues
What did the Mini SOC learn in its first full week on a real network?
5,318 polls, three failures, 36 alerts, 19 training labels. Alerts now group into issues, devices are learning a baseline, and a security review closed a way to quiet a look-alike network.
-
The first 26 hours
What does a rules-first security monitor flag on its first day on a real network?
778 polls, no failures, three alerts, zero attacks. Two false-alarm patterns the rules missed on day one, and a structuring choice that hid the one field the model needed.