Registro de cambios

Todas las cambios importantes en VelaTerm, del más reciente al más antiguo.

v0.1.91 es la primera versión pública; los números de versión anteriores fueron iteraciones internas y no están incluidos.

v0.1.108

Último
  • Vista de conversación experimental para Claude, Codex y OpenCode, con respuestas en streaming, razonamiento, detalles de herramientas, permisos y formularios de preguntas. Las configuraciones nuevas siguen usando la vista de terminal por defecto.

  • Los controles de conversación ofrecen ajustes de modelo, cola de mensajes, intervenciones, autocompletado de archivos e imágenes adjuntas según las capacidades del motor.

  • La búsqueda en conversaciones, los enlaces de archivos, las acciones sobre imágenes y las fuentes independientes facilitan la lectura. El historial remoto se carga progresivamente y los detalles de herramientas, bajo demanda.

  • Los recibos de envío permiten cotejar los resultados tras una desconexión. Los envíos inciertos quedan pendientes de confirmación, sin reenvío automático.

  • Los nuevos comandos vrefer y vsearch leen y buscan en otras sesiones; vrefer --ask delega la lectura a un agente. vorch y vstat añaden coordinación de múltiples agentes y consulta de estados.

  • Las entradas de memoria admiten etiquetas, edición directa, protección de cambios sin guardar y ajustes de organización. Mejoran los filtros y la selección al importar historiales, así como la navegación del grafo.

  • El cliente de uso compartido público admite vinculación de cuentas y dispositivos, acceso limitado a sesiones AI y conexiones de retransmisión cifradas. No admite todavía imágenes subidas por invitados ni formularios MCP complejos.

  • Los ID de reanudación de Codex se comprueban con el historial persistido. Si se confirma que falta, se muestra un error explícito en vez de iniciar una sesión vacía; sigue siendo posible reconectar terminales en ejecución.

  • La reversión depende del motor: Codex solo restaura la conversación, sin restaurar archivos. El manejo del alcance y las comprobaciones previas del directorio en OpenCode siguen teniendo limitaciones conocidas.

  • Los cambios de versión conservan las versiones bloqueadas de las dependencias. La validación de instalación y actualización multiplataforma y de integración AI real sigue pendiente; las comprobaciones automatizadas no la sustituyen.

v0.1.107

Último
  • 🧠 Memoria global (experimental): Claude o Codex convierte tus conversaciones en una wiki compartida organizada por temas
  • 🕸️ Grafo de código (experimental): indexa un directorio de trabajo, recorre las relaciones entre símbolos y vincúlalas con tus memorias
  • 🔎 Los agentes pueden consultar código y memoria durante una sesión con vknowledge
  • 🖥️ SSH puede reflejar la app de escritorio remota: las mismas pestañas, divisiones y sesión activa en ambas máquinas
  • 🪟 Las máquinas remotas por SSH ya pueden ser Windows
  • 📥 Importa las sesiones de Codex, Claude y OpenCode que ya existen en una carpeta de proyecto
  • 🤖 Nuevo agente: OMP
  • 🎚️ vspawn permite elegir el modelo y el nivel de razonamiento de una sesión hija
  • 🌿 vspawn-tree funciona en colecciones, y las sesiones de worktree en ejecución muestran un icono de rama
  • 🔤 La búsqueda prioriza palabras completas y resalta exactamente lo que ha encontrado
  • 🖱️ Cierra una pestaña con un clic del botón central
  • ⌨️ Navegadores en macOS: ⌘D y ⌘⇧D dividen el panel
  • 💬 La escritura con IME ya no desplaza la vista y el cursor se ve mientras compones
  • 🪓 Una división hecha desde el menú solo afecta a la ventana con el foco, y cada división queda registrada en logs/split.log
  • 📁 El selector de carpetas remoto conserva la ruta que escribes
  • ℹ️ Panel de información: hora de inicio y tiempo en ejecución en la misma fila, con la carga media en macOS
  • 🔑 Los campos de contraseña ya no muestran el botón de revelar propio del navegador

v0.1.106

Último

Espacio de trabajo

  • La barra lateral ahora tiene colecciones: contenedores de nivel superior que no están vinculados a una carpeta en el disco. Hay sesiones que nunca han pertenecido a un repositorio, como sesiones remotas, páginas del navegador o una terminal abierta solo para probar algo. Hasta ahora, el único lugar donde meterlas era dentro de un proyecto, donde quedaban fuera de lugar. Una colección es una fila independiente con nombre propio y sin ninguna carpeta asociada en disco. Al no haber una raíz de proyecto, las acciones que no aplican se ocultan desde el principio en vez de fallar después: "New Worktree Session", "Move to Worktree…" y el selector de worktrees en el cuadro de diálogo de nueva sesión quedan ocultos en las colecciones en lugar de dar error al hacer clic. En su lugar, el cuadro de diálogo de nueva sesión incluye un campo Working directory que apunta por defecto a tu carpeta personal, acompañado de un selector de carpetas nativo en la app de escritorio. Las sesiones que se abran sin especificar un directorio ahora arrancan en tu directorio personal en vez de heredar la ruta de inicio de la aplicación (que en macOS era /).

  • El panel de recursos (Resources) muestra todo el equipo, no solo la sesión actual. Antes, el panel solo mostraba el uso de CPU y memoria del árbol de procesos de la propia sesión, por lo que resultaba imposible saber si la sesión estaba consumiendo todos los recursos o si la máquina ya venía saturada. Ahora el panel se divide en THIS SESSION y SYSTEM. La sección SYSTEM incluye barras de progreso para CPU, memoria y swap (que cambian a color ámbar al superar el 70 % y a rojo por encima del 90 %), junto con una métrica específica de cada plataforma: presión de memoria en macOS, promedios de carga normalizados por cantidad de núcleos en Linux, y ninguna en Windows (que no dispone de una métrica equivalente). Si solo te interesa tu sesión, desmarca "system" en la cabecera del panel: las filas del sistema desaparecerán y el muestreo en segundo plano se detendrá por completo. Esta preferencia se guarda y se aplica al panel de todas las sesiones.

  • Windows y Linux incorporan una barra de menús accesible con la tecla Alt. macOS cuenta con menús nativos del sistema, pero en Windows y Linux antes solo se podía acceder a los ajustes, la comprobación de actualizaciones y la división de paneles a través del icono de la barra de título. Ahora, pulsar y soltar la tecla Alt por sí sola muestra u oculta una barra de menús. Las combinaciones de teclas con Alt se mantienen intactas: como Alt funciona como prefijo Meta en las terminales, atajos como Alt+B y Alt+F se siguen enviando directamente a la shell; únicamente la pulsación de Alt en solitario, que no envía nada a la terminal, abre el menú. La barra incluye File (ajustes, buscar actualizaciones), Terminal (nueva terminal, dividir a la derecha, dividir abajo) y Help (sitio web, feedback, compartir), mostrando los atajos según tus combinaciones de teclas personalizadas. Permite navegar tanto con el ratón como con el teclado: pulsar Esc cierra el menú abierto, luego oculta la barra y devuelve el foco a la terminal.

  • La opción "Clear notification badges" del menú borra un contador que no se podía quitar de ninguna otra forma. El contador del dock suma las sesiones no leídas y las tarjetas de confirmación de spawn sin responder. Sin embargo, el botón de limpiar de la barra lateral solo aparecía cuando había sesiones no leídas y solo servía para limpiar esas sesiones. Si quedaba suelta una tarjeta de confirmación sin responder —por ejemplo, de una ventana cerrada o de una sesión eliminada donde la tarjeta ya no se podía dibujar—, el icono del dock se quedaba mostrando un 1 sin forma de quitarlo. La nueva opción de menú marca todas las sesiones como leídas, resuelve como rechazadas todas las solicitudes de spawn pendientes y restablece directamente a cero el contador del sistema operativo. Esto es especialmente importante en macOS, que conserva el contador del dock incluso tras reiniciar la aplicación.

  • La ventana ya no se congela cuando los comandos leen archivos o esperan respuestas del sistema. Los comandos síncronos de Tauri se ejecutan en el hilo principal, congelando la interfaz de usuario durante todo el tiempo que tardan en completarse. Una auditoría de los 43 comandos reveló que 13 de ellos realizaban operaciones de entrada/salida (I/O) en el hilo principal: solicitar permisos de notificación en macOS podía bloquear la app hasta un minuto esperando la confirmación del usuario; leer grabaciones de sesiones largas recorría decenas de megabytes en bloques de 64 KB; pegar capturas de pantalla escribía directamente en el disco; y consultar el directorio de trabajo de una sesión ejecutaba lsof. Ahora los 13 se ejecutan fuera del hilo principal. El procesamiento de las pulsaciones de teclas se mantiene en la ruta rápida (fast path), sin cambios.

Acceso remoto

  • Los hosts ahora muestran qué clientes remotos están conectados. Dado que la duplicación de sesión (mirroring) es bidireccional, un cliente remoto puede reorganizar la distribución del host; sin embargo, antes el host no tenía forma de saber si había alguien conectado, y mucho menos quién. La barra de título ahora muestra un distintivo "Mirrored by N"; al hacer clic en él se despliega una lista de los clientes conectados con sus nombres, direcciones IP y marcas de tiempo de conexión. El nombre del cliente se envía durante el protocolo de enlace cifrado (handshake), recurriendo a "Unnamed" si no se proporciona ninguno.

