←Blog

Pídele un feature a tu repo desde la terminal, sin abrir el chat

¿Cómo delega tu agente de código un cambio largo sin que dejes la terminal? Con un CLI que pide, firma y mezcla, que espera con tope y sale con códigos claros.

7 min de lecturaFixter
  • CLI
  • software factory
  • agentes de código
  • Claude Code
  • automatización
Ilustración de un fantasma verde con casco que corre en una moto de luz estilo Tron saliendo de la pantalla de una terminal retro hacia una fábrica de neón, mientras un fantasma amarillo con lentes mira desde el techo
Ilustración de Ghosty Studio

Un agente de código en la terminal, como Claude Code o Codex, es bueno para lo que pide ida y vuelta con la persona: explorar un bug, ajustar un componente, probar una idea. Ese mismo agente es mala opción para un cambio largo y aislado, porque ocupa la sesión durante una hora y llena el contexto con pasos que a nadie le interesa revisar.

Desde la versión 0.72 del CLI de Ghosty, la terminal puede delegar ese cambio largo a la Software Factory: dos agentes que planean, construyen y revisan en su propia caja de trabajo. Este post muestra el flujo con comandos reales y el diseño que lo hace seguro para que un agente de código lo maneje solo.

La instalación son dos comandos y un login en el navegador

El paquete es @ghostystudio/cli, versión 0.73.0, y pide Node 22 o superior.

bash
npm i -g @ghostystudio/cli && ghosty login

Sin instalación global también funciona:

bash
npx -y @ghostystudio/cli login

ghosty login abre el navegador con OAuth2. Si el agente de código corre el login, ghosty login --json imprime primero una línea con la liga, y el agente se la pasa a la persona en el chat. En una máquina remota o en CI, ghosty login --device da una liga y un código.

Para que el agente de código aprenda los comandos, hay una skill:

bash
npx skills add https://www.ghosty.studio

Conectar el repo dice qué le falta para recibir agentes

Un repo se conecta a un room de Ghosty Teams. Con --create, el room se crea si no existe:

bash
ghosty use tu-espacioghosty factory rooms connect tu-org/tu-repo --room tu-room --create# ✓ Creé #tu-room y le conecté tu-org/tu-repo#   listo para agentes: nivel 1/3 (5/9) · falta: ci, codeowners, dependabot, protected

La línea «listo para agentes» es la parte útil para cualquier equipo. La calificación revisa nueve condiciones y en este ejemplo faltan cuatro: CI, archivo CODEOWNERS, Dependabot y rama principal protegida. Un repo sin CI le pide al agente que se revise a ojo. Un repo sin rama protegida deja que cualquier push llegue a producción.

rooms connect también revisa que la GitHub App de quien conecta vea el repo. Si la GitHub App no tiene acceso, el CLI da la liga para concedérselo.

Un pedido se escribe como un ticket: objetivo, motivo y criterio de cierre

bash
ghosty factory run "Agrega exportar citas a CSV desde la agenda. Lo pide soporte para conciliar cobros. Queda cuando el botón descarga un CSV con fecha, cliente y monto, y hay una prueba que lo cubre" \  --repo tu-org/tu-repo --wait# ✓ Enviado a @plan en #tu-room# 10:42 @plan está escribiendo el plan# 10:46 #31 plan listo, espera tu firma

factory run publica el pedido en el room conectado al repo, a nombre de quien llama, igual que si la persona lo escribiera en el chat. El plan, las firmas y la tarjeta son los mismos.

La ayuda del CLI recomienda escribir el pedido como un ticket: el objetivo, el porqué y cómo se sabe que quedó. La última parte es la más importante. El agente que planea convierte esa frase en el criterio de aceptación, y el agente que revisa aprueba o rechaza contra ese criterio.

Firmar exige la versión del plan que leíste

Con el plan listo, la persona lo lee y lo firma:

bash
ghosty factory runs show 31 --fullghosty factory runs approve 31 --plan-version 1 --yes

approve exige --plan-version. Si el agente que planea entregó otra versión mientras la persona leía, la firma se rechaza. El mismo patrón sirve para cualquier API que reciba aprobaciones: la aprobación va atada a la versión exacta que se revisó, nunca a «lo que haya en ese momento».

Si el plan no convence:

bash
ghosty factory runs changes 31 --note "Sin librería nueva para el CSV; usa lo que ya hay"

Esperar tiene tope y el código de salida dice qué pasó

bash
ghosty factory runs watch 31ghosty factory runs merge 31 --yesghosty factory runs card 31

