Codex acaba de convertirse en el MEJOR entorno para agentes de larga duración

CChase AI
Computing/SoftwareVideo & Computer GamesInternet Technology

Transcript

00:00:00Codex podría haber superado a Claude Code con el lanzamiento de la nueva función experimental Goals.
00:00:05Codex es ahora la forma más fácil de ejecutar tareas de programación autónomas de larga duración sin
00:00:10tener que incluir ningún tipo de capas de orquestación adicionales; Goals actúa como un
00:00:15bucle REPL integrado más sofisticado. Le das algún tipo de objetivo y trabajará
00:00:19potencialmente durante horas y horas para resolver ese problema sin que necesites intervenir para nada.
00:00:25Y hoy voy a mostrarles cómo funciona, cómo pueden configurarlo y veremos una
00:00:29demostración real para que puedan verlo en acción. Hoy crearemos Rift Salvage, nuestro videojuego
00:00:35de combate en 2D que usa activos completamente originales y que construimos estrictamente mediante Goals. La función Goals
00:00:42es uno de los verdaderos diferenciadores de Codex en este momento y es increíblemente sencilla de usar.
00:00:47Hablamos de un solo comando de barra, por lo que hay muchísimo valor aquí. Así que, ya sea
00:00:51que usen la aplicación de escritorio de Codex o la CLI de Codex, deben habilitar Goals porque es una
00:00:56función experimental. Pueden pedirle a Codex que lo haga o pueden hacerlo ustedes mismos muy rápido.
00:01:01Dentro de la aplicación Codex, solo voy a ir a configuración y luego iré a configuración
00:01:07justo aquí donde dice abrir config.toml. Haré clic ahí, lo abriré en VS Code
00:01:15y aquí abajo deben agregar dos líneas si no están ya ahí: features y luego goals equal true.
00:01:22Eso es todo. Debería llevarles como dos segundos. Si eso es demasiado complicado, también pueden decirle a Codex:
00:01:27«Oye, ¿puedes habilitarme Goals?». features goals equals true, eso es. Ahora, para usar Goals realmente
00:01:35dentro de la aplicación de escritorio y de la CLI, simplemente van a escribir /goal. Por alguna
00:01:40razón, creo que es porque es nuevo y experimental, al hacer /goal no recibirán
00:01:43ninguna notificación de que realmente esté funcionando, y verán que una vez que le demos un prompt adecuado
00:01:48veremos una pequeña insignia que confirma que “goal” está funcionando; si lo activas, asegúrate
00:01:53de reiniciar Claude Code después de hacerlo solo para asegurar que los cambios se apliquen. Pero al hacer
00:01:58/goal no verán nada como verían normalmente, como si usaran una
00:02:02skill o algo donde reciben una respuesta adecuada de que funciona. Pero esto está bien.
00:02:08Pero antes de demostrar Goal dentro de la aplicación, permítanme explicar cómo funciona realmente bajo el capó.
00:02:13Pero primero, unas palabras de nuestro patrocinador de hoy: yo. Como saben, dentro de Chase AI Plus tengo la
00:02:18master class de Claude Code, pero también acabo de lanzar la master class de Codex; ahora tienen dos herramientas que
00:02:24pueden ayudarlos a pasar de cero a desarrollador de IA. Este es el mejor lugar para aprender cómo hacerlo porque
00:02:29asumo que no tienen conocimientos técnicos y nos enfocamos en casos de uso reales. Así que, si quieren acceder a esto
00:02:34o si quieren escuchar mi seminario web gratuito que daré en un par de días, el enlace estará
00:02:40abajo en el comentario fijado. Espero verlos allí. Como dije en la introducción, Codex Goals es básicamente
00:02:46un bucle RALPH integrado más sofisticado. ¿Y qué es un bucle RALPH?, preguntarán. Bueno, haremos un
00:02:51repaso rápido para los que no se acuerden. En esencia, un bucle RALPH, si lo usáramos en
00:02:57algo como Claude Code, es simplemente una línea de código. Es solo un bucle bash, es exactamente lo que ven
00:03:03justo aquí. Y la idea es que ejecuto esta línea de código y lo que sucederá es que va a
00:03:09iniciar Claude Code o Codex o cualquier sistema de IA, y va a echar un vistazo a un archivo prompt.md.
00:03:16Este prompt dirá: «Oye, esto es lo que intentamos hacer, así es como quiero hacerlo y, por cierto,
00:03:21aquí están los criterios que consideraré para darlo por completo». En este ejemplo queremos aumentar la cobertura en
00:03:28archivos de autenticación, lo que básicamente significa que debemos crear más pruebas, y pararemos cuando la cobertura
00:03:33esté al 75 %. Ese es el objetivo final. Así es como funcionaría: iniciarías este bucle y luego
00:03:41el bucle mira el prompt, lo inyecta en la sesión de IA, la sesión realiza un
00:03:48turno, lee el prompt y también lee un archivo state.md. El archivo de estado es básicamente un archivo que
00:03:56puede consultar para decir: «Vale, si tenemos la tarea uno, dos y tres, ¿qué hemos hecho hasta ahora y
00:04:03está funcionando?». Digamos que en los primeros turnos completa la tarea uno, y en el siguiente turno va a
00:04:10mirar el archivo de estado y dirá: «Oye, la tarea dos no está completa, adivina qué vamos a hacer en esta
00:04:14sesión o vamos a hacer la sesión dos». Y tal vez no funcione en el primer turno y diga:
00:04:18«Oye, esto es lo que intenté», el siguiente viene, etc., etc., hasta que completa todas las tareas. Y así, tras la ejecución del turno
00:04:25del agente, este actualiza el archivo, el turno termina y el bucle continúa. Así obtienes este tipo
00:04:30de bucle continuo donde constantemente se revisan un par de archivos diferentes para ver qué hemos hecho,
00:04:35¿qué necesitamos hacer?, ¿cuál es el estado final?, y finalmente, una vez que alcanza el criterio de completado,
00:04:41dice: «Oye, ya terminamos», todo autónomo. Esa es la idea de los bucles RALPH. Ahora, si quieres que los bucles RALPH
00:04:48hagan más cosas, se requiere andamiaje adicional, cosas relacionadas con la facturación,
00:04:53¿qué haces?, ¿hay algún tipo de uso inteligente de tokens?, no necesariamente. ¿Qué pasa si se apaga,
00:04:58el agente falla, haces Control+C?, ¿cómo sabe que realmente ha terminado?, ¿hay algún
00:05:02tercero integrado que verifique que todo esté hecho?, no realmente porque, en esencia, de nuevo, es solo una
00:05:08línea de código. Ahora comparen eso con Goals. Goals, a grandes rasgos, funciona igual: le decimos que haga
00:05:15algo, tiene una idea de cómo va a hacerlo y está actualizando constantemente archivos internos diciendo:
00:05:19«Aquí está lo que he hecho, aquí lo que falta», e intenta llegar a ese estado final. Así que,
00:05:23en general, es prácticamente lo mismo; sin embargo, hay algunas diferencias. Primero que nada, tenemos estos dos
00:05:29archivos markdown que son esencialmente invisibles para ti: continuation y budget limit. ¿Qué
00:05:35hacen estas dos cosas? Bueno, permiten que Codex actúe de una manera diferente si
00:05:40estás a punto de chocar con los límites de uso, lo cual es importante. Así que hay una especie de
00:05:46finalización elegante para cómo tu sistema manejará una tarea en un bucle Goals frente a un bucle RALPH. En un bucle RALPH,
00:05:52alcanzas tu presupuesto y terminas; en Codex no necesariamente, encontrará una buena forma de
00:05:57dejarte en un punto en el que puedas trabajar más tarde. Y la forma en que eso sucede en la realidad es que Codex ejecuta su
00:06:03turno en su bucle Goals o bucle RALPH, como quieran pensarlo, y cuando llega al final
00:06:08del turno, realmente tiene cuatro caminos que puede seguir. Uno: si todavía tiene trabajo que hacer y el presupuesto está bien,
00:06:13pues seguimos adelante. Dos: si estamos cerca de nuestro límite de tokens, lo que va a hacer es
00:06:19inyectar ese archivo budget limit.md y va a cerrar esencialmente el turno de forma elegante
00:06:25y darte un informe final de lo que se ha hecho y lo que debes hacer a continuación si actualizas
00:06:29tu límite. Tres: si hemos terminado el proyecto, va a realizar una llamada a la herramienta update goal;
00:06:34va a proceder y cambiar su estado, se asegurará de que todos los entregables estén auditados y, si
00:06:39todo sale bien, ¡objetivo completado! Por último, tenemos formas de pausar el objetivo,
00:06:45editar el objetivo, lidiar con fallos... Así que, en caso de que algo salga mal mientras estamos en nuestro bucle,
00:06:49bueno, no es como en un bucle RALPH tradicional donde estaríamos perdidos. Es un poco más
00:06:54sofisticado que el bucle RALPH, muy similar en concepto, y no tenemos que realizar ninguna
00:06:59orquestación adicional. Todo esto debería sonarles muy familiar si alguna vez han trabajado con
00:07:05algo como GSD o GSD Superpowers; todas estas herramientas son capas de orquestación que se asientan sobre Claude Code para
00:07:11hacer esencialmente lo que estamos haciendo con un solo comando de barra dentro de Codex con Goals. Y porque es
00:07:18literalmente solo un comando de barra, lo hace super fácil de ejecutar. No necesitan ver una
00:07:24demostración de 40 minutos sobre todas las complejidades de GSD; solo escriben /goal y Codex va,
00:07:30avanza y vence. Y con eso en mente, pongámoslo a prueba. Primero que nada,
00:07:35vamos a poner esto en modo plan porque podemos pasar del modo plan a Goals muy fácilmente
00:07:39y vamos a hacer que cree esencialmente un juego de supervivencia arcade de vista cenital para nosotros,
00:07:44y haremos que cree todos sus propios activos. Lo genial de Codex frente a algo como
00:07:49Claude Code, por ejemplo, es que al ser un producto de OpenAI, tenemos acceso a la generación de imágenes de GPT 2
00:07:56también; así que va a crear todos sus propios activos para este juego. Quiero un sprite de dron para el jugador,
00:08:01tres enemigos, una criatura jefa, núcleo de energía, mina de peligro, fondo de grieta, insignias de interfaz,
00:08:07activos decorativos... le voy a pedir que cree bastante. Bien, el prompt es relativamente sofisticado
00:08:15porque esto puede seguir durante mucho, mucho tiempo. Debería haberles mostrado ya la captura de pantalla
00:08:18del tipo que dice: «Lo he tenido funcionando durante 50 horas seguidas». No sé si 50 horas
00:08:23seguidas sea realmente la mejor forma de hacer esto, pero la idea es que tenemos una idea difusa, entramos en modo plan,
00:08:31obtenemos algo muy, muy ajustado y, muy importante con algo como esto, es que
00:08:36deben ser extremadamente específicos sobre cuál debe ser el resultado final, porque si no tenemos un
00:08:43resultado final muy específico, un conjunto muy cuantificable de cosas que debe alcanzar para
00:08:50que complete el bucle, van a obtener un resultado que será mediocre o que estará
00:08:55a medio hacer. Así que sugiero encarecidamente que pasen por el modo plan y se tomen el tiempo de desarrollar realmente
00:09:02el plan y no digan solo algo como «/goal hazme un producto SaaS que gane mil millones de dólares». Y aquí está
00:09:07el plan para nuestro juego; y cuando se trate de la verificación, esto es lo que va
00:09:12a mirar. Esto es lo que realmente va a probar antes de decir que está completo. Obviamente tiene
00:09:17que ejecutar npm run build y corregir todos los errores, iniciar el servidor de desarrollo y proporcionar la URL local, añadir y
00:09:24ejecutar un script de verificación automatizado de Playwright que abra la aplicación, confirme que todo carga,
00:09:29revise que el canvas no esté en blanco, simule movimientos de teclado, simule eventos de coleccionables, fuerce daño,
00:09:34confirme cambios de salud, estado de victoria contra el jefe, interfaces de usuario... y suma y sigue. Así que esto es lo que realmente
00:09:39quieres revisar; ya sabes, si miras la verificación y dices: «Oye, si todo eso está
00:09:44completado, estaré satisfecho», pues entonces estás listo para avanzar. Ahora, cuando diga que implemente el plan,
00:09:49vas a querer ir a... No, yo te diré qué hacer: puedes usar /goal; usa Goal
00:09:54para implementar este plan y vamos a enviarlo. Y justo aquí arriba, ¿qué ven? Tienen esta
00:10:02pequeña insignia que dice Goal, así que ahora sé que estamos en ello y también lo dice justo aquí. Así que,
00:10:09como les dije antes, cuando haces /goal no recibirás comandos, pero está
00:10:12funcionando. Creo que es solo un error de la interfaz por ser una función experimental. Dice que
00:10:17todavía está en modo plan, así que cancelaremos ese objetivo. Usa Goal para implementar este plan. Un poco brusco
00:10:28todavía, pero veamos qué hace realmente por nosotros. La idea es que ahora estoy totalmente libre de manos;
00:10:34ya saben, va a ejecutar su pequeño bucle RALPH, su cosita Goal, y al final tendremos
00:10:39un producto final. Ha estado trabajando durante unos 12 minutos ya y pueden ver que ya está
00:10:43en proceso de crear todos los diferentes activos usando el modelo Image Gen 2,
00:10:49lo cual es genial. Y de nuevo, lo otro bueno es que al usar la aplicación de escritorio en lugar de
00:10:54simplemente extraer de la terminal pura, todo esto se presenta en línea, lo cual es agradable. Yo,
00:11:00personalmente, he estado muy impresionado con la aplicación de escritorio de Codex. No quiero decir que no siga amando Claude
00:11:06Code, creo que uso ambas herramientas indistintamente. Pueden ver mi último video para conocer mi opinión
00:11:11sobre eso, donde creo que la idea de que debamos elegir entre estas dos herramientas es un poco estúpida.
00:11:15¿Por qué no simplemente usamos ambas? Y a menudo ambas en conjunto. Pero con Claude Code soy
00:11:20mucho más de terminal pura, mientras que con Codex he disfrutado mucho la aplicación de escritorio, y parte de eso podría
00:11:26ser simplemente que es un buen cambio de ritmo a veces frente a estar siempre en la terminal todo
00:11:32el tiempo. Así que, hasta ahora, me ha gustado mucho. Después de unos 30 minutos dijo que estaba listo y, de hecho,
00:11:38terminó más rápido de lo que pensaba. Veamos cómo le fue en la primera pasada y,
00:11:44como lo hizo tan rápido, probablemente le pediré que haga algunas cosas al final. Dice que implementó
00:11:49Rift Salvage; el servidor de desarrollo local está funcionando aquí. Es un juego de canvas con control de teclado y táctil, generación
00:11:56de enemigos, minas, puntuación, potenciadores de escudo, fase de jefe, ganar, perder, pausa y reinicio. 11 activos de mapa
00:12:03de bits generados con Image Gen con recortes alfa, verificador automatizado de Playwright y luego nos muestra todo lo que construyó,
00:12:10lo cual es genial. Veamos si funciona y qué podemos añadir para forzarlo un
00:12:17poco más. ¡Oh, hagámoslo en el navegador real! Vale, tengo una pequeña pantalla de carga
00:12:27y el contraste es un poco bajo, algo difícil de ver... puede que les resulte difícil verlo,
00:12:32pero tengo mi pequeña nave espacial. Eso es una mina, creo que se supone que debo agarrar estas cosas
00:12:39mientras genera enemigos que me persiguen. Ya saben, funciona, se ve genial; creo que
00:12:49podríamos mejorar los gráficos un poco, pero es bastante nítido que todo aquí fuera creado
00:12:56como imágenes únicas. Creo que lo que podríamos hacer es añadir... bueno, primero quiero ver cómo
00:13:00se ve la pelea contra el jefe, si pudiéramos acelerar eso y también añadir algún tipo de
00:13:04sistema de disparo, ya sea con láseres o algo genial así. Vamos a hacer
00:13:11eso realmente; hagamos que lo haga antes de quedarnos aquí más tiempo. Lo pondré en modo plan
00:13:15y veré si podemos hacer que trabaje un poco más duro. Vale, creo que fue una muy buena primera pasada,
00:13:19todo funciona, pero me gustaría complicarlo un poco más. ¿Podemos añadir algún tipo de
00:13:24sistema de combate, ya sean láseres disparando a diferentes enemigos y que ellos nos
00:13:31devuelvan los disparos? ¿Podríamos también hacer que la fase del jefe llegue un poco más rápido o incluir algún tipo
00:13:37de botón que pueda presionar para que empiece la fase del jefe? ¿Podríamos también cambiar el contraste un
00:13:42poco? Porque ahora mismo todo se mezcla con el fondo. Y si tienes alguna otra idea
00:13:49para hacerlo simplemente un poco más complicado y llevarte a tus límites,
00:13:53déjame ver esas ideas. Este es el plan que propuso. Una cosa que deben saber cuando usan
00:13:58el sistema Goals es que cada ejecución de objetivo está ligada al hilo o sesión que estén usando en ese
00:14:07momento. Hemos estado en el mismo chat, lo que significa que estamos en el mismo hilo de objetivo. Si quiero hacer
00:14:12Goals de nuevo, quiero hacer una segunda ejecución de Goals en el mismo proyecto, podemos hacerlo pero tenemos que hacerlo en
00:14:18un segundo hilo o un segundo chat, como abrir otra terminal. Así que lo único que haré es copiar
00:14:24este plan, abriré otro chat, escribiremos /goal y
00:14:33pegaremos esto ahí. Después de 15 minutos completamos la segunda pasada de Goal; implementó la mejora
00:14:40de combate. Así que veamos cómo se ve este juego ahora. Aquí está la pantalla de carga de nuevo, muy similar
00:14:44a lo que vimos la primera vez, excepto que añadió algunos widgets aquí arriba: tenemos el combo de
00:14:50objetivos así como la señal del jefe ahora. Si lo lanzamos, directamente estoy disparando,
00:14:56disparando mi arma, los enemigos pueden devolver los disparos y tienen puntos de vida. También puedo
00:15:01activar la señal del jefe; ahí está el jefe... se ve bastante imponente, la verdad. Creo que lo más genial
00:15:09de este juego y de lo que hizo fueron todos los activos únicos, ¿no? El hecho de que todo sea
00:15:13un activo original y que hiciera todo esto usando Image Gen 2, lo cual me parece
00:15:19fantástico. Y sé que obviamente esto solo tomó unos 45 minutos en total entre las dos pasadas y vimos
00:15:24a gente haciendo ejecuciones durante tres días en sus capturas de pantalla, pero creo que lo mejor
00:15:30de esto es lo simple que es ejecutar esos objetivos. Ya sabes, simplemente le das un objetivo
00:15:36y se va a volver loco asumiendo que tienes algo fijado. ¿Ganamos? No sé si
00:15:43morimos o no, pero como decía, lo genial de esto y de Goals en general es la
00:15:48idea de que si tienes una estrella del norte clara y criterios claros de lo que significa el éxito,
00:15:54puedes sacar muchísimo provecho de esto y puede simplemente funcionar para siempre. En lugar de tener que configurar
00:15:59tu propio bucle RALPH y tu propio andamiaje o usar algo externo como capa de orquestación
00:16:05como GSD o Superpowers, está incorporado para ti. Y como hemos hecho aquí,
00:16:10puedes añadir muchas cosas nítidas que son más difíciles de implementar, pero puedes hacerlo dentro de Claude Code; como
00:16:15si usáramos Claude Code para esto, definitivamente podríamos haberlo hecho, solo que habríamos
00:16:18tenido que implementar algo como la CLI de Higgsfield o el MCP de Higgsfield para hacer toda esa generación de imágenes
00:16:24por nosotros en lugar de ser este sistema único, integrado y holístico. Así que espero que hayan podido
00:16:31sacar algo de este video y les sugiero encarecidamente que prueben Codex, amigos. He disfrutado mucho la
00:16:35aplicación de escritorio como he estado comentando, creo que esta función es genial y de nuevo,
00:16:40podríamos haber hecho esto en tándem con Claude Code también. Podríamos haber hecho que el plan se creara en
00:16:44Claude Code y luego lanzarlo a Codex para Goals; hacer que Claude Code revisara el trabajo que
00:16:49hizo y tener este intercambio, que es donde creo que se obtiene el mayor valor. Es como
00:16:53ya saben, ese concepto de que el todo es mayor que la suma de sus partes. Como siempre,
00:17:02cuéntenme qué les pareció, asegúrense de echar un vistazo a Chase AI Plus, hay un enlace a eso abajo en el
00:17:07comentario fijado; también daré un seminario web en unos días, habrá un enlace allí también. Espero verlos allí
00:17:12y por lo demás, nos vemos por ahí.

