CommandThing turns a Spotify Car Thing into a small desk display for the AI coding agents I run in T3 Code. With community firmware, the Car Thing is an 800×480 touchscreen with a dial, four preset buttons and a USB cable, which is enough for a dashboard that stays on all day beside the keyboard. It only displays: answering an agent still happens in T3 Code on the Mac.
The main screen shows a large count of threads that need me, with the first one’s question readable from across the desk, and every other thread on one line with its status and age. Opening a thread with the dial shows what it’s doing now, its task progress, its pull request and the files it changed. When a thread starts waiting, a notification slides in on whatever page is open. There’s also a usage page with the limits left across AI providers, a Spotify page with synced lyrics, and a focus timer set with the dial.
How it works
A Node.js feeder runs in the background on the Mac as a launchd service. It reads T3 Code’s own SQLite database in read-only mode, so the board shows exactly what T3 Code’s sidebar shows, polls OpenUsage for usage limits and controls Spotify through AppleScript. An adb reverse tunnel, kept alive by its own service, lets the device reach the feeder on localhost over USB, so nothing is exposed to the network.
Parts: T3 Code database (SQLite · read-only), OpenUsage (AI usage limits), Spotify app (AppleScript), Feeder (Node.js · launchd), adb reverse (USB · localhost), Car Thing (React · Chromium 69).
- T3 Code database to Feeder
- OpenUsage to Feeder
- Spotify app to Feeder
- Feeder to adb reverse (WebSocket)
- adb reverse to Car Thing
The dashboard is a React app built for the device’s old Chromium 69 browser and gets all state over one WebSocket; even album art comes through the feeder, since the device has no internet. The same socket carries small request and response messages the other way, for a thread’s detail or a media button.
- Car Thing to adb reverse: open ws on localhost
- adb reverse to Feeder: forwarded over USB
- Feeder to Car Thing: full state on connect
- Feeder to T3 Code DB: snapshot threads on a timer
- Feeder to Car Thing: broadcast the new state
- Car Thing: waiting-thread banner
- Car Thing to Feeder: session.detail (dial press)
- Feeder to T3 Code DB: read that thread
- Feeder to Car Thing: tasks, PR, changed files
- Car Thing to Feeder: media.control
- Feeder: AppleScript to Spotify
- Feeder to Car Thing: new state right away
CI runs a smoke test on the packed CLI.
