Cómo fcbnerd convierte un pedal MIDI en atajos para macOS
Un developer publicó fcbnerd, una CLI open source escrita en Swift para macOS 13 o superior que conecta un pedal MIDI al sistema y lo trata como un teclado extra: cada pisada dispara un comando de shell, o emite eventos JSON para que otra herramienta decida qué hacer. El proyecto vive en GitHub bajo licencia MIT, se instala con un tap de Homebrew y, según su README, fue diseñado pensando en el Behringer FCB1010, aunque funciona con cualquier fuente CoreMIDI.
El detalle interesante no es el hardware, sino la arquitectura. En lugar de empaquetar una app con permisos sensibles, fcbnerd solo lee MIDI — algo que no requiere ningún permiso en macOS — y delega la ejecución a tu shell o a herramientas que ya tienen acceso, como Hammerspoon o Keyboard Maestro. Esa separación entre lector y ejecutor es una lección de diseño aplicable a cualquier herramienta de automatización.
Qué hace exactamente la herramienta
fcbnerd opera en dos modos. El primero es binding directo: cada mensaje MIDI se asocia a un comando vía el flag --bind. Por ejemplo, --bind '1:20:127=open ~/Downloads' hace que un footswitch específico abra la carpeta de Descargas. El patrón puede usar * como comodín — útil para pedales de expresión: --bind '1:27:*=osascript -e "set volume output volume $((MIDI_VALUE * 100 / 127))"' mapea todo el recorrido del pedal al volumen del sistema.
👥 ¿Quieres ir más allá de la noticia?
En nuestra comunidad discutimos las tendencias, compartimos oportunidades y nos ayudamos entre emprendedores. Sin humo, solo acción.
👥 Unirme a la comunidadEl segundo modo es streaming JSON: cada mensaje MIDI se imprime como una línea JSON en stdout, lista para que otra aplicación la consuma en tiempo real. La herramienta emite tipos como pc (program change), cc (control change), note_on, note_off, pitch_bend y sysex, además de eventos connected y disconnected cuando se enchufa o desenchufa una interfaz MIDI en caliente.
Los comandos bound corren vía /bin/sh -c en background, heredan variables de entorno como MIDI_TYPE, MIDI_CHANNEL, MIDI_VALUE y MIDI_SOURCE, y stdout va a stderr para no contaminar el stream de eventos. Para pedales de expresión — que mandan decenas de valores por segundo — fcbnerd colapsa los eventos y ejecuta solo el valor más reciente cuando el comando anterior termina, con un timeout de 5 segundos.
Por qué CLI y no app: la lección de permisos
Cualquier acción sobre macOS — simular teclas, mover ventanas, controlar volumen — necesita permisos de Accesibilidad o Automatización que las apps sandboxed no pueden obtener. El README de fcbnerd lo dice explícito: "Anything that acts on your Mac needs permissions that sandboxed apps can't get, and every user wants a different set of actions anyway."
La solución: que la herramienta solo lea MIDI (sin permisos) y deje que las acciones las ejecute tu shell o una herramienta que ya los tenga. Es el mismo patrón que usan herramientas como jq o fzf: no intentan hacer todo, solo hacen una cosa bien y se enchufan al resto del ecosistema Unix.
Para founders que construyen herramientas internas, esta es una decisión de diseño con impacto real: dividir el lector de datos del ejecutor de acciones reduce la superficie de permisos, facilita la auditoría y deja que cada equipo ensamble sus propios flujos sin pedirle a la app que adivine qué necesita.
Tres casos de uso prácticos para founders
Control de volumen con pedal de expresión. El ejemplo del README: un pedal conectado al CC 27 del canal 1 ajusta el volumen del sistema operativo en tiempo real. Sirve para presenters que cambian entre slides y demo sin tocar el teclado, o para podcasters que ajustan niveles mientras graban.
Navegación entre escritorios. El README incluye un snippet con jq que detecta program change y envía keystrokes para mover entre Mission Control Spaces. Útil para demos en vivo: pasás de un espacio con el IDE a otro con el dashboard sin despegar las manos del pedal.
Integración con Hammerspoon. El proyecto trae un script en Lua que usa hs.task.new para consumir el stream JSON de fcbnerd, toggle play/pause con un footswitch y mapear el pedal de expresión al volumen del dispositivo de salida por defecto. Es la prueba de que la salida JSON funciona como contrato estable para integraciones de terceros.
Cómo empezar sin pedal
El subcomando simulate publica una fuente MIDI virtual llamada fcbnerd simulator que emite eventos sintéticos en loop: pisadas, barridos de pedal y mensajes sysex. Corre fcbnerd simulate en una terminal y fcbnerd en otra para construir integraciones sin hardware conectado — útil para CI o para probar bindings antes de comprar el pedal.
La instalación va por Homebrew: brew install JamesRyanATX/tap/fcbnerd. Desde código fuente: swift build -c release y copia el binario a /usr/local/bin. Requiere Xcode o el toolchain de Swift y macOS 13 o superior.
Qué significa esto para tu startup
- Audita los atajos que más usás. Si abrís el mismo shortcut 50 veces al día — toggle de mute, ejecutar tests, abrir terminal — vale la pena mapearlo a un footswitch. Mide tu propio uso antes de comprar hardware.
- Adoptá una capa de automatización CLI-first. Herramientas como Hammerspoon, Keyboard Maestro y ahora fcbnerd comparten una filosofía: dejar que la shell haga el trabajo pesado. Invertir dos horas en configurar tu entorno te devuelve semanas de foco al año.
- Diseñá tus herramientas separando lector de ejecutor. Si construís software interno que toca APIs o sistema operativo, dividí el componente que lee datos del que ejecuta acciones. Reduce permisos, facilita testing y deja que cada usuario ensamble su propio flujo sin pedir features a medida.
Fuentes
- fcbnerd — GitHub (fuente original)
- Hammerspoon (sitio oficial del proyecto mencionado en el README)
- Behringer — Wikipedia (contexto del fabricante del FCB1010)
👥 ¿Quieres ir más allá de la noticia?
En nuestra comunidad discutimos las tendencias, compartimos oportunidades y nos ayudamos entre emprendedores. Sin humo, solo acción.
👥 Unirme a la comunidad












