Todas las páginas
En esta página

Sesiones vigiladas Nuevo en 0.9.10

Un agente puede vigilar otras sesiones en lugar de comprobarlas una y otra vez. Se suscribe, sigue con su propio trabajo o espera, y OAR lo despierta cuando pasa algo en las sesiones vigiladas: una pregunta espera respuesta, un turn falla, una sesión responde, termina una tarea en segundo plano. El aviso es un mensaje corto que OAR escribe en la conversación del agente que vigila.

Peticiones típicas:

  • Cuidar de un lote. «Vigila las tres sesiones de revisión. Despiértame cuando una haga una pregunta o falle, y resume las respuestas cuando hayan terminado todas».
  • Esperar un trabajo largo. «Inicia la batería completa de tests en una sesión y vigílala. Avísame cuando termine su tarea en segundo plano, y dime si falla».
  • No perder de vista otra máquina. «Vigila la sesión del despliegue nocturno en build-box y avísame de los errores».

Las sesiones pueden estar en este relay (con las sesiones de agente activadas) o en un relay emparejado. Todos los proveedores pueden vigilar salvo Claude Cloud y OpenAI Image, cuyas sesiones no pueden suscribirse (consulta Por proveedor). La herramienta en sí, subscribe de relay_tool, aparece en Vigilar sesiones en la referencia; esta página explica lo que ves y lo que controlas.

Qué despierta al agente que vigila #

Una suscripción indica las sesiones que vigilar, o todas las sesiones de un relay, incluidas las que se creen más tarde. Puede pedir que se le avise de:

Evento Dicho de otra forma
Question (Pregunta) Una sesión vigilada espera una respuesta o una aprobación. El mensaje lleva la pregunta y sus opciones. Nuevo en 0.9.16 En una pregunta que no bloquea, a la suscripción también se le comunica después tu respuesta.
Error Un turn falló, se alcanzó un límite de uso o murió el proceso de agente de la sesión.
Reply (Respuesta) Una sesión terminó un turn. El mensaje lleva el comienzo de la respuesta.
Task started, finished, failed (Tarea iniciada, terminada, fallida) Una tarea de agente o de shell en segundo plano de una sesión vigilada empezó (solo si la suscripción lo pide), terminó o falló. Un comando de shell que sale con un código distinto de cero cuenta como fallido.
Stalled (Detenida) Una sesión lleva un rato en silencio mientras sigue trabajando.
All idle (Todas inactivas) Ya no corre nada en las sesiones vigiladas.

Nuevo en 0.9.13 Una suscripción que no indica eventos no se despierta por un comando de shell o un monitor que terminó bien: una sesión ocupada termina uno más o menos cada minuto, y cada uno le costaría al agente que vigila un turn con todo su contexto. Los subagents terminados y las tareas fallidas sí lo despiertan. Un agente que debe seguir cada comando pide todos los finales de tarea. Las suscripciones creadas antes sin indicar eventos pasan solas a este comportamiento predeterminado; las que indicaron sus eventos los conservan.

Los nombres exactos de los eventos y las opciones que tiene una suscripción (una expresión regular que deben cumplir las respuestas y los resultados de las tareas, terminar tras dispararse una vez, el tiempo de silencio antes de stalled) están en la referencia.

La propia conversación del agente que vigila nunca se vigila, así que sus propios turns no pueden despertarlo.

Una suscripción solo avisa

No aprueba nada ni responde nada. La pregunta de una sesión vigilada sigue abierta hasta que la respondes tú o el agente al que se le permite responderla, exactamente como antes. Una tarjeta de aprobación en una sesión vigilada solo la puedes responder tú; el evento lo dice.

La tarjeta de aprobación #

La primera vez que un agente de una conversación se suscribe a sesiones de un relay, tiene que preguntarte. En esa conversación aparece una tarjeta de aprobación:

This agent wants to watch “Review: server/” (3f9c…), “Review: web/” (a12b…) and be woken by their events.

