Todas las páginas
En esta página

Compartir una conversación

Compartir da a una conversación un enlace público de solo lectura. Cualquiera a quien se lo envíes puede leer la transcripción en su navegador sin iniciar sesión, y sigue la conversación a medida que avanza. No puede enviar, detener, cambiar ni abrir nada más en tu relay. Tú decides qué muestra el enlace: se pueden ocultar mensajes sueltos, y las rutas del host del relay se filtran. Tú siempre ves la conversación completa, y Settings → Sharing (Ajustes → Compartir) lista todos los enlaces con un registro de quién los abrió.

El enlace es público

Cualquiera que tenga la dirección puede leer la transcripción compartida, y puede pasarla a otros. El relay no pregunta quién la abre. Trátala como una contraseña para esa conversación concreta, y lee la conversación con Preview as shared (Vista como compartida) antes de enviarla.

Crear el enlace #

  1. Abre la conversación.
  2. Abre su menú ⋯ y elige ➡️ Share conversation (Compartir la conversación).

No hay ningún cuadro de diálogo. El relay crea el enlace y lo copia en tu portapapeles, y un aviso breve lo indica:

Share link copied to clipboard.

Si el navegador no deja que la página escriba en el portapapeles, el aviso muestra en su lugar la propia dirección, y la copias desde ahí.

La dirección es como https://relay.example.com/shared/ seguida de un token aleatorio largo (64 caracteres hexadecimales). El host es el que usaste para llegar al relay; detrás de un proxy en otra máquina es el que informa el proxy, una vez que el relay confía en ese proxy. Si el relay se sirve bajo una subruta (remotePath en config.json), la subruta forma parte de la dirección.

Volver a elegir ➡️ Share conversation no crea un segundo enlace: mientras la conversación tiene un enlace activo, recibes la misma dirección. Se puede compartir cualquier conversación, también una archivada.

Tus enlaces compartidos Nuevo en 0.9.11 #

Settings → Sharing lista todas las conversaciones que tienen un enlace en este momento, con cuándo se compartieron (y renovaron), cuándo se abrieron por última vez, cuántas veces y por cuántos espectadores. Un clic en el título abre la conversación. Cada fila tiene:

Botón Qué hace
Copy link (Copiar enlace) Copia el enlace.
Renew link (Renovar el enlace) Da a la conversación un enlace nuevo, tras una confirmación, y lo copia. El enlace antiguo deja de funcionar de inmediato. El registro de accesos pasa al enlace nuevo. Úsalo cuando un enlace llegó más lejos de lo debido.
Stop sharing (Dejar de compartir) Termina el enlace, tras una confirmación. Deja de funcionar de inmediato, también para quien esté leyendo en ese momento, y su registro de accesos se elimina.
Access log (Registro de accesos) Despliega el registro de accesos del enlace.

Mientras la conversación abierta está compartida, su menú ⋯ también tiene ⛔ Stop sharing, que también pregunta antes.

Después de dejar de compartir o renovar #

Un enlace detenido o renovado responde con un simple 404, tanto la página como los datos, exactamente como un enlace que nunca existió. Una página compartida que sigue abierta con él se detiene en su siguiente actualización, en un segundo aproximadamente. Volver a elegir ➡️ Share conversation tras dejar de compartir crea un enlace nuevo con un token nuevo; una dirección antigua no vuelve nunca.

Lo mismo funciona sin la app, con el token de autenticación (El token de acceso) como cabecera, por ejemplo para dejar de compartir desde un script:

curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN" \
  https://relay.example.com/api/conversation/CONVERSATION_ID/share

POST a la misma dirección crea el enlace, POST …/share/renew lo renueva, y GET /api/shares los lista.

El registro de accesos #

Cada fila de la lista se despliega en su registro de accesos, con lo más reciente primero. Una entrada es una apertura de la página compartida, no cada actualización: la página recarga la conversación cada segundo aproximadamente, y solo cuenta la primera carga. Una segunda carga del mismo espectador en menos de 10 segundos cuenta una sola vez. Un espectador que vuelve tras 30 minutos sin leer cuenta de nuevo, por ejemplo una página que estuvo dormida en una pestaña en segundo plano. Un script que lee el enlace sin la página cuenta de la misma forma, así que nadie lee el enlace sin dejar una entrada.

