← All posts

I Turned IRC Into a Safety Net That Catches Every Server Alert. No SaaS Required.

June 29, 2026 · 5 min read · The xShellz Team

I Turned IRC Into a Safety Net That Catches Every Server Alert. No SaaS Required.

A few months ago, I woke up to a text from a colleague: "Is prod down?" It was. A disk had filled up at 3 a.m., and the monitoring script fired off an email, a Pushover notification, and a Slack message. I missed all three because my phone was on silent. By the time I noticed, the server had been dead for 20 minutes and a few customers were already filing tickets.

That was the moment I stopped relying on push notifications and started treating alerts like a log: something I could replay, at my convenience, with 100% fidelity. The tool I used was already on my box: an IRC bouncer.

Why Push Notifications Fail the On-Call Test

Push notifications are great until they aren't. Do Not Disturb scheduling, silent mode, a spotty data connection, or simply swiping a notification away by accident: any of those can cause you to miss a critical alert. Email gets throttled. Slack gets noisy. PagerDuty wakes you up, but if you dismiss the alert before you're fully awake, it's gone.

The common thread is that these channels are ephemeral. Once you miss the initial ping, there's no guaranteed way to see what happened. You're left guessing, or waiting for a second failure to fire again.

A better pattern is an append-only log that you can replay on your own schedule. That's exactly what an always-on IRC bouncer gives you.

How an IRC Bouncer Works (and Why You Need One)

A bouncer, like ZNC, is a middleman that stays connected to IRC networks even when your client is offline. It joins the channels you tell it to, logs everything, and when you reconnect later it replays all the messages you missed. Think of it as a write-ahead log for your attention.

Here's what happens: you point your IRC client (irssi, WeeChat, Textual, etc.) at the bouncer instead of the network directly. The bouncer acts as a proxy, keeping your nick alive and buffering messages. When you open your client in the morning, you don't see an empty channel. You see hours of scrollback, every line delivered in order.

This means you can be completely offline, open your laptop at a cafe, and immediately see every alert that fired overnight. No checking multiple dashboards. No hoping the email didn't get caught in a spam filter.

Sending Server Alerts to IRC with One Shell Command

The magic is that you don't need a permanent bot to post alerts. You can drop messages into an IRC channel using a plain netcat one-liner. The bouncer, being always connected, will capture it and store it for you.

Here's a minimal example that sends a disk alert to an IRC channel on Libera.Chat:

#!/usr/bin/env bash
SERVER="irc.libera.chat"
PORT=6667
CHANNEL="#my-private-alerts"
MESSAGE="[$(hostname)] Disk usage on /dev/sda1 exceeded 90%"

{
  echo "USER alertbot * * :alertbot"
  echo "NICK alertbot-$(date +%s)"
  echo "JOIN $CHANNEL"
  echo "PRIVMSG $CHANNEL :$MESSAGE"
  echo "QUIT"
} | nc -w5 $SERVER $PORT

You can wire this into any monitoring system that supports running a command on alert. Nagios and Icinga have command-notify directives. A systemd timer can check disk usage and run the script. Even a cron job with a simple threshold check works.

The bouncer's role is simple: stay in that channel, log everything. It doesn't matter that the alert sender connects and disconnects within seconds. The message lands in the channel, the bouncer sees it, and the bouncer replays it when you come back.

The Morning Scrollback: Catching Up Without Guilt

Every morning I open WeeChat, typed /reconnect, and scroll up. Every disk warning, every HTTP 5xx spike, every certificate expiry reminder is right there. It takes two minutes to review the night's activity, and I don't need to log into a dozen services.

I also pipe the bouncer's log files through grep when I want to search for a particular host or error. Since ZNC writes plain text logs per network and channel, you can treat your alerts like any other log stream:

grep "sda1" ~/.znc/users/*/moddata/log/*.log

Contrast that with hunting through a Slack scrollback that's been pruned beyond 90 days or an email inbox that's impossible to filter retroactively.

More Than Alerts: The Community Sidekick

Alerts are only half the picture. Many open-source communities still live on IRC: #python, #postgresql, #kubernetes, #nginx, and countless project-specific channels. When you're stuck on a deployment issue at 2 a.m., someone on the other side of the world often has the answer. But if you're not online, you miss that conversation.

With a bouncer, you don't need to lurk 24/7. You join the channel once, and the bouncer keeps you present. When you reconnect, you get the full conversation history: the problem statement, the back-and-forth, and the eventual solution. I've solved more than one gnarly kernel bug by scrolling up to see a discussion that happened while I slept.

It turns transient chat into a searchable knowledge base you don't have to actively maintain.

Skip the Admin If You Want

Running a bouncer yourself means keeping a small VPS alive, updating ZNC, and managing certificates if you want TLS. That's fine if you enjoy the tinkering. For the rest of us who just want the safety net without another service to babysit, xShellz offers managed IRC bouncers alongside always-on shell slots. You get persistent logs, no maintenance, and a place to run your alert scripts without burning a spare droplet. It's the same pattern, just less ssh-ing into yet another box.

But even if you never touch xShellz, the takeaway is the same: an IRC bouncer turns your chat connection into a durable, replayable stream that catches every alert and every developer conversation. Push notifications can fail silently. A bouncer's buffer won't.