radiocli
Your Uniden scanner, driven from the terminal or by an AI agent.
An SDS scanner is normally driven by a thumb on its knob and keypad. radiocli puts it behind a command line, over USB, so an AI agent can drive the radio instead: read the screen, press any key, walk the menus, edit favorites, tune a frequency. Plain text for you, JSON for the agent.
radiocli screen # read the scanner's screen without looking at it radiocli tune 162.550 # listen to one frequency, here the weather service radiocli favorites # list the favorites saved in the scanner's memory radiocli --help # see all 25+ commands, from the volume knob to the menus
Free and MIT licensed. One file, nothing to install alongside it. macOS, Windows, and Linux.
It was built and tested against an SDS150. The SDS100 and SDS200 speak the same protocol, so it should work on them unchanged. I just don't own one to confirm it. If you try, say how it went.
Why this exists
This is a hobby project. I wanted an AI agent to be able to run my scanner, and there was no way to do that, so after thirty years of building software for a living I built one for fun. It turns out an agent needs the same things a person at a keyboard needs: commands that say what they do, check that they worked, and answer in a form that can be parsed. So the same tool serves both. You can type the commands yourself, wire them into a script, or hand the whole thing to an agent and tell it to program your scanner for you.
What it can do
- See what it is doing:
status,scanning,screen,battery,display,colors. - Browse the memory: favorites lists, systems, departments, sites, channels, banks.
- Control and tune it:
scan,tune,weather,volume,squelch,clock. - Edit the memory at every level, with
new,rename, anddelete. - Drive it by hand:
menuwalks the on-screen menus,keypresses front-panel keys. - Manage the tool:
config,daemon,backup,audio.
Built for scripts and agents
Every listing command speaks JSON with -o json. Results go to stdout; progress, prompts, and errors go to stderr, so redirecting stderr leaves stdout holding only the answer.
radiocli favorites -o json | jq -r '.[] | select(.monitored) | .name'
Blog
The scanner ships no public API for any of this. The serial protocol, the display layout, the font, the color palette, and the menu tree were all worked out from the outside. These are the write-ups; the working notes behind them live in research/.
- Say Your Name · The radio will recite its own vocabulary if you ask the right way. Half of it is missing from the manual.
- Ask the Screen · The protocol will not say what color anything is, so I read the answers off the scanner's own glass.
- Not ASCII · The font keeps pictures where ASCII keeps control codes. Transcribing all 256 of them, one pixel grid at a time.
- Ask Again · The screen is always right, but only once it has finished drawing, and nothing tells you when that is.
- Show Yourself · Recovering 280 screen coordinates from a machine that had no intention of handing over any of them.
- Off the Map · Mapping every screen behind the MENU key, including the twelve the protocol swears do not exist.
- Return Prevous Mode · The junk drawer file: the mislabels, the typos, the lies, and the one request that locks the radio up.
- The First Round · Two weeks of prying this radio open, and why the honest response is gratitude rather than a review.
- Grading My Own Homework · I asked an AI for a full audit of the repo, and a letter grade for the engineer who wrote it.
- He Said Michael · Why any of this exists: a window on a main road, a scanner my dad brought home, and one word my uncle said over the air.
- Both Sides Cancel · Recording the scanner was supposed to be an afternoon. Then it wrote sixteen seconds of silence, and then a kazoo.