Parte de una entrada De dónde viene
Hora Cuándo se abrió la página.
Dirección IP La dirección del espectador, tal como la ve el relay. Detrás de un proxy es la dirección que informa el proxy, si el relay confía en él; si no, todos los espectadores tienen la dirección del proxy. IP not stored (IP no guardada) cuando Store viewer IP addresses (Guardar las direcciones IP de los espectadores) estaba desactivado.
País El código de país que añade un túnel de Cloudflare, tomado solo de un proxy de confianza. Vacío en los demás casos.
viewer … Un hash corto con clave de la dirección y el navegador, el mismo para cada apertura del mismo espectador, también cuando no se guarda la dirección.
Navegador El user agent que envió el navegador del espectador, como texto.

La lista muestra las 200 aperturas más recientes e indica cuántas hay en total.

El registro pasa al enlace nuevo cuando lo renuevas. Se conserva mientras el enlace esté compartido, y se elimina cuando dejas de compartir o eliminas la conversación.

Store viewer IP addresses en Access log (activado de forma predeterminada) decide si las entradas nuevas guardan la dirección. Si está desactivado, las entradas nuevas no guardan ninguna, y tampoco la línea del registro propio del relay para una lectura compartida. Si ya hay direcciones guardadas, OAR pregunta si eliminarlas también: Remove them (Eliminarlos) las borra de todas las entradas del registro de accesos y del registro de estado de las lecturas compartidas, y las entradas en sí se quedan; Keep them (Conservarlos) las deja. El ajuste se aplica a todos los enlaces del relay.

Rutas y nombres de archivo Nuevo en 0.9.11 #

Una vista compartida no lleva las rutas del host del relay completas. El relay filtra todo lo que sirve a un enlace según el ajuste Paths and file names (Rutas y nombres de archivo) de Settings → Sharing:

Opción Lo que ve un espectador para /srv/projects/shop/src/cart.js
Show every path and file name (Mostrar todas las rutas y nombres de archivo) la ruta tal cual
Hide the path, show the file name (Ocultar la ruta, mostrar el nombre del archivo) (el predeterminado) cart.js
Hide paths and file names (Ocultar rutas y nombres de archivo) ‹hidden›

El ajuste se aplica a todos los enlaces del relay, desde la siguiente actualización de una página compartida. Tu propia vista siempre lo muestra todo.

Lo que atrapa el filtro:

  • Siempre: rutas en los argumentos de herramientas, menciones de archivos (@file:, @folder:, también las relativas), nombres de adjuntos, registros de subagents y las cabeceras de archivo de los diffs.
  • En texto libre, es decir, respuestas, razonamiento, salida de herramientas y bloques de código: las carpetas que conoce el relay (la carpeta de trabajo de la conversación, las raíces del workspace, tu carpeta personal, las carpetas de datos y de archivos subidos del propio relay) con lo que las siga, rutas absolutas de Windows y Unix, rutas ~/… y tu nombre de usuario entre separadores. Esto se hace lo mejor posible, sin garantías.
  • No se atrapa: rutas relativas en texto libre (src/cart.js), rutas de un solo nivel como /tmp, direcciones web y nada que esté dentro de una imagen.

Preview as shared (Vista como compartida) #

🔍 Preview as shared en el menú ⋯ de la conversación abre la conversación como la muestra su enlace, sin crear un enlace y sin una entrada en ningún registro de accesos. El verde marca lo que reciben los espectadores en lugar de una ruta. El ámbar marca lo que todavía parece una: una ruta relativa con extensión de archivo, un fragmento home/… o Users/…, tu nombre de usuario como palabra y, con Show every path and file name, cualquier ruta absoluta. Lee las marcas en ámbar y oculta un mensaje que revele más de lo que debería.

Al archivar, eliminar o compactar #

  • Archivar no termina el enlace: una conversación archivada sigue siendo legible a través de él, y desarchivarla no cambia nada.
  • Eliminar lo termina y elimina su registro de accesos: el enlace responde 404.
  • Compactar (consulta Compactar una conversación) archiva la conversación y continúa en una nueva. El enlace se queda con la conversación antigua, archivada, y sigue mostrando lo que mostraba. La conversación nueva no tiene enlace, así que no está compartida hasta que la compartas.