Key Takeaway

La función Goals transforma a Codex en un entorno para agentes autónomos que resuelve tareas de programación complejas durante horas mediante un comando /goal integrado, eliminando la necesidad de herramientas de orquestación externas como GSD.

Highlights

  • La función experimental Goals permite ejecutar tareas de programación autónomas de larga duración sin capas de orquestación adicionales.

  • El comando /goal activa un bucle de ejecución que gestiona automáticamente límites de presupuesto y tokens mediante archivos invisibles como continuation.md y budget_limit.md.

  • Codex utiliza Image Gen 2 de OpenAI para generar activos gráficos originales, como sprites de personajes y fondos, integrándolos directamente en el flujo de desarrollo.

  • La activación de Goals requiere añadir la línea features goals = true en el archivo config.toml de la aplicación de escritorio o la CLI.

  • La creación de un videojuego de combate 2D funcional con activos originales y pruebas automatizadas de Playwright se completa en aproximadamente 45 minutos usando dos ejecuciones de Goals.

  • A diferencia de los bucles RALPH básicos, Goals ofrece una finalización elegante que genera un informe del progreso y pasos a seguir cuando se alcanzan los límites de uso.

Timeline

Configuración de la función experimental Goals

  • El comando /goal inicia un proceso autónomo sofisticado que supera las capacidades de Claude Code en tareas de larga duración.
  • La habilitación de esta característica requiere modificar el archivo config.toml añadiendo el parámetro features goals = true.
  • La interfaz actual no muestra notificaciones inmediatas al activar un objetivo debido a su estado experimental.

