Building software
The machine that goes PING! Building a better ping monitor
Standard ping turns a flaky connection into a wall of scrolling text, so I used AI to build a small terminal monitor that updates in place.

On a long flight recently, the Wi-Fi kept dropping out. I needed to know when it came back, so I opened the terminal and ran ping.
If you don’t spend much time in a terminal, ping is the standard utility for checking whether a network connection is alive. Once a second, it sends a small test packet to a server and prints a line showing whether the packet came back and how many milliseconds the round trip took.
It did what ping always does: gave me a wall of repeating text. The data was there, buried in the scroll, but the answer I cared about wasn’t easy to see. Is the connection back? How long was it down? Is it stable now?
I wanted something smaller and easier to scan. A compact panel I could leave running in the corner without filling my terminal history with thousands of nearly identical lines. I couldn’t find quite what I wanted, so I made it.
It’s called ekg, after Monty Python’s “machine that goes PING!”
ekg pings a host (1.1.1.1 by default, or any IP address or hostname you pass it) and redraws a small status panel of 2 or 3 lines in place. It never pushes your terminal down a line per ping, and if you leave it in a narrow corner pane, the display shrinks to fit:
● 1.1.1.1 12ms ▁▂▂▃▂▁▂▂▃▂
avg 14ms · jitter 2ms · loss 0% · up 2h14m
last outage: 14:32 (36s)
It shows current latency (response time in milliseconds), a sparkline chart of the last 20 or so pings, and rolling stats over a sliding window: average latency, jitter (how much that response time bounces around), packet loss percentage, and uptime. Timeouts show up on the sparkline as red × marks, and the status dot shifts between green, yellow, and red based on latency and loss.
When the connection drops, ekg leaves one permanent line recording the outage start time and its duration, while the live panel keeps updating underneath. The panel stays compact and my scrollback stays usable. When you stop it with Ctrl-C, it prints a session summary with total duration, packets sent and received, loss, min/avg/max latency, and the outage count.
For times when you want more than a live panel, ekg can also append every sample and outage event to a JSONL log file (--log) for overnight runs, send a fixed number of pings and exit with a status code for scripts (-c), or run a shell command when a connection drops or recovers (--on-outage and --on-recovery).
It’s deliberately small: one static binary with 6 dependencies, no sudo (administrator access) required because it uses unprivileged network sockets, and easy to install through Homebrew (brew install spaceshipmike/tap/ekg) or Cargo (cargo install ekg). Full usage details are in the README, and there’s a short project page. It does one job and stays out of the way.
The more interesting part for me is that I’m technically savvy, but I’m not a coder. A few years ago, a need this specific probably would have ended with a clumsy workaround or a feature request. This time I built the thing.
I understood the problem and had a clear idea of how the tool should behave. AI gave me a way to turn that into working software. I used Claude Code, and I had it built by the end of the flight.
That opens up a whole new category of small, personal tools: too specific to become products, but useful enough to be worth making.
ekg is simple and small, but it’s exactly what I needed. I now use it all the time. For me, it’s better than ping. Hopefully it’s useful to someone else too.