Consulta La lista de conversaciones para archivar y eliminar.

Lo que ve un espectador #

El enlace abre la conversación con el diseño normal del chat, sin la barra lateral y sin el área de redacción. El título es el título de la conversación.

Parte de la conversación En la vista compartida
Tus mensajes y las respuestas Se muestran, con las rutas filtradas.
Líneas de actividad de herramientas y razonamiento Se muestran, con las rutas filtradas.
Adjuntos e imágenes Se muestran, incluidas las imágenes que generó un agente, con un nombre filtrado. El espectador puede abrir los de los mensajes que puede ver.
Filas de subagents Se muestran. Nuevo en 0.9.11 Una fila abre el registro del subagent, de solo lectura, sin Stop (Detener) y filtrado como el resto.
Tarjetas de vista previa Se muestran solo con su etiqueta, sin el enlace. Un enlace de vista previa citado en cualquier parte del texto dice [preview link removed]. Una conversación compartida no publica la app de la vista previa.
Filas de eventos del relay (de sesiones vigiladas) Se muestran como filas de eventos. El texto nombra la sesión vigilada.
Mensajes que llegaron de otro relay Se muestran con una insignia. Se quitan la dirección del relay y el id de la otra conversación; su nombre, el título de la otra conversación, el proveedor y el modelo se quedan.
Tarjetas de pregunta y tableros del plan No se muestran. No forman parte de los datos que recibe un espectador, así que un espectador solo ve lo que el agente escribió en torno a ellos.
Imágenes y enlaces a archivos en el texto de los mensajes que apuntan a archivos de tu relay No se cargan para un espectador: esos archivos necesitan tu inicio de sesión.
Mensajes que ocultaste No se envían en absoluto.
Mensajes fijados y la lista 🙈 No se muestran: son tuyos.
Carpeta de trabajo, detalles de la sesión y de la runtime No se envían.
La búsqueda, el botón de contexto, los selectores de modelo y de modo, la pantalla completa, la instalación de la app No disponibles.

Los datos que carga la página también llevan el modelo usado en cada mensaje. La página compartida pide a los buscadores que no la indexen.

Actualizaciones en vivo #

La página compartida recarga la conversación cada 0,9 segundos mientras está en primer plano, así que los mensajes nuevos aparecen a medida que la conversación continúa. No abre una conexión en vivo con el relay, y una página en una pestaña en segundo plano no se recarga. Un espectador que se desplaza hacia arriba para leer no es arrastrado al final.

Espectadores #

Cada página compartida abierta le dice al relay cada 12 segundos que está ahí. Ves cuántos están leyendo como información emergente sobre el título de la conversación en tu propia vista, por ejemplo 2 watchers currently reading this conversation. El indicador solo está mientras al menos uno está leyendo. Un espectador que lleva 45 segundos en silencio sale de la cuenta.

Ocultar mensajes sueltos #

Cada mensaje en tu propia vista tiene un botón Hide (Ocultar), que aparece cuando pasas el puntero por el mensaje (en pantallas táctiles, toca el mensaje). Púlsalo y el mensaje sale de la vista compartida. No se elimina. Cada mensaje se oculta por separado: ocultar tu pregunta no oculta la respuesta, ni al revés. La actividad de herramientas y el razonamiento de una respuesta van con la respuesta.

  • En tu vista, el mensaje sigue completo y está marcado como Hidden from shared viewers (Oculto a los espectadores del enlace compartido). Su botón dice ahora Unhide (Mostrar); púlsalo y el mensaje vuelve a ser visible para los espectadores.
  • Un espectador no ve nada en su lugar. El mensaje simplemente no está en la transcripción. Los adjuntos de un mensaje oculto tampoco se pueden obtener a través del enlace, salvo que el mismo archivo esté adjunto a un mensaje visible.
  • Un aviso confirma cada cambio: Message hidden from shared viewers. o Message visible to shared viewers.
  • Hide no se ofrece para un mensaje que sigue en cola, ni para los mensajes del turn en curso. Ocúltalos después del turn.

