Asistentes de IA
Hilos de agente
Un hilo de agente supervisado es un trabajo que delegas a un agente de programación y al que vuelves más tarde. El Inbox es donde todos ellos rinden cuentas, te dicen qué necesitan y mantienen su propia copia aislada de tu repositorio.
El Inbox
El tablero se llama Inbox, y se abre de tres formas: desde el chip del Inbox que está junto a Dex, con Cmd/CtrlShiftJ (que además salta directo al siguiente hilo que te necesita), o como una página permanente del cuaderno del lado derecho. Es una fila por hilo, ordenadas según cuánto quiere cada una de ti y no por cuándo empezaron, así que el hilo atascado esperando una aprobación queda por encima del que trabaja tranquilamente. Cuando hay más de un proyecto en el tablero, las filas se agrupan bajo el proyecto contra el que corren.
New task toma el tablero con un compositor de borradores, y el compositor es el hilo hasta el primer envío: no se crea nada hasta que sale el mensaje. Dónde corre el trabajo es un menú de chips: Local, New worktree o un worktree existente, y los demás chips eligen la instancia de agente, el modelo, el esfuerzo y el modo. Para el destino de worktree, la franja de ramas ofrece un chip de rama base, y Deska puede traer esa base primero desde origin para que el hilo arranque sobre lo que tiene el remoto en lugar de una rama local desactualizada. Check out a pull request… es un selector en vivo que lista los pull requests abiertos del repositorio a través de gh; elegir uno fuerza el destino de worktree, porque un pull request siempre corre en su propia copia.
Algunos controles mantienen legible un tablero cargado:
- Settle thread mueve una fila que ya diste por terminada a un pliegue compacto Settled al final. Se queda ahí hasta que la devuelvas. Debajo hay un pliegue Archived, para las filas que ocultaste por completo.
- Snooze thread posterga una fila hasta la hora que elijas (en una hora, esta tarde, mañana, la próxima semana). Un hilo pospuesto regresa antes por su cuenta si llega a una aprobación, hace una pregunta o falla, y lleva una marca Woke hasta que lo revisas.
El tablero se lee bien desde el teclado: J y K (o las flechas) mueven la selección y Enter abre la fila seleccionada. Abrir una fila entrega el panel completo a ese hilo, reproduciendo la conversación desde su registro durable, incluidos los turnos que corrieron antes de que arrancara este proceso de la aplicación, y Esc devuelve el panel al tablero.
Qué está pidiendo un hilo
Cada fila lleva un estado, aquí listados del más al menos urgente:
- Bloqueado significa que el agente llegó a una aprobación y no puede continuar hasta que la permitas o la deniegues. La fila dice approval.
- Esperando tu respuesta significa que el agente hizo una pregunta que no es una solicitud de permiso. La fila dice input.
- En ejecución significa que hay un turno en curso. Si un turno se aceptó pero todavía no arrancó, la fila dice Preparing worktree… o Starting agent…, para que un mensaje aceptado nunca parezca congelado.
- Error significa que falló un turno o la sesión que lo sostiene. Cuando Deska pudo clasificar la falla, nombra la causa, por ejemplo Sign in to this provider o The installed CLI is too old.
- Terminado pero sin ver significa que un turno se completó desde la última vez que abriste esa fila. La marca se limpia cuando de verdad lo miras, no cuando termina el trabajo.
- Inactivo significa que el hilo está vivo y esperando tu próximo mensaje.
- Detenido significa que tú lo detuviste. Un hilo detenido puede volver a arrancar.
Pulsa Cmd/CtrlShiftJ desde cualquier parte de la aplicación para saltar al siguiente hilo que te necesita. Recorre en ciclo todos los hilos en espera y luego vuelve a empezar, así que pulsarlo varias veces barre la lista completa. Se salta las filas archivadas, asentadas y aún pospuestas salvo que sean justamente las que levantan la mano, y no hace nada cuando ningún hilo está esperando.
Hilos frente a sesiones sueltas
El tablero muestra dos tipos de fila, y la diferencia está en qué sobrevive. Un hilo es durable: su historial, sus preguntas pendientes, sus puntos de control y sus ajustes quedan escritos, así que sigue levantando la mano aunque se reinicie el proveedor y vuelve a abrirse con la aplicación. Una sesión suelta es una sesión de proveedor iniciada fuera del sistema de hilos; aparece en el tablero mientras vive y muere con su proceso.
Esa diferencia se nota en todo. Las sesiones sueltas no tienen rama, ni worktree, ni diffs por turno, ni tarjeta de plan, ni registro de actividad, y no se pueden archivar, asentar ni posponer. Cuando quieras un trabajo del que puedas alejarte y al que puedas volver, arranca un hilo.
Las sesiones estructuradas de cualquiera de los dos tipos corren sobre el mismo runtime descrito en Agentes de programación. Si prefieres manejar un CLI a mano, eso sigue funcionando en una terminal normal.
Worktrees de git aislados
Un hilo cuyo destino de ejecución es New worktree obtiene su propio worktree de git: una segunda copia del mismo repositorio, en su propia rama y en su propio directorio. Varios agentes pueden entonces trabajar sobre un proyecto al mismo tiempo sin tocar nunca los archivos de los demás, ni los tuyos.
- Tu rama no se mueve. El worktree se corta desde el HEAD actual (o la base que hayas indicado) sobre una rama nueva bajo el espacio de nombres
deska/, así que engit branchqueda claro qué ramas creó Deska. Tu propio árbol de trabajo se queda exactamente donde estaba. - La copia vive fuera del repositorio, en la carpeta de datos de la aplicación de Deska, así que no aparece nada dentro del directorio de tu proyecto.
- Cada turno completado queda en un punto de control. Las instantáneas van a un espacio de refs privado de git, nunca a tus ramas, ni a HEAD, ni al índice. El detalle del hilo lista los archivos que cambió cada turno con las líneas añadidas y eliminadas, y ofrece restaurar el árbol a como estaba antes de ese turno. Un turno cuyo punto de control no se pudo capturar lo dice y desactiva su propio revert, en lugar de ofrecer una acción que iba a fallar.
- Deska se da cuenta si la copia se mueve. Si algo ejecuta
git checkoutogit resetdentro del worktree de un hilo, el hilo registra una advertencia que nombra ambas ramas y muestra un aviso con la acción para volver. Nunca rechaza el turno, porque el cambio bien pudo ser intencional. - La limpieza es conservadora. Deska solo elimina copias dentro de su propia carpeta de worktrees que ya no pertenecen a ningún hilo, que git reconoce y que no tienen nada sin confirmar. Cualquier cosa con trabajo sin confirmar se deja intacta, y las ramas nunca se eliminan, así que los commits de un hilo siempre siguen ahí.
El menú de la fila puede abrir una terminal ya situada en la copia propia del hilo, que es la forma más rápida de inspeccionar lo que hizo un agente.
Preparar worktrees nuevos con deska.json
Una copia recién creada suele necesitar trabajo antes de que un agente pueda hacer algo útil en ella: instalar dependencias, generar código, escribir un archivo de entorno. Coloca un archivo deska.json en la raíz de tu proyecto y Deska lo hará por ti.
El archivo contiene un arreglo scripts, con un name y un command en cada entrada. La primera entrada marcada con runOnWorktreeCreate en true es el hook de preparación: corre una sola vez, dentro del worktree recién cortado, antes de que arranque el primer turno del hilo. El script corre con el worktree como directorio de trabajo y recibe DESKA_PROJECT_ROOT y DESKA_WORKTREE_PATH en su entorno. Solo corre un hook por worktree, aunque varias entradas lleven la marca.
Deska lee el manifiesto primero desde la copia del worktree y luego desde la raíz del proyecto, así que una rama puede fijar su propia preparación mientras un deska.json sin confirmar sigue funcionando.
deska.json mal formado: las entradas incorrectas se omiten y se reportan, y un archivo que no es JSON válido se ignora por completo. Una configuración escrita a mano nunca puede atascar un hilo.Dentro de un hilo
Abrir una fila despliega el mismo detalle que muestra el panel completo: la transcripción, lo que sea que el agente esté esperando, los archivos que cambió y lo que Deska hizo en tu nombre.
- Las aprobaciones llegan como tarjetas. Enter permite la solicitud, S la permite por el resto de la sesión, D la deniega y Esc cancela el turno. Una solicitud que parece destructiva (un borrado, un force push, un reset duro) pierde a propósito las teclas de aceptación y debe aprobarse con un clic deliberado.
- Las preguntas llegan en sus propias tarjetas, y las teclas 1 a 9 eligen una opción. Una pregunta con varios pasos se muestra como una sola tarjeta por pasos, y una pregunta sin opciones convierte el compositor en su casilla de respuesta. Las tarjetas pendientes se apilan de la más antigua a la más nueva, así que la del frente siempre es la que toca responder.
- Los planes propuestos aparecen como una tarjeta Proposed plan cuando termina un turno de planificación. Desde ahí puedes devolverlo al mismo hilo con Implement, pedir cambios con Refine, o separar el trabajo con Implement in new worktree thread para que el plan y su ejecución queden aparte.
- Los diffs por turno listan cada turno completado con sus archivos cambiados y el conteo de líneas, y se abren en una vista archivo por archivo. Un diff de rama muy grande se recorta, y el panel lo dice en lugar de mostrar un fragmento como si fuera el cambio completo.
- La compactación ocurre cuando la conversación se acerca al límite de contexto del modelo y el proveedor resume los turnos anteriores para poder seguir. La fila lo anota (compacted once, compacted 3x) para que sepas que la memoria del agente sobre los primeros turnos ahora es un resumen. Junto a ella hay una lectura de tokens y contexto, con el anillo de contexto visible solo cuando el proveedor reportó una ventana real.
El compositor sigue activo mientras corre un turno. Enter encola tu mensaje como el siguiente turno, y Steer now interrumpe el turno en curso para redirigirlo. Los agentes que no se pueden reconducir a mitad de turno lo dicen y encolan el mensaje en su lugar. Para detener el turno en curso, pulsa Stop en la franja sobre el compositor, o mantén Esc hasta que el anillo de ese botón se llene. Soltar antes no cancela nada, así que un toque reflejo nunca mata un turno.
Los chips del compositor también reflejan el ajuste actual del hilo (instancia de agente, modelo, esfuerzo, pensamiento y modo), así que lo que dicen los chips es con lo que corre el siguiente turno, y cada proyecto recuerda los valores por defecto que usaste por última vez para sus tareas nuevas.
Para la superficie de chat que opera tu lienzo en vez de tu repositorio, consulta Agentes y Dex.