Agentes de IA

  • El consumo de la cuenta se consulta una sola vez por equipo en lugar de hacerlo por cada sesión. Los límites de uso pertenecen a la cuenta, pero antes el panel Info de cada sesión los consultaba por su cuenta. Tener diez sesiones abiertas provocaba diez solicitudes duplicadas para obtener los mismos datos, lo que solía activar los estrictos límites de tasa de Claude y dejar el panel en blanco. Ahora, un servicio centralizado de consulta en segundo plano mantiene una única instantánea de la que leen todas las sesiones, emitiendo actualizaciones cada vez que los datos cambian. Solo consulta los proveedores que usas activamente —detectados por la presencia de ~/.claude, ~/.codex o ~/.grok/auth.json—, sin acceder al llavero del sistema para evitar avisos de permisos innecesarios. Las instantáneas se guardan en disco para que el panel muestre los datos en caché de inmediato al reiniciar, sin esperar a la primera consulta. Además, al reactivar el portátil tras suspenderlo, los datos se actualizan enseguida en vez de esperar al siguiente intervalo programado. Los fallos de consulta consecutivos aplican un retardo exponencial (backoff) de hasta 8x. En Settings, el intervalo de actualización ahora incluye un interruptor explícito de activación/desactivación junto al campo de tiempo, reemplazando el ambiguo ajuste de 0 segundos.

  • Las actualizaciones de consumo fallidas ahora se marcan claramente como desactualizadas en lugar de parecer al día. Antes, cuando una solicitud de actualización fallaba, el cliente devolvía en silencio la copia en caché mientras registraba la operación como exitosa: avanzaba la marca de tiempo, borraba los errores y reiniciaba el temporizador de backoff. Al alcanzar los límites de tasa, esto hacía que el panel pareciera funcionar con normalidad a pesar de que seguía reintentando cada cinco minutos. Ahora, las solicitudes fallidas conservan los valores en caché pero muestran un distintivo ámbar stale junto al proveedor. Al pasar el cursor sobre él, se muestra una ventana emergente (tooltip) con la hora del fallo, el motivo del error y la antigüedad de la lectura mostrada. La marca de tiempo "Updated" refleja la última sincronización correcta y se respetan las cabeceras retry-after de los servidores con límite de tasa, aunque las actualizaciones manuales seguirán ejecutándose de inmediato.

  • Las cuotas semanales por modelo aparecen en el panel de consumo. Además de los límites generales de la cuenta para 5 horas y 7 días, el endpoint de consumo reporta cuotas semanales específicas por modelo. Antes se ignoraban, por lo que los usuarios que trabajaban con modelos como Fable solo podían ver el consumo total de la cuenta en lugar de la cuota restante específica para ese modelo. Estas filas de desglose ahora se muestran debajo de los totales, organizadas por familia de modelos.

  • Reabrir una sesión de OpenCode restaura su historial de chat. Antes, la aplicación comprobaba si una sesión seguía existiendo mediante opencode session list, que solo busca sesiones dentro del directorio de trabajo actual. Dado que la app de escritorio se ejecuta desde su directorio de lanzamiento (/ en macOS), nunca encontraba los ID de sesiones existentes, lo que provocaba que los intentos de reanudar abrieran silenciosamente sesiones en blanco. Ahora las comprobaciones consultan directamente el ID de la sesión específica y solo la consideran eliminada si el comando lo confirma de forma explícita. Cualquier otro error se trata como indeterminado y la app procede con la reanudación, evitando la pérdida accidental del historial de la sesión.

Interfaz

  • Al escribir con un editor de métodos de entrada (IME) ahora se muestra el texto en composición. En las tres plataformas, el texto compuesto mediante un IME (como Pinyin o Kana) era invisible hasta que se confirmaba pulsando Enter. Esto se debía a una regla CSS personalizada: xterm renderiza el texto en composición dentro de un contenedor superpuesto sin restricciones, donde la restricción right que añadimos (pensada para ajustar líneas largas de terminal) daba un ancho de cero, mientras que overflow: hidden cortaba el texto por completo. Esa regla se ha eliminado, y lo único que se sigue sobrescribiendo es el esquema de color predeterminado en negro sobre blanco del overlay, que no encaja con ningún tema. Al mismo tiempo se solucionó un problema relacionado: xterm agrandaba su textarea oculta para que coincidiera con el tamaño del overlay y posicionar los candidatos del IME, pero nunca volvía a reducirla, dejando una capa invisible que bloqueaba los clics del ratón y la selección de texto en esa línea.

  • En macOS, los atajos con Ctrl ya no activan las combinaciones de teclas de Command. Antes, las comprobaciones de teclas modificadoras trataban Cmd y Ctrl como intercambiables en macOS. Como resultado, los atajos estándar de terminal entraban en conflicto con los de la aplicación: Ctrl+D (EOF) dividía paneles, Ctrl+W (borrar palabra) los cerraba, y combinaciones como Ctrl+F, Ctrl+T y Ctrl+O eran interceptadas por la aplicación. Al abrirse nuevos paneles de forma silenciosa, a menudo parecía que aparecían de la nada. Ahora, la aplicación de escritorio en macOS usa exclusivamente Cmd para los atajos, mientras que las demás plataformas (y los navegadores web conectados a un Mac) usan exclusivamente Ctrl.

  • Los menús desplegables ya no se vuelven a abrir de inmediato al seleccionar una opción. Un elemento <label> envolvente propagaba los clics de toda la fila hacia el botón activador, lo que provocaba que el menú desplegable se reabriera en cuanto se seleccionaba una opción.

Correcciones

  • Linux: la AppImage vuelve a arrancar. La AppImage de la versión 0.1.105 fallaba en Ubuntu 22.04 antes de mostrar ninguna ventana, al ser incapaz de iniciar los procesos auxiliares de WebKit. Las herramientas de empaquetado de AppImage reescriben las rutas literales /usr en los binarios como ././ (así conservan la misma longitud y se pueden parchear in situ), lo que requiere que el script de inicio cambie el directorio de trabajo a $APPDIR/usr para que esas rutas se resuelvan. En la 0.1.105, nuestro script de inicio personalizado —introducido para evitar que las variables de entorno se filtraran a las shells secundarias— transfería las variables de entorno pero omitía este cambio de directorio. Ahora el lanzador cambia de directorio correctamente, respaldado por una aserción en tiempo de compilación para prevenir regresiones. Las versiones 0.1.104 y anteriores no estaban afectadas.

  • Windows: las notificaciones vuelven a emitir sonido y hacer clic en una te lleva a su sesión. Antes, las notificaciones de Windows enviaban un identificador de sonido de macOS al plugin de notificaciones. Al no poder interpretar ese nombre, se convertía en silencio, por lo que las notificaciones en Windows nunca emitían sonido sin importar la configuración. Las notificaciones de Windows se habían desviado a través del plugin hace dos versiones como solución temporal a un fallo solucionado en esa misma versión. Ese desvío se ha deshecho: las notificaciones vuelven a transmitirse por el canal nativo, recuperando tanto el sonido como la navegación a la sesión al hacer clic.

  • Windows: los caracteres de dibujo de cajas y bloques quedan alineados. Antes, los marcos de la terminal se renderizaban con una fuente tipográfica alternativa proporcional, lo que generaba distorsiones visuales. Incluso tras solucionar eso, los caracteres de bloque (usados en las barras de progreso y en la mascota de Claude Code) seguían dejando una fina rendija vertical en el borde derecho de cada celda, ya que la fuente alternativa era ligeramente más estrecha que la fuente principal de la terminal. Ahora, ambos rangos de caracteres utilizan un subconjunto integrado de JetBrains Mono, garantizando una coincidencia exacta en el ancho de los glifos.

  • Windows: git funciona en la variante completa de Git Bash. Aunque la instalación completa de Git Bash se completaba con éxito, al ejecutar git en la terminal aparecía el error "command not found", solicitando repetidamente al usuario que instalara la versión completa de Git Bash. Git Bash solo añade mingw64/bin al PATH cuando se le indica en qué árbol de directorios se está ejecutando. Como nuestro lanzador de shell omitía ese parámetro, no se encontraban los binarios ubicados exclusivamente en ese directorio, como git y curl. Además, el diálogo de descarga ahora selecciona el instalador correspondiente a la arquitectura del sistema anfitrión en vez de elegir 64 bits por defecto.

  • Windows: eliminar un worktree funciona y reinstalar los hooks de Kiro ya no los duplica. Antes, los comandos para eliminar worktrees se ejecutaban desde el propio directorio del worktree de destino. Como Windows impide eliminar el directorio de trabajo actual de un proceso activo, la operación fallaba sistemáticamente con un error de permisos; ahora los comandos de Git se ejecutan desde la raíz del repositorio principal. Además, la lógica de detección de hooks comparaba rutas con barras inclinadas hacia adelante (/) con las barras invertidas de Windows (), lo que hacía que la comprobación fallara y se añadieran entradas duplicadas en cada reinstalación.

v0.1.105

Último