Un mensaje oculto está oculto en todos los enlaces de la conversación, incluido un enlace nuevo creado después. La marca sobrevive a un reinicio del relay.

La lista 🙈 Nuevo en 0.9.11 #

Mientras una conversación oculta mensajes, un botón 🙈 con su número está junto a 📍 en su cabecera (nunca en la vista compartida). Abre la lista de mensajes ocultos, como la de los fijados:

  • Una fila salta a su mensaje, también a uno muy arriba en el historial, y tiene Unhide.
  • Unhide all (Mostrar todos) pregunta antes. Un mensaje cuyo turn sigue en curso se queda oculto, y la lista lo nombra.
  • El número y la lista incluyen mensajes que aún no se han cargado, y otras pestañas y dispositivos siguen un cambio sin recargar.

Lo que puede hacer un espectador #

El menú ⋯ de la vista compartida tiene una sola entrada, ☀️ Day mode o 🌙 Night mode (Modo Día / Modo Noche), que cambia el tema de la página para ese espectador. Aparte de eso, el espectador puede desplazarse por la transcripción, cargar mensajes anteriores, abrir la actividad plegada, abrir registros de subagents y abrir adjuntos. El campo de entrada está desactivado y dice Shared conversation (read-only) (Conversación compartida, solo lectura). Nada de lo que hace un espectador cambia la conversación.

Límites #

Espectadores contados a la vez, por conversación 200 (sharedPresenceMaxPerConversation).
Espectadores contados a la vez, en total 5000 (sharedPresenceMaxGlobal).
Caducidad Ninguna. Un enlace funciona hasta que dejas de compartir, lo renuevas o eliminas la conversación.

Ambos límites están en config.json. Cuando se alcanza un límite, el espectador que lleva más tiempo inactivo sale de la cuenta para dejar sitio a uno nuevo. Los límites acotan la cuenta, es decir, el número que ves como espectadores; la propia solicitud de la transcripción no los comprueba, así que un espectador por encima de la cuenta puede seguir leyendo.

Llegar al relay #

La página compartida y sus imágenes las sirve tu relay, no oar.sh ni ningún otro servicio. Un espectador tiene que poder llegar a la dirección del relay desde donde esté. Un relay que solo escucha en tu propia máquina (localhostOnly) no lo puede abrir nadie más. Para compartir fuera de tu red, haz que se llegue al relay a través de un túnel.

Si el túnel tiene reglas de acceso, también se aplican al enlace compartido. Con una aplicación de Cloudflare Access sobre el nombre de host, a los espectadores se les pide iniciar sesión y el enlace no les funciona, salvo que la aplicación deje pasar /shared/* y /api/shared/* sin inicio de sesión. Tampoco pongas una regla de caché en /api/shared/*: la página recarga esa dirección para seguir la conversación, y una respuesta en caché seguiría mostrando un estado antiguo.

Por proveedor #

Nada cambia según el proveedor. Compartir lee la conversación guardada, así que funciona igual para los chats de GitHub Copilot, OpenAI, Claude, Claude Cloud, Cursor, Grok y DeepSeek, y para los chats de OpenAI Image, cuyas imágenes generadas se sirven a través del enlace. Nuevo en 0.9.11 Una respuesta lleva el chip rojo ran on … en la vista compartida solo cuando de verdad se ejecutó en un proveedor distinto del de la conversación.

Si no funciona #

Lo que ves Causa y solución
El enlace responde 404 Se dejó de compartir, se renovó el enlace o se eliminó la conversación. Settings → Sharing lista los enlaces que funcionan.
Al espectador se le pide iniciar sesión, o ve un estado antiguo Cloudflare Access o una regla de caché delante del relay. Consulta Llegar al relay.
Todas las entradas del registro de accesos tienen la misma dirección Un proxy en otra máquina en el que el relay no confía. Configura trustProxy.
Sigue apareciendo una ruta en la vista compartida Es relativa, o está dentro de una imagen. Compruébalo con Preview as shared y oculta el mensaje.

Para la transcripción que lee el espectador, consulta Leer la transcripción.