Mensagens entre sessões no Claude Code
Desde a v2.1.224, toda sessão interativa do Claude Code em um Mac ou em uma máquina Linux vincula um socket Unix na inicialização, e qualquer outra sessão que você executar pode deixar uma mensagem de texto nele; o meu fica em /tmp/cc-socks/38590.sock, com permissões só para o dono.1 O Windows nativo recebe um named pipe no lugar, desde a v2.1.239 segundo as notas de lançamento, e uma exceção de vinculação tardia aparece em As armadilhas. Duas ferramentas movem o recurso: ListAgents descobre quais das suas sessões estão alcançáveis, e SendMessage entrega a uma delas pelo nome.2 Nada para ativar, nada para configurar. Se as duas sessões rodam a v2.1.224 ou posterior (v2.1.239 no Windows) na mesma máquina, elas já podem conversar.
As sessões do Claude Code trocam mensagens entre si por um socket Unix local (um named pipe no Windows desde a v2.1.239): o ListAgents encontra uma sessão alcançável, e o SendMessage entrega texto puro a ela pelo nome. Uma mensagem é entrada, nunca autoridade. Ela não consegue aprovar prompts, alterar configuração nem executar comandos, e não carrega histórico de conversa nem arquivos.
TL;DR
As sessões do Claude Code agora podem trocar mensagens entre si: em uma única máquina, por sockets locais que nunca passam pelos servidores da Anthropic, e entre máquinas, pelo Remote Control (só respostas no lançamento; a v2.1.225 acrescentou a capacidade de iniciar essas conversas pelo nome).15 Uma mensagem é apenas texto, nunca histórico de conversa, arquivos ou permissões, e a sessão que recebe a trata como entrada, não como autoridade: ela não consegue aprovar prompts, alterar configuração nem executar comandos.1 O recurso transforma uma frota de terminais independentes em algo mais próximo de uma equipe, e os melhores usos são as mensagens de coordenação que você costumava levar de um lado para o outro à mão: “a migração terminou”, “renomeei aquela coluna”, “a main está segura para rebase”. A armadilha mais afiada é a ausência silenciosa: quatro variáveis de ambiente de privacidade sem relação entre si podem, cada uma, desativar o recurso discretamente, dependendo dos seus valores.3 Desde o lançamento, o Windows entrou nativamente na v2.1.239, e a v2.1.236 acrescentou notify_when_idle, que permite a uma sessão pedir a um par na mesma máquina um único aviso quando ele ficar ocioso ou encerrar da próxima vez.910
O que foi lançado
A versão v2.1.224 acrescentou o SendMessage entre sessões com descoberta via ListAgents no macOS e no Linux; a v2.1.225 estendeu o recurso para que uma sessão também possa iniciar uma conversa com as suas sessões de Remote Control em outras máquinas, onde antes só podia responder.45
Três superfícies deixam você ver a máquina por dentro:
/list-agents(alias/peers) imprime na primeira linha o nome da própria sessão (o nome que as suas outras sessões usam para alcançá-la, exibido desde a v2.1.239) e, em seguida, toda sessão que o Claude consegue alcançar: subagents dentro da sessão atual, os integrantes ativos da equipe de agentes da sessão (listados desde a v2.1.239; antes disso, um integrante alcançável parecia ausente), as suas outras sessões locais, incluindo as que rodam em segundo plano, e, enquanto o Remote Control estiver conectado, as suas sessões em outras máquinas e no Claude Code na web.19/statusmostra uma linhaPeer addresscom o socket da caixa de entrada da própria sessão, prefixado comuds:.1CLAUDE_CODE_MESSAGING_SOCKET, que o Claude Code exporta para hooks e comandos Bash assim que a caixa de entrada é vinculada (veja a nota sobre vinculação tardia em As armadilhas), guarda o caminho do socket da própria sessão.16 Mais abaixo explico por que isso importa.
Verificando na minha própria máquina em 25 de agosto de 2026, com o Claude Code 2.1.246: a listagem de agentes abriu com a linha “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 sessão é blakecrosley-com-76, o nome que as outras sessões usam para enviar mensagens a ela; ela não aparece na lista abaixo), depois 11 sessões pares em linhas como “resumegeni-25 [10d770] · interactive · idle · started 21h ago”, nomes no formato diretório-mais-sufixo-de-dois-caracteres com um identificador curto entre colchetes, estados idle, busy e shell, a idade de início em cada linha e um bloco separado, Subagents, para os filhos da própria sessão. Os arquivos de socket em /tmp/cc-socks/ têm permissões srw------- e o diretório em si é drwx------: legíveis e graváveis apenas pelo meu usuário, que é a fronteira em máquinas compartilhadas.1
As sessões atendem por nomes. Defina um com /rename ou com a flag --name; caso contrário, o Claude Code deriva um do diretório de trabalho, como my-app-3f.111 Desde a v2.1.232, quando você inicia, retoma ou renomeia uma sessão interativa para um nome que outra sessão ativa na máquina já usa, o Claude Code deixa o nome com a sessão que o tem, renomeia a sua para uma variante name-word-word (algo como auth-refactor-graceful-unicorn) e avisa você.110 Colisões sobrevivem quando uma das sessões roda uma versão mais antiga, quando o nome compartilhado foi gerado pelo próprio Claude Code, ou quando você inicia uma sessão em segundo plano ou -p com um --name que o Claude Code não verifica na inicialização.11 A listagem sempre mostra o diretório de trabalho de cada sessão local, o que distingue sessões de mesmo nome quando rodam em diretórios diferentes; para um nome compartilhado, o Claude também acrescenta um identificador curto a cada linha e o usa no endereço. O Claude recorre ao mesmo endereçamento por identificador curto quando o Claude Code não conseguiu verificar todos os lugares onde as suas sessões rodam, como uma conta cuja lista de sessões na nuvem ou no Remote Control ultrapassou o número limitado de páginas que ele lê.1
O que mudou desde o lançamento (agosto de 2026)
Cinco versões nas duas semanas seguintes ao lançamento fecharam a lacuna do Windows que este post apontou, apertaram a nomeação e o endereçamento, e fecharam quatro modos de falha silenciosa que o post não apontou:910
| Versão | Mudança |
|---|---|
| v2.1.232 | Nomes únicos e menções com @. Sessões interativas em uma máquina mantêm nomes únicos (uma colisão renomeia a recém-chegada para uma variante name-word-word e avisa você); digitar @ no prompt menciona outra sessão ativa pelo nome, e o Claude a alcança diretamente com SendMessage; o /config ganha uma linha “Messages from your other sessions” (mensagens das suas outras sessões) que grava crossSessionInbound (accept, hold, refuse) nas configurações do usuário, ao lado de uma linha “Dialog expiry” (expiração do diálogo). A mesma versão endureceu o diretório de sockets gerado automaticamente no /tmp compartilhado: o Claude Code agora recusa um symlink plantado de antemão ou o diretório de outro usuário em vez de usá-lo.110 |
| v2.1.235 | O SendMessage recusa de imediato uma mensagem grande demais para a entrega entre sessões, em vez de descartá-la em silêncio.10 |
| v2.1.236 | notify_when_idle: peça a outra sessão na mesma máquina que envie um único aviso quando ela ficar ociosa ou encerrar da próxima vez (as duas sessões na v2.1.236+). Opt-in, de uso único, sem polling. A mesma versão recusa de imediato novas mensagens assim que uma rajada rápida excederia o que a caixa de entrada do destinatário aceita, em vez de reportá-las como enviadas enquanto o destinatário as descartava.110 |
| v2.1.238 | Honestidade na entrega: enviar a uma sessão nesta máquina que recusa mensagens de entrada (crossSessionInbound: "refuse") agora reporta “refused” ao remetente em vez de um sucesso silencioso, e uma sessão cuja caixa de entrada descarta as suas mensagens (limite de taxa ou fila cheia) avisa a sua sessão em vez de as mensagens sumirem.10 |
| v2.1.239 | Windows. A troca de mensagens entre sessões funciona nativamente, com as mesmas ferramentas SendMessage e ListAgents; o ListAgents agora informa a uma sessão o seu próprio nome (o que os pares usam para alcançá-la) e lista os integrantes ativos da equipe, que antes pareciam ausentes; um SendMessage para o seu próprio nome diz isso em vez de “no agent named …”.9 |
O efeito prático: o padrão “tarefa longa que reporta”, abaixo, não precisa mais de um prompt de check-in. A sessão que observa pede à tarefa longa um único aviso de ociosidade com notify_when_idle e ouve de volta quando ela ficar ociosa ou encerrar da próxima vez. Dois dos quatro modos de falha (uma mensagem grande demais, ou uma rajada rápida demais para a caixa de entrada) agora falham de imediato no remetente; os outros dois (uma mensagem recusada ou descartada) voltam a um remetente interativo na mesma máquina como relatos explícitos.
O modelo de confiança é a parte interessante
O design da Anthropic responde a uma pergunta que a maioria dos sistemas multiagente atrapalha: quanto vale uma mensagem vinda de outro agente? A resposta aqui é precisa: uma mensagem é informação, nunca autoridade.1
Quando a sessão A envia uma mensagem à sessão B, quatro regras limitam o que chega:1
- Ela não pode aprovar nada. Um prompt de permissão pendente em B ignora qualquer coisa que A diga. Só você responde aos prompts.
- Ela não pode alterar configuração. O Claude Code instrui o Claude receptor a nunca alterar configurações de permissão, o
CLAUDE.mdou qualquer configuração porque outra sessão pediu. - Comandos chegam como texto. Um
/compactno corpo da mensagem são oito caracteres de prosa, nunca um comando executado. - Os prompts de permissão continuam disparando. Se agir sobre a mensagem exige uma permissão que B não tem, você vê o mesmo prompt de qualquer outro trabalho.
A entrada tem o seu próprio portão. Cada mensagem que chega termina em um de três desfechos (entregue, retida para a sua aprovação ou recusada), controlados pela configuração crossSessionInbound (accept, hold, refuse).1 Quando você não define nada, o Claude Code decide mensagem a mensagem usando os modos de permissão das duas sessões, e a lógica padrão é elegante: sessões que ignoram prompts de permissão formam uma classe, todas as outras formam a outra (o modo plan conta como ignorar quando a sessão tem o bypass disponível; auto, acceptEdits e dontAsk contam como perguntar). Uma sessão que pergunta recebe mensagens livremente, mas retém qualquer coisa que chegue de uma sessão com bypass; uma sessão com bypass retém tudo, exceto mensagens de outras sessões com bypass.1 A assimetria é deliberada: uma mensagem não pode pegar carona na autoridade de uma sessão permissiva, um princípio que a v2.1.224 aplica na entrada depois que a v2.1.222 o aplicou na saída no modo auto, onde o classificador de permissões revisa cada envio antes do despacho.7
Mensagens retidas abrem um diálogo de aprovação mostrando o remetente e uma prévia; diálogos sem resposta expiram depois de cinco minutos (ajustável via dialogExpiry) e a mensagem é descartada.1 Uma sessão em segundo plano sem terminal anexado mantém o diálogo aberto além desse prazo; depois que você anexa, a mensagem só é descartada se o diálogo ficar sem resposta por um período de prazo completo.1 No máximo 100 mensagens ficam retidas ao mesmo tempo.1 Dois controles adicionais estreitam ainda mais: isolatePeerMachines: true exige a sua aprovação explícita antes que qualquer mensagem saia da máquina, mesmo no modo bypassPermissions, e um true em qualquer escopo de configuração vence, de modo que um arquivo de projeto versionado pode apertar, mas nunca afrouxar.1 Organizações podem desligar o recurso por completo com regras de negação para SendMessage e ListAgents mais crossSessionInbound: "refuse" nas configurações gerenciadas.1
Como as mensagens viajam
Onde a outra sessão roda determina tanto o transporte quanto o que você pode enviar:1
| Destino | Transporte | Você pode enviar |
|---|---|---|
| Mesma máquina | Socket Unix por sessão (named pipe no Windows nativo), nunca pelos servidores da Anthropic | Mensagens novas e respostas |
| Sua outra máquina | Servidores da Anthropic, chegando pela conexão de Remote Control daquela máquina | Respostas; conversas novas a partir da v2.1.225, enquanto o Remote Control estiver conectado5 |
| Claude Code na web | Servidores da Anthropic, direto para a sessão na nuvem | Respostas; conversas novas com uma sessão na nuvem que apareça na listagem enquanto o Remote Control estiver conectado1 |
Quando este post saiu pela primeira vez, a página de documentação da Anthropic ainda descrevia toda a troca de mensagens entre máquinas como só de resposta, enquanto as notas de lançamento da v2.1.225 diziam que o SendMessage “can now start a conversation with your Remote Control sessions on other machines by name” (agora pode iniciar uma conversa com as suas sessões de Remote Control em outras máquinas pelo nome). A documentação já alcançou: a página agora afirma que iniciar uma conversa com uma sessão em outra das suas máquinas exige a v2.1.225 ou posterior e um destino que apareça na listagem.15
A regra da mesma máquina é visibilidade do sistema de arquivos: as sessões se registram em arquivos no disco, então duas sessões só se alcançam quando enxergam os mesmos arquivos. Uma sessão dentro de um contêiner e outra no host não conseguem conversar; duas sessões dentro do mesmo contêiner conseguem.1
A entrega respeita o ritmo da sessão receptora: o Claude receptor lê uma mensagem entre chamadas de ferramenta durante um turno ativo, sem nunca interromper uma ferramenta em execução, e o Claude Code inicia um turno novo com a mensagem quando a sessão está ociosa.1 Mensagens entregues contam para o uso como um prompt que você digitou.1
Cinco padrões que valem a pena construir
1. Coordenação de worktrees. O óbvio, e o caso que a documentação ilustra com a sua própria mensagem de exemplo: sessões trabalhando no mesmo repositório em worktrees separadas contam umas às outras o que entrou.1 “Schema migration finished: the new column is tenant_id, and rebasing on main is safe now.” (a migração do schema terminou: a nova coluna é tenant_id, e já é seguro fazer rebase na main) é a classe de atualização que, de outro modo, exige que você perceba, troque de terminal e digite tudo de novo. Se várias sessões compartilham um único checkout em vez de worktrees, a mensagem de coordenação fica ainda mais valiosa: “estou prestes a fazer commit em content/guides/, não coloque no stage” evita a clássica colisão de árvore compartilhada em que uma sessão faz commit do trabalho pela metade de outra.
2. Observador e trabalhador. Rode uma sessão de monitoramento observando um deploy, uma suíte de testes ou um log, e faça com que ela envie uma mensagem à sessão responsável pelas correções no momento em que algo quebrar. A sessão receptora recebe a descoberta como contexto, não como comando; ela ainda decide, sob as suas próprias permissões, o que fazer. Combine o observador com sessões em segundo plano e os hooks de notificação e você obtém uma cadeia de escalonamento que só termina em um humano quando deveria.
3. A tarefa longa que reporta. Dispare uma migração ou uma execução longa de testes em uma sessão e faça com que ela reporte de volta à sessão que você realmente observa.1 O status para de viver em um terminal que você esqueceu. O inverso também funciona; pergunte a partir do lado que observa: “Pergunte à sessão rodando no meu outro terminal se a migração terminou” é um prompt, e o Claude cuida sozinho da descoberta, do endereçamento e da redação.1 Desde a v2.1.236, pule a pergunta: faça a sua sessão observadora definir notify_when_idle na tarefa longa e ela reporta de volta uma vez, quando ficar ociosa ou encerrar da próxima vez, sem polling de nenhum dos lados.110 As duas sessões precisam da v2.1.236+, e os limites seguem os controles de entrada. Toda assinatura carrega um teto de 12 horas: se nenhum aviso chegar até lá, o Claude Code descarta a assinatura e diz ao Claude para parar de esperar. Com refuse no lado observado, aquela sessão descarta o pedido sem registrá-lo nem respondê-lo, então a assinatura expira sem resposta no teto; com refuse no lado que pede, o Claude Code nunca chega a assinar. Com hold em qualquer um dos lados, o aviso chega degradado: a sessão observada omite a sua linha de status, e a sessão que pediu mostra o aviso na sua transcrição sem entregá-lo ao Claude.1
4. Frotas de trabalhadores sem supervisão. Sessões headless claude -p também vinculam sockets de caixa de entrada, então um trabalhador -p de longa duração pode receber mensagens e aparece nas listagens.8 O porém: uma sessão -p não consegue mostrar o diálogo de aprovação, então uma mensagem retida por padrão espera o prazo de dialogExpiry (cinco minutos por padrão; dialogExpiry aceita 60s, 5m, 10m ou never), depois é descartada e se reporta como expirada a um remetente que ela consiga alcançar; só uma mudança de modo ou de configurações dentro dessa janela a entrega.1 Quando a sessão encerra com mensagens ainda retidas, o Claude Code as reporta como expiradas a cada remetente que consegue alcançar.1 Antes da v2.1.225, nenhum prazo se aplicava: uma mensagem retida ficava estacionada sem aviso nem expiração, e um trabalhador que encerrava com mensagens retidas não dizia nada aos remetentes.1 Para rodar um trabalhador que aceite mensagens sem supervisão, inicie-o com crossSessionInbound: "accept" no valor de --settings dele: uma concessão por trabalhador, em vez de um accept nas configurações do usuário, que se aplicaria a toda sessão que você rodar.8 Sessões em modo bare pulam o socket por completo e permanecem inalcançáveis.8
5. Caixas de entrada por script. A potência discreta: como o Claude Code exporta CLAUDE_CODE_MESSAGING_SOCKET para hooks e comandos Bash, um script pode postar na caixa de entrada da própria sessão.6 O Claude Code verifica mensagens de filhos próprios: um hook ou comando que posta de volta na sua própria sessão entrega sem cerimônia quando nenhum crossSessionInbound explícito se aplica.1 Um hook do git disparado pelo commit da própria sessão, um wrapper de testes que ela lançou, um script de deploy que ela executou: qualquer hook ou comando Bash que a própria sessão iniciou pode postar uma linha de contexto de volta nessa sessão. O Claude Code precisa verificar quem posta como filho próprio; quando não consegue verificar nem por evidência de processo nem por token, trata a mensagem como uma que não afirma nenhuma classe de permissão, então uma sessão com bypass a retém para a sua aprovação em vez de entregá-la.1 No Windows nativo, a primeira linha da conexão precisa ser uma linha de autenticação carregando CLAUDE_CODE_MESSAGING_TOKEN, ou o Claude Code fecha a conexão sem ler; esse token também é a única forma de o Windows verificar uma mensagem de filho próprio.1 No Linux, a verificação por evidência de processo funciona mesmo depois que o processo remetente encerra; no macOS, só enquanto ele ainda roda. Depois que ele encerra no macOS, e em um contêiner onde o Claude Code é o PID 1, o Claude Code verifica em vez disso um filho que enviou o CLAUDE_CODE_MESSAGING_TOKEN exportado pela sessão na sua linha de autenticação.1 Comandos em sandbox precisam do socket liberado: sandbox.network.allowUnixSockets lista caminhos de socket no macOS, e no Linux e no WSL 2, onde o filtro seccomp não consegue inspecionar caminhos, só sandbox.network.allowAllUnixSockets: true o abre; sem esse filtro opcional instalado, o sandbox nunca bloqueia o socket em primeiro lugar.112
O que ele se recusa a ser
Os limites são decisões de design, e respeitá-los evita que você construa a coisa errada.
Não é um canal de aprovação. Tudo no modelo de confiança existe para impedir que uma sessão autorize as ações de outra. O design descarta explicitamente qualquer fluxo de trabalho no formato “a sessão A aprova, a sessão B executa”. Encaminhe a autoridade pelo humano, sempre.1
Não é transferência de contexto. Uma mensagem é texto que um Claude escreve para outro, nunca histórico de conversa ou arquivos. A documentação da Anthropic diz sem rodeios: para mover uma conversa, retome a sessão.1 Resuma; não despeje.
Não é equipes de agentes. Sessões independentes trocando mensagens é o caso par a par. Uma equipe coordenada que o Claude cria e supervisiona (mensagens de protocolo estruturadas, uma lista de integrantes, estado de tarefas compartilhado) é o recurso de equipes de agentes, e mensagens estruturadas de equipe permanecem deliberadamente dentro de uma equipe.1 Se você se pegar projetando um protocolo de mensagens em cima do texto entre sessões, o que você quer são equipes de agentes.
Não é um loop de chat. O Claude Code limita a taxa de mensagens repetidas por remetente, descarta repetições idênticas que chegam em uma janela curta e limita as mensagens aceitas e não lidas a 50 por sessão, então um loop de mensagens entre duas sessões morre de inanição por design.1 A v2.1.236 também recusa de imediato novas mensagens assim que uma rajada rápida excederia o que a caixa de entrada do destinatário aceita, em vez de reportá-las como enviadas enquanto o destinatário as descartava.10 Construa trocas de pedido e resposta, não conversas.
As armadilhas
Variáveis de privacidade desativam o recurso em silêncio. A troca de mensagens entre sessões depende da avaliação de feature flags, e qualquer uma entre CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, DISABLE_TELEMETRY, DO_NOT_TRACK ou DISABLE_GROWTHBOOK pode desligar essa avaliação, derrubando a troca de mensagens junto, em silêncio.3 O diagnóstico é /list-agents: se a sessão não reconhece o comando, ela não tem o recurso de jeito nenhum; se ele funciona, mas um envio nunca chega, algo mais estreito se aplica: uma regra de negação, os controles de entrada do receptor, um destino ausente da listagem (Remote Control não conectado, ou a sessão caiu além do número limitado de páginas que o Claude Code lê), ou um remetente anterior à v2.1.225 tentando iniciar uma conversa entre máquinas.1 Um destino que nunca vinculou uma caixa de entrada não é o caso silencioso. Uma sessão atrás de uma variável de privacidade, em modo bare ou do outro lado de uma fronteira de contêiner nunca aparece em /list-agents, então um envio para ela falha em voz alta como um nome que o Claude Code não encontra, e desde a v2.1.234 o SendMessage também diz quando não conseguiu verificar a sua lista de sessões por completo, em vez de tratar sessões não vistas como ausentes.1310 A primeira sessão depois de uma atualização é uma vinculação tardia, não uma ausência: o Claude Code vincula a caixa de entrada e exporta a variável do socket assim que a busca das feature flags termina, e a v2.1.228 corrigiu essa primeira sessão que às vezes iniciava sem caixa de entrada alguma.110 Os casos genuinamente silenciosos ficam do lado de quem envia. A documentação promete o aviso de retenção e o seu desdobramento, o aviso de recusa no momento da chegada e o aviso de descarte apenas a um remetente interativo na mesma máquina, então um remetente em outra máquina ou um trabalhador -p não tem aviso prometido para esses casos. Dois relatos vão de fato a “each sender it can reach” (cada remetente que ela consegue alcançar): a expiração de uma mensagem retida por padrão, e a recusa quando uma mudança de configurações descarta mensagens retidas. Uma mensagem estacionada por uma configuração hold explícita nunca expira, então nenhum relato de expiração volta por ela.1
Lacunas de plataforma e de provedor. O Windows nativo chegou na v2.1.239; antes disso, só o Linux dentro do WSL 2 funcionava.19 A página de documentação da Anthropic coloca o piso do Windows na v2.1.234; as notas de lançamento o anunciam pela primeira vez na v2.1.239. Trate a v2.1.239 como o piso seguro.19 Uma sessão dentro do WSL 2 e uma sessão nativa do Windows no mesmo computador também não se alcançam: elas se registram em diretórios home diferentes e escutam em tipos de socket diferentes.1 Não disponível no Amazon Bedrock, no Claude Platform na AWS, no Agent Platform do Google Cloud nem no Microsoft Foundry.1
A aresta da resposta de mão única. Uma resposta a uma sessão em outra máquina, enviada enquanto a sessão que responde não está conectada ao Remote Control, ainda chega, mas sem endereço de resposta, então o receptor não consegue responder. O Claude Code avisa o Claude disso ao enviar, e a v2.1.225 apertou o endereçamento: quando o Claude Code não conseguiu verificar a sua própria lista de sessões, ele nunca troca um destinatário confirmado em outra máquina por uma sessão local de mesmo nome.5
Retenções em headless. O trabalhador -p que misteriosamente ignora mensagens é quase sempre um problema de mensagem retida: sem diálogo, sem entrega. Defina crossSessionInbound: "accept" nos trabalhadores que devem escutar.8
Principais conclusões
Para quem usa o Claude Code no dia a dia:
- Rode /list-agents uma vez para ver o que as suas sessões já conseguem alcançar; nomeie as sessões importantes com /rename para que as mensagens sejam endereçadas com clareza. O guia do Claude Code cobre os comandos de sessão e as configurações em que o recurso se apoia.
- Peça mensagens em linguagem simples (“diga à sessão que está trabalhando em pagamentos o que mudamos”) e deixe o Claude escrever a mensagem.1
Para quem constrói automação:
- Poste em sessões a partir de hooks e scripts via CLAUDE_CODE_MESSAGING_SOCKET; mensagens de filhos próprios entregam sem atrito de aprovação no Linux.16
- Dê aos trabalhadores -p sem supervisão crossSessionInbound: "accept" no --settings deles, não globalmente.8
Para equipes e revisores de segurança:
- O recurso vem com os padrões certos: mensagens não carregam autoridade, os padrões colocam sessões com bypass em quarentena, e isolatePeerMachines mais regras de negação nas configurações gerenciadas dão a você botões de desligar por máquina e para toda a organização.1
- Audite as quatro variáveis de ambiente de privacidade antes de concluir que a troca de mensagens está quebrada. Uma sessão que recusa parece idêntica nas listagens e no seu próprio /status, então verifique os arquivos de configuração que se aplicam àquela sessão em vez do status dela; desde a v2.1.238, um envio a partir de uma sessão na mesma máquina também reporta a recusa de volta.110
Perguntas frequentes
A troca de mensagens entre sessões do Claude Code funciona no Windows?
Sim, de forma nativa desde a v2.1.239 segundo as notas de lançamento, com as mesmas ferramentas SendMessage e ListAgents e um named pipe no lugar do socket Unix. Antes disso, só o Linux dentro do WSL 2 funcionava. A página de documentação da Anthropic coloca o piso do Windows na v2.1.234; trate a v2.1.239 como o piso seguro. Uma sessão no WSL 2 e uma sessão nativa do Windows no mesmo computador ainda não se alcançam.19
Uma sessão do Claude Code pode aprovar os pedidos de permissão de outra sessão?
Não. Uma mensagem é informação, nunca autoridade. Um pedido de permissão pendente ignora qualquer coisa que a sessão remetente diga, porque só você responde a esses pedidos. O Claude Code instrui o Claude que recebe a nunca alterar configurações de permissão, o CLAUDE.md ou qualquer configuração porque outra sessão pediu, e um /compact no corpo da mensagem são oito caracteres de prosa, nunca um comando executado.1
Por que as minhas outras sessões não aparecem no /list-agents?
Audite primeiro as variáveis de ambiente de privacidade. A troca de mensagens depende da avaliação de feature flags, e CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, DISABLE_TELEMETRY, DO_NOT_TRACK ou DISABLE_GROWTHBOOK podem, cada uma, desligar essa avaliação, derrubando a troca de mensagens junto, em silêncio. Uma sessão em modo bare ou do outro lado de uma fronteira de contêiner também nunca aparece, porque duas sessões só se alcançam quando enxergam os mesmos arquivos em disco.13
Como eu deixo um trabalhador claude -p sem supervisão receber mensagens?
Inicie-o com crossSessionInbound: "accept" no valor do --settings dele, uma concessão por trabalhador em vez de um accept nas configurações de usuário que valeria para toda sessão que você rodar. Uma sessão -p vincula um socket de caixa de entrada e aparece nas listagens, mas não consegue exibir o diálogo de aprovação, então uma mensagem retida por padrão espera até o prazo do dialogExpiry e depois é descartada.8
Posso enviar histórico de conversa ou arquivos para outra sessão?
Não. Uma mensagem é texto puro que um Claude escreve para outro, nunca histórico de conversa, arquivos ou permissões. A documentação da Anthropic diz sem rodeios: para mover uma conversa, retome a sessão. Resuma em vez de despejar tudo. E se você se pegar projetando um protocolo de mensagens em cima do texto entre sessões, o que você realmente quer são equipes de agentes.1
Referências
-
Anthropic, “Message your other Claude Code sessions”, documentação do Claude Code. Acessado em 8 de agosto de 2026; verificado novamente em 25 de agosto de 2026. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Anthropic, “Tools reference”, documentação do Claude Code: entradas de
ListAgentseSendMessage. ↩ -
Anthropic, “Environment variables”, documentação do Claude Code: notas sobre a avaliação de feature flags em
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC,DISABLE_TELEMETRY,DO_NOT_TRACKeDISABLE_GROWTHBOOK. ↩↩↩↩ -
Anthropic, notas de lançamento do Claude Code v2.1.224, 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 lançamento do Claude Code v2.1.225, publicadas em 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.” A mesma versão afirma que o Claude Code nunca troca um destinatário confirmado de Remote Control por uma sessão de mesmo nome nesta máquina “when its own list couldn’t be checked” (quando a sua própria lista não pôde ser verificada). ↩↩↩↩↩ -
Anthropic, “Environment variables”, documentação do Claude Code:
CLAUDE_CODE_MESSAGING_SOCKET, exportada para hooks e comandos Bash quando o socket é vinculado e, em uma sessão que inicia com a troca de mensagens ativada, vinculada antes de qualquer hook rodar; a página sobre mensagens entre sessões acrescenta “includingSessionStart” (inclusive o hook de início de sessão). ↩↩↩ -
Anthropic, notas de lançamento do Claude Code v2.1.222, 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.” A revisão do classificador se aplica no modo auto (e no modo plan, onde o classificador do modo auto revisa comandos), não universalmente. A cláusula sobre o modo plan vem de Anthropic, “Permission modes”, documentação do 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”, documentação do Claude Code: sessões
-pvinculam sockets de caixa de entrada e aparecem na listagem, uma mensagem retida por padrão ali espera o prazo dedialogExpiry, e a entrega sem supervisão exigecrossSessionInbound: "accept"no--settingsdo próprio trabalhador. A página sobre headless descreve o modo bare em “Headless mode”. ↩↩↩↩↩↩ -
Anthropic, notas de lançamento do Claude Code v2.1.239, 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 lançamento do 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”) e v2.1.238 (relato de entrada recusada e de caixa de entrada que descarta). Verificado contra o CHANGELOG.md canônico em 25 de agosto de 2026. ↩↩↩↩↩↩↩↩↩↩↩↩ -
Anthropic, “Sessions: Name your sessions”, documentação do Claude Code. “In three cases Claude Code doesn’t rename the duplicate” (em três casos o Claude Code não renomeia a duplicata): ele não verifica títulos gerados por IA nem nomes de exibição padrão, não verifica “the
--nameof a background or-psession at startup” (o nome passado a uma sessão em segundo plano ou headless na inicialização) e não consegue renomear uma sessão em uma versão anterior do Claude Code. ↩↩ -
Anthropic, “Settings reference:
sandbox.network.allowUnixSockets“, documentação do 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.” A entrada deallowAllUnixSocketsacrescenta que, no Linux e no WSL2, o filtro seccomp bloqueia chamadassocket(AF_UNIX, ...), o que torna essa chave a única forma de permitir sockets Unix ali. ↩