Espacio de trabajo

  • El estado de las sesiones, las marcas de no leído y si una sesión sigue en marcha los decide ahora el backend, y todos los clientes ven la misma respuesta. Antes cada cliente lo deducía de lo que le tocaba observar, así que «no leído» significaba en realidad «no leído en esta ventana»: leer una sesión en el navegador dejaba la copia del escritorio sin leer, y el filtro de estado dinámico devolvía esa fila a la lista compartida, donde ni siquiera «Actualizar estado» conseguía quitarla. Además, los eventos de estado solo se registraban una vez que el propio cliente había creado alguna sesión, así que un navegador recién conectado mostraba puntos en las sesiones que él había abierto y nada en el resto. Ahora el backend mantiene un único registro autoritativo por sesión —el agente, su estado, si su proceso sigue vivo y la marca de no leído—, responde a una consulta en bloque cuando un cliente se conecta o se reconecta, y difunde cada cambio a todo el mundo. Los clientes informan de lo que observan; el backend saca las conclusiones. Leer una sesión en el teléfono borra la marca en el escritorio, un navegador recién conectado muestra los puntos correctos en sesiones que nunca ha abierto, y las reglas de arbitraje que vivían en el frontend se han mudado con sus motivos y sus pruebas: un hook que ya ha informado una vez bloquea cualquier cosa deducida de la salida en bruto, la salida continua solo implica «ocupado» en una sesión que tiene agente, no es Codex y aún no tiene un informe autoritativo, y una retención de 1200 ms evita que una tarea recién iniciada la cancele un evento de finalización que llega justo detrás. La lectura de pantalla es la excepción, porque necesita la cuadrícula ya renderizada y esa solo existe en un cliente: el cliente que manda sobre el tamaño del terminal informa de lo que ha leído, y el backend decide si lo acepta; un informe de cualquier otro cliente se rechaza. Si algo de esto se tuerce, poner vlx-arbitration en frontend dentro de localStorage devuelve el arbitraje a la antigua cadena del frontend.

  • Reiniciar una sesión ya no cierra su pestaña en el otro cliente. pty://killed no llevaba ningún dato, así que el otro lado no podía distinguir un reinicio de un cierre: lo trataba todo como un cierre, quitaba el panel y luego reflejaba de vuelta esa disposición. Ahora el evento dice qué cliente ha matado el proceso y por qué, de modo que un reinicio conserva el panel y espera a que llegue el proceso nuevo. Un motivo ausente o desconocido sigue contando como cierre: dejar abierto el panel de una sesión que no va a volver pone un terminal muerto en pantalla, y eso es peor que cerrar uno que estaba a punto de reiniciarse.

  • Un navegador que se conecta a un escritorio que acaba de restaurar su espacio de trabajo ya no arranca de verdad todas las sesiones. Restaurar un espacio de trabajo dibuja tarjetas de marcador de posición en lugar de lanzar procesos, pero esa decisión solo existía en el escritorio; el navegador seguía la disposición reflejada, no podía distinguir «no está en marcha» de «está en marcha, solo que nunca se abrió aquí», y montaba los terminales —y montar uno es lanzarlo—. Ahora una hoja que llega con la disposición de otro dibuja un marcador de posición cuando el backend dice que no hay ningún proceso detrás. Abrir una sesión tú mismo sigue siendo la intención de arrancarla, y un terminal que estás mirando en ese momento nunca se sustituye por una tarjeta cuando su proceso termina, porque quizá aún quieras leer lo que imprimió.

  • Un cambio en los ajustes llega de inmediato a los demás clientes. El backend siempre ha guardado los ajustes autoritativos, pero los cambiaba sin avisar a nadie, así que el otro cliente se enteraba en su siguiente arranque. En una conexión remota eso es más que una discrepancia visual: desactivar «ampliar el filtro de estado dinámicamente» en un cliente no servía de nada mientras otro seguía añadiendo filas a la lista compartida, y el cliente con el límite de pestañas vivas más bajo iba expulsando las pestañas de fondo de todos los demás. Ahora escribir un ajuste difunde qué clave ha cambiado, y cada cliente vuelve a leerla por el mismo camino que usa al arrancar, así que siguen aplicándose las reglas que ocultan los valores protegidos a los clientes remotos: la difusión lleva solo nombres de clave, nunca valores. Los teléfonos, que antes ni enviaban ni recibían ajustes, participan también ahora.

  • Un navegador espera a la disposición reflejada antes de restaurar la suya. Una ventana remota tiene dos fuentes de disposición —la de su propio localStorage y la que el anfitrión le envía en modo espejo—, y la que llegaba primero acababa sobrescrita por la otra. Poner la local por delante costaba más que un parpadeo: montar una hoja de terminal lanza un proceso real, y en una sesión cuyo proceso ya no existía eso significaba arrancar un shell que nadie iba a mirar, y que además se quedaba ahí, porque un navegador desacopla sus terminales en lugar de matarlos. Ahora el navegador espera a que se asiente la primera alineación antes de restaurar nada, como mucho dos segundos; si el backend va lento o no responde, recurre a la disposición local en lugar de quedarse con una ventana vacía. Los teléfonos, y cualquier cliente con el reflejo desactivado, pasan de inmediato.

Acceso remoto

  • Una conexión SSH puede activar el modo espejo para el servicio que arranca. El interruptor vive en el panel de acceso remoto, pero SSH arranca un servicio sin interfaz en la máquina remota y allí no hay ningún panel donde hacer clic. Mantén pulsada la tecla Option al pulsar «Connect remote» y el formulario de SSH ofrece ahora una casilla «Mirror UI across clients», desactivada de serie. El valor viaja con la conexión y se guarda en la memoria del servicio en lugar de escribirse en la base de datos de la máquina remota: cuando además reutilizas la base de datos del propio escritorio remoto, una conexión SSH no debería cambiarle a nadie un interruptor de su panel sin avisar. La elección se recuerda por host, así que escoger la misma máquina del historial la trae de vuelta. Reutilizar un servicio que ya está en marcha exige ahora que coincidan la versión, el modo de datos y el modo espejo: si difiere cualquiera de los tres se sustituye el servicio antiguo, lo que termina las sesiones que corrían en él, y por eso esta opción está detrás de Option, junto al interruptor de la base de datos.

  • Un cliente que está siendo reflejado lo dice. Las pestañas y las divisiones de un cliente que sigue a otro se reorganizaban solas sin nada en pantalla que explicara de dónde venía el cambio. Ahora la barra de título lleva un distintivo «Mirrored», con una explicación al pasar el ratón por encima. El anfitrión no lo muestra: él tiene el interruptor.

  • Ahora se pueden mover archivos entre tu equipo y el que ejecuta la terminal. El acceso remoto mostraba los archivos de la otra máquina pero no ofrecía forma de traerte uno ni de dejar uno allí: la única vía era un comando en la terminal. El panel de archivos incluye ahora Descargar en el menú contextual de un archivo y Subir en su cabecera, y arrastrar archivos desde tu escritorio hasta la fila de una carpeta los envía allí. Ambas direcciones usan la misma conexión autenticada que todo lo demás, así que funciona igual desde un navegador en la red local, desde un teléfono y desde una ventana de conexión remota. Las transferencias avanzan por bloques con una cola de progreso bajo el árbol y siguen en marcha mientras miras otro panel. Descargar es un enlace de descarga corriente, del que se encarga el gestor de descargas del propio navegador: escribe en disco sobre la marcha, muestra velocidad y tiempo restante, y puede pausarse y reanudarse, con cualquier tamaño de archivo y en cualquier navegador, también en el teléfono. El enlace lleva un vale emitido para ese único archivo y válido unos minutos, porque este servidor guarda las credenciales en una cabecera y un navegador que abre un enlace no envía ninguna. Una subida se escribe con un nombre temporal y solo se renombra al terminar, de modo que una transferencia interrumpida nunca deja un archivo a medias donde debería haber uno completo; un nombre ya ocupado se rechaza antes de mover nada. Las subidas muestran su velocidad y el tiempo restante, y sobreviven a una caída de la conexión: un bloque fallido espera y reintenta durante alrededor de un minuto, preguntando al servidor hasta dónde llegó realmente su archivo temporal en vez de reenviar un bloque que quizá ya llegó. Al rendirse conserva esos bytes: arrastra el mismo archivo a la misma carpeta y continúa donde se quedó, incluso tras recargar, porque solo cancelar descarta lo ya subido.

Agentes de IA

  • Las sesiones de Antigravity y de Copilot toman su nombre del primer mensaje. Las dos faltaban en el renombrado automático, lo que dejaba filas de «Antigravity 1, 2, 3» en la barra lateral. Los eventos de hook de Antigravity no llevan ningún texto del usuario, solo un id de conversación y una ruta a la transcripción, así que el primer mensaje se lee de la transcripción; el bloque de metadatos que viene detrás se deja fuera del título. Los eventos de Copilot tampoco llevan nombre de evento y se distinguen por su forma, así que un cuerpo con un prompt y sin nombre de herramienta se toma ahora como un envío, lo que deja fuera —correctamente— tanto el prompt con el que se inicia una sesión como las llamadas a herramientas.

  • Una sesión de Antigravity vuelve a abrirse con su historial. Reanudar necesita el id de conversación, y el analizador que extrae el id de sesión de los argumentos de inicio no reconocía cómo lo escribe Antigravity, así que --conversation=<id> nunca tenía a qué apuntar y toda sesión reabierta salía vacía.

  • vspawn --yes crea la sesión sin la tarjeta de confirmación. Quien tenga activado «confirmar antes de crear una tarea hija» tenía que pasar por una tarjeta por cada sesión hija de una tanda. El indicador —que también se escribe -y o --no-confirm— se salta la tarjeta en esa llamada concreta e inicia la sesión con los ajustes predeterminados. No cambia el ajuste en sí, así que la siguiente vez que se cree una sin él vuelve a preguntar.

  • El campo de modelo de la tarjeta de tarea hija acepta lo que escribas. Era un desplegable a secas, así que solo podían elegirse los modelos de la lista, y un agente entiende muchos más identificadores que esos: nombres con fecha como claude-opus-4-6, nombres con prefijo de proveedor, alias configurados en local. Ahora es un campo de texto con los modelos conocidos colgando de un desplegable a su lado, a modo de atajo. La lista es una sugerencia, no una lista blanca: se pasa exactamente lo que escribas, un campo vacío significa que no se pasa ningún --model, y la lista se filtra mientras escribes y se pliega cuando un identificador personalizado no coincide con nada.

Interfaz

  • Un solo desplegable, usado en todas partes. Los desplegables repartidos por la aplicación se habían copiado del mismo código más de una docena de veces y luego habían ido separándose: tres fondos de panel, cuatro sombras, tres colores al pasar el ratón por encima, alturas de disparador de 26, 28 y 32 píxeles, y marcas de selección en las filas elegidas que solo necesita una lista de selección múltiple. Ahora un único componente sostiene los selectores de rama al fusionar, los de idioma, shell predeterminado y fuente en los ajustes, el selector de agente, los diálogos de worktree, el tipo de agente en las sesiones nuevas y en las restauradas, y el último select nativo que quedaba en el modal de formulario. Trae además control por teclado, que ninguno tenía: flechas para moverse, Intro para elegir, Escape para cerrar sin cerrar el diálogo que hay detrás, Inicio y Fin para saltar. Los dos menús de la barra de estado se comportan igual que antes, y el filtro de estado de la barra lateral conserva sus marcas, porque ahí sí es selección múltiple.

  • La contraseña del panel de acceso remoto puede mostrarse. Era un campo de contraseña pelado, así que no podías ver lo que habías escrito; el botón con forma de ojo existía, pero solo dentro del archivo del propio panel de conexión. Ahora los dos comparten un mismo componente, y el estado de mostrado se restablece al cerrar el panel.

  • El selector de IP ya no parece un control del sistema. Era un select nativo, y WKWebView lo viste con adornos del sistema que quedan mal sobre un panel oscuro: la misma queja que la de los desplegables sustituidos más arriba. Ahora usa el componente compartido, y su etiqueta se acorta a «IP», porque el texto que tiene al lado ya dice para qué sirve.