Events: question_asked, error, turn_end, subagent_finished, task_failed, stalled, all_idle
Eliges Qué pasa
Allow (Permitir) Se crea la suscripción. Las suscripciones posteriores de la conversación a sesiones del mismo relay no necesitan una tarjeta nueva.
Deny (Denegar) Se rechaza la suscripción. Se avisa al agente, que sigue sin ella.

Casos especiales:

  • Todas las sesiones. Una suscripción a all siempre se indica de forma explícita ("ALL sessions of this relay, including ones created later"; Nuevo en 0.9.16 con "except N it leaves out" cuando omite sesiones). Si la primera tarjeta no era para all, una suscripción posterior a all vuelve a preguntar. Si lo era, Allow cubre todas las suscripciones posteriores, incluida all.
  • Un relay emparejado. La tarjeta nombra el relay. Se pregunta por cada relay por separado, y en el otro relay no se pregunta nada.
  • Tomar el relevo. Un agente que sustituye a otro agente que vigila puede traspasar todas las suscripciones del anterior. Esto siempre pregunta, por muchas tarjetas que hayas permitido antes. La tarjeta dice cuántas suscripciones se trasladan y desde qué sesión; la sesión anterior deja de recibir sus eventos, y las suscripciones conservan sus ajustes. Tu Allow también cuenta como aprobación de las suscripciones en los relays implicados, incluida all si una de ellas vigilaba todas las sesiones.

Nuevo en 0.9.16 La tarjeta también indica las opciones de una suscripción: once (una vez), heartbeat every N min (latido cada N min), digest every N min (resumen cada N min) y quiet HH:MM–HH:MM (silencio HH:MM–HH:MM) con la zona horaria.

La tarjeta aparece en todos los modos del relay: no depende de ask, plan ni agent. La aprobación pertenece a la conversación y se conserva tras un reinicio del relay.

Lo que ves #

El chip y su lista #

Mientras una conversación tiene suscripciones, su cabecera muestra watching N sessions (vigila N sesiones), contando cada sesión distinta que vigila. Con una suscripción a todas las sesiones dice watching all sessions (vigila todas las sesiones), seguido de (+N listed) (+N listadas) cuando la conversación también lista sesiones por nombre. Nuevo en 0.9.16 Una pequeña indicación al lado muestra las opciones de una suscripción, digest N min (resumen N min) o quiet HH:MM–HH:MM, como máximo dos. Haz clic en el chip para abrir la lista: una fila por suscripción, con las sesiones (o el relay), los eventos, y si es once o tiene latido, Nuevo en 0.9.16 resumen, horas de silencio o sesiones omitidas, que aparecen como N left out (N omitidas). Unsubscribe (Cancelar la suscripción) termina esa suscripción en el acto, sin preguntar al agente.

La insignia de vigilado #

Una sesión que otra conversación vigila por nombre lleva una insignia watched (vigilado) en la lista de sesiones y en su cabecera. Pasa el puntero sobre ella para ver quién vigila; un agente de un relay emparejado aparece como su sesión y su relay. Una suscripción a todas las sesiones no añade insignia en la lista de sesiones, solo en la cabecera de cada sesión. Una suscripción tuya en un relay emparejado no añade ninguna insignia en tu lado. Nuevo en 0.9.16 Una sesión que omite una suscripción a todas no muestra insignia por ella.

Filas de eventos #

En la transcripción del agente que vigila, un evento es una fila compacta con la etiqueta relay event (evento del relay), nunca uno de tus mensajes. Se pliega en una línea como esta:

relay event   3 events · question, reply

Ábrela para leer las líneas, por ejemplo:

[relay event] session "Review: server/" (3f9c…): turn_end (done) "Found 4 places without input checks: …"

