Komunikacja między sesjami w Claude Code
Od wersji v2.1.224 każda interaktywna sesja Claude Code na Macu lub maszynie z Linuksem wiąże przy starcie gniazdo uniksowe, a dowolna inna uruchomiona sesja może wrzucić do niego wiadomość tekstową; moje znajduje się pod ścieżką /tmp/cc-socks/38590.sock, z uprawnieniami wyłącznie dla właściciela.1 Natywny Windows dostaje zamiast tego potok nazwany, według informacji o wydaniu od v2.1.239, a jeden wyjątek dotyczący późnego wiązania opisany jest w sekcji Pułapki. Funkcją sterują dwa narzędzia: ListAgents wykrywa, które sesje są osiągalne, a SendMessage dostarcza wiadomość do jednej z nich po nazwie.2 Nic nie trzeba włączać ani konfigurować. Jeśli obie sesje działają na tej samej maszynie w wersji v2.1.224 lub nowszej (v2.1.239 w Windows), mogą już ze sobą rozmawiać.
Sesje Claude Code przesyłają sobie wiadomości przez lokalne gniazdo uniksowe (w Windows przez potok nazwany, od v2.1.239): ListAgents znajduje osiągalną sesję, a SendMessage dostarcza do niej zwykły tekst po nazwie. Wiadomość jest daną wejściową, nigdy autorytetem. Nie może zatwierdzać monitów, zmieniać konfiguracji ani uruchamiać poleceń, nie niesie też historii rozmowy ani plików.
W skrócie
Sesje Claude Code mogą teraz przesyłać sobie wiadomości: na jednej maszynie przez lokalne gniazda, które nigdy nie dotykają serwerów Anthropic, a między maszynami przez Remote Control (na starcie tylko odpowiedzi; v2.1.225 dodała możliwość rozpoczynania takich rozmów po nazwie).15 Wiadomość to wyłącznie zwykły tekst, nigdy historia rozmowy, pliki ani uprawnienia, a sesja odbierająca traktuje ją jako dane wejściowe, nie jako źródło autorytetu: nie może zatwierdzać monitów, zmieniać konfiguracji ani wykonywać poleceń.1 Funkcja zamienia flotę niezależnych terminali w coś bliższego zespołowi, a najlepsze zastosowania to komunikaty koordynacyjne, które dotąd trzeba było przenosić ręcznie: „migracja zakończona”, „zmieniono nazwę tej kolumny”, „można bezpiecznie robić rebase na main”. Najostrzejszą pułapką jest cicha nieobecność: cztery niepowiązane ze sobą zmienne środowiskowe dotyczące prywatności mogą, zależnie od wartości, po cichu wyłączyć całą funkcję.3 Od premiery Windows dołączył natywnie w v2.1.239, a v2.1.236 dodała notify_when_idle, które pozwala sesji poprosić sesję równorzędną na tej samej maszynie o jedno powiadomienie, gdy ta następnym razem przejdzie w stan bezczynności lub zakończy działanie.910
Co zostało wydane
Wydanie v2.1.224 dodało międzysesyjne SendMessage z wykrywaniem przez ListAgents na macOS i Linuksie; v2.1.225 rozszerzyła je tak, że sesja może również rozpocząć rozmowę z sesjami Remote Control na innych maszynach, podczas gdy wcześniej mogła jedynie odpowiadać.45
Mechanizm można podejrzeć w trzech miejscach:
/list-agents(alias/peers) wypisuje w pierwszym wierszu własną nazwę sesji (tę, której inne sesje używają, by do niej dotrzeć; pokazywaną od v2.1.239), a następnie każdą sesję, do której Claude może dotrzeć: subagentów wewnątrz bieżącej sesji, aktywnych członków zespołu agentów tej sesji (wymienianych od v2.1.239; wcześniej osiągalny członek zespołu wyglądał na nieobecnego), pozostałe lokalne sesje, w tym działające w tle, a gdy Remote Control jest połączone, także sesje na innych maszynach i w Claude Code w przeglądarce.19/statuspokazuje wierszPeer addressz własnym gniazdem skrzynki odbiorczej sesji, z przedrostkiemuds:.1CLAUDE_CODE_MESSAGING_SOCKET, zmienna, którą Claude Code eksportuje do hooków i poleceń Bash, gdy tylko skrzynka odbiorcza zostanie powiązana (zob. uwagę o późnym wiązaniu w sekcji Pułapki), zawiera ścieżkę własnego gniazda sesji.16 O tym, dlaczego to ważne, więcej poniżej.
Weryfikacja na mojej własnej maszynie 25 sierpnia 2026 r., z Claude Code 2.1.246: lista agentów otwierała się wierszem „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).” (to jest sesja blakecrosley-com-76, nazwa, której inne sesje używają, by do niej pisać), a dalej następowało 11 sesji równorzędnych w postaci wierszy takich jak „resumegeni-25 [10d770] · interactive · idle · started 21h ago”, z nazwami w formie katalog plus dwuznakowy sufiks i krótkim identyfikatorem w nawiasie kwadratowym, stanami idle, busy i shell, wiekiem startu przy każdym wierszu oraz osobnym blokiem Subagents dla własnych sesji potomnych. Pliki gniazd w /tmp/cc-socks/ mają uprawnienia srw-------, a sam katalog drwx------: odczyt i zapis wyłącznie dla mojego użytkownika, co stanowi granicę bezpieczeństwa na maszynach współdzielonych.1
Sesje odpowiadają na nazwy. Nazwę ustawia się poleceniem /rename lub flagą --name; w przeciwnym razie Claude Code wyprowadza ją z katalogu roboczego, na przykład my-app-3f.111 Od v2.1.232, gdy interaktywna sesja jest uruchamiana, wznawiana lub przemianowywana na nazwę, której już używa inna aktywna sesja na tej maszynie, Claude Code zostawia nazwę sesji, która ją ma, zmienia nazwę nowej na wariant name-word-word (coś w rodzaju auth-refactor-graceful-unicorn) i informuje o tym.110 Kolizje pozostają, gdy jedna z sesji działa w starszej wersji, gdy wspólna nazwa została wygenerowana przez Claude Code albo gdy sesja w tle lub sesja -p startuje z flagą --name, której Claude Code nie sprawdza przy uruchomieniu.11 Lista zawsze pokazuje katalog roboczy każdej lokalnej sesji, co pozwala odróżnić sesje o tej samej nazwie działające w różnych katalogach; przy wspólnej nazwie Claude dodaje ponadto do każdego wiersza krótki identyfikator i używa go w adresie. Claude sięga po to samo adresowanie krótkim identyfikatorem także wtedy, gdy Claude Code nie mógł sprawdzić wszystkich miejsc, w których działają sesje, na przykład na koncie, którego lista sesji w chmurze lub Remote Control przekroczyła ograniczoną liczbę stron, jaką Claude Code odczytuje.1
Co się zmieniło od premiery (sierpień 2026)
Pięć wydań w ciągu dwóch tygodni po premierze zamknęło lukę Windows, którą ten wpis sygnalizował, zacieśniło nazewnictwo i adresowanie oraz usunęło cztery tryby cichej awarii, których wpis nie sygnalizował:910
| Wydanie | Zmiana |
|---|---|
| v2.1.232 | Unikalne nazwy i wzmianki @. Interaktywne sesje na jednej maszynie zachowują unikalne nazwy (kolizja zmienia nazwę nowej sesji na wariant name-word-word i informuje o tym); wpisanie @ w prompcie wzmiankuje inną aktywną sesję po nazwie, a Claude dociera do niej bezpośrednio przez SendMessage; /config zyskuje wiersz „Messages from your other sessions” (wiadomości z pozostałych sesji), który zapisuje crossSessionInbound (accept, hold, refuse) w ustawieniach użytkownika, obok wiersza „Dialog expiry” (wygasanie okna dialogowego). To samo wydanie utwardziło automatycznie generowany katalog gniazd we współdzielonym /tmp: Claude Code odmawia teraz użycia podstawionego wcześniej dowiązania symbolicznego lub katalogu innego użytkownika.110 |
| v2.1.235 | SendMessage z góry odrzuca wiadomość zbyt dużą dla dostarczania międzysesyjnego, zamiast po cichu ją porzucać.10 |
| v2.1.236 | notify_when_idle: prośba do innej sesji na tej samej maszynie o wysłanie jednego powiadomienia, gdy następnym razem przejdzie w stan bezczynności lub zakończy działanie (obie sesje v2.1.236+). Opcjonalne, jednorazowe, bez odpytywania. To samo wydanie z góry odrzuca kolejne wiadomości, gdy szybka seria przekroczyłaby to, co przyjmuje skrzynka odbiorcza odbiorcy, zamiast raportować je jako wysłane, podczas gdy odbiorca je porzucał.110 |
| v2.1.238 | Uczciwość dostarczania: wysyłka do sesji na tej maszynie, która odrzuca wiadomości przychodzące (crossSessionInbound: "refuse"), raportuje teraz nadawcy „refused” (odrzucono) zamiast cichego sukcesu, a sesja, której skrzynka porzuca wiadomości (limit częstotliwości lub pełna kolejka), informuje o tym sesję nadawcy, zamiast pozwolić wiadomościom zniknąć.10 |
| v2.1.239 | Windows. Komunikacja międzysesyjna działa natywnie, z tymi samymi narzędziami SendMessage i ListAgents; ListAgents podaje teraz sesji jej własną nazwę (tę, której używają sesje równorzędne, by do niej dotrzeć) i wymienia aktywnych członków zespołu, którzy wcześniej wyglądali na nieobecnych; SendMessage do własnej nazwy mówi o tym wprost zamiast „no agent named …”.9 |
Praktyczny skutek: wzorzec „raportująca sesja długo działająca” opisany poniżej nie potrzebuje już promptu z pytaniem o stan. Sesja obserwująca prosi długo działającą sesję o jedno powiadomienie o bezczynności przez notify_when_idle i otrzymuje je, gdy tamta następnym razem przejdzie w stan bezczynności lub się zakończy. Dwa z czterech trybów awarii (zbyt duża wiadomość lub seria zbyt szybka dla skrzynki) zawodzą teraz z góry po stronie nadawcy; pozostałe dwa (wiadomość odrzucona lub porzucona) wracają do interaktywnego nadawcy na tej samej maszynie jako jawne raporty.
Model zaufania to najciekawsza część
Projekt Anthropic odpowiada na pytanie, z którym większość systemów wieloagentowych sobie nie radzi: ile warta jest wiadomość od innego agenta? Odpowiedź jest tu precyzyjna: wiadomość to informacja, nigdy autorytet.1
Gdy sesja A wysyła wiadomość do sesji B, to, co dociera, wiążą cztery reguły:1
- Nie może niczego zatwierdzić. Oczekujący monit o uprawnienia w B ignoruje wszystko, co mówi A. Na monity odpowiada wyłącznie użytkownik.
- Nie może zmienić konfiguracji. Claude Code instruuje odbierającego Claude, by nigdy nie zmieniał ustawień uprawnień,
CLAUDE.mdani żadnej konfiguracji tylko dlatego, że poprosiła o to inna sesja. - Polecenia przychodzą jako tekst.
/compactw treści wiadomości to osiem znaków prozy, nigdy wykonane polecenie. - Monity o uprawnienia nadal się pojawiają. Jeśli działanie na podstawie wiadomości wymaga uprawnienia, którego B nie ma, pojawia się ten sam monit co przy każdej innej pracy.
Dostarczanie przychodzące ma własną bramkę. Każda docierająca wiadomość kończy jednym z trzech wyników (dostarczona, wstrzymana do zatwierdzenia przez użytkownika albo odrzucona), o czym decyduje ustawienie crossSessionInbound (accept, hold, refuse).1 Gdy nic nie ustawiono, Claude Code decyduje o każdej wiadomości z osobna na podstawie trybów uprawnień obu sesji, a domyślna logika jest elegancka: sesje omijające monity o uprawnienia tworzą jedną klasę, wszystkie pozostałe drugą (tryb planowania liczy się jako omijający, gdy sesja ma dostępne omijanie; auto, acceptEdits i dontAsk liczą się jako pytające). Sesja pytająca przyjmuje wiadomości swobodnie, ale wstrzymuje wszystko, co przychodzi od sesji omijającej; sesja omijająca wstrzymuje wszystko poza wiadomościami od innych sesji omijających.1 Ta asymetria jest zamierzona: wiadomość nie może jechać na autorytecie sesji o luźniejszych uprawnieniach, a zasadę tę v2.1.224 stosuje na wejściu po tym, jak v2.1.222 zastosowała ją na wyjściu w trybie auto, gdzie klasyfikator uprawnień ocenia każdą wysyłkę przed jej nadaniem.7
Wstrzymane wiadomości otwierają okno zatwierdzania z nadawcą i podglądem; okna bez odpowiedzi wygasają po pięciu minutach (do zmiany przez dialogExpiry), a wiadomość przepada.1 Sesja w tle bez podłączonego terminala trzyma okno otwarte poza tym terminem; po podłączeniu wiadomość przepada dopiero wtedy, gdy okno pozostanie bez odpowiedzi przez pełny okres terminu.1 Jednocześnie wstrzymanych może być najwyżej 100 wiadomości.1 Dwa kolejne mechanizmy zawężają to jeszcze bardziej: isolatePeerMachines: true wymaga jawnej zgody użytkownika, zanim jakakolwiek wiadomość opuści maszynę, nawet w trybie bypassPermissions, a true z dowolnego zakresu ustawień wygrywa, więc plik projektu w repozytorium może tę regułę zaostrzyć, ale nigdy jej poluzować.1 Organizacje mogą wyłączyć funkcję całkowicie regułami odmowy dla SendMessage i ListAgents plus crossSessionInbound: "refuse" w ustawieniach zarządzanych.1
Jak podróżują wiadomości
Miejsce, w którym działa druga sesja, określa zarówno transport, jak i to, co można wysłać:1
| Cel | Transport | Co można wysłać |
|---|---|---|
| Ta sama maszyna | Gniazdo uniksowe na sesję (potok nazwany w natywnym Windows), nigdy przez serwery Anthropic | Nowe wiadomości i odpowiedzi |
| Inna własna maszyna | Serwery Anthropic, dostarczenie przez połączenie Remote Control tamtej maszyny | Odpowiedzi; nowe rozmowy od v2.1.225, gdy Remote Control jest połączone5 |
| Claude Code w przeglądarce | Serwery Anthropic, prosto do sesji w chmurze | Odpowiedzi; nowe rozmowy z sesją w chmurze widoczną na liście, gdy Remote Control jest połączone1 |
Gdy ten wpis ukazał się po raz pierwszy, strona dokumentacji Anthropic wciąż opisywała całą komunikację między maszynami jako ograniczoną do odpowiedzi, podczas gdy informacje o wydaniu v2.1.225 mówiły, że SendMessage „can now start a conversation with your Remote Control sessions on other machines by name” (może teraz rozpoczynać rozmowę z sesjami Remote Control na innych maszynach po nazwie). Dokumentacja od tego czasu nadrobiła zaległości: strona podaje obecnie, że rozpoczęcie rozmowy z sesją na innej własnej maszynie wymaga v2.1.225 lub nowszej oraz celu widocznego na liście.15
Reguła tej samej maszyny to widoczność systemu plików: sesje rejestrują się w plikach na dysku, więc dwie sesje docierają do siebie tylko wtedy, gdy widzą te same pliki. Sesja w kontenerze i sesja na hoście nie mogą rozmawiać; dwie sesje w tym samym kontenerze mogą.1
Dostarczanie szanuje rytm sesji odbierającej: odbierający Claude czyta wiadomość między wywołaniami narzędzi podczas aktywnej tury, nigdy nie przerywając działającego narzędzia, a gdy sesja jest bezczynna, Claude Code rozpoczyna z tą wiadomością nową turę.1 Dostarczone wiadomości liczą się do zużycia tak jak wpisany prompt.1
Pięć wzorców wartych zbudowania
1. Koordynacja worktree. Przypadek oczywisty i ten, który dokumentacja ilustruje własną przykładową wiadomością: sesje pracujące nad tym samym repozytorium w osobnych worktree informują się nawzajem, co wylądowało.1 „Migracja schematu zakończona: nowa kolumna to tenant_id, rebase na main jest już bezpieczny.” to klasa aktualizacji, która w innym razie wymaga zauważenia, przełączenia terminala i ponownego wpisania. Jeśli kilka sesji dzieli jeden checkout zamiast worktree, wiadomość koordynacyjna staje się jeszcze cenniejsza: „Zaraz commituję content/guides/, nie dodawaj tego do indeksu” zapobiega klasycznej kolizji we wspólnym drzewie, w której jedna sesja commituje niedokończoną pracę drugiej.
2. Obserwator i wykonawca. Warto uruchomić sesję monitorującą, która obserwuje wdrożenie, zestaw testów lub log, i kazać jej wysłać wiadomość do sesji odpowiedzialnej za poprawki w chwili, gdy coś się psuje. Sesja odbierająca dostaje ustalenie jako kontekst, nie jako polecenie; nadal sama decyduje, w ramach własnych uprawnień, co zrobić. Połączenie obserwatora z sesjami w tle i hookami powiadomień daje łańcuch eskalacji, który kończy się na człowieku tylko wtedy, gdy powinien.
3. Raportująca sesja długo działająca. Uruchomić migrację lub długi przebieg testów w jednej sesji, a następnie kazać jej raportować do sesji, którą faktycznie się obserwuje.1 Stan przestaje żyć w terminalu, o którym zapomniano. Działa też odwrotność; wystarczy zapytać od strony obserwującej: „Zapytaj sesję działającą w moim drugim terminalu, czy migracja się zakończyła” to prompt, a Claude sam zajmuje się wykrywaniem, adresowaniem i sformułowaniem.1 Od v2.1.236 pytanie można pominąć: sesja obserwująca ustawia notify_when_idle na sesji długo działającej, a ta raportuje jednorazowo, gdy następnym razem przejdzie w stan bezczynności lub się zakończy, bez odpytywania z żadnej strony.110 Obie sesje potrzebują v2.1.236+, a ograniczenia wynikają z mechanizmów kontroli ruchu przychodzącego. Każda subskrypcja ma 12-godzinny limit: jeśli do tego czasu nie nadejdzie powiadomienie, Claude Code porzuca subskrypcję i każe Claude przestać czekać. Przy refuse po stronie obserwowanej ta sesja porzuca prośbę bez zapisania jej i bez odpowiedzi, więc subskrypcja wygasa bez odpowiedzi po osiągnięciu limitu; przy refuse po stronie pytającej Claude Code w ogóle nie subskrybuje. Przy hold po którejkolwiek stronie powiadomienie dociera w okrojonej postaci: sesja obserwowana pomija swój jednowierszowy status, a sesja pytająca pokazuje powiadomienie w transkrypcie, nie dostarczając go do Claude.1
4. Bezobsługowe floty sesji roboczych. Sesje headless claude -p również wiążą gniazda skrzynki odbiorczej, więc długo działający worker -p może odbierać wiadomości i pojawia się na listach.8 Haczyk: sesja -p nie może pokazać okna zatwierdzania, więc domyślnie wstrzymana wiadomość czeka do upływu terminu dialogExpiry (domyślnie pięć minut; dialogExpiry przyjmuje 60s, 5m, 10m lub never), po czym przepada i zgłasza się jako wygasła nadawcy, do którego może dotrzeć; dostarczy ją tylko zmiana trybu lub ustawień w tym oknie czasowym.1 Gdy sesja kończy się z wciąż wstrzymanymi wiadomościami, Claude Code zgłasza je jako wygasłe każdemu nadawcy, do którego może dotrzeć.1 Przed v2.1.225 żaden termin nie obowiązywał: wstrzymana wiadomość parkowała bez powiadomienia i bez wygaśnięcia, a worker kończący pracę ze wstrzymanymi wiadomościami nic nie mówił ich nadawcom.1 Aby uruchomić workera przyjmującego wiadomości bez nadzoru, należy wystartować go z crossSessionInbound: "accept" w wartości --settings: to grant dla pojedynczego workera, a nie accept w ustawieniach użytkownika, które objęłoby każdą uruchamianą sesję.8 Sesje w trybie bare całkowicie pomijają gniazdo i pozostają nieosiągalne.8
5. Skryptowane skrzynki odbiorcze. Cichy, ale potężny mechanizm: ponieważ Claude Code eksportuje CLAUDE_CODE_MESSAGING_SOCKET do hooków i poleceń Bash, skrypt może wysłać wiadomość do własnej skrzynki sesji.6 Claude Code weryfikuje wiadomości od własnych procesów potomnych: hook lub polecenie piszące z powrotem do własnej sesji dostarcza bez ceremonii, gdy nie obowiązuje jawne crossSessionInbound.1 Hook gita wyzwolony własnym commitem sesji, wrapper testów, który sesja uruchomiła, skrypt wdrożenia, który wykonała: każdy hook lub polecenie Bash uruchomione przez samą sesję może odesłać do niej wiersz kontekstu. Claude Code musi zweryfikować nadawcę jako własny proces potomny; gdy nie może tego zrobić ani na podstawie dowodów procesowych, ani tokenu, traktuje wiadomość jako niedeklarującą żadnej klasy uprawnień, więc sesja omijająca monity wstrzymuje ją do zatwierdzenia zamiast dostarczyć.1 W natywnym Windows pierwszy wiersz połączenia musi być wierszem uwierzytelniającym z CLAUDE_CODE_MESSAGING_TOKEN, w przeciwnym razie Claude Code zamyka połączenie bez czytania; ten token jest też jedynym sposobem, w jaki Windows weryfikuje wiadomość od własnego procesu potomnego.1 Na Linuksie kontrola dowodów procesowych działa nawet po zakończeniu procesu wysyłającego; na macOS tylko dopóki on jeszcze działa. Po jego zakończeniu na macOS oraz w kontenerze, w którym Claude Code jest PID 1, Claude Code weryfikuje zamiast tego proces potomny, który przesłał w wierszu uwierzytelniającym wyeksportowany przez sesję CLAUDE_CODE_MESSAGING_TOKEN.1 Polecenia w piaskownicy potrzebują zezwolenia na gniazdo: sandbox.network.allowUnixSockets wymienia ścieżki gniazd na macOS, a na Linuksie i w WSL 2, gdzie filtr seccomp nie potrafi sprawdzać ścieżek, otwiera je wyłącznie sandbox.network.allowAllUnixSockets: true; bez zainstalowanego tego opcjonalnego filtra piaskownica w ogóle nie blokuje gniazda.112
Czym ta funkcja nie chce być
Ograniczenia są decyzjami projektowymi, a ich poszanowanie chroni przed zbudowaniem niewłaściwej rzeczy.
To nie kanał zatwierdzania. Wszystko w modelu zaufania istnieje po to, by jedna sesja nie mogła autoryzować działań drugiej. Projekt jawnie wyklucza każdy przepływ pracy w kształcie „sesja A zatwierdza, sesja B wykonuje”. Autorytet zawsze przechodzi przez człowieka.1
To nie transfer kontekstu. Wiadomość to tekst, który jeden Claude pisze do drugiego, nigdy historia rozmowy ani pliki. Dokumentacja Anthropic mówi to wprost: aby przenieść rozmowę, należy wznowić sesję.1 Streszczać, nie zrzucać.
To nie zespoły agentów. Niezależne sesje wymieniające wiadomości to przypadek peer-to-peer. Skoordynowany zespół, który Claude tworzy i nadzoruje (ustrukturyzowane komunikaty protokołu, skład, wspólny stan zadań), to funkcja zespołów agentów, a ustrukturyzowane wiadomości zespołowe celowo pozostają wewnątrz zespołu.1 Kto przyłapie się na projektowaniu protokołu wiadomości na bazie tekstu międzysesyjnego, potrzebuje zespołów agentów.
To nie pętla czatu. Claude Code ogranicza częstotliwość powtarzanych wiadomości od jednego nadawcy, porzuca identyczne powtórzenia nadchodzące w krótkim oknie i ogranicza liczbę nieprzeczytanych przyjętych wiadomości do 50 na sesję, więc pętla wiadomości między dwiema sesjami z założenia sama się wygłodzi.1 v2.1.236 dodatkowo z góry odrzuca kolejne wiadomości, gdy szybka seria przekroczyłaby to, co przyjmuje skrzynka odbiorcy, zamiast raportować je jako wysłane, podczas gdy odbiorca je porzucał.10 Warto budować wymiany typu żądanie i odpowiedź, nie rozmowy.
Pułapki
Zmienne prywatności po cichu ją wyłączają. Komunikacja międzysesyjna zależy od ewaluacji flag funkcji, a każda ze zmiennych CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, DISABLE_TELEMETRY, DO_NOT_TRACK i DISABLE_GROWTHBOOK może tę ewaluację wyłączyć, zabierając ze sobą komunikację, po cichu.3 Diagnostyką jest /list-agents: jeśli sesja nie rozpoznaje polecenia, w ogóle nie ma tej funkcji; jeśli polecenie działa, ale wysyłka nigdy nie dociera, w grę wchodzi coś węższego: reguła odmowy, kontrola ruchu przychodzącego u odbiorcy, cel nieobecny na liście (Remote Control niepołączone albo sesja wypadła poza ograniczoną liczbę stron, jaką Claude Code odczytuje) lub nadawca sprzed v2.1.225 próbujący rozpocząć rozmowę między maszynami.1 Cel, który nigdy nie powiązał skrzynki odbiorczej, nie jest przypadkiem cichym. Sesja za zmienną prywatności, w trybie bare lub po drugiej stronie granicy kontenera nigdy nie pojawia się w /list-agents, więc wysyłka do niej zawodzi głośno jako nazwa, której Claude Code nie może znaleźć, a od v2.1.234 SendMessage mówi też, gdy nie mógł sprawdzić listy sesji w całości, zamiast traktować niewidoczne sesje jako nieobecne.1310 Pierwsza sesja po aktualizacji to wiązanie późne, nie brakujące: Claude Code wiąże skrzynkę i eksportuje zmienną gniazda, gdy tylko zakończy się pobieranie flag funkcji, a v2.1.228 naprawiła sytuację, w której ta pierwsza sesja czasem startowała w ogóle bez skrzynki.110 Naprawdę ciche przypadki leżą po stronie nadawcy. Dokumentacja obiecuje powiadomienie o wstrzymaniu i jego kontynuację, powiadomienie o odrzuceniu w chwili nadejścia oraz powiadomienie o porzuceniu wyłącznie interaktywnemu nadawcy na tej samej maszynie, więc nadawca z innej maszyny lub worker -p nie ma dla tych przypadków żadnego obiecanego powiadomienia. Dwa raporty trafiają do „each sender it can reach” (każdego nadawcy, do którego można dotrzeć): wygaśnięcie domyślnie wstrzymanej wiadomości oraz odrzucenie, gdy zmiana ustawień porzuca wstrzymane wiadomości. Wiadomość zaparkowana przez jawne ustawienie hold nigdy nie wygasa, więc żaden raport o wygaśnięciu nigdy dla niej nie wraca.1
Luki platform i dostawców. Natywny Windows pojawił się w v2.1.239; wcześniej działał tylko Linux wewnątrz WSL 2.19 Strona dokumentacji Anthropic podaje jako próg dla Windows v2.1.234; informacje o wydaniu ogłaszają go po raz pierwszy w v2.1.239. Za bezpieczny próg należy przyjąć v2.1.239.19 Sesja wewnątrz WSL 2 i natywna sesja Windows na tym samym komputerze również nie mogą się nawzajem osiągnąć: rejestrują się w różnych katalogach domowych i nasłuchują na różnych typach gniazd.1 Funkcja jest niedostępna w Amazon Bedrock, Claude Platform on AWS, Google Cloud Agent Platform i Microsoft Foundry.1
Krawędź jednokierunkowej odpowiedzi. Odpowiedź do sesji na innej maszynie, wysłana, gdy sesja odpowiadająca nie jest połączona z Remote Control, wciąż dociera, ale bez adresu zwrotnego, więc odbiorca nie może odpowiedzieć. Claude Code informuje o tym Claude przy wysyłce, a v2.1.225 zacieśniła adresowanie: gdy Claude Code nie mógł sprawdzić własnej listy sesji, nigdy nie podmienia potwierdzonego odbiorcy na innej maszynie na lokalną sesję o tej samej nazwie.5
Wstrzymania w trybie headless. Worker -p, który w tajemniczy sposób ignoruje wiadomości, to niemal zawsze problem wstrzymanej wiadomości: brak okna, brak dostarczenia. Workerom, które mają słuchać, należy ustawić crossSessionInbound: "accept".8
Najważniejsze wnioski
Dla codziennych użytkowników Claude Code:
- Warto raz uruchomić /list-agents, by zobaczyć, do czego sesje już mogą dotrzeć; ważne sesje należy nazwać przez /rename, aby wiadomości adresowały się czysto. Przewodnik po Claude Code omawia polecenia sesji i ustawienia, na których ta funkcja się opiera.
- Wiadomości najlepiej zlecać zwykłym językiem („powiedz sesji pracującej nad płatnościami, co zmieniliśmy”) i pozwolić Claude samemu napisać treść.1
Dla budujących automatyzację:
- Do sesji można pisać z hooków i skryptów przez CLAUDE_CODE_MESSAGING_SOCKET; wiadomości od własnych procesów potomnych na Linuksie dostarczają bez tarcia związanego z zatwierdzaniem.16
- Bezobsługowym workerom -p należy dać crossSessionInbound: "accept" w ich własnych --settings, nie globalnie.8
Dla zespołów i audytorów bezpieczeństwa:
- Funkcja ma właściwe domyślne ustawienia: wiadomości nie niosą autorytetu, domyślne reguły odseparowują sesje omijające monity, a isolatePeerMachines plus reguły odmowy w ustawieniach zarządzanych dają wyłączniki na poziomie maszyny i całej organizacji.1
- Przed uznaniem, że komunikacja jest zepsuta, należy sprawdzić cztery zmienne środowiskowe prywatności. Sesja odrzucająca wygląda identycznie na listach i we własnym /status, więc trzeba sprawdzić pliki ustawień obowiązujące dla tej sesji, a nie jej status; od v2.1.238 wysyłka z sesji na tej samej maszynie również zgłasza odrzucenie z powrotem.110
FAQ
Czy komunikacja międzysesyjna w Claude Code działa na Windows?
Tak, natywnie od v2.1.239 według informacji o wydaniu, z tymi samymi narzędziami SendMessage i ListAgents oraz z nazwanym potokiem w miejsce gniazda uniksowego. Wcześniej działał wyłącznie Linux wewnątrz WSL 2. Strona dokumentacji Anthropic podaje jako próg dla Windows v2.1.234; bezpieczniej traktować v2.1.239 jako dolną granicę. Sesja w WSL 2 i sesja natywna dla Windows na tym samym komputerze nadal nie mogą się wzajemnie dosięgnąć.19
Czy jedna sesja Claude Code może zatwierdzić monit o uprawnienia w innej sesji?
Nie. Wiadomość jest informacją, nigdy autorytetem. Oczekujący monit o uprawnienia ignoruje wszystko, co mówi sesja wysyłająca, ponieważ na monity odpowiada wyłącznie użytkownik. Claude Code instruuje odbierającego Claude, aby nigdy nie zmieniał ustawień uprawnień, pliku CLAUDE.md ani żadnej konfiguracji dlatego, że poprosiła o to inna sesja, a /compact w treści wiadomości to osiem znaków prozy, nigdy wykonane polecenie.1
Dlaczego moje pozostałe sesje nie pojawiają się w /list-agents?
Najpierw warto skontrolować zmienne środowiskowe prywatności. Komunikacja zależy od ewaluacji flag funkcji, a każda ze zmiennych CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, DISABLE_TELEMETRY, DO_NOT_TRACK i DISABLE_GROWTHBOOK potrafi tę ewaluację wyłączyć, cicho pociągając za sobą komunikację. Sesja w trybie bare albo po drugiej stronie granicy kontenera również nigdy się nie pojawi, ponieważ dwie sesje dosięgają siebie wyłącznie wtedy, gdy widzą te same pliki na dysku.13
Jak pozwolić bezobsługowemu workerowi claude -p odbierać wiadomości?
Należy uruchomić go z crossSessionInbound: "accept" w wartości jego --settings, co jest zgodą nadaną pojedynczemu workerowi, a nie wpisem accept w ustawieniach użytkownika, obowiązującym każdą uruchamianą sesję. Sesja -p wiąże gniazdo skrzynki odbiorczej i pojawia się na listach, lecz nie potrafi wyświetlić okna zatwierdzenia, więc wiadomość wstrzymana domyślną regułą czeka do upływu terminu dialogExpiry, a potem przepada.8
Czy mogę wysłać do innej sesji historię rozmowy albo pliki?
Nie. Wiadomość to zwykły tekst, który jeden Claude pisze do drugiego, nigdy historia rozmowy, pliki czy uprawnienia. Dokumentacja Anthropic mówi to wprost: aby przenieść rozmowę, należy zamiast tego wznowić sesję. Lepiej streścić, niż zrzucić całość. A jeśli ktoś przyłapuje się na projektowaniu protokołu wiadomości nadbudowanego nad tekstem międzysesyjnym, to w rzeczywistości potrzebuje agent teams.1
Źródła
-
Anthropic, „Message your other Claude Code sessions”, dokumentacja Claude Code. Dostęp 8 sierpnia 2026; ponownie zweryfikowano 25 sierpnia 2026. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Anthropic, „Tools reference”, dokumentacja Claude Code: wpisy
ListAgentsiSendMessage. ↩ -
Anthropic, „Environment variables”, dokumentacja Claude Code: uwagi o ewaluacji flag funkcji dotyczące
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC,DISABLE_TELEMETRY,DO_NOT_TRACKiDISABLE_GROWTHBOOK. ↩↩↩↩ -
Anthropic, informacje o wydaniu Claude Code v2.1.224, 7 sierpnia 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, informacje o wydaniu Claude Code v2.1.225, opublikowane 8 sierpnia 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.” To samo wydanie stwierdza, że Claude Code nigdy nie podmienia potwierdzonego odbiorcy Remote Control na sesję o tej samej nazwie na tej maszynie „when its own list couldn’t be checked” (gdy nie mógł sprawdzić własnej listy). ↩↩↩↩↩ -
Anthropic, „Environment variables”, dokumentacja Claude Code:
CLAUDE_CODE_MESSAGING_SOCKET, eksportowana do hooków i poleceń Bash, gdy gniazdo zostanie powiązane, a w sesji startującej z włączoną komunikacją powiązana przed uruchomieniem jakiegokolwiek hooka; strona o komunikacji międzysesyjnej dodaje „includingSessionStart”. ↩↩↩ -
Anthropic, informacje o wydaniu Claude Code v2.1.222, 4 sierpnia 2026: „Improved auto mode safety: messages sent to other agent sessions via
SendMessageare now evaluated by the permission classifier before dispatch.” Ocena klasyfikatora obowiązuje w trybie auto (oraz w trybie planowania, gdy klasyfikator auto ocenia polecenia), nie powszechnie. Klauzula o trybie planowania pochodzi z Anthropic, „Permission modes”, dokumentacja 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”, dokumentacja Claude Code: sesje
-pwiążą gniazda skrzynki odbiorczej i pojawiają się na liście, domyślnie wstrzymana wiadomość czeka tam do upływudialogExpiry, a dostarczanie bez nadzoru wymagacrossSessionInbound: "accept"we własnych--settingsworkera. Strona o trybie headless opisuje tryb bare w sekcji „Headless mode”. ↩↩↩↩↩↩ -
Anthropic, informacje o wydaniu Claude Code v2.1.239, 21 sierpnia 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, informacje o wydaniu 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”) oraz v2.1.238 (raportowanie odrzuconych wiadomości przychodzących i wiadomości porzuconych przez skrzynkę). Zweryfikowano względem kanonicznego CHANGELOG.md 25 sierpnia 2026. ↩↩↩↩↩↩↩↩↩↩↩↩ -
Anthropic, „Sessions: Name your sessions”, dokumentacja Claude Code. „In three cases Claude Code doesn’t rename the duplicate” (w trzech przypadkach Claude Code nie zmienia nazwy duplikatu): nie sprawdza tytułów generowanych przez AI ani domyślnych nazw wyświetlanych, nie sprawdza przy starcie „the
--nameof a background or-psession at startup” i nie może zmienić nazwy sesji działającej we wcześniejszej wersji Claude Code. ↩↩ -
Anthropic, „Settings reference:
sandbox.network.allowUnixSockets”, dokumentacja 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.” WpisallowAllUnixSocketsdodaje, że na Linuksie i w WSL2 filtr seccomp blokuje wywołaniasocket(AF_UNIX, ...), co czyni ten klucz jedynym sposobem na dopuszczenie gniazd uniksowych w tych środowiskach. ↩