Hey Claude, Set the IP address and name for the new BrightSign Player? · Greg Herlein
Herlein
Home
Posts
About Me
Projects
Resume
Staffing
© 2018-2026. All rights reserved.
Built with Hugo<br>Theme Blackburn
Hey Claude, Set the IP address and name for the new BrightSign Player?
19 Jul 2026, 00:00
ai /
claude /
unifi /
homelab /
brightsign /
go /
automation /
skills
Here’s a tiny, stupid problem that has stolen an embarrassing amount of my life: I plug a BrightSign player into my network, it grabs whatever dynamic IP the UniFi controller feels like handing out, and now I have to go find that IP before I can SSH in and do actual work. Claude skills and a new tool to the rescue!
It’s a thirty-second task. I’ve done it a thousand times. Log into the UniFi console, click into clients, squint at the list, find the thing that appeared in the last few minutes, copy the IP, paste it into a terminal. Thirty seconds. Maybe a minute if it grabbed a lease I didn’t expect and I have to hunt. That’s if the Unifi console updates - sometimes it does not seem up to date.
Thirty seconds, a thousand times, is not thirty seconds. It’s a slow leak. And every one of those little context-switches — leave the terminal, go to the browser, dig, come back — costs more than the clock says, because it yanks me out of whatever I was actually doing.
I finally fixed it. Not with a script I have to remember the syntax for. I fixed it by talking to Claude Code.
The New Workflow
These days the whole thing is a conversation:
Me: Is there a new device on my network?
Claude: Yes — a device from “BrightSign” just showed up at 192.168.1.147, MAC xx:xx:xx:..., first seen two minutes ago.
Me: Give it a fixed IP and call it xt5-lab.
Claude: Here’s the reservation I’ll add (shows me the host block and a dry-run). Apply it?
Me: Yes.
Done. That player now has a stable name and address forever. From that moment on I ssh xt5-lab and I’m in. No hunting. No console. No copy-paste. And the next time I re-flash it or move it, it comes back to the same address because the reservation is keyed to its MAC.
Think about what just happened there. I described what I wanted in plain English, and the machine did the network administration. That’s the whole thing.
Describe what you want. The machine does the network admin.
Two Layers: The Tool and the Skill
This works because of two pieces I built that stack on top of each other.
The bottom layer is gofi — a Go module and CLI toolkit I wrote for driving a UniFi controller (a UDM Pro, in my case) from code instead of the web UI. It wraps the UniFi REST and WebSocket APIs behind a clean, type-safe Go interface, and it ships two small CLIs that do the actual work here:
gofimac — lists the clients on the network: MAC, IP, hostname, and manufacturer (it does an IEEE OUI lookup, which is how it knows a device is a “BrightSign” and not just some anonymous MAC). It can also show you devices seen in the last window, or ones that have gone away — --since 7d, --gone, that kind of thing. That’s the “is there a new device, and what is it?” half.
gofips — reads and writes the fixed-IP reservations (DHCP reservations), using standard ISC DHCP host {} blocks as its file format. That’s the “give it a fixed IP and a name” half.
It’s MIT-licensed and it’s out there. (You know how I feel about giving it back.)
The top layer is the unifi-fixed-hosts skill in my Claude Code plugin. This is the part that turns “I built a CLI tool” into “I just talk to my network.”
A skill is basically a little packet of knowledge that teaches Claude Code how to use a tool correctly — when to reach for it, which flags mean what, what the safe workflow is, and where the sharp edges are. Without the skill, I’d have to remember that gofimac -a means “all clients” but gofips -a means “add a host” (yes, the same short flag means different things across the two tools — I know, I know). With the skill, Claude already knows all of that. It knows to find the MAC with gofimac --json, snapshot the current reservations with gofips --get, edit the host file, and preview with --dry-run before touching anything.
Automation That Doesn’t Nuke Your Network
Here’s the part I’m actually proud of, and it’s not the flashy part.
The skill has a hard review gate baked into it. Changing DHCP reservations is mutating live network config — get it wrong and you can hand two devices the same address, or knock something important off the network. So the skill flat-out refuses to apply a change until it has shown me the full host file and the dry-run output, and I’ve explicitly said “yes.” Asking Claude to make the edit is not the same as approving the apply. That distinction is written right into the...