Una fila con una pregunta o un error se queda abierta. Una fila que reúne eventos retenidos por el límite por hora empieza por Digest (Resumen); Nuevo en 0.9.16 lo mismo ocurre con una que reunió el resumen de una suscripción, y una retenida durante las horas de silencio empieza por After quiet hours (Después de las horas de silencio). Una fila con la etiqueta replayed (reproducido) contiene eventos que un relay emparejado guardó mientras la conexión estaba caída.

Detrás de la fila hay un mensaje que empieza con una línea que dice que es automático, no tuyo, y que no aprueba nada. El agente también lee esa línea.

Cuando el agente que vigila está ocupado #

  • Inactivo. El mensaje inicia un nuevo turn.
  • En mitad de un turn. En Claude, en DeepSeek y en el motor SDK de GitHub Copilot y OpenAI, el mensaje corrige el rumbo del turn en curso. En los demás proveedores espera y se convierte en el siguiente turn. Los eventos que llegan mientras un mensaje sigue esperando se le añaden, así que un agente ocupado recibe un solo seguimiento, no uno por evento.

Ritmo #

Cada aviso le cuesta un turn al agente que vigila, así que OAR los limita.

  • Agrupación. Los eventos dentro de 30 segundos llegan como un solo mensaje.
  • Límite por hora. Tras 20 avisos en la última hora, el resto se retiene y se envía como resumen cada 10 minutos. Los avisos en grupos de 30 segundos se reanudan en cuanto caen menos de 20 avisos dentro de la última hora.
  • Nunca se retienen. Una pregunta, Nuevo en 0.9.16 tu respuesta a una pregunta que no bloquea, y un error siempre llegan en el acto, también por encima del límite. Aun así, cuentan para él.
  • Stalled. Una sesión cuenta como stalled cuando lleva 15 minutos en silencio (o el tiempo que eligió la suscripción) mientras sigue corriendo un turn o una tarea en segundo plano. Se avisa una vez por cada periodo de silencio. Una sesión que espera una respuesta no está detenida: su pregunta ya se avisó.
  • Latido. Si el agente lo pidió, recibe un mensaje con ese intervalo mientras corre un turn o una tarea vigilados, y ninguno mientras todo está inactivo. Le dice al agente que vigila que la vigilancia funciona. Un latido no se retiene para el resumen ni cuenta para el límite.

Los mismos números están en Cómo llegan los eventos en la referencia.

Menos avisos Nuevo en 0.9.16 #

Un agente puede pedir menos avisos por suscripción. Una pregunta y un error siguen llegando en el acto; todo lo demás espera.

Opción Qué hace
Resumen (digest_minutes, de 1 a 1440) Los eventos de la suscripción llegan como un solo mensaje cada N minutos, el siguiente como pronto N minutos después del último.
Horas de silencio (quiet_hours, por ejemplo {"from":"23:00","to":"06:00","tz":"Europe/Berlin"}) Una franja diaria en una zona horaria, que puede pasar de la medianoche y sigue los cambios de hora. Lo que pasa dentro llega como un solo mensaje cuando termina la franja, marcado como retenido durante las horas de silencio. Dentro de ella no se envía ningún latido.
Omitir sesiones (exclude, hasta 50 ids de sesión) Una suscripción a todas las sesiones las ignora, también para «ya no corre nada» y para el latido.

La noche en que se atrasan los relojes y la hora de fin llega dos veces, la franja termina la primera vez y no se vuelve a entrar en ella en la hora repetida; la noche en que se adelantan y se saltan la hora de fin, termina en el momento del salto. Un límite: una hora de inicio dentro de la hora repetida inicia la franja en la primera pasada, y en la segunda pasada los minutos anteriores a la hora de inicio cuentan como fuera de ella.

Sin eco. Cuando el agente que vigila envía él mismo un prompt a una sesión y espera la respuesta terminada (con send, create_session o un wait posterior), la respuesta de ese turn no lo despierta una segunda vez. Sus errores y preguntas sí lo hacen, y un prompt cuya respuesta no esperó lo despierta como antes.