La función se presenta como un diferenciador crítico frente a otros asistentes de codificación. Para usuarios que encuentran la edición manual del archivo de configuración difícil, Codex puede realizar la activación mediante una petición de lenguaje natural. Una pequeña insignia en la interfaz confirma que el agente está trabajando activamente en el objetivo tras ingresar el comando.

Mecánica operativa y comparación con bucles RALPH

  • Un bucle RALPH tradicional depende de scripts de Bash que alternan entre archivos de instrucciones y de estado para guiar a la IA.
  • Goals gestiona de forma nativa cuatro rutas de ejecución: continuación, manejo de límites de presupuesto, finalización con auditoría y gestión de fallos.
  • El sistema utiliza archivos markdown invisibles para asegurar que el agente deje el trabajo en un estado recuperable si se agotan los tokens.

El flujo de trabajo estándar en bucles RALPH utiliza archivos como prompt.md y state.md para definir criterios de éxito, como alcanzar un 75% de cobertura de código. Goals mejora esto al integrar la lógica de orquestación directamente en la herramienta, lo que evita configuraciones complejas de terceros. El sistema realiza una llamada interna a update_goal para verificar entregables antes de marcar una tarea como terminada.

Desarrollo autónomo de Rift Salvage

  • El modo plan es un paso previo necesario para establecer criterios de éxito específicos y cuantificables antes de ejecutar un objetivo.
  • Codex genera activos visuales únicos como naves, enemigos y jefes finales utilizando el modelo Image Gen 2 integrado.
  • La validación del proyecto incluye la ejecución automática de npm run build y scripts de Playwright para simular interacciones del jugador.

La demostración práctica consiste en la creación de un juego de supervivencia arcade desde cero. El agente no solo escribe el código del motor del juego, sino que también produce 11 activos de mapa de bits con transparencia alfa. El proceso de verificación asegura que el lienzo de juego funcione, responda al teclado y procese correctamente los eventos de salud y combate sin intervención humana.

Iteración de combate y flujos de trabajo combinados

  • Las iteraciones adicionales sobre un mismo proyecto requieren abrir nuevos hilos de chat para iniciar sesiones de Goals independientes.
  • La segunda fase de desarrollo añade sistemas de disparo láser, inteligencia artificial para enemigos y ajustes de contraste visual en 15 minutos.
  • La combinación de Claude Code para la planificación y Codex para la ejecución autónoma maximiza la eficiencia del desarrollo con IA.

El juego final presenta una interfaz con widgets de puntuación, señales de jefe y mecánicas de combate completas. Se destaca que el valor real de Goals reside en tener una “estrella del norte” o meta clara que permita al agente trabajar de forma independiente. El uso de la aplicación de escritorio de Codex facilita la visualización de los activos generados en línea, ofreciendo una alternativa visual a las interfaces de terminal puras.

Community Posts

View all posts