Agent Orchestrator 0.12.0
80 commits desde 0.11.2. La app de escritorio ahora habla ocho idiomas, estrena una nueva paleta de colores y te permite fijar sesiones y elegir un revisor por sesión. La app móvil ganó temas y dictado con pulsar para hablar. Los contenedores que inicia una sesión se limpian cuando la sesión muere.
Cubre todo lo publicado desde v0.11.2.
Si usas macOS, pasa directamente a 0.12.1 o una versión posterior. Esta build filtra descriptores de archivo y rompe la vista Archivos y la creación de tareas tras unas horas de uso.
0.11.0 se trató de que los cimientos aguantaran el peso. 0.12.0 es lo que se construyó encima: la app ahora habla ocho idiomas, la barra lateral y la configuración funcionan como esperarías, y desapareció un tipo de fallo que podía borrar todas las sesiones de tu tablero.
Esta versión suma nuevas capacidades al producto y mejoras de fiabilidad sin romper los flujos de trabajo existentes.
Lo más destacado
La app habla ocho idiomas
La app de escritorio ahora tiene una capa de localización real, construida sobre i18next, con el idioma elegido en Settings > General y guardado en ~/.ao/ui-settings.json. El chino simplificado llegó primero y cubre la estructura de la app, la barra lateral, el tablero, la configuración, los diálogos, las pestañas del inspector, la paleta de comandos y los textos del terminal. Le siguieron japonés, coreano, español, francés, alemán y portugués de Brasil, junto con un README en cada idioma. El inglés sigue siendo el idioma predeterminado y de respaldo, así que un texto sin traducir se muestra en inglés en lugar de como una clave. (#3465, #3541)
Móvil: temas, hojas nativas y pulsar para hablar
La app móvil ya no es solo oscura. Incluye paletas clara y oscura, además de una preferencia "system" que sigue al sistema operativo en lugar de quedarse con lo que leyó al abrir. La estructura de la app se reconstruyó con hojas nativas, y el tablero de sesiones se divide según el runtime terminado en lugar del estado finalizado.
También tiene dictado con pulsar para hablar. Mantén presionada la tecla del micrófono en el editor para hablar, suéltala para insertar o desliza hacia arriba para dejarla fija y dictar sin manos. El reconocimiento se hace en el dispositivo (iOS SFSpeechRecognizer, Android SpeechRecognizer), así que no hace falta clave de API ni hay costo por minuto, y está orientado al vocabulario típico de los prompts para agentes, de modo que obtienes "git" y "npm" en lugar de "get" y "MPM". La transcripción llega al editor como un borrador editable en lugar de enviarse, porque la conversión de voz a texto entiende mal el código con la frecuencia suficiente como para que el envío automático no sea seguro. Las ráfagas mantenidas se van sumando, así que varias pulsaciones arman un solo prompt.
Además, un ícono de app con Liquid Glass igual al de la build de escritorio, y una corrección del puerto LAN predeterminado, que apuntaba al puerto del daemon solo de loopback en lugar del puente móvil en 3011, por lo que una instalación nueva no podía conectarse sin editarlo a mano. (#3399, #3400, #3304, #3494)
Una nueva base de colores
El renderer pasó a una paleta de tokens de diseño en oklch, con Geist como fuente de la UI y los alias de color de shadcn mapeados sobre ella, en sustitución de los valores fijos en toda la biblioteca de componentes. El estado de las sesiones ahora tiene una paleta coherente en todos los lugares donde aparece: trabajando es azul, te necesita es naranja, en revisión es amarillo y listo es verde. (#3421)
Fija las sesiones a las que siempre vuelves
Las sesiones se pueden fijar en una sección Pinned en la parte superior de la barra lateral, guardada en el servidor para que la fijación sobreviva a un reinicio. La barra lateral también se puede contraer: Pinned y Projects se pliegan por separado, y un clic en el ícono de carpeta de un proyecto lo expande o contrae sin tener que cambiar a él primero. (#3511, #3310)
Elige el revisor por sesión
El agente revisor era una única configuración para todo el proyecto. Ahora puedes elegir uno para una sesión concreta, y ejecutar esa ronda no cambia lo que usa ninguna otra sesión del proyecto. La pestaña Revisiones también lista todas las rondas registradas de la sesión, en lugar de solo la ejecución actual y la anterior de un PR, así puedes comparar lo que dijeron dos revisores distintos. Una revisión rechazada, cuando el daemon reutiliza una ronda existente en lugar de ejecutar una nueva, ya no se informa como exitosa. (#3477)
La configuración se abre como ventana modal
La configuración general y la del proyecto se abren sobre el tablero en lugar de llevarte a otra pantalla, con una barra lateral para General, Updates, Developer y Help. Esc o un clic afuera la cierra, y vuelves a donde estabas. (#3497)
Notificaciones sobre las que puedes actuar
Cuando una sesión te necesita y la ventana no tiene el foco, el dock de macOS rebota, la barra de tareas de Windows parpadea hasta que vuelves, y el contador de notificaciones sin leer se mantiene sincronizado en macOS, Windows y Linux.
Dentro del panel, las filas completas son clicables y no solo el texto del título, y desaparecen las pestañas manuales Unread/All y la opción de marcar como leída. Las notificaciones ahora registran dos cosas independientes: si ya la viste (se borra al abrir el panel) y si el problema de fondo sigue abierto (solo lo escribe el ciclo de vida). Una notificación que ya leíste sigue en la lista mientras lo que informó no esté resuelto, y se cierra sola cuando la sesión sale del estado de espera de respuesta, termina, o el PR se fusiona o se cierra. Las transiciones que ocurrieron mientras el daemon estaba caído se vuelven a comprobar al arrancar. (#2534, #3296, #3495, #3558)
Acciones en la paleta de comandos y un ícono en la barra de menús
Cmd/Ctrl+K ahora incluye acciones de sesión, no solo navegación, y el editor de tareas detrás de Nueva tarea se extrajo para que la paleta pueda lanzar trabajo con la misma UI. En macOS también hay un ícono de atención en la barra de menús para las sesiones que te están esperando. (#3531)
Los contenedores que inicia una sesión se limpian
Los contenedores Docker que lanzó una sesión se eliminan cuando esa sesión llega a un estado terminal, incluso cuando falla o recibe SIGKILL, y no solo cuando la terminas explícitamente. Etiqueta un contenedor con ao.session=$AO_SESSION_ID para que se recoja, o con ao.spare=true si es infraestructura compartida que debe sobrevivir a la sesión. Las llamadas a Docker tienen un timeout, y si un proyecto no se puede cargar, se opta por no eliminar nada. (#3153)
Archivos y diffs
El panel Archivos reemplazó el botón de búsqueda conmutable y la etiqueta con la cantidad de archivos por un campo de búsqueda siempre visible, quitó el botón de recargar (la lista ya se actualiza sola) y reconstruyó la lista como un acordeón con un contador de archivos en vivo en la pestaña. El visor de diffs transmite los cambios del workspace a medida que ocurren, tiene un selector de diseño más claro y feedback en línea por archivo, y se expande correctamente en la vista maximizada. Los diffs del workspace ahora también tienen en cuenta la base, así que una sesión hija compara contra la rama de la que realmente salió en lugar de una base fija. (#3466, #3503, #3492, #3369, #3214)
Fiabilidad
Una sola caída ya no vacía tu tablero. Esta era la gran corrección (#3475). Tres errores distintos podían archivar todas las sesiones a la vez. El cierre de las previews mataba por grupo un PID suelto sin volver a verificar que siguiera perteneciendo al proceso que había lanzado, y un número de PID reciclado se llevaba por delante una familia de procesos ajena; como un servidor tmux es líder de su propio grupo, una sola terminación de grupo obsoleta destruía todas las sesiones. Un sondeo de tmux con "no server running" se interpretaba como la muerte de cada sesión, cuando no dice nada sobre ninguna sesión concreta, así que un tropiezo del servidor archivaba el tablero. Y una migración quemada devolvía errores 500 que el tablero trataba como sesiones inexistentes. Los sondeos de actividad ahora informan un resultado no concluyente en lugar de dar la sesión por muerta, el proceso de limpieza se niega a cerrar una ronda en la que la mayor parte del tablero aparece muerta a la vez, y el registro de migraciones se repara solo en historiales que ya estaban quemados. (#3491, #3598)
Orquestadores. Ya no se pueden crear orquestadores activos duplicados para el mismo proyecto, ao session ls muestra las sesiones de orquestador ocultas y cuenta las terminadas ocultas en lugar de descartarlas en silencio, y se revirtieron los mensajes automáticos de reactivación del orquestador tras comprobar que generaban más ruido que utilidad. (#3397, #3393, #3394)
Agentes. Droid pasa la configuración de modelo específica de cada rol a través de su archivo de configuración, que se escribe en el directorio de datos en lugar de en un directorio temporal. Los prompts de Grok se entregan cuando su TUI termina de arrancar, en lugar de enviarse a un terminal que todavía no escucha, y su terminal hace scroll con la rueda. El harness de prueba falso interno ya no aparece en los selectores de agentes. (#3156, #3534, #3533, #3518)
Navegador. La selección de anotaciones se bloquea mientras hay un prompt en curso para que un clic no la redirija a mitad del envío, las vistas nativas ya no se pintan sobre la app cuando están ocultas, la edición de la URL funciona en el navegador maximizado en macOS, la insignia del selector de elementos salió del diálogo de anotación, y salir de una sesión y volver ya no restablece una URL de preview de la que ya habías navegado. (#3232, #3295, #3488, #3464, #3538, #3370)
Escritorio. El actualizador automático registra los 404 de manifiestos de versión faltantes en lugar de mostrar un diálogo que te pide revisar un token de auth que no tienes. Al arrastrar la barra lateral y el inspector, se detienen en su ancho mínimo en lugar de cerrarse de golpe. El daemon ignora SIGPIPE cuando la salida está cerrada. Las secciones PR y Completion del inspector se mantienen ocultas cuando no tienen contenido, y se deduplican los resúmenes de PR repetidos. Junto con eso, una ronda de correcciones visuales: navegación de la barra de título alineada con los botones de ventana de macOS, pulido de la barra de pestañas del terminal, líneas finas en la configuración y el archivo, padding de la barra superior del terminal y selección de texto desactivada en la estructura de la app y en las páginas de marketing. (#3012, #3478, #3193, #3325, #3250, #3505, #3480, #3507, #3556, #3508, #3520)
Bajo el capó
La telemetría ganó un interruptor de apagado en tiempo de ejecución: AO_TELEMETRY_DISABLED_EVENTS silencia flujos por nombre (con coincidencia por prefijo usando *) sin publicar una versión, y los flujos silenciados se siguen guardando en SQLite local para poder depurarlos. Los eventos del daemon llevan la versión, se registran los eventos de actualización, se reforzaron los controles de PostHog y las pruebas verifican que la captura automática está desactivada. La CI ahora genera un .rpm de Linux junto al .deb.
En el sitio: la documentación se publica también como Markdown, con toda la jerarquía expuesta en llms.txt; se agregaron páginas comparativas de agentes; el tablero del hero, la demo de delegación y el mockup móvil se reconstruyeron para reflejar cómo se ve realmente la app de escritorio, y se publicó el CTA de la beta de iOS. Se eliminaron los datos estructurados de Organization duplicados y las señales de contenido ahora se aplican a los crawlers permitidos. (#3401, #3388, #3406, #3395, #3363, #3438, #3344, #3430, #3496, #3428, #3429, #3500, #3521, #3522, #3144, #3367, #3365, #3389)
Cómo actualizar
GitHub Releases y Homebrew son las vías de instalación compatibles. Las instalaciones existentes se actualizan en el lugar. Si una actualización anterior dejó tu registro de migraciones en mal estado, 0.12.0 lo repara al arrancar en lugar de fallar el inicio.
Lista completa de cambios: https://github.com/OrchestratorInc/agent-orchestrator/compare/v0.11.2...v0.12.0