Los eventos retenidos sobreviven a un reinicio del relay, y el límite por hora se sigue aplicando además. El agente ve con list_subscriptions cuántos eventos retiene cada suscripción y cuándo tocan. Los detalles están en Menos avisos en la referencia.

Cuánto dura una suscripción #

Una suscripción termina cuando:

  • el agente o tú canceláis la suscripción;
  • la conversación del agente que vigila se archiva o se elimina;
  • una sesión vigilada se archiva o se elimina. Una suscripción que lista varias sesiones conserva las demás, y termina con la última;
  • era una suscripción once y se disparó (con una expresión regular, en su primera coincidencia);
  • en un relay emparejado, se quita el emparejamiento: las suscripciones en ese relay terminan en el acto.

Las suscripciones y los eventos aún no entregados sobreviven a un reinicio del relay.

Una conversación puede tener 20 suscripciones a la vez.

Sesiones en un relay emparejado #

Vigilar una sesión en un relay emparejado necesita lo mismo que cualquier llamada a relay_tool allí:

  • el relay está desbloqueado en la conversación;
  • su nivel Agents may (Los agentes pueden) para este relay es al menos de lectura (qué permite un relay emparejado);
  • el otro relay acepta agentes de otros relays: Accept prompts from other relays' agents (Aceptar prompts de agentes de otros relays).

La tarjeta se pregunta aquí, como se describe arriba. Basta con que el emparejamiento exista en un sentido. Tu relay recoge los eventos del otro cada pocos segundos, y sus líneas empiezan con el nombre del otro relay:

[relay event] build-box · session "Nightly deploy" (77aa…): turn_end (done) "Deployed. The health check is green."

Si el otro relay no responde durante un minuto, la conexión cuenta como perdida. El otro relay guarda lo que pasa: hasta 500 eventos por suscripción, durante hasta 7 días. Cuando vuelve a responder, una fila con la etiqueta replayed los trae, primero las preguntas y los errores, entre una línea link_lost y una link_restored. Si pasó más de lo que pudo guardar, la última línea dice cuántos se descartaron. Una suscripción que nadie recogió durante 7 días termina allí. Nuevo en 0.9.16 Los eventos reproducidos respetan el resumen y las horas de silencio de la suscripción como cualquier otro; la última línea dice entonces cuántos llegan más tarde.

Nuevo en 0.9.16 El resumen y las horas de silencio de una suscripción a un relay emparejado se aplican aquí, donde está el agente que vigila; al otro relay se le dice qué sesiones se omiten. Un relay emparejado con un OAR antiguo no conoce exclude: tu relay sigue descartando los eventos de esas sesiones, pero ese relay las cuenta para «ya no corre nada», para las detenciones y en la lista del latido.

Un relay emparejado que ejecuta un OAR antiguo responde que necesita una actualización.

Por proveedor #

Qué sesiones se pueden vigilar no depende del proveedor: se puede vigilar cualquier sesión del relay. Lo que cambia es la sesión que vigila.

Proveedor de la sesión que vigila Puede suscribirse Evento mientras corre un turn
Claude sí corrige el rumbo del turn en curso
DeepSeek Nuevo en 0.9.17 sí corrige el rumbo del turn en curso
GitHub Copilot, OpenAI, motor SDK sí corrige el rumbo del turn en curso
GitHub Copilot, OpenAI, motor de extensión sí se convierte en el siguiente turn
Cursor sí se convierte en el siguiente turn
Grok sí se convierte en el siguiente turn
Claude Cloud no: no tiene relay_tool
OpenAI Image no: llama a la Images API y no ejecuta ningún agente

Qué proveedores reciben relay_tool se indica en Herramientas de agente.

Sesiones que arrancaron antes de la actualización

Un worker de sesión crea sus herramientas al arrancar. Una conversación cuyo agente ya estaba en marcha cuando actualizaste a 0.9.10 no tiene subscribe hasta que se reinicia: Kill session (Matar la sesión) en una sesión inactiva es suficiente.