Serie: Cmux (6/7)
Comandos personalizados: haz que CMUX recuerde tu flujo de trabajo
¿Haces lo mismo cada vez que empiezas a trabajar: abrir un panel para ejecutar npm run dev, cambiar al siguiente para abrir el navegador de preview y luego abrir una shell de reserva? Tres minutos perdidos en configuración manual cada vez.
Los comandos personalizados de CMUX están aquí para resolver ese problema. Define tu entorno de trabajo fijo en cmux.json y, a partir de entonces, un único comando restaura todo el diseño del espacio de trabajo.
Dónde colocar cmux.json
Crea un archivo cmux.json en el directorio raíz de tu proyecto. CMUX lo leerá automáticamente y añadirá los comandos definidos en él a la lista de comandos disponibles.
Dos tipos de comandos
Comando de espacio de trabajo (Workspace Command): abre CMUX y crea un espacio de trabajo con un diseño predefinido, con terminales, navegador y disposición de paneles ya configurados. Ideal para escenarios de «empezar a trabajar».
Comando simple (Simple Command): ejecuta un comando de shell sin crear un espacio de trabajo. Adecuado para operaciones puntuales como «ejecutar pruebas» o «inicializar el entorno».
Comando de espacio de trabajo: definir el entorno de desarrollo
Este es el ejemplo más completo: un único comando que lanza el servidor de desarrollo de Next.js, abre la preview del navegador y prepara una shell de reserva:
{
"commands": [
{
"name": "Web Dev",
"description": "Iniciar Next.js y abrir preview",
"keywords": ["web", "docs", "next", "frontend"],
"restart": "confirm",
"workspace": {
"name": "Web Dev",
"cwd": "./web",
"color": "#3b82f6",
"layout": {
"direction": "horizontal",
"split": 0.5,
"children": [
{
"pane": {
"surfaces": [
{
"type": "terminal",
"name": "Next.js",
"command": "npm run dev",
"focus": true
}
]
}
},
{
"direction": "vertical",
"split": 0.6,
"children": [
{
"pane": {
"surfaces": [
{
"type": "browser",
"name": "Preview",
"url": "http://localhost:3777"
}
]
}
},
{
"pane": {
"surfaces": [
{
"type": "terminal",
"name": "Shell",
"env": { "NODE_ENV": "development" }
}
]
}
}
]
}
]
}
}
}
]
}Desglose de esta configuración:
name/description: nombre y descripción que aparecen en la lista de comandoskeywords: palabras clave para búsqueda; escribe una palabra y el comando aparecerestart: si el espacio de trabajo ya existe,"confirm"pregunta si quieres reiniciarlo;"ignore"lo omite directamenteworkspace.cwd: directorio de trabajo por defecto para este espacio de trabajoworkspace.color: color identificativo de este espacio de trabajo en la barra laterallayout: define la estructura del diseño completo
La lógica de la estructura del diseño: direction es la dirección de la división ("horizontal" para izquierda/derecha, "vertical" para arriba/abajo), split es la proporción de la división (0.5 es mitad y mitad), y children contiene cada panel.
El resultado de este ejemplo es: la mitad izquierda ejecuta Next.js; la mitad derecha tiene la preview del navegador en la parte superior y la shell de reserva en la parte inferior.
Comando simple: operaciones puntuales
Para operaciones que no requieren diseño de paneles, usa el formato simple:
{
"name": "Setup",
"description": "Inicializar submódulos y dependencias de build",
"keywords": ["setup", "init", "install"],
"command": "./scripts/setup.sh",
"confirm": true
}confirm: true muestra un diálogo de confirmación antes de ejecutar, útil para operaciones destructivas (limpiar caché, reinstalar dependencias).
{
"name": "Run Unit Tests",
"keywords": ["test", "unit"],
"command": "./scripts/test-unit.sh",
"confirm": true
}Espacio de trabajo para monitorización de logs
Otro escenario habitual: un espacio de trabajo dedicado a monitorizar logs en segundo plano:
{
"name": "Debug Log",
"description": "Monitorización en tiempo real del log de eventos de debug",
"keywords": ["log", "debug", "tail"],
"restart": "ignore",
"workspace": {
"name": "Debug Log",
"layout": {
"direction": "horizontal",
"split": 0.5,
"children": [
{
"pane": {
"surfaces": [
{
"type": "terminal",
"name": "Events",
"command": "tail -f /tmp/app-debug.log",
"focus": true
}
]
}
},
{
"pane": {
"surfaces": [
{
"type": "terminal",
"name": "Shell"
}
]
}
}
]
}
}
}La lógica de restart: "ignore" es: si este espacio de trabajo ya está corriendo, no lo reinicies —deja que siga monitorizando.
Algunos principios de diseño
Piensa bien los keywords: cuando hay muchos comandos, los keywords son la única forma de encontrarlos. Incluye los verbos que sueles escribir, por ejemplo ["start", "dev", "run"].
Usa rutas relativas en cwd: ./web es mejor que /Users/tunombre/projects/app/web. Así la configuración funciona en cualquier máquina sin cambios.
Usa los colores para clasificar: asigna colores distintos a tipos distintos de espacios de trabajo —azul para desarrollo, naranja para pruebas, gris para monitorización. De un vistazo a la barra lateral ya sabes qué es qué.
Una vez configurados los comandos personalizados, el último artículo muestra cómo combinar todo esto en un flujo de trabajo real con múltiples agentes: Flujo de trabajo con múltiples agentes en la práctica: patrones reales con CMUX.