Alt-Tabbing My Way Into a Pip-Boy Stream Deck
I’ve always wanted more tactile input gadgets for programming besides the keyboard. When I discovered a big Enter button, perhaps developed for the frustrated programmer, I jokingly told my friends about it. The following Christmas, I got my big Enter button. Then along came agent programming, which usually meant confirming an agent’s requests every now and then. The perfect use case. But as agents got better and cheaper, it meant controlling a small swarm of them, plus executing all the different data-analysis scripts they created for me. This meant flipping between Claude/Codex sessions and tmux panes to check on the scripts, while keeping an eye on the usual email and Slack. I was Alt-tabbing like crazy, trying to find the right window or terminal. There was never any real flow to it; I was running around like a chicken with my head cut off.
Then, the other day, I came across this tweet by emollick:
New uses require new interfaces These are the three things I have been trying out to control Codex. Given how useful voice mode is, the Teenage Engineering Ting walky-talky has been a surprising favorite. The Codex micro is beautiful & fun, but too little info vs the Stream Deck
Ah, that’s it! I started doing some research and found the Elgato Stream Deck Nuka-Cola edition at 50% off. SOLD

With the help of Codex GPT Terra 5.6, I started implementing functionality for the different buttons on the first day I plugged it in, as needs arose.

It checks the status of scripts running in different tmux panes, monitors Slack and email alerts, and keeps track of the remaining usage limits for Claude and Codex. It also has a Matrix and Pip-Boy screensaver. You never know when they might come in handy.

In this new age, there is no need to know anything: just ask and thou shalt receive. Codex told me which libraries to install, and soon a custom user service was up and running communicating with the Stream Deck.
sudo apt install libhidapi-libusb0
It was almost effortless. A few iterations were needed to get the icons and labels in the right place.
And for the usage data, it needed a few hints. To retrieve the remaining Claude usage, it runs claude /usage and parses the output. Codex is slightly more complex: it opens a codex app-server --stdio process and calls account/rateLimits/read via JSON-RPC.
I have an itch to play Fallout 2 now. Maybe I’ll implement a button for that!