Correcciones

  • Buscar actualizaciones consulta al servidor todas las veces. Un cliente que se quedaba abierto se quedaba clavado en la primera versión que hubiera visto: si había encontrado la 0.1.101, seguía ofreciendo la 0.1.101 después de publicarse la 0.1.104, y «Buscar actualizaciones» solo volvía a abrir el mismo diálogo, porque el código antiguo salía antes de tiempo siempre que hubiera un aviso pendiente. Ahora cada comprobación es una petición de verdad. Una versión más nueva sustituye el aviso que haya en pantalla, la misma versión o una descarga en curso lo dejan en paz, y un servidor que no informa de ninguna actualización retira un aviso que se ha quedado obsoleto: la versión se retiró, o la instalaste tú mientras tanto. El botón «Descargar manualmente» abre ahora la página de descargas del sitio web; antes te entregaba el paquete propio del actualizador, que se desempaqueta en su sitio y no se puede instalar a mano.

  • Ya no aparece una superposición de error a pantalla completa cuando los terminales se destruyen deprisa. El viewport de xterm programa una sincronización del área de desplazamiento al construirse y otra al reiniciarse, y no cancela ninguna de las dos al destruirse, así que un terminal abierto y cerrado dentro de la misma tarea —que es exactamente lo que hace reconstruir el árbol de sesiones durante una conexión remota— llegaba a ejecutar esas devoluciones de llamada, se encontraba un renderizador ya limpiado y lanzaba un error. El error sale de un temporizador, donde no llegan ni un try/catch ni un límite de error, así que se captura globalmente y se compara de forma estricta: solo se traga como inofensivo, y se anota en el registro de peticiones, aquello cuya pila o mensaje nombre esa sincronización junto con una mención al renderizador o a sus dimensiones. Los fallos de verdad siguen levantando la superposición.

v0.1.104

Último

Agentes de IA

  • La tarjeta de tarea hija ofrece ahora los modelos reales de cada agente, y el indicador de esfuerzo que ese agente entiende de verdad. La tarjeta construía sus argumentos de inicio con --model y --effort para todos, pero solo Claude, Kiro y Antigravity nombran así el esfuerzo de razonamiento: Grok y Zoo lo llaman --reasoning-effort, y Cline lo llama --thinking. Elegir un nivel de esfuerzo para cualquiera de los demás le pasaba a la CLI un indicador que nunca había oído, y la sesión no llegaba a arrancar. Ahora cada agente aporta sus propios nombres de indicador y sus propios valores. El control de modelo sigue lo que cada CLI puede contarnos: a las que saben listar su catálogo (OpenCode, Grok, Crush, Antigravity, Cursor, pi, Kiro) se les pregunta y ofrecen la lista real; las que tienen un conjunto fijo (Claude, Codex, Kimi Code) ofrecen ese conjunto; y el resto te dan un campo de texto con un ejemplo del formato que esperan. Un agente que no esté instalado o en el que no hayas iniciado sesión lo dice, en lugar de quedarse girando para siempre. Elegir «Predeterminado» borra ahora el valor heredado en lugar de dejar el anterior en su sitio, y elegir un nivel de esfuerzo ya no descarta el modelo heredado de la sesión padre.

  • Una tarea hija creada desde una sesión de Kimi Code sigue siendo Kimi Code. Kimi Code faltaba en la lista que usa el camino de creación para heredar el agente del padre, así que sus sesiones hijas volvían en silencio con el agente predeterminado.

Espacio de trabajo

  • Un grupo puede moverse a un worktree después de haberlo creado. El worktree se elegía al crear el grupo y quedaba fijado desde entonces; cambiar de idea obligaba a borrar el grupo y volver a construirlo. Haz clic derecho sobre un grupo y elige «Move to Worktree…» para crear un worktree nuevo, vincular uno existente o reapuntar un grupo que ya esté vinculado. Solo cambia el grupo en sí: las sesiones que ya están dentro conservan el directorio con el que se crearon —una sesión en marcha no puede moverse a otro directorio por debajo de sí misma—, mientras que las sesiones creadas después arrancan en el worktree.

  • El modo espejo abarca ahora todo el árbol de la barra lateral. Compartía la selección y los paneles plegados; el cuadro de búsqueda y los filtros de estado y de marcador se quedaban en local, bajo la idea de que sincronizarlos interrumpe a quien está buscando algo. Ese razonamiento estaba al revés: reflejar significa que las dos ventanas mantienen el mismo estado, no que una repita las pulsaciones de la otra —un filtro que está activo aquí lo está allí—. Lo que de verdad interrumpe a la gente es que los dos lados muestren árboles distintos. Ahora viaja toda proyección de la barra lateral: la disposición dividida, el nombre de cada proyección, su texto de búsqueda, sus filtros de estado y de marcador, y su propio estado de plegado. El formato de la instantánea pasa a la versión 2, y un cliente que ejecute una versión anterior deja de reflejar en lugar de aplicar medio fotograma, así que recarga cualquier ventana que hayas dejado abierta durante la actualización.

Interfaz

  • Cerrar la ventana en macOS hace la misma pregunta que salir. ⌘Q y la entrada del menú pasaban por la confirmación propia de la aplicación, pero el botón rojo de cerrar destruía la ventana sin más — y esa ventana contiene la webview donde vive el diálogo de confirmación. O no obtenías ninguna confirmación, o te salía el respaldo nativo reducido, sin la casilla de «guardar el espacio de trabajo» y con el texto sin traducir. Las tres plataformas mantienen ahora la ventana abierta hasta que respondes.

  • «Guardar el espacio de trabajo» viene marcado de serie, y se queda donde tú lo dejes. Perder una disposición cuesta más que una instantánea que no querías, así que la casilla arranca marcada. Además se le olvidaba: el ajuste se escribía en la base de datos con un retardo de 400 ms, y salir mataba el proceso dentro de esa ventana, así que el siguiente arranque se reconciliaba con el valor antiguo y deshacía tu cambio. Ahora la escritura se vuelca antes de salir, con un techo de 600 ms para que un backend atascado no pueda dejar el botón de confirmar girando. (Aportado por FarhadGSRX.)

  • Las contraseñas del panel de conexión remota pueden mostrarse. Tanto la contraseña de la URL como la de SSH tienen un botón con forma de ojo que alterna entre texto oculto y texto plano. El estado de mostrado es local al campo y se restablece al cerrar el panel, así que nunca queda una contraseña a la vista en pantalla.

  • El distintivo de filtros de la barra lateral cuenta todos los filtros activos. Un filtro de marcador solo encendía el botón sin decir nada más, así que el distintivo podía marcar 1 con dos filtros activos. Ahora suma estados y marcadores, y coincide con las marcas del desplegable; un único filtro de estado conserva su punto de color.

Correcciones

  • Las actualizaciones automáticas en macOS vuelven a funcionar. Los paquetes de la v0.1.103 llevaban entradas acompañantes de AppleDouble (._VelaTerm.app), a las que el actualizador les quita el primer componente de la ruta —dejándola vacía—, y entonces se negaba a desempaquetar el archivo. Afectaba a las dos arquitecturas, así que cualquier usuario de macOS con la v0.1.103 se quedaba atascado ahí. El empaquetado ya no escribe esas entradas.

  • Los controles nativos siguen el tema de la aplicación cuando difiere del del sistema. Aplicar un tema cambiaba los colores propios de la aplicación, pero nunca actualizaba color-scheme, que se fijaba una sola vez al arrancar a partir de la preferencia del sistema y no volvía a cambiar, así que las casillas, los desplegables y las barras de desplazamiento seguían en oscuro bajo una aplicación clara en un sistema oscuro. (Aportado por FarhadGSRX.)

  • Un clon recién hecho vuelve a compilar. El crate de Rust incrusta ../dist en tiempo de compilación, y el comando de desarrollo no lo genera, así que un repositorio recién clonado fallaba al compilar antes siquiera de poder ejecutarse. El script de compilación crea ahora ese directorio cuando falta. (Aportado por FarhadGSRX.)

v0.1.103

Último

Correcciones

  • Las sesiones de Codex en Windows ya no se niegan a iniciar. Cada sesión de Codex fallaba inmediatamente con unexpected argument '--codex-hook' porque la tabla TOML de los hooks de ciclo de vida se pasaba por línea de comandos con espacios y comillas dobles, y codex.cmd instalado por npm reprocesa eso a través de cmd.exe, que elimina las comillas y divide el valor en múltiples argumentos. Ahora se omite la inyección de hooks en Windows; la detección de estado recurre a las heurísticas existentes de notify / screen / busy, que siguen informando estados de reposo y actividad, aunque con menos precisión que los hooks. macOS y Linux no se ven afectados y continúan usando hooks.

  • Se revirtió la corrección del pre-editado IME en Windows de v0.1.102. La corrección que restauró la superposición de composición para la entrada en chino, japonés y coreano también le añadió color de fondo, borde de 1px y bordes redondeados, lo que dibujaba un pequeño recuadro alrededor del texto de pre-edición dentro de la terminal — algo que no debería aparecer ahí. Como el dimensionamiento de la superposición, la geometría del contenedor auxiliar y la limpieza del textarea eran interdependientes, fue necesario revertir todo el cambio. El problema subyacente — escritura a ciegas de CJK en Windows — sigue abierto y se rastrea en el issue #6.

v0.1.102

Último

