Maschine Code
A Native Instruments Maschine, repurposed as a physical control surface for a room full of Claude Code sessions.
The question I was chasing
When OpenAI and Work Louder put out the Codex Micro, a dedicated physical controller for Codex, I could see exactly why it worked. Keys that glow with each agent's state, buttons to accept or reject a change, push to talk, a dial for how hard the model should think. A lovely little box. I just didn't want to buy another dedicated device. I wanted to know whether I could get that same tactile control for Claude Code out of hardware already on my desk: a full Native Instruments Maschine, sixteen RGB pads, a bank of endless knobs and two little screens, all built for making music.
The real question underneath it: why should a coding agent live behind a keyboard at all? When you are running a room full of Claude Code sessions at once, across half a dozen repos, the keyboard is the bottleneck. The Codex Micro drives a single agent beautifully. I wanted to see the whole fleet at a glance, every session across every project, and reach out and touch it.
Why it exists
I build with Claude Code all day, usually with several sessions running at once across different projects. One is deep in a refactor, one is waiting on a permission prompt I haven't noticed, one finished ten minutes ago and I don't know yet. They all live in identical terminal tabs, so the only way to know what any of them is doing is to go and look. The state of the work is real, but it stays invisible until you dig for it.
A music controller is the opposite of invisible. Sixteen pads that light up, knobs you can feel, screens right there on the desk. It seemed obvious that the thing I use to read a drum machine at a glance could let me read a room full of agents at a glance too.
The constraints
Three hard rules. It had to run in userspace with none of Native Instruments' own software, talking to the device directly, or it would never be something anyone else could install. It could never break the Maschine's day job: the device still has to be a musical instrument when I'm done, so nothing I did could leave it in a bad state. And the permission flow had to be safe by construction.
That last one mattered most. Claude Code asks permission before it runs a command, and I wanted to answer from the hardware. But a control surface that could approve a command on its own would be far more dangerous than useful. So the rule I built to: the bridge never invents a decision. If the hardware isn't there, or the daemon is down, Claude Code behaves exactly as if none of this existed and falls back to its normal prompt. A command only ever runs because a human pressed a physical button after reading it.
The decisions that mattered
Getting the device to talk meant reverse-engineering its USB protocol by hand, cross-reading two open-source drivers (Ardour and cabl) and trusting the bytes over the docs. An early hardware run flooded the daemon with phantom input from a controller nobody was touching; the fix, a per-knob deadband and a two-sample pad confirmation, is the unglamorous, hard-won kind of detail that decides whether a thing like this feels solid or haunted.
But the decision that actually made it worth using was putting the permission prompt on the screens. When a session asks to run something, its pad pulses gold and the exact command it wants to run prints across the two displays. You read what you are about to approve, then press approve or deny. That single choice is the difference between a fun light show and an instrument you would trust to sit between you and an agent with a shell.
What it is
A control surface for a fleet of Claude Code sessions. Every session across every project lands on one of the sixteen RGB pads, colour-coded by state: idle, working, waiting on you, done. Press a pad to jump to that session's terminal. When one wants permission, you read the command on the screens and answer from the hardware. Hold PLAY and it holds down the exact chord my voice-dictation app listens for, so I can talk to Claude without touching the keyboard. Spin a knob through a list of local repos and a button press opens a fresh session in that folder, which then lights up its own pad. The whole thing is TypeScript over raw USB, one runtime dependency, and a test suite that runs green without the hardware plugged in.
Built with: TypeScript, node-hid (raw USB HID), Claude Code, macOS, a Native Instruments Maschine MK2
Where it's heading
It is early. Maschine Code is a couple of days old and already the thing I reach for when I have four sessions going and don't want to lose one behind a tab. It is being cleaned up for an open-source release, coming soon, so anyone with the same controller, or the appetite to port it to another one, can run it. There is a recursion to it I keep enjoying: the tool was built by Claude Code, to control Claude Code. Next I want to push the screens further, from a permission readout into a proper ambient dashboard for the whole fleet.
Part of the Rolling Waves work archive.