← Home Lab
October 2026Home Lab Project

Mavis

A Self-Hosted Cyber News Caller

Network SegmentationLocal AIThreat Intelligence

Mavis is a service I built that runs in an isolated Linux container in my home lab. She watches 15 trusted cybersecurity news sources, checks them every two hours during the day, and phones me when something major happens. When the lab's running, she also calls every night at 10pm with a short spoken briefing of the day's top stories, read by a voice generated on the box.

Key findings
01

The firewall looked right but wasn't doing anything

A higher-level setting was switched off, and I only caught it by testing from inside the container.

02

Tightening the network opened a side door

Tightening my network block didn't cut an existing Tailscale connection, and once I blocked that, Tailscale looped traffic through my own public IP. Forcing it through Tailscale's encrypted relays closed both paths.

03

Field order took accuracy from 2 of 6 to 6 of 6

Changing the order of fields in the AI model's answer took its accuracy on a small test set from 2 of 6 to 6 of 6, with nothing else changed.

Overview

I built Mavis as a backstop for my work at The Obsidia Project, where we write case studies on the world's largest cyber incidents — I want to know about big incidents the day they happen. She also gave my spare phone a real job: an AI assistant, a bit like the one in Iron Man, that calls me.

She reads only from an allowlist of 15 sources, including BleepingComputer, The Hacker News, KrebsOnSecurity, threat research from Microsoft, Cisco Talos, and Palo Alto Unit 42, and three CISA feeds. Each story runs through a filter for named threat groups, breaches of major organizations, actively exploited vulnerabilities, and law enforcement action. The classifier can only demote a story, never promote it, and daytime calls are capped at three a day. The AI runs locally: a Qwen 2.5 model on Ollama, reachable only over loopback, and Piper for the voice.

Because Mavis reads content from the internet all day, I built her so a compromise wouldn't get an attacker far. Beyond her Tailscale node key she holds no credentials. She can reach only DNS on the lab router, any internet host on port 443, and my phone — and I tested those limits from inside the container.

Tools
  • Proxmox
  • LXC
  • nftables
  • Tailscale
  • Asterisk
  • SIP
  • Python
  • Ollama
  • Piper
  • systemd