Agentes de IA

  • Preajustes de agente: varias CLI compatibles conviviendo. Cada tipo de agente estaba atado a un único ejecutable, así que un fork, una compilación nocturna o una segunda CLI que habla el mismo protocolo no tenían por dónde entrar: había que editar los argumentos de inicio de un tipo existente y se perdía el original. Un preajuste define ahora su propio ejecutable, su propio icono y sus propios argumentos de inicio, y aparece en el menú de nueva sesión junto a los tipos integrados. Las sesiones registran con qué preajuste se crearon, de modo que bifurcar una conserva el mismo ejecutable, y un preajuste creado en el escritorio aparece también en los navegadores emparejados y en los clientes remotos, icono incluido, porque el icono viaja como datos y no como una ruta de una máquina concreta. Las sesiones existentes no se tocan: una base de datos de una versión anterior arranca exactamente igual que antes.

  • La tarjeta de tarea hija elige el modelo y el nivel de esfuerzo, y una sola respuesta lo resuelve en todas partes. Cuando un agente pide lanzar una tarea hija, la tarjeta de confirmación ofrece ahora el modelo y —cuando el agente lo admite— el esfuerzo de razonamiento, rellenados a partir de los argumentos de inicio del propio padre, de modo que el caso habitual se resuelve con un solo clic. Cambiar la tarjeta a otro agente vuelve a deducir ambos valores, así que el nombre de un modelo de una CLI ya no puede acabar en la línea de comandos de otra. La tarjeta aparece en todos los clientes conectados y responderla en uno la retira ahora de los demás; la primera respuesta además reclama la tarea en el servidor, de modo que confirmar en el teléfono y en el escritorio dentro del mismo segundo crea un único worktree y una única sesión hija en lugar de dos.

Espacio de trabajo

  • Modo espejo: una misma disposición en todos los clientes. El flujo del terminal siempre se compartió —un PTY, un flujo de bytes—, pero la disposición que lo rodea vivía solo en el almacenamiento del navegador de cada cliente, así que un navegador abierto en la LAN mostraba sus propias pestañas y divisiones, y reorganizar una pantalla no afectaba en nada a la otra. Con el modo espejo activo, las pestañas, las divisiones, la sesión activa, la selección de la barra lateral y los paneles plegados se publican a todos los clientes y todos los siguen. El anfitrión controla el interruptor desde el panel de acceso remoto. Reorganizar en cualquiera de los dos lados surte efecto en el otro; una sesión que sale de la disposición de esta ventana se desacopla en lugar de cerrarse, de modo que seguir a otro cliente nunca termina el proceso de nadie; y aplicar la disposición de otro cliente no le quita el teclado a quien está escribiendo en local. Los teléfonos quedan fuera: la navegación de dos niveles del teléfono es una interfaz de otra forma, y copiar en ella un árbol de divisiones de escritorio no le sirve a nadie.

  • La pestaña Git de la barra lateral derecha se ha convertido en un cliente Git utilizable. Antes solo listaba los archivos modificados. Ahora añade al área de preparación archivos sueltos o grupos enteros y los quita de ella, descarta cambios, escribe un commit (con la opción de enmendar) y muestra el historial con los archivos y los diffs de cada commit, agrupados en secciones plegables de preparados, modificados, sin seguimiento y confirmados. Las rutas se manejan desde la raíz del repositorio, así que una sesión abierta en un subdirectorio actúa sobre los archivos que dice, y un HEAD desacoplado se indica como tal en lugar de mostrar una rama llamada HEAD.

Interfaz

  • ⌘Q hace ahora la misma pregunta que cerrar la ventana. La entrada «Salir» del menú de la aplicación era la del sistema, que termina el proceso sin más: pulsar ⌘Q se saltaba la confirmación de «guardar el espacio de trabajo» que sí muestra el botón de cerrar, así que la misma intención se comportaba de forma distinta según cómo la expresaras. Ambos caminos pasan ahora por una única confirmación. Si la ventana que la muestra se ha recargado o ha fallado mientras tanto, volver a pulsar ⌘Q repite la pregunta y recurre a un diálogo nativo, en lugar de dejar la aplicación sin manera de salir.

  • Las indicaciones de atajos muestran las teclas que de verdad funcionan. Los valores predeterminados cambian según la plataforma, y un navegador se reserva para sí las combinaciones de ⌘/Ctrl con letras —⌘D guarda un marcador, ⌘T abre una pestaña—, así que en macOS los atajos con ⌘ de la propia aplicación nunca llegaban a la página cuando VelaTerm se abría como una URL. Las pestañas de navegador normales usan ahora las combinaciones con Ctrl+Alt en todos los sistemas operativos, mientras que la aplicación de escritorio y las ventanas de conexión remota conservan ⌘. Las ayudas emergentes y la indicación de la pestaña vacía muestran la combinación que esté en vigor, incluida una que hayas reasignado tú, en lugar de una combinación con ⌘ fija en el código; y el terminal bloquea exactamente las combinaciones que la aplicación ha reclamado, de modo que reasignar una acción se lleva esa tecla consigo.

  • Los preajustes de fuente incluyen Nerd Fonts y CJK, y una fuente personalizada que no esté instalada lo dice. La lista de preajustes incorpora las familias Nerd Font y CJK más habituales, y una fuente escrita a mano se muestra de vuelta y se comprueba: si el sistema no la tiene, la página de ajustes lo indica en lugar de recurrir en silencio a una predeterminada que no se parece en nada a la que pediste.

  • Los campos de texto en macOS ya no ponen mayúsculas ni corrigen lo que escribes. Las mayúsculas automáticas, la autocorrección y el corrector ortográfico del sistema se aplicaban a todos los campos de la aplicación, incluidos los nombres de sesión y los campos de comandos, donde «npm» se convertía en «Npm». Ahora están desactivados en todas partes.

Windows

  • Al escribir en chino, japonés o coreano vuelven a verse el texto en composición y la ventana de candidatos. Los dos eran invisibles: escribías a ciegas y solo veías el resultado tras pulsar Intro. La culpa era de dos reglas CSS nuestras: el contenedor que aloja la capa de composición se reducía a cero de ancho, y dentro de él el desplazamiento right de esa capa no resolvía a nada en absoluto. La ventana de candidatos iba detrás, porque el sistema operativo la coloca a partir del rectángulo de esa capa. La capa vuelve a dibujarse y adopta los colores del tema de la aplicación, y el elemento de entrada invisible sobre el que se apoya libera su geometría en cuanto termina la composición, de modo que hacer clic y arrastrar sobre esa zona llega al terminal y no a un elemento vacío que antes seguía tapándolo.

  • La barra de título nativa sigue el ajuste de tema claro u oscuro. La aplicación conserva la barra de título del sistema, y Windows la pinta en claro mientras no se le diga otra cosa, así que una interfaz oscura llevaba encima una franja blanca. Ahora coincide con la aplicación, incluidas las ventanas que se abren después, como las de SSH y las de conexión remota. Elegir «seguir al sistema» devuelve el control al sistema operativo en lugar de fijar un valor.

  • Desaparece el cuadrado suelto del arranque en frío. El plugin de instancia única crea una ventana de mensajes oculta y nunca le daba la transparencia que su propio estilo prometía, así que Windows a veces agrandaba esa ventana de tamaño cero hasta su mínimo y pintaba un cuadradito durante el arranque. Ahora es transparente de verdad; el comportamiento de instancia única no cambia.

Rendimiento

  • El acceso remoto descarga mucho menos en la primera carga. Los recursos estáticos se comprimen ahora bajo demanda y se sirven con validadores de caché, de modo que una segunda visita revalida en lugar de volver a descargar, y los paquetes de idioma y los renderizadores opcionales del terminal se cargan solo cuando algo los necesita, en vez de formar parte del primer envío. En conjunto, la transferencia inicial baja a alrededor de una quinta parte de lo que era.

Correcciones

  • Una sesión hija arranca ahora igual que la sesión que la pidió. Las hijas no heredaban ni el modo de permisos del padre ni sus argumentos de inicio, así que la hija de una sesión que omitía las confirmaciones aparecía pidiéndolas, y un modelo fijado en el padre se perdía. Ahora se heredan los dos, con los valores predeterminados globales del tipo de agente como respaldo: los mismos que aplica el menú de «nueva sesión de agente».

  • Reconectar una ventana remota ya no informa de un falso «error de autenticación». Cuando la ventana se reconectaba, el nuevo WebSocket y el que sustituía competían entre sí; el cierre del perdedor se informaba como un fallo de autenticación, y el aviso acusaba de rechazo a un emparejamiento perfectamente válido.

  • Un grupo ya no puede arrastrarse dentro de su propio subárbol. Soltar un grupo sobre uno de sus descendientes desprendía toda esa rama del árbol, y las sesiones que contenía desaparecían de la barra lateral hasta que se reparaba la base de datos a mano. El movimiento se rechaza ahora.

  • La salida de los agentes conserva el color cuando VelaTerm se inicia desde otra herramienta. Un terminal hereda el entorno de aquello que lo haya iniciado, así que arrancarlo desde un IDE o desde un entorno de agentes que exporta NO_COLOR, CI o FORCE_COLOR=0 hacía que todas las TUI de agente se vieran monocromas dentro de VelaTerm, aunque el terminal anuncia color completo. Esos valores heredados se descartan al iniciar una sesión; las mismas variables exportadas desde tu propio perfil de shell siguen aplicándose, porque ese perfil se ejecuta dentro de la sesión.

v0.1.101

Último