--wait y watch regresan cuando el pedido necesita a una persona (firmar el plan, decidir tras un escalado, mezclar el PR) o cuando termina, e imprimen el siguiente comando. El tope por default es --timeout de 1800 s. Al vencer, el comando sale con código 1.

Los códigos de salida del CLI son cuatro:

CódigoSignifica
0Bien.
1Error de la API.
2Uso incorrecto.
3Sin sesión.

Con --json, la salida estándar lleva sólo JSON y el error del servidor llega con su mensaje y una pista. Un agente de código que llama al CLI decide su siguiente paso por el código de salida, sin interpretar texto.

Cada acción queda en la bitácora con el nombre de quien la hizo

Cualquier miembro del espacio puede pedir, firmar y mezclar. Cada acción se registra en la bitácora de auditoría con su nombre: factory.run, factory.run_approve y factory.run_merge. Cuando un agente de código firma en nombre de una persona, el registro sigue apuntando a esa persona, porque el CLI usa la sesión de esa persona.

El mismo pedido se firma desde el teléfono

La app de Ghosty para iPhone tiene una pestaña Fábrica. La pestaña aparece sólo si alguno de tus espacios tiene pedidos, y su número en ámbar cuenta los pedidos que esperan una decisión tuya. Un pedido lanzado desde la terminal aparece ahí con su repo, su etapa, su PR, el tiempo que lleva y lo que ha costado en USD.

La lista se ordena en tres grupos: Te toca, Trabajando y Recientes. Dentro de cada pedido, una barra muestra en qué etapa va (plan, aprobación, construcción, revisión y PR), y debajo están el plan en markdown, lo que encontró la revisión y la bitácora. Las mismas decisiones del CLI están en botones: firmar el plan vN, pedir cambios, otra vuelta, replanear y mezclar, cada una con una confirmación antes de ejecutarse.

Cuando la fábrica necesita tu firma, llega una notificación push que abre directo el pedido. El flujo práctico queda así: pides desde la terminal con ghosty factory run, cierras la laptop y firmas el plan desde el teléfono cuando llega el aviso.

Lo que salió mal se diagnostica desde la misma terminal

Un pedido puede atorarse. runs show --timing dice en qué se fue el tiempo:

bash
ghosty factory runs show 13 --timing# reloj: 4.2 h = trabajando 71.8 min · esperando a una persona 3.0 h · lo demás (CI, colas) 1.3 min

En ese pedido de ejemplo de la documentación, el trabajo de los agentes sumó 71.8 min y la espera por una persona sumó 3.0 h. La lectura honesta es que el cuello de botella de ese pedido fue la firma humana, no el modelo. El mismo reporte lista los comandos que tardaron 60 s o más; en el ejemplo, un comando de espera del constructor tardó 10.3 min.

runs why explica por qué falló un pedido. Antes de buscar atascos, runs why cruza los criterios del plan aprobado con la evidencia. Si el revisor aprobó un criterio «en la preview» sin preview lista, el diagnóstico sale arriba como approved_unmet_criterion. La categoría existe porque el 16 de octubre de 2026 un PR se aprobó sin la preview que exigía su plan y rompió las reservas de una app en producción.

runs stats resume la fábrica del espacio:

bash
ghosty factory runs stats --since 30d

El resumen trae porcentaje mezclado, mediana hasta el PR, vueltas de revisión y costo por PR mezclado.

Qué conviene copiar aunque no uses este CLI

Si estás armando un CLI para que lo manejen agentes, estas decisiones nos han funcionado:

  1. Toda espera lleva tope. Un --wait sin límite deja colgada la sesión del agente.
  2. Códigos de salida distintos para error de API, uso incorrecto y sesión vencida. El agente reacciona distinto a cada uno.
  3. --json con stdout limpio y avisos a stderr.
  4. Cada salida imprime el siguiente comando. El agente no tiene que adivinar el paso que sigue.
  5. Las aprobaciones llevan versión. Firmar algo distinto a lo que se leyó debe fallar.
  6. Cada acción con efecto queda auditada con el nombre de la persona dueña de la sesión.

En resumen

Delegar un cambio largo desde la terminal deja libre la sesión del agente de código para el trabajo que sí pide conversación. El flujo es conectar el repo, pedir con un criterio de cierre claro, firmar la versión exacta del plan, esperar con tope y mezclar. Lo que hace seguro que un agente maneje ese flujo son decisiones de diseño verificables: tope en cada espera, códigos de salida distintos, JSON limpio, aprobaciones atadas a una versión y bitácora con nombre.

Pruébalo gratis hoy

Sin código. Sin complicaciones. Crea tu agente y ponlo a trabajar en minutos.

Ghosty ® 2026. Todos los derechos reservados.