Mensajería entre sesiones en Claude Code
Desde la v2.1.224, cada sesión interactiva de Claude Code en una Mac o en una máquina Linux enlaza un socket Unix al arrancar, y cualquier otra sesión que ejecutes puede dejarle un mensaje de texto; el mío está en /tmp/cc-socks/38590.sock, con permisos solo para el propietario.1 Windows nativo recibe en su lugar una tubería con nombre (named pipe), desde la v2.1.239 según las notas de la versión, y una excepción de enlace tardío aparece en la sección Las trampas. Dos herramientas mueven la función: ListAgents descubre cuáles de tus sesiones están al alcance y SendMessage entrega un mensaje a una de ellas por nombre.2 Nada que activar, nada que configurar. Si ambas sesiones ejecutan la v2.1.224 o posterior (v2.1.239 en Windows) en la misma máquina, ya pueden hablar entre sí.
Las sesiones de Claude Code se envían mensajes entre sí a través de un socket Unix local (una tubería con nombre en Windows desde la v2.1.239): ListAgents encuentra una sesión alcanzable y SendMessage le entrega texto plano por nombre. Un mensaje es entrada, nunca autoridad. No puede aprobar solicitudes de permiso, cambiar la configuración ni ejecutar comandos, y no lleva historial de conversación ni archivos.
TL;DR
Las sesiones de Claude Code ahora pueden enviarse mensajes entre sí: en una misma máquina a través de sockets locales que nunca tocan los servidores de Anthropic, y entre máquinas mediante Remote Control (solo respuestas en el lanzamiento; la v2.1.225 añadió la posibilidad de iniciar esas conversaciones por nombre).15 Un mensaje es solo texto plano, nunca historial de conversación, archivos ni permisos, y la sesión receptora lo trata como entrada, no como autoridad: no puede aprobar solicitudes de permiso, cambiar la configuración ni ejecutar comandos.1 La función convierte una flota de terminales independientes en algo más parecido a un equipo, y los mejores usos son los mensajes de coordinación que antes llevabas a mano: “la migración terminó”, “renombré esa columna”, “ya es seguro hacer rebase sobre main”. La trampa más afilada es la ausencia silenciosa: cuatro variables de entorno de privacidad sin relación entre sí pueden desactivar la función sin avisar, según sus valores.3 Desde el lanzamiento, Windows se sumó de forma nativa en la v2.1.239, y la v2.1.236 añadió notify_when_idle, que permite a una sesión pedirle a otra de la misma máquina un único aviso la próxima vez que quede inactiva o termine.910
Qué se lanzó
La versión v2.1.224 añadió SendMessage entre sesiones con descubrimiento mediante ListAgents en macOS y Linux; la v2.1.225 lo amplió para que una sesión también pueda iniciar una conversación con tus sesiones de Remote Control en otras máquinas, donde antes solo podía responder.45
Tres superficies te dejan ver la maquinaria:
/list-agents(alias/peers) imprime en su primera línea el nombre de la propia sesión (el que usan tus otras sesiones para llegar a ella, mostrado desde la v2.1.239) y después cada sesión que Claude puede alcanzar: los subagentes dentro de la sesión actual, los compañeros vivos del equipo de agentes de la sesión (listados desde la v2.1.239; antes un compañero alcanzable parecía ausente), tus otras sesiones locales, incluidas las que corren en segundo plano, y, mientras Remote Control esté conectado, tus sesiones en otras máquinas y en Claude Code en la web.19/statusmuestra una filaPeer addresscon el socket de la bandeja de entrada de la propia sesión, con el prefijouds:.1CLAUDE_CODE_MESSAGING_SOCKET, que Claude Code exporta a los hooks y a los comandos de Bash una vez enlazada la bandeja de entrada (mira la nota sobre el enlace tardío en Las trampas), contiene la ruta del socket de la propia sesión.16 Más abajo explico por qué importa.
Al verificarlo en mi propia máquina el 25 de agosto de 2026, con Claude Code 2.1.246: el listado de agentes abría con la línea “This session is blakecrosley-com-76 [04e18a] — the name other sessions use to message it (it is not listed below; a message to it would be a message to yourself).” (esta sesión es blakecrosley-com-76, el nombre que las otras sesiones usan para escribirle; no aparece abajo, y un mensaje a ella sería un mensaje a ti mismo), seguida de 11 sesiones pares en filas como “resumegeni-25 [10d770] · interactive · idle · started 21h ago” (interactiva, inactiva, iniciada hace 21 h), con nombres en la forma directorio más sufijo de dos caracteres y un identificador corto entre corchetes, estados idle, busy y shell, la antigüedad de arranque en cada fila y un bloque Subagents aparte para los hijos de la propia sesión. Los archivos de socket bajo /tmp/cc-socks/ llevan permisos srw------- y el directorio en sí es drwx------: legibles y escribibles solo por mi usuario, que es la frontera en máquinas compartidas.1
Las sesiones responden a nombres. Asigna uno con /rename o con la opción --name; si no, Claude Code deriva uno del directorio de trabajo, como my-app-3f.111 Desde la v2.1.232, cuando inicias, reanudas o renombras una sesión interactiva con un nombre que otra sesión viva de la máquina ya usa, Claude Code deja el nombre a la sesión que lo tiene, renombra la tuya con una variante name-word-word (algo como auth-refactor-graceful-unicorn) y te lo dice.110 Las colisiones sobreviven cuando una sesión ejecuta una versión anterior, cuando el nombre compartido es uno que generó Claude Code, o cuando inicias una sesión en segundo plano o con -p usando un --name que Claude Code no comprueba al arrancar.11 El listado siempre muestra el directorio de trabajo de cada sesión local, lo que distingue sesiones con el mismo nombre cuando corren en directorios distintos; para un nombre compartido, Claude además añade un identificador corto a cada fila y lo usa en la dirección. Claude recurre a ese mismo direccionamiento por identificador corto cuando Claude Code no pudo comprobar todos los lugares donde corren tus sesiones, por ejemplo una cuenta cuya lista de sesiones en la nube o de Remote Control superó el número acotado de páginas que lee.1
Qué cambió desde el lanzamiento (agosto de 2026)
Cinco versiones en las dos semanas posteriores al lanzamiento cerraron la brecha de Windows que este artículo señalaba, ajustaron el nombrado y el direccionamiento, y cerraron cuatro modos de fallo silencioso que el artículo no señalaba:910
| Versión | Cambio |
|---|---|
| v2.1.232 | Nombres únicos y menciones con @. Las sesiones interactivas de una misma máquina conservan nombres únicos (una colisión renombra a la recién llegada con una variante name-word-word y te lo dice); escribir @ en el prompt menciona otra sesión viva por nombre, y Claude la alcanza directamente con SendMessage; /config gana una fila “Messages from your other sessions” (mensajes de tus otras sesiones) que escribe crossSessionInbound (accept, hold, refuse) en la configuración de usuario, junto a una fila “Dialog expiry” (caducidad del diálogo). La misma versión endureció el directorio de sockets autogenerado en el /tmp compartido: Claude Code ahora rechaza un enlace simbólico plantado de antemano o el directorio de otro usuario en lugar de usarlo.110 |
| v2.1.235 | SendMessage rechaza de entrada un mensaje demasiado grande para la entrega entre sesiones, en lugar de descartarlo en silencio.10 |
| v2.1.236 | notify_when_idle: pide a otra sesión de la misma máquina que envíe un único aviso la próxima vez que quede inactiva o termine (ambas sesiones en v2.1.236 o posterior). Opcional, de un solo disparo, sin sondeo. La misma versión rechaza de entrada más mensajes cuando una ráfaga rápida superaría lo que acepta la bandeja del destinatario, en lugar de reportarlos como enviados mientras el destinatario los descartaba.110 |
| v2.1.238 | Honestidad en la entrega: enviar a una sesión de esta máquina que rechaza mensajes entrantes (crossSessionInbound: "refuse") ahora reporta “refused” (rechazado) al remitente en lugar de un éxito silencioso, y una sesión cuya bandeja descarta tus mensajes (límite de tasa o cola llena) se lo dice a tu sesión en lugar de que los mensajes se esfumen.10 |
| v2.1.239 | Windows. La mensajería entre sesiones funciona de forma nativa, con las mismas herramientas SendMessage y ListAgents; ListAgents ahora le dice a una sesión su propio nombre (el que usan las pares para llegar a ella) y lista a los compañeros de equipo vivos, que antes parecían ausentes; SendMessage a tu propio nombre lo dice así en lugar de “no agent named …”.9 |
El efecto práctico: el patrón de “la tarea larga que informa” de más abajo ya no necesita un prompt de consulta. La sesión que vigila le pide a la tarea larga un único aviso de inactividad con notify_when_idle y recibe respuesta cuando esa sesión vuelve a quedar inactiva o termina. Dos de los cuatro modos de fallo (un mensaje demasiado grande, o una ráfaga demasiado rápida para la bandeja) ahora fallan de entrada en el remitente; los otros dos (un mensaje rechazado o descartado) vuelven a un remitente interactivo de la misma máquina como reportes explícitos.
El modelo de confianza es la parte interesante
El diseño de Anthropic responde a una pregunta que la mayoría de los sistemas multiagente manejan torpemente: ¿cuánto vale un mensaje de otro agente? Aquí la respuesta es precisa: un mensaje es información, nunca autoridad.1
Cuando la sesión A le escribe a la sesión B, cuatro reglas acotan lo que llega:1
- No puede aprobar nada. Una solicitud de permiso pendiente en B ignora cualquier cosa que diga A. Solo tú respondes las solicitudes.
- No puede cambiar la configuración. Claude Code instruye al Claude receptor para que nunca altere la configuración de permisos,
CLAUDE.mdni ninguna otra configuración porque otra sesión lo pidió. - Los comandos llegan como texto. Un
/compacten el cuerpo del mensaje son ocho caracteres de prosa, nunca un comando ejecutado. - Las solicitudes de permiso siguen saltando. Si actuar sobre el mensaje requiere un permiso que B no tiene, ves la misma solicitud que para cualquier otro trabajo.
La entrega entrante tiene su propia compuerta. Cada mensaje que llega termina en uno de tres resultados (entregado, retenido hasta tu aprobación o rechazado), controlados por el ajuste crossSessionInbound (accept, hold, refuse).1 Si no configuras nada, Claude Code decide mensaje por mensaje usando los modos de permisos de las dos sesiones, y la lógica predeterminada es elegante: las sesiones que omiten las solicitudes de permiso forman una clase, y todas las demás la otra (el modo plan cuenta como omisión cuando la sesión tiene la omisión disponible; auto, acceptEdits y dontAsk cuentan como sesiones que preguntan). Una sesión que pregunta recibe mensajes libremente pero retiene todo lo que llega desde una sesión que omite; una sesión que omite retiene todo salvo los mensajes de otras sesiones que también omiten.1 La asimetría es deliberada: un mensaje no debe montarse sobre la autoridad de una sesión permisiva, un principio que la v2.1.224 aplica a la entrada después de que la v2.1.222 lo aplicara a la salida en modo auto, donde el clasificador de permisos revisa cada envío antes de despacharlo.7
Los mensajes retenidos abren un diálogo de aprobación que muestra el remitente y una vista previa; los diálogos sin respuesta caducan a los cinco minutos (ajustable con dialogExpiry) y el mensaje se descarta.1 Una sesión en segundo plano sin terminal adjunta mantiene el diálogo abierto más allá de ese plazo; cuando te adjuntas, el mensaje se descarta solo si el diálogo sigue sin respuesta durante un periodo de plazo completo.1 Como máximo se retienen 100 mensajes a la vez.1 Dos controles más estrechan aún más las cosas: isolatePeerMachines: true exige tu aprobación explícita antes de que cualquier mensaje salga de la máquina, incluso en modo bypassPermissions, y un true desde cualquier ámbito de configuración gana, así que un archivo de proyecto versionado puede restringirlo pero nunca relajarlo.1 Las organizaciones pueden anular la función por completo con reglas de denegación sobre SendMessage y ListAgents más crossSessionInbound: "refuse" en la configuración administrada.1
Cómo viajan los mensajes
Dónde corre la otra sesión determina tanto el transporte como lo que puedes enviar:1
| Destino | Transporte | Puedes enviar |
|---|---|---|
| La misma máquina | Socket Unix por sesión (tubería con nombre en Windows nativo), nunca a través de los servidores de Anthropic | Mensajes nuevos y respuestas |
| Tu otra máquina | Servidores de Anthropic, llegando por la conexión de Remote Control de esa máquina | Respuestas; conversaciones nuevas desde la v2.1.225, mientras Remote Control esté conectado5 |
| Claude Code en la web | Servidores de Anthropic, directo a la sesión en la nube | Respuestas; conversaciones nuevas con una sesión en la nube que aparezca en el listado mientras Remote Control esté conectado1 |
Cuando este artículo se publicó por primera vez, la página de documentación de Anthropic todavía describía toda la mensajería entre máquinas como solo respuestas, mientras que las notas de la versión v2.1.225 decían que SendMessage “can now start a conversation with your Remote Control sessions on other machines by name” (ahora puede iniciar una conversación por nombre con tus sesiones de Remote Control en otras máquinas). La documentación ya se puso al día: la página ahora indica que iniciar una conversación con una sesión en otra de tus máquinas requiere la v2.1.225 o posterior y un destino que aparezca en el listado.15
La regla de la misma máquina es visibilidad del sistema de archivos: las sesiones se registran en archivos en disco, así que dos sesiones se alcanzan solo cuando ven los mismos archivos. Una sesión dentro de un contenedor y otra en el host no pueden hablar; dos sesiones dentro del mismo contenedor sí.1
La entrega respeta el ritmo de la sesión receptora: el Claude receptor lee un mensaje entre llamadas a herramientas durante un turno activo, sin interrumpir nunca una herramienta en ejecución, y Claude Code inicia un turno nuevo con el mensaje cuando la sesión está inactiva.1 Los mensajes entregados cuentan para el consumo igual que un prompt que escribieras tú.1
Cinco patrones que vale la pena construir
1. Coordinación entre worktrees. El obvio, y el caso que la documentación ilustra con su propio mensaje de ejemplo: las sesiones que trabajan el mismo repositorio en worktrees separados se cuentan entre sí qué aterrizó.1 “Schema migration finished: the new column is tenant_id, and rebasing on main is safe now.” (la migración del esquema terminó: la columna nueva es tenant_id y ya es seguro hacer rebase sobre main) es la clase de actualización que, de otro modo, exige que te des cuenta, cambies de terminal y la vuelvas a escribir. Si varias sesiones comparten un mismo checkout en lugar de worktrees, el mensaje de coordinación vale todavía más: “estoy a punto de hacer commit de content/guides/, no lo agregues al stage” evita la clásica colisión del árbol compartido en la que una sesión confirma el trabajo a medio terminar de otra.
2. Vigilante y trabajador. Ejecuta una sesión de monitoreo que observe un despliegue, una suite de pruebas o un registro, y haz que le escriba a la sesión responsable de las correcciones en cuanto algo se rompa. La sesión receptora recibe el hallazgo como contexto, no como orden; sigue decidiendo, bajo sus propios permisos, qué hacer. Combina el vigilante con sesiones en segundo plano y los hooks de notificación y obtienes una cadena de escalado que termina en un humano solo cuando debe.
3. La tarea larga que informa. Lanza una migración o una ejecución larga de pruebas en una sesión y haz que informe a la sesión que de verdad vigilas.1 El estado deja de vivir en una terminal que olvidaste. La inversa también funciona; pregunta desde el lado que vigila: “pregúntale a la sesión que corre en mi otra terminal si la migración terminó” es un prompt, y Claude se encarga por sí mismo del descubrimiento, el direccionamiento y la redacción.1 Desde la v2.1.236, sáltate la pregunta: haz que tu sesión vigilante fije notify_when_idle sobre la tarea larga y esta informa una sola vez, la próxima vez que quede inactiva o termine, sin sondeo desde ninguno de los dos lados.110 Ambas sesiones necesitan v2.1.236 o posterior, y los límites siguen los controles de entrada. Cada suscripción lleva un tope de 12 horas: si para entonces no llega ningún aviso, Claude Code descarta la suscripción y le dice a Claude que deje de esperar. Con refuse en el lado vigilado, esa sesión descarta la solicitud sin registrarla ni responderla, así que la suscripción caduca sin respuesta al llegar al tope; con refuse en el lado que pregunta, Claude Code ni siquiera se suscribe. Con hold en cualquiera de los dos lados el aviso llega degradado: la sesión vigilada omite su línea de estado, y la sesión que pregunta muestra el aviso en tu transcripción sin entregárselo a Claude.1
4. Flotas de trabajadores desatendidos. Las sesiones sin interfaz claude -p también enlazan sockets de bandeja de entrada, así que un trabajador -p de larga duración puede recibir mensajes y aparece en los listados.8 El inconveniente: una sesión -p no puede mostrar el diálogo de aprobación, así que un mensaje retenido por defecto espera hasta agotar el plazo de dialogExpiry (cinco minutos por defecto; dialogExpiry acepta 60s, 5m, 10m o never), luego se descarta y se reporta como caducado a un remitente al que pueda llegar; solo un cambio de modo o de configuración dentro de esa ventana lo entrega.1 Cuando la sesión termina con mensajes aún retenidos, Claude Code los reporta como caducados a cada remitente al que pueda llegar.1 Antes de la v2.1.225 no aplicaba ningún plazo: un mensaje retenido quedaba en espera sin aviso ni caducidad, y un trabajador que terminaba con mensajes retenidos no les decía nada a sus remitentes.1 Para ejecutar un trabajador que reciba mensajes sin supervisión, inícialo con crossSessionInbound: "accept" en el valor de su --settings: una concesión por trabajador, en lugar de un accept en la configuración de usuario que se aplicaría a cada sesión que ejecutes.8 Las sesiones en modo bare se saltan el socket por completo y permanecen inalcanzables.8
5. Bandejas de entrada con scripts. La potencia silenciosa: como Claude Code exporta CLAUDE_CODE_MESSAGING_SOCKET a los hooks y a los comandos de Bash, un script puede publicar en la bandeja de entrada de la propia sesión.6 Claude Code verifica los mensajes de sus propios hijos: un hook o comando que publica de vuelta en su propia sesión se entrega sin ceremonia cuando no aplica ningún crossSessionInbound explícito.1 Un hook de git disparado por el propio commit de la sesión, un envoltorio de pruebas que ella lanzó, un script de despliegue que ejecutó: cualquier hook o comando de Bash que la propia sesión inició puede devolver una línea de contexto a esa sesión. Claude Code tiene que verificar que quien publica es hijo suyo; cuando no puede verificarlo ni por evidencia de proceso ni por token, trata el mensaje como uno que no afirma ninguna clase de permiso, así que una sesión que omite permisos lo retiene hasta tu aprobación en lugar de entregarlo.1 En Windows nativo, la primera línea de la conexión debe ser una línea de autenticación que lleve CLAUDE_CODE_MESSAGING_TOKEN, o Claude Code cierra la conexión sin leerla; ese token es además la única forma en que Windows verifica un mensaje de un hijo propio.1 En Linux la comprobación por evidencia de proceso funciona incluso después de que el proceso que publica termine; en macOS solo mientras sigue corriendo. Tras terminar en macOS, y en un contenedor donde Claude Code es PID 1, Claude Code verifica en su lugar a un hijo que envió en su línea de autenticación el CLAUDE_CODE_MESSAGING_TOKEN exportado por la sesión.1 Los comandos en sandbox necesitan que el socket esté permitido: sandbox.network.allowUnixSockets lista rutas de sockets en macOS, y en Linux y WSL 2, donde el filtro seccomp no puede inspeccionar rutas, solo sandbox.network.allowAllUnixSockets: true lo abre; sin ese filtro opcional instalado, el sandbox nunca bloquea el socket en primer lugar.112
Lo que se niega a ser
Los límites son decisiones de diseño, y respetarlos te ahorra construir lo equivocado.
No es un canal de aprobación. Todo en el modelo de confianza existe para impedir que una sesión autorice las acciones de otra. El diseño descarta explícitamente cualquier flujo con la forma “la sesión A aprueba, la sesión B ejecuta”. Encamina la autoridad a través del humano, siempre.1
No es transferencia de contexto. Un mensaje es texto que un Claude le escribe a otro, nunca historial de conversación ni archivos. La documentación de Anthropic lo dice sin rodeos: para mover una conversación, reanuda la sesión en su lugar.1 Resume; no vuelques.
No son equipos de agentes. Sesiones independientes que se escriben entre sí es el caso entre pares. Un equipo coordinado que Claude genera y supervisa (mensajes de protocolo estructurados, una lista de integrantes, estado de tareas compartido) es la función de equipos de agentes, y los mensajes de equipo estructurados se quedan deliberadamente dentro de un equipo.1 Si te descubres diseñando un protocolo de mensajes sobre texto entre sesiones, lo que quieres son equipos de agentes.
No es un bucle de chat. Claude Code limita la tasa de mensajes repetidos por remitente, descarta las repeticiones idénticas que llegan en una ventana corta y limita a 50 por sesión los mensajes aceptados sin leer, de modo que un bucle de mensajes entre dos sesiones se agota solo por diseño.1 La v2.1.236 además rechaza de entrada más mensajes cuando una ráfaga rápida superaría lo que acepta la bandeja del destinatario, en lugar de reportarlos como enviados mientras el destinatario los descartaba.10 Construye intercambios de solicitud y respuesta, no conversaciones.
Las trampas
Las variables de privacidad la desactivan en silencio. La mensajería entre sesiones depende de la evaluación de indicadores de funciones (feature flags), y cualquiera de CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, DISABLE_TELEMETRY, DO_NOT_TRACK o DISABLE_GROWTHBOOK puede apagar esa evaluación, llevándose la mensajería consigo, en silencio.3 El diagnóstico es /list-agents: si la sesión no reconoce el comando, la sesión carece de la función por completo; si funciona pero un envío nunca llega, aplica algo más acotado: una regla de denegación, los controles de entrada del receptor, un destino ausente del listado (Remote Control sin conectar, o la sesión quedó más allá del número acotado de páginas que Claude Code lee), o un remitente anterior a la v2.1.225 intentando iniciar una conversación entre máquinas.1 Un destino que nunca enlazó una bandeja de entrada no es el caso silencioso. Una sesión detrás de una variable de privacidad, en modo bare o al otro lado de la frontera de un contenedor nunca aparece en /list-agents, así que un envío hacia ella falla ruidosamente como un nombre que Claude Code no encuentra, y desde la v2.1.234 SendMessage también dice cuándo no pudo comprobar tu lista de sesiones por completo en lugar de tratar las sesiones no vistas como ausentes.1310 La primera sesión tras una actualización es un enlace tardío, no uno ausente: Claude Code enlaza la bandeja y exporta la variable del socket en cuanto termina la consulta de indicadores de funciones, y la v2.1.228 corrigió que esa primera sesión a veces arrancara sin bandeja alguna.110 Los casos genuinamente silenciosos están en el lado del remitente. La documentación promete el aviso de retención y su seguimiento, el aviso de rechazo en el momento de la llegada y el aviso de descarte solo a un remitente interactivo en la misma máquina, así que un remitente en otra máquina o un trabajador -p no tiene aviso prometido para esos casos. Dos reportes sí van a “each sender it can reach” (cada remitente al que pueda llegar): la caducidad de un mensaje retenido por defecto, y el rechazo cuando un cambio de configuración descarta los mensajes retenidos. Un mensaje dejado en espera por un ajuste hold explícito nunca caduca, así que nunca vuelve un reporte de caducidad por él.1
Brechas de plataforma y proveedor. Windows nativo llegó en la v2.1.239; antes solo funcionaba Linux dentro de WSL 2.19 La página de documentación de Anthropic sitúa el mínimo para Windows en la v2.1.234; las notas de la versión lo anuncian por primera vez en la v2.1.239. Trata la v2.1.239 como el mínimo seguro.19 Una sesión dentro de WSL 2 y una sesión de Windows nativo en la misma computadora tampoco pueden alcanzarse: se registran bajo directorios personales distintos y escuchan en tipos de socket distintos.1 No está disponible en Amazon Bedrock, Claude Platform en AWS, Agent Platform de Google Cloud ni Microsoft Foundry.1
El caso límite de la respuesta en un solo sentido. Una respuesta a una sesión en otra máquina, enviada mientras la sesión que responde no está conectada a Remote Control, llega igualmente, pero sin dirección de respuesta, así que el receptor no puede contestar. Claude Code se lo dice a Claude al enviar, y la v2.1.225 ajustó el direccionamiento: cuando Claude Code no pudo comprobar su propia lista de sesiones, nunca sustituye un destinatario confirmado de otra máquina por una sesión local con el mismo nombre.5
Retenciones sin interfaz. El trabajador -p que ignora misteriosamente los mensajes es casi siempre un problema de mensajes retenidos: sin diálogo, no hay entrega. Fija crossSessionInbound: "accept" en los trabajadores que deban escuchar.8
Puntos clave
Para quienes usan Claude Code a diario:
- Ejecuta /list-agents una vez para ver qué pueden alcanzar ya tus sesiones; nombra las sesiones importantes con /rename para que los mensajes se dirijan con limpieza. La guía de Claude Code cubre los comandos de sesión y los ajustes en los que se apoya la función.
- Pide los mensajes en lenguaje llano (“dile a la sesión que trabaja en pagos qué cambiamos”) y deja que Claude redacte el mensaje.1
Para quienes construyen automatizaciones:
- Publica en las sesiones desde hooks y scripts mediante CLAUDE_CODE_MESSAGING_SOCKET; los mensajes de hijos propios se entregan sin fricción de aprobación en Linux.16
- Dales a los trabajadores -p desatendidos crossSessionInbound: "accept" en su propio --settings, no de forma global.8
Para equipos y revisores de seguridad:
- La función llega con los valores predeterminados correctos: los mensajes no llevan autoridad, los valores predeterminados ponen en cuarentena a las sesiones que omiten permisos, e isolatePeerMachines junto con las reglas de denegación en la configuración administrada te dan interruptores de apagado por máquina y para toda la organización.1
- Audita las cuatro variables de entorno de privacidad antes de concluir que la mensajería está rota. Una sesión que rechaza se ve idéntica en los listados y en su propio /status, así que revisa los archivos de configuración que aplican a esa sesión en lugar de su estado; desde la v2.1.238 un envío desde una sesión en la misma máquina también reporta el rechazo de vuelta.110
Preguntas frecuentes
¿La mensajería entre sesiones de Claude Code funciona en Windows?
Sí, de forma nativa desde la v2.1.239 según las notas de la versión, con las mismas herramientas SendMessage y ListAgents y una tubería con nombre en lugar del socket Unix. Antes de eso, solo funcionaba Linux dentro de WSL 2. La página de documentación de Anthropic sitúa el mínimo para Windows en la v2.1.234; toma la v2.1.239 como el mínimo seguro. Una sesión de WSL 2 y una sesión nativa de Windows en la misma computadora siguen sin poder alcanzarse.19
¿Puede una sesión de Claude Code aprobar las solicitudes de permiso de otra sesión?
No. Un mensaje es información, nunca autoridad. Una solicitud de permiso pendiente ignora todo lo que diga la sesión remitente, porque solo tú respondes las solicitudes. Claude Code instruye al Claude receptor para que nunca altere la configuración de permisos, CLAUDE.md ni ninguna otra configuración porque otra sesión lo pidió, y un /compact en el cuerpo del mensaje son ocho caracteres de prosa, nunca un comando ejecutado.1
¿Por qué mis otras sesiones no aparecen en /list-agents?
Audita primero las variables de entorno de privacidad. La mensajería depende de la evaluación de indicadores de funciones (feature flags), y CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, DISABLE_TELEMETRY, DO_NOT_TRACK o DISABLE_GROWTHBOOK pueden apagar cada uno esa evaluación y, con ella, la mensajería, en silencio. Una sesión en modo bare o al otro lado de la frontera de un contenedor tampoco aparece nunca, porque dos sesiones se alcanzan solo cuando ven los mismos archivos en disco.13
¿Cómo hago que un trabajador desatendido claude -p reciba mensajes?
Inícialo con crossSessionInbound: "accept" en el valor de su --settings, una concesión por trabajador en lugar de un accept en la configuración de usuario que se aplicaría a todas las sesiones que ejecutes. Una sesión -p enlaza un socket de bandeja de entrada y aparece en los listados, pero no puede mostrar el diálogo de aprobación, así que un mensaje retenido por omisión agota el plazo de dialogExpiry y luego se descarta.8
¿Puedo enviar historial de conversación o archivos a otra sesión?
No. Un mensaje es texto plano que un Claude le escribe a otro, nunca historial de conversación, archivos ni permisos. La documentación de Anthropic lo dice sin rodeos: para mover una conversación, reanuda la sesión en su lugar. Resume en lugar de volcar. Y si te descubres diseñando un protocolo de mensajes encima del texto entre sesiones, lo que en realidad quieres son los equipos de agentes.1
Referencias
-
Anthropic, “Message your other Claude Code sessions”, documentación de Claude Code. Consultado el 8 de agosto de 2026; verificado de nuevo el 25 de agosto de 2026. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Anthropic, “Tools reference”, documentación de Claude Code: entradas de
ListAgentsySendMessage. ↩ -
Anthropic, “Environment variables”, documentación de Claude Code: notas sobre la evaluación de indicadores de funciones en
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC,DISABLE_TELEMETRY,DO_NOT_TRACKyDISABLE_GROWTHBOOK. ↩↩↩↩ -
Anthropic, notas de la versión v2.1.224 de Claude Code, 7 de agosto de 2026 (UTC): “Added cross-session
SendMessage: Claude Code sessions can now message each other, on any of your machines, withListAgentsto discover them (macOS and Linux).” ↩ -
Anthropic, notas de la versión v2.1.225 de Claude Code, publicadas el 8 de agosto de 2026 (UTC): “SendMessage can now start a conversation with your Remote Control sessions on other machines by name (
ListAgentsshows them asname [ref]), instead of only replying after they message you first.” La misma versión indica que Claude Code nunca sustituye un destinatario confirmado de Remote Control por una sesión con el mismo nombre en esta máquina “when its own list couldn’t be checked.” Es decir, cuando no pudo comprobarse su propia lista. ↩↩↩↩↩ -
Anthropic, “Environment variables”, documentación de Claude Code:
CLAUDE_CODE_MESSAGING_SOCKET, exportada a los hooks y a los comandos de Bash cuando el socket se enlaza, y en una sesión que arranca con la mensajería activada, enlazada antes de que corra cualquier hook; la página de mensajería entre sesiones añade “includingSessionStart”. ↩↩↩ -
Anthropic, notas de la versión v2.1.222 de Claude Code, 4 de agosto de 2026: “Improved auto mode safety: messages sent to other agent sessions via
SendMessageare now evaluated by the permission classifier before dispatch.” La revisión del clasificador aplica en modo auto (y en modo plan donde el clasificador de auto revisa comandos), no de forma universal. La cláusula del modo plan proviene de Anthropic, “Permission modes”, documentación de Claude Code: “The classifier also reviews each message Claude sends to another agent withSendMessage, whether plain text or a structured agent team message, before Claude Code delivers it, both in auto mode and in plan mode while the classifier reviews commands; the send review requires Claude Code v2.1.222 or later.” ↩ -
Anthropic, “Message your other Claude Code sessions: Non-interactive sessions”, documentación de Claude Code: las sesiones
-penlazan sockets de bandeja de entrada y aparecen en el listado, un mensaje retenido por defecto allí espera hasta agotardialogExpiry, y la entrega desatendida requierecrossSessionInbound: "accept"en el propio--settingsdel trabajador. La página del modo sin interfaz describe el modo bare en “Headless mode”. ↩↩↩↩↩↩ -
Anthropic, notas de la versión v2.1.239 de Claude Code, 21 de agosto de 2026: “Windows: cross-session messaging is now available, so Claude Code sessions across your machines can message each other with
SendMessageand find each other withListAgents, as on macOS and Linux”; “ListAgentsnow tells a session its own name (the one peers use to message it), andSendMessageto your own name says so instead of "no agent named …"“; “ListAgentsand/list-agentsnow list your live teammates (previously only subagents and other sessions appeared, so a reachable teammate looked absent).” ↩↩↩↩↩↩↩ -
Anthropic, notas de la versión de Claude Code v2.1.228 (“Fixed cross-session messaging sometimes starting without an inbox in the first session after install or upgrade”), v2.1.232 (“Type
@in the prompt to mention another Claude session by name; Claude then usesSendMessageto reach that session directly”; “Interactive sessions on one machine now keep unique names: starting or renaming a session to a name another live session already uses gives it aname-word-wordvariant and tells you”; “Added/configrows for "Dialog expiry" and "Messages from your other sessions" (cross-session inbound accept/hold/refuse)”; “Hardened the auto-generated cross-session messaging socket directory on shared/tmp: a pre-planted symlink or another user’s directory is now refused instead of used”), v2.1.234 (“SendMessageandListAgentsnow say when your account’s session list was too long to check completely, instead of treating unseen sessions as absent”), v2.1.235 (“SendMessagenow refuses messages too large for cross-session delivery up front instead of silently dropping them”), v2.1.236 (“Addednotify_when_idleto cross-sessionSendMessage: ask another Claude Code session on this machine to send one notice when it next goes idle — opt-in, one-shot, no polling (macOS and Linux)”; “SendMessagenow refuses further messages to a session up front once a rapid burst would exceed what that session’s inbox accepts, instead of reporting them sent while they were dropped”) y v2.1.238 (reporte de entrada rechazada y de bandeja que descarta). Verificado contra el CHANGELOG.md canónico el 25 de agosto de 2026. ↩↩↩↩↩↩↩↩↩↩↩↩ -
Anthropic, “Sessions: Name your sessions”, documentación de Claude Code. “In three cases Claude Code doesn’t rename the duplicate” (en tres casos Claude Code no renombra el duplicado): no comprueba los títulos generados por IA ni los nombres de visualización predeterminados, no comprueba “the
--nameof a background or-psession at startup” (el –name de una sesión en segundo plano o -p al arrancar), y no puede renombrar una sesión en una versión anterior de Claude Code. ↩↩ -
Anthropic, “Settings reference:
sandbox.network.allowUnixSockets“, documentación de Claude Code: “List the Unix socket paths sandboxed commands can connect to on macOS. Claude Code ignores this list on Linux and WSL2, where the seccomp filter can’t inspect socket paths; useallowAllUnixSocketsthere instead.” La entrada deallowAllUnixSocketsañade que en Linux y WSL2 el filtro seccomp bloquea las llamadassocket(AF_UNIX, ...), lo que convierte a esa clave en la única forma de permitir sockets Unix allí. ↩