Acceso remoto

  • Elija qué dirección usa el enlace para compartir: las direcciones de Tailscale ahora aparecen. La lista de direcciones solo aceptaba los rangos IPv4 privados clásicos, por lo que las mallas VPN como Tailscale, que asignan direcciones del rango de NAT de operador (100.64.0.0/10), quedaban descartadas silenciosamente del panel de acceso remoto y del enlace de emparejamiento, aunque el servidor ya era accesible a través de ellas. Estas direcciones ahora se listan; los túneles VPN quedan al final para que nunca se conviertan en la opción predeterminada. Un nuevo selector de IP en el panel —visible antes de iniciar y con el servidor en marcha— muestra cada candidata con el nombre de su interfaz y marca los túneles VPN; al elegir una, su URL pasa al frente y el enlace de emparejamiento se regenera con exactamente ese host, de modo que el enlace copiado funciona en un dispositivo que solo alcanza esta máquina a través de la VPN, sin editar la URL a mano. Un código QR bajo el enlace de emparejamiento permite escanearlo directamente con el teléfono. La selección se recuerda; si la interfaz elegida desaparece, el panel vuelve a «Automático» sin olvidarla. El servidor en sí no cambia y sigue escuchando en todas las interfaces. Elegir una dirección que solo apareció después de iniciar el servidor —por ejemplo, una VPN conectada más tarde— ahora también actualiza de inmediato la URL copiada y el código QR, en lugar de solo el enlace de emparejamiento hasta el siguiente reinicio; los túneles VPN quedan detrás de las direcciones LAN en todas las plataformas, una dirección elegida con el servidor detenido determina el primer enlace de emparejamiento tras el arranque, y las regeneraciones de enlace solapadas ya no pueden sobrescribir un enlace más nuevo con uno más antiguo.

  • Compartir ahora sobrevive a un reinicio. El token de emparejamiento se regeneraba cada vez que arrancaba el servidor, así que cerrar y volver a abrir VelaTerm invalidaba en silencio todos los enlaces compartidos y había que emparejar cada teléfono de nuevo. El token, los dispositivos emparejados y la lista de dispositivos bloqueados se guardan ahora en un archivo del directorio de datos legible solo por su propietario: un dispositivo ya emparejado se reconecta con su URL guardada tras un reinicio —la contraseña de acceso sigue siendo un segundo factor obligatorio— y un dispositivo revocado sigue revocado. VelaTerm también recuerda que el uso compartido estaba activo: si cierra la aplicación con el servidor en marcha, el siguiente arranque lo recupera en el mismo puerto, tanto en la aplicación de escritorio como en un servidor sin interfaz con --serve; si lo detiene usted mismo, nada arranca automáticamente. Si el arranque automático falla, por ejemplo porque el puerto está ocupado, la aplicación se inicia con normalidad y el panel de acceso remoto muestra el motivo. El campo de puerto recuerda ahora el puerto realmente usado en lugar de volver al valor predeterminado, y «Regenerar enlace» sigue siendo el interruptor de emergencia explícito: genera un token nuevo al instante, invalida todos los enlaces antiguos y sobrescribe el estado guardado. La contraseña de acceso nunca se escribe en el disco: solo se guarda un hash de memoria dura (Argon2id).

Seguridad

  • Un dispositivo emparejado ya no puede administrar el propio uso compartido. Cualquier navegador emparejado podía invocar los mismos comandos de administración que la aplicación de escritorio —crear un nuevo enlace de emparejamiento (lo que además vacía la lista de bloqueo de dispositivos), listar y revocar otros dispositivos, o detener y reconfigurar el servidor— y el almacén de ajustes entregaba a cada cliente el mapa completo de ajustes, incluido el hash de memoria dura de la contraseña de acceso y los ajustes de arranque automático que lee el siguiente inicio. Los comandos de administración quedan ahora reservados a la aplicación de escritorio y al shell de Electron; la API de ajustes filtra las claves de acceso remoto y el token de Gitea de cada lectura desde un dispositivo emparejado y rechaza las escrituras sobre ellas. Un dispositivo emparejado conserva aquello para lo que existe el emparejamiento —sus sesiones de terminal con acceso completo al shell—, pero ya no puede leer el verificador de la contraseña, invitar o expulsar a otros dispositivos ni redirigir el puerto que usará el próximo arranque. Los comandos que leen, escriben o eliminan secretos guardados — el token de Gitea y las contraseñas de host recordadas — también se rechazan ahora para un dispositivo emparejado, y los comandos que reciben rutas — leer, previsualizar, escribir, crear, renombrar y eliminar, así como mostrar el diff de git de un archivo o elegir la carpeta donde se clona un repositorio — resuelven primero los enlaces simbólicos y rechazan las rutas dentro del propio directorio de datos de VelaTerm, donde viven el estado de emparejamiento y las claves; cualquier otra ruta sigue funcionando, de modo que la exploración y edición remota de archivos permanecen intactas. Una prueba enumera cada comando remoto que acepta una ruta, de modo que un comando nuevo no puede saltarse esta comprobación sin ser detectado. Cuando una de estas protecciones rechaza una petición, el navegador muestra ahora un mensaje debidamente traducido en lugar de un error en inglés sin procesar.

  • Una revocación o un enlace regenerado sobrevive ahora también a la configuración de doble instancia. En un servidor sin interfaz (--serve) con arranque automático activado, dos instancias del servidor mantenían cada una su propia copia del estado de emparejamiento guardado y lo reescribían completo: una revocación o un enlace nuevo hecho a través de una podía ser deshecho en silencio por la otra. Todas las instancias de un proceso comparten ahora un único estado de emparejamiento por directorio de datos: la revocación y la rotación surten efecto en todas partes de inmediato, y exactamente un escritor persiste el archivo, que sigue siendo la fuente de verdad entre reinicios reales.

  • Los inicios de sesión fallidos repetidos se frenan. La comprobación de la contraseña de acceso usa Argon2id, caro a propósito, y puede intentarla cualquiera que alcance el puerto. Tras cinco intentos fallidos desde una dirección, los siguientes se rechazan durante un minuto antes de que se haga ningún trabajo de hash, y el propio hash se ejecuta ahora fuera del bucle de eventos del servidor con un tope estricto de verificaciones simultáneas: una avalancha de contraseñas erróneas ya no puede saturar el servidor con hashing de memoria dura ni ralentizarlo para los dispositivos ya conectados. El freno vive en memoria y se restablece con el servidor; el token de emparejamiento y la contraseña siguen siendo la barrera real. El límite ahora lo comparten todas las instancias del servidor que usan el mismo directorio de datos — la configuración de doble instancia con --serve ya no duplica el presupuesto de intentos — y cada intento se reserva antes de que empiece la comprobación de la contraseña, de modo que las peticiones paralelas desde una misma dirección no puedan colarse por debajo del límite. Un navegador frenado ve ahora un mensaje propio de límite de intentos en la pantalla de inicio de sesión en lugar de que se le diga que la contraseña era incorrecta; además, el freno ya no se recuerda como una contraseña incorrecta: pasada la pausa, el siguiente intento vuelve a procesarse sin recargar la página. Un intento abandonado a medias — la pestaña cerrada mientras la contraseña aún se comprobaba — libera ahora su reserva de inmediato en lugar de contar contra la dirección durante el resto del minuto, y un inicio de sesión correcto libera solo su propia reserva en vez de borrar todo el registro de la dirección: detrás de una dirección de red compartida, que alguien inicie sesión correctamente ya no restablece el presupuesto de intentos de un atacante, y los fallos registrados solo expiran con su minuto.

  • Los secretos en disco y en los registros se tratan con más cuidado. El archivo con el estado de emparejamiento y la clave de cifrado de extremo a extremo se crean ahora legibles solo por el propietario desde el principio, en lugar de restringirse tras la primera escritura, y la base de datos de sesiones —que contiene el hash de la contraseña— también queda restringida al propietario. Un servidor sin interfaz (--serve) ya no imprime en los registros el secreto de larga duración del enlace de emparejamiento: si la salida no es un terminal, el enlace se retiene y se muestra una indicación en su lugar; --print-pairing vuelve a activarlo expresamente. El registro de dispositivos queda limitado a 32 entradas con nombres de longitud acotada, para que un cliente emparejado no pueda hacer crecer sin límite el archivo guardado, y si falla el guardado de una revocación o de un nuevo enlace, el error llega ahora a quien lo invocó en lugar de quedarse en una línea de registro. El arranque automático ya no sustituye a un servidor que ya se había iniciado a mano, y un error de arranque automático obsoleto desaparece en cuanto usted detiene el servidor.

Correcciones

  • El emparejamiento ya se puede gestionar desde el shell de Electron. Crear un enlace de emparejamiento, listar los dispositivos emparejados y revocar un dispositivo solo existían como comandos de escritorio (Tauri); el despachador WebSocket que usan el shell de Electron y los clientes de navegador respondía «Unknown command», dejando inservible el panel de acceso remoto en ese entorno. Los tres comandos pasan ahora por las mismas funciones centrales en ambos transportes, de modo que no pueden divergir, y pruebas de regresión cubren las nuevas rutas de despacho, incluida la creación de un enlace de emparejamiento real contra un servidor local en ejecución.

v0.1.100

Último

Agentes de IA

  • Kiro CLI pasa a ser un tipo de sesión de primera clase. Las sesiones de Kiro tienen su propio nodo en el árbol, un indicador de estado autoritativo de «trabajando» o «en espera» que se apoya en los propios lifecycle hooks de Kiro, notificaciones al terminar un turno, reanudación automática de la misma conversación al volver a abrir el nodo, argumentos de inicio y una opción para omitir confirmaciones, además del lanzamiento mediante vspawn: todo lo que los demás agentes ya tenían. VelaTerm clona tu agente Kiro predeterminado en un agente vlx-term propio, añade a esa copia lifecycle hooks de solo observación y lanza esa copia; tu archivo de agente no se modifica nunca, y tu prompt, tus herramientas y tus servidores MCP se conservan sin cambios. Kiro no tiene ningún hook de solicitud de permisos, por lo que el indicador se mantiene en «trabajando» mientras espera tu aprobación.

Correcciones

  • Los programas iniciados desde el terminal ya no heredan el entorno propio del AppImage (Linux). El lanzador del AppImage apunta PYTHONHOME, PYTHONPATH, PERLLIB, QT_PLUGIN_PATH y las rutas de plugins de GStreamer al directorio de montaje temporal del paquete, y coloca los directorios del paquete por delante de todo lo demás en PATH y LD_LIBRARY_PATH. Un terminal entrega todo su entorno al shell que inicia, así que el python3 del sistema buscaba su biblioteca estándar dentro del paquete y se negaba a arrancar, y otros programas enlazados dinámicamente cargaban la copia de una biblioteca incluida en el paquete en lugar de la del sistema. Ahora VelaTerm elimina esas rutas del paquete antes de iniciar un shell o una herramienta externa, y no toca los valores que hayas definido tú. APPDIR y APPIMAGE siguen visibles, de modo que los programas que comprueban si se están ejecutando desde un AppImage siguen obteniendo su respuesta. Solo afectaba a las compilaciones AppImage; el paquete deb, macOS y Windows se comportan igual que antes.

v0.1.99

Último

Terminal

  • Shift+Intro escribe un salto de línea en lugar de enviar. Los terminales no tienen codificación para Intro con una tecla modificadora, así que las CLI de agentes como Claude Code y Codex solo recibían un retorno de carro normal y enviaban el mensaje cuando aún se estaba escribiendo. Ahora VelaTerm emite ESC+CR, la misma secuencia que esas herramientas esperan de una asignación de teclas de iTerm2, de modo que la entrada de varias líneas ya funciona, también en macOS, donde el manejador de teclas personalizado ni siquiera se instalaba. La composición en un método de entrada no se altera: Intro sigue confirmando el candidato.

Proyectos y organización

  • Actualizar el estado de una sola sesión. En un panel con filtro de estado, las sesiones incorporan la acción «Actualizar estado», que reevalúa únicamente esa sesión según las condiciones del propio panel y la añade o la quita mientras las demás permanecen en su sitio. La acción pertenece al panel desde el que se abrió el menú, por lo que las divisiones anidadas nunca toman prestado el filtro de otro panel. El resultado se guarda por panel y se restaura tras reiniciar.
  • Quitar una marca cuesta un clic. Elegir el emoji ya aplicado lo elimina, así que la entrada específica para quitarlo y su separador desaparecen. La insignia de emoji del botón de filtro también se retira: el resaltado ya indica que hay un filtro de marca activo y el menú indica cuál es.

Correcciones

  • La integración de escritorio del AppImage de Linux se instala en cualquier equipo. El icono incluido era un enlace simbólico a una ruta absoluta de la máquina de compilación, por lo que herramientas como Gear Lever y AppImageLauncher no podían extraerlo, aunque la aplicación funcionara con normalidad. Ahora el enlace es relativo. También se corrigió el requisito de glibc a 2.35 tras medir las bibliotecas incluidas y no solo el ejecutable, lo que convierte a Ubuntu 22.04 en la distribución más antigua compatible con la aplicación de escritorio.

v0.1.98

Último

Agentes de IA

  • Grok Build se incorpora a VelaTerm como agente de primera clase. Instala, inicia y reanuda Grok 4.5 con identificadores de sesión estables, lifecycle hooks oficiales, estados precisos de trabajo y permisos, transcripciones unificadas, detalles de uso y un icono oficial que se adapta al tema en las vistas de escritorio, navegador y móvil.

Proyectos y organización

  • Divide la barra lateral de proyectos en vistas de trabajo independientes. Cualquier panel del árbol puede volver a dividirse hacia abajo y recupera tras reiniciar su propia búsqueda, filtros de estado y emoji, estado de plegado y proporción de tamaño. Todos los paneles siguen siendo proyecciones del mismo árbol de proyectos gestionado por el backend, por lo que los cambios se sincronizan sin duplicar datos de negocio.
  • Marca y filtra nodos sin perder el contexto. Los proyectos, grupos y sesiones pueden llevar marcadores emoji. Un contenedor marcado conserva todo su subárbol, la pertenencia a estados permanece estable mientras trabajas, están disponibles tanto la incorporación dinámica como la actualización manual, y las condiciones de estado y emoji se combinan como una unión.
  • Crea un proyecto vacío al instante. Elige el directorio superior, valida el nombre y crea e importa la carpeta en un único flujo. Si se produce un fallo parcial, solo se reintenta la importación, sin crear directorios duplicados.

Interfaz

  • Comparte VelaTerm donde esté tu comunidad. El diálogo de compartir ahora incluye WeChat Moments, Weibo, Xiaohongshu, X, Reddit, Hacker News, LinkedIn, Facebook, Telegram y WhatsApp, con un flujo de código QR para WeChat y una invitación a compartir en el diálogo de actualización.
  • Interacciones pequeñas, pero más cuidadas. Las pestañas de terminal temporales se pueden renombrar antes de convertirse en sesiones guardadas. Los campos de entrada normales desactivan las mayúsculas automáticas de los teclados móviles sin alterar la entrada del terminal.

v0.1.97

Último

Agentes de IA

  • Las sesiones ya no se quedan atascadas en «trabajando». Codex informaba de la actividad de herramientas y del fin de turno mediante procesos efímeros distintos, cuyos callbacks podían llegar desordenados y dejar un turno terminado mostrado como aún en curso. Ahora se descartan los informes intermedios que llegan después del final de su propio turno, y un nuevo enlace de fin de sesión cubre las sesiones que terminan sin evento de finalización.
  • Los turnos interrumpidos se resuelven en segundos. Pulsar Esc, o un error de flujo, termina un turno de Claude o Codex sin ningún callback de finalización. Seis segundos de silencio en el terminal corrigen ahora esa sesión a en espera de forma discreta, sin lanzar una notificación de «ha respondido».

Interfaz

  • Atajos de división fiables en macOS. Dividir a la derecha (Cmd+D) y dividir hacia abajo (Cmd+Shift+D) se registran ahora como comandos del menú Terminal nativo, de modo que macOS ya no intercepta la combinación antes que VelaTerm.
  • Un guardado por pulsación. Cmd+S se procesaba tanto en el atajo global como en el editor enfocado, lo que podía escribir el mismo archivo dos veces en una sola pulsación.

v0.1.96

Último

Agentes de IA

  • El estado de Codex confía en lifecycle hooks, no en suposiciones del terminal. Las sesiones modernas de Codex usan únicamente los lifecycle hooks oficiales como fuente de actividad. Un enlace SessionStart verifica la integración, la ausencia de callbacks se muestra como «Estado no disponible» y el texto o la actividad del terminal ya no puede sobrescribir los estados de trabajo, confirmación o finalización.
  • Uso de Codex más actualizado tras cada turno. El panel Info muestra de inmediato el snapshot rollout local, lo concilia con los límites en vivo, vuelve a actualizar después de que Codex escriba el snapshot token final e ignora respuestas tardías de una sesión anterior.

Interfaz

  • Selección fiable en el árbol de proyectos de macOS. Las filas virtuales ya no dependen de transform del compositor, lo que evita que coordenadas de hit-test obsoletas de WKWebView envíen acciones de pasar el cursor, hacer clic o arrastrar a otra fila después de desplazarse o actualizar el árbol.

v0.1.95

Último

Agentes de IA

  • Kimi Code y Zoo Code llegan al árbol de sesiones. VelaTerm ya puede iniciar, reanudar, instalar y configurar ambos agentes. Kimi usa sus lifecycle hooks oficiales para informar de forma autoritativa los estados de trabajo, permiso y espera; Zoo Code conserva una identidad de tarea estable y usa detección del terminal cuando no hay hooks externos.
  • Actualización en vivo del uso de Codex. El panel Info consulta el Codex app server para obtener los límites actuales y mantiene la instantánea rollout local como alternativa compatible.

Proyectos y terminales

  • Abre proyectos con vela <path>. Las versiones empaquetadas pueden instalar un comando shell al estilo de VS Code. Una segunda llamada envía el proyecto a la ventana VelaTerm existente en lugar de abrir una instancia duplicada.
  • Clonado Git visible y cancelable. Clone Project muestra etapas, porcentaje y tiempo transcurrido, avisa si el progreso se detiene y puede cancelar todo el árbol de procesos Git sin dejar un destino incompleto. Las credenciales y query tokens se ocultan en errores y registros de auditoría.
  • Terminales WSL en Windows. Todas las distribuciones WSL instaladas se ofrecen junto a PowerShell, cmd y Git Bash para terminales normales. Los agentes siguen usando el shell anfitrión de Windows para mantener fiables los hooks y las rutas de ejecutables.

Interfaz y fiabilidad

  • Control más claro de sesiones en segundo plano. Los menús muestran el estado en vivo de cada sesión y el diálogo de límite permite cerrar varias pestañas seleccionadas a la vez.
  • Ciclo de vida más seguro y notas multilingües. Se confirma antes de detener sesiones activas; la identidad lifecycle exacta de Codex prevalece sobre análisis rollout ambiguos; las notas de actualización admiten todos los idiomas incluidos.

v0.1.94

Último

Localización

  • Interfaz en vietnamita. Tiếng Việt está ahora disponible en el selector de idiomas y se selecciona automáticamente para las configuraciones de idioma en vietnamita.

Navegador

  • Inicios más rápidos en el navegador integrado. Cada pestaña del navegador ahora cuenta con atajos de un clic para ChatGPT, Claude, Gemini y Google. Los menús contextuales de proyectos y grupos también pueden crear una página del navegador permanente directamente en esa parte del árbol de sesiones.

Imágenes y documentos

  • Pegado fiable de rutas de imagen en macOS. Cuando WebKit no expone una imagen copiada como archivo, VelaTerm ahora la lee desde el portapapeles nativo y aún así la sube como ruta de archivo en lugar de pasar silenciosamente al marcador de imagen nativo del agente. Las ventanas remotas siempre muestran la opción de pegado de imagen, explican por qué se requiere el modo de ruta de archivo y desactivan la opción nativa no disponible.

  • Pegar imágenes en documentos de origen. El editor de origen ahora acepta imágenes del portapapeles. Los documentos Markdown guardados los almacenan junto al documento en assets/ e insertan la sintaxis de imagen portátil Markdown; los borradores no guardados incrustan los datos de la imagen para que no se pierdan al eliminar los archivos temporales.

Interfaz

  • Los menús contextuales permanecen visibles y apuntan al elemento correcto. Los menús abiertos cerca del borde derecho se miden y desplazan correctamente. Al hacer clic con el botón derecho en un nodo del árbol ahora solo se resalta el destino del menú sin cambiar la selección existente, y los menús de grupo incluyen una terminal limitada a ese grupo.

  • Edición más limpia y etiquetas de estado. El texto de origen ya no muestra ligaduras de fuente similares a flechas para secuencias como comentarios HTML; los porcentajes de uso se etiquetan explícitamente como “usado”, y el menú contextual nativo no relacionado del WebView del host ya no aparece detrás de los menús propios de VelaTerm.

Correcciones

  • Codex permanece en el historial normal de la terminal. Las sesiones Codex iniciadas por VelaTerm ahora usan el modo de terminal en línea, por lo que presionar Esc para interrumpir o retroceder ya no cambia los buffers de la pantalla de la terminal ni lleva la vista de desplazamiento al principio. Tu propia configuración Codex queda intacta.

v0.1.93

Último

Actualizaciones

  • Mira qué ha cambiado antes de instalar. Cuando hay una nueva versión disponible, un indicador en la barra de estado y un diálogo dedicado muestran ahora las notas de lanzamiento de esa versión. Puedes actualizar ahora, saltarte esta versión, seguir descargando en segundo plano o abrir manualmente la descarga del instalador; el progreso se muestra en tiempo real y la aplicación se reinicia para finalizar. Si saltaste varias versiones, las notas de cada una de ellas se muestran juntas, no solo la más reciente.

Agentes de IA

  • Las sesiones de Codex se nombran por sí mismas. Una sesión Codex se renombra a partir de tu primer mensaje en el momento en que lo envías, de la misma manera que ya ocurre con las sesiones de Claude, así que el árbol ya no se llena de “Codex 1”, “Codex 2”. Un nombre que establezcas manualmente nunca se sobrescribe.

  • vspawn y vopen ahora también funcionan en Codex. Las habilidades integradas vspawn, vspawn-tree y vopen se instalan en el directorio de habilidades de Codex así como en el de Claude, por lo que $vspawn <task> y $vopen <file> funcionan desde una sesión Codex.

  • Reanudación más fiable de Codex. Capturar una conversación Codex para reanudarla más tarde ya no depende de un temporizador fijo, por lo que sigue funcionando incluso si pausas antes de escribir el primer mensaje; además, dos sesiones Codex iniciadas en la misma carpeta ya no pueden conectarse entre sí mediante su conversación.

  • Uso de modelo y contexto para Codex. El panel de información ahora muestra el modelo actual, el uso de la ventana de contexto y la herramienta en uso para las sesiones Codex, al igual que ya hacía con Claude, leyendo en tiempo real desde la información de la sesión.

Remoto y terminal

  • Navegador de archivos remoto reconstruido. El selector de directorios para sesiones remotas cuenta ahora con búsqueda al escribir, ir directamente a la ruta (con ~), navegación hacia arriba / inicio / reciente, y la opción “Nuevo folder” en línea.

  • Los enlaces se abren en tu propia máquina. Al hacer clic en un enlace en la terminal, incluido el enlace de inicio de sesión de un agente, ahora se abre en tu navegador local, incluso desde ventanas remotas.

  • La opción “reutilizar base de datos remota” está oculta. Solo aparece cuando haces clic con la tecla Option/Alt en “Conectar a remoto”; un clic normal siempre conecta con una base de datos independiente.

Correcciones

  • Las herramientas se encuentran al iniciarlas desde el Dock. Iniciar VelaTerm desde el Dock o Finder ya no deja que funcione con una versión simplificada de PATH, por lo que git y otras herramientas instaladas con Homebrew de las que dependen los agentes se localizan correctamente.

  • Se abren nuevas terminales en la carpeta correcta. Crear una terminal a partir de un proyecto o grupo en la barra lateral ahora la abre en el directorio de ese nodo, en lugar de reutilizar la carpeta de la última sesión activa.

v0.1.92

Último

Correcciones

  • Ya no hay advertencias falsas de “enlace SSH perdido”. El monitor del túnel solía tratar la salida del proceso hijo de reenvío de puertos como una conexión perdida, mostrando la bandera roja y reconstruyendo el túnel. En realidad, el receptor de reenvío reside en el proceso ControlMaster, por lo que el reenvío sigue funcionando después de que el proceso hijo se cierre; la terminal permanecía perfectamente utilizable mientras la interfaz indicaba que la conexión estaba caída, y la reconstrucción destruía sin motivo una conexión sana.

Ahora se verifica el enlace en dos etapas: cuando el proceso hijo se cierra, VelaTerm primero comprueba si el puerto de reenvío local todavía tiene un receptor. Si lo tiene, no ocurre nada. Solo cuando también desaparece el puerto se considera que el enlace está muerto y se reconstruye. La bandera roja también se suaviza: solo aparece después de que falla el primer intento de reconstrucción, de modo que un problema que se resuelve en pocos segundos ya no muestra una advertencia.

Las desconexiones reales aún se recuperan solas. Si se termina el proceso ControlMaster o la red se interrumpe por un período prolongado, el túnel se reconstruye automáticamente; una vez agotadas las intentonas, el mensaje cambia a “SSH link is down”, y Reconnect ahora restaura la sesión: los procesos remotos siguen en ejecución y continúan desde donde se detuvieron.

v0.1.91

Último

Primera versión pública. Todo lo que aparece a continuación se incluye en esta versión.

Agentes de IA como elementos principales

  • Soporte integrado para nueve agentes: Claude Code, Codex, OpenCode, Copilot CLI, Cursor CLI, Cline, Pi, Antigravity (Gemini CLI) y crush. Elige un tipo al crear una sesión y se iniciará listo para usar.

  • El estado del agente se informa de forma precisa, no se adivina. VelaTerm inserta el mecanismo oficial de devolución de llamada de cada proveedor al iniciar (ganchos para Claude, notify para Codex, un plugin para OpenCode, etc.), por lo que cada cambio de estado se envía de inmediato. El árbol de sesiones muestra un punto de estado para “en funcionamiento”, “esperando” y “finalizado pero no visto”; el panel lateral filtra por estado y la barra de estado muestra un recuento en tiempo real.

  • Se emiten notificaciones del sistema cuando un agente necesita una decisión de permisos o finaliza una tarea, y al hacer clic en una se accede directamente a esa sesión. La detección de pantalla funciona como solución alternativa para aquellos sin mecanismo de devolución de llamada.

  • Las conversaciones sobreviven a todo. Se captura y almacena el propio ID de sesión de cada agente, por lo que cerrar una sesión, reiniciar la aplicación o restaurar una sesión archivada permite reanudar la conversación original, después de verificar que aún existe. Claude Code, Codex y Pi también pueden crear una sesión paralela a partir de la conversación actual.

  • Las sesiones generan otras sesiones. Las subtareas se convierten en sesiones hijas, creadas por el propio agente o por el usuario, opcionalmente en un árbol de trabajo git aislado para que varios agentes puedan trabajar en el mismo repositorio al mismo tiempo. Un diálogo gráfico de fusión reúne las ramas una vez finalizan.

  • Los agentes faltantes reciben una tarjeta de instalación con el comando recomendado e instalación con un solo clic, seguida de la detección automática de la ruta. Un panel lateral muestra las cuotas de uso de Claude y Codex, y cualquier conversación puede verse en el lugar o exportarse como una transcripción completa de Markdown.

Organización de sesiones

  • Un árbol de tres niveles: proyecto, grupo, sesión, con anidamiento ilimitado de grupos y sesiones hijas dentro de las sesiones. Los nodos se pueden arrastrar libremente y el estado compactado se mantiene tras los reinicios.

  • Cualquier subárbol puede archivarse: se oculta en el panel de archivos sin eliminar los datos, se puede restaurar en cualquier momento y sigue pudiendo reanudar su conversación.

  • Búsqueda de contenido global (⌘⇧F) respaldada por un índice SQLite FTS5 que abarca tanto las transcripciones de los agentes como la salida de la terminal; hay un árbol de resultados a la izquierda, una vista vinculada a la derecha y navegación paso a paso entre sesiones.

Una terminal adecuada, primero

  • Una verdadera PTYs (portable-pty, de wezterm), de modo que vim, htop y las propias interfaces gráficas de los agentes funcionan tal como deberían.

  • Varias pestañas con división arbitraria: cada pestaña tiene su propio árbol de división, dividido horizontal o verticalmente según se prefiera.

  • Ciclo de vida de pestañas al estilo navegador: las pestañas en segundo plano permanecen activas y sus procesos siguen ejecutándose; el presupuesto de pestañas activas es configurable y, al superarlo, se retira la sesión inactiva más antigua. Cerrar una pestaña es lo que finaliza un proceso.

  • La escritura sigue siendo rápida incluso bajo carga, gracias a la programación por prioridad de entrada y la consolidación de frames de salida; un agente que inunde la pantalla ya no consume tus teclas.

  • Búsqueda dentro de la terminal (⌘F), grabación y reproducción de sesiones, pegar o arrastrar imágenes directamente a un agente, y cambio gratuito entre cmd, PowerShell y Git Bash en Windows.

Más allá de la terminal

  • Ejecuta vopen <file> en cualquier sesión para abrir una pestaña de documento junto a tus terminales: Markdown se abre como un editor de WYSIWYG y exporta a formato vectorial PDF, las imágenes se abren en el visor integrado y los archivos de código reciben resaltado de sintaxis.

  • Se puede usar una pestaña de navegador integrada como pestaña temporal o fijarla en el árbol de proyectos como nodo permanente.

Remoto y multi-dispositivo

  • La aplicación de escritorio ofrece la misma interfaz a través de la web, compartiendo un conjunto único de sesiones en tiempo real. Los flujos de salida se envían a cada cliente en tiempo real y cualquiera de ellos puede escribir; tanto la aplicación de escritorio como el navegador ven y controlan la misma terminal.

  • Cifrado de extremo a extremo con caja NaCl por frame, emparejamiento mediante código QR o enlace, y gestión por dispositivo que incluye revocación individual.

  • Modo sin interfaz gráfica: --serve ejecuta el mismo servicio en un servidor sin GUI, listo para que se conecte un navegador.

  • Las conexiones remotas SSH incluyen las máquinas remotas en tu árbol. VelaTerm se conecta directamente desde la aplicación de escritorio, despliega un vela-server ligero en el lado remoto y las sesiones remotas se comportan como si fueran locales. El túnel se repara y se reconecta automáticamente.

  • Móvil: la aplicación incluye una vista web para móviles, además de una carcasa de aplicación nativa (renderizado con xterm, entrada nativa y barra de teclas auxiliares).

Plataforma y acabados

  • macOS, Linux y Windows.

  • Actualizaciones automáticas, con versiones de macOS certificadas.

  • Temas claro y oscuro que siguen al del sistema, y las sesiones de agentes en ejecución reciben notificación del cambio a través de la notificación estándar de la terminal (DEC 2031); los colores de la interfaz gráfica cambian al instante, sin necesidad de reiniciar.

  • Por defecto en inglés, con 10 idiomas incluidos que siguen la configuración regional del sistema.

Cada versión incluye actualizaciones automáticas: VelaTerm ofrecerá la versión más reciente por sí mismo. Puedes descargarla tú mismo desde la página de descarga.