Volver
Command Executor

Plataforma avanzada que permite crear y ejecutar comandos de terminal remotamente a través de una interfaz web intuitiva. Integra inteligencia artificial para generar comandos personalizados

Command Executor es una solución integral para la automatización de tareas y la gestión de servidores, diseñada para centralizar la ejecución de comandos de terminal desde una única interfaz web. La plataforma permite a los desarrolladores y administradores de sistemas crear, guardar y ejecutar flujos de trabajo complejos de forma remota, optimizando la eficiencia y reduciendo errores manuales. Incorpora un potente asistente de IA, basado en la API de OpenAI, capaz de generar comandos a partir de descripciones en lenguaje natural, ideal para tareas complejas o poco frecuentes. La comunicación y ejecución se realizan en tiempo real gracias a un cliente de escritorio nativo (Electron) que utiliza WebSockets para un enlace directo y seguro con el servidor, garantizando una experiencia fluida y sin interrupciones.

Fecha de proyecto

Octubre 06, 2024

Stack

React, Node.js, Electron, OpenAI API, WebSocket, Express

Mi Rol

Full Stack Developer

Command Executor

Command Executor

Command Executor: Tu navaja suiza para la automatización de tareas y la gestión remota de servidores.

💡 La Idea: El Problema que Quería Resolver

Como desarrollador, mi día a día implica conectarme a múltiples servidores y máquinas locales. Siempre me encontraba haciendo SSH a un servidor, cd a un directorio, ejecutar un script de deploy, luego SSH a otro para reiniciar un servicio, y así una y otra vez. Mantenía un Notion lleno de comandos que copiaba y pegaba, pero el proceso era lento, repetitivo y propenso a errores.

Me pregunté: ¿Y si pudiera tener un único panel de control para todos mis comandos? Un lugar donde pudiera guardar, organizar y ejecutar cualquier tarea en cualquier máquina con un solo clic, viendo la salida en tiempo real, sin importar dónde estuviera.

De esa necesidad nació Command Executor. No quería crear otro cliente SSH, sino un centro de mando personal para automatizar mi flujo de trabajo, con la ayuda de una IA que pudiera incluso escribirme los comandos que no recordaba. Command Executor UI

✨ Características Principales

🖥️ Ejecución Remota Segura

Tu Dashboard, Tus Máquinas: Define un comando en la interfaz web y ejecútalo en cualquier máquina que tenga el cliente de escritorio instalado. Ideal para reiniciar servidores, hacer deploys o correr scripts de mantenimiento.

🤖 Asistente IA para Comandos

De Lenguaje Natural a Comando de Terminal: ¿No recuerdas cómo liberar memoria RAM en Ubuntu o buscar archivos de más de 100MB? Simplemente pídelo en español (“liberar memoria ram en ubuntu”) y la IA de OpenAI te generará el comando exacto, listo para usar.

⚡ Comunicación en Tiempo Real

Observa la Magia Ocurrir: Gracias a los WebSockets, puedes ver la salida (stdout y stderr) de tus comandos en la interfaz web en tiempo real, como si tuvieras la terminal abierta frente a ti.

📦 Cliente de Escritorio Nativo (Electron)

El Puente Seguro a Tus Máquinas: La aplicación de escritorio actúa como un agente seguro que instalas en tus máquinas. Recibe las órdenes desde el servidor y las ejecuta localmente, garantizando que solo tú tienes control sobre tus dispositivos.

🗣️ Integración con Amazon Alexa

Para llevar la automatización a un nuevo nivel, se está trabajando en una skill de Amazon Alexa para conectarla con Command Executor, la cual se encuentra en un 80% de desarrollo. El objetivo es que puedas ejecutar tus scripts y comandos guardados usando solo la voz. Imagina decir: “Alexa, dile a Command Executor que reinicie el servidor de staging” y ver cómo se ejecuta la tarea al instante. Esta integración convertirá cualquier dispositivo con Alexa en un punto de control por voz para tu infraestructura, haciendo la gestión de sistemas aún más rápida y accesible.

🛠️ De la Idea al Código: Retos y Soluciones

El Reto Arquitectónico: El Puente de Seguridad

El mayor desafío era obvio y crítico: ¿cómo permitir que una aplicación web ejecute comandos en mi máquina local de forma segura? Abrir un puerto directamente era impensable. La solución fue diseñar una arquitectura de tres componentes:

  1. Frontend (React): El panel de control. El usuario solo interactúa aquí. No tiene ningún poder de ejecución.
  2. Backend (Node.js/Express): Actúa como un broker o intermediario. Autentica al usuario y gestiona las peticiones, pero tampoco ejecuta los comandos.
  3. Cliente (Electron): El agente de ejecución. Esta es la única pieza con acceso al terminal local. Se conecta al backend vía WebSockets, esperando instrucciones.

El flujo es el siguiente: Usuario hace clic en React -> React envía petición a Node.js -> Node.js reenvía la orden por WebSocket al Electron correcto -> Electron ejecuta el comando y devuelve la salida. Este desacoplamiento fue la clave para lograr la funcionalidad sin comprometer la seguridad.

El Desafío del Tiempo Real: Streaming de I/O

Una vez que un comando se estaba ejecutando en el cliente Electron, necesitaba una forma de enviar su salida (que puede ser un flujo de datos constante) de vuelta al navegador. Un simple request/response HTTP no serviría.

Aquí es donde los WebSockets brillaron. Implementé un sistema donde el proceso hijo (child_process) que ejecuta el comando en Electron streamea su stdout y stderr. Cada trozo de datos (chunk) se empaqueta y se envía inmediatamente a través del WebSocket al backend, que a su vez lo retransmite al frontend. En React, un useEffect escucha estos eventos y va añadiendo la salida a un estado, simulando una terminal en vivo.

Este reto fue una lección profunda sobre el manejo de flujos de datos (streams) y la comunicación bidireccional en aplicaciones web.

🔮 Lecciones y Próximos Pasos

Construir Command Executor fue un ejercicio intensivo de arquitectura de software. La lección más importante fue cómo diseñar sistemas distribuidos donde cada componente tiene una única y clara responsabilidad, garantizando la seguridad a través del diseño y no de parches.

A futuro, el roadmap incluye:


Construido con ❤️ por Yamir Alejandro Rodas Elvir