SpyBara
Go Premium

cross-session-messaging.md 2026-09-11 23:01 UTC to 2026-09-12 03:02 UTC

This page contains 405 additions and 0 deletions.

2026
Sat 12 03:02 Sun 13 21:00 Fri 18 23:58

Отправляйте сообщения другим сеансам Claude Code

Позвольте Claude перечислить и отправить сообщения другим вашим сеансам Claude Code на этом компьютере, а также достичь ваши сеансы на других компьютерах или в веб-версии.

Обмен сообщениями между сеансами позволяет Claude доставить сообщение от одного из ваших сеансов Claude Code другому. Когда изменение в одном сеансе нарушает то, над чем работает другой, Claude может предупредить этот сеанс до того, как вы это заметите. Когда один сеанс разрешает вопрос, на котором застрял другой, Claude может отправить ответ между ними.

Сообщение — это фрагмент текста, который один Claude пишет другому, никогда не история разговора отправителя или файлы. Чтобы переместить весь разговор или его контекст, возобновите сеанс вместо этого.

Claude использует два инструмента для этого: ListAgents для обнаружения, какие агенты он может достичь, и SendMessage для доставки сообщения одному из них по имени. С помощью того же инструмента SendMessage Claude также может отправлять сообщения подагентам и товарищам команды агентов в одном сеансе или команде. На этой странице рассматриваются сообщения между вашими независимыми сеансами.

Когда использовать обмен сообщениями между сеансами

Используйте обмен сообщениями, когда один из ваших сеансов имеет что-то, что нужно другому сеансу во время выполнения задачи. Claude может отправить сообщение самостоятельно, когда видит необходимость, например после внесения изменения, которое влияет на работу другого сеанса, или вы можете попросить его отправить одно. Типичные случаи:

  • Передача находки: когда один сеанс обнаруживает критическое изменение или принимает решение, Claude суммирует его для сеанса, работающего над затронутой областью, вместо того чтобы вы переобъясняли это там.
  • Координация параллельных worktrees: когда сеансы работают с одним репозиторием в отдельных worktrees, Claude может сообщить другим сеансам, что было внедрено.
  • Получение статуса от долгоживущей работы: попросите миграцию или тестовый запуск отправить отчет обратно в сеанс, который вы наблюдаете, или попросите его оттуда. Если этот сеанс находится на этом компьютере, Claude также может попросить одно уведомление, когда сеанс следующий раз перейдет в режим ожидания или выйдет.
  • Отправка сообщений между машинами: достичь один из ваших сеансов на другой машине или в веб-версии.

Используйте обмен сообщениями между независимыми сеансами, которые вы запускаете и управляете сами. Claude Code имеет специальную функцию для каждого из других способов запуска или достижения нескольких сеансов, поэтому используйте ту, которая предназначена для того, что вы делаете:

  • Чтобы продолжить один разговор в другом терминале или поделиться его контекстом с новым сеансом, возобновите сеанс
  • Для координируемой команды сеансов, которые Claude порождает и контролирует, используйте команды агентов
  • Чтобы наблюдать и управлять многими сеансами из одного места, используйте представление агента
  • Чтобы управлять сеансом самостоятельно со своего телефона или другого устройства, вместо того чтобы сеансы отправляли друг другу сообщения, используйте Удаленное управление
  • Чтобы отправить внешние события, такие как результаты CI или сообщения чата, в сеанс, используйте каналы

Отправка сообщения другому сеансу

Когда один из ваших сеансов узнает что-то, что нужно другому сеансу, например находку, статус или решение, Claude передает это вместо того чтобы вы копировали и вставляли между терминалами. Claude обнаруживает цель с помощью ListAgents и отправляет с помощью SendMessage, поэтому вы никогда не вызываете ни один инструмент самостоятельно. Claude может решить отправить сообщение без просьбы, и вы также можете попросить его отправить одно.

Чтобы попросить его самостоятельно, скажите Claude, что вы хотите, чтобы другой сеанс узнал или сделал. Этот пример — это подсказка, которую вы вводите, а не сообщение, которое отправляет Claude:

Ask the session running in my other terminal whether the migration finished

Claude пишет само сообщение, поэтому ваша подсказка может оставить содержание Claude. Эта подсказка просит резюме без диктовки его формулировки, и то, что отправляет Claude, варьируется:

Explain what we just did to the session working on the payments API

Чтобы назвать цель самостоятельно, упомяните сеанс в своей подсказке: введите @ с последующими первыми буквами имени сеанса и выберите сеанс из раскрывающегося списка, так же как вы @-упоминаете подагента. Требуется Claude Code v2.1.232 или более поздней версии. Claude Code вставляет упоминание, такое как @api-worker, и сообщает Claude, какой сеанс оно называет, поэтому Claude может отправить сообщение этому сеансу без предварительного составления списка ваших сеансов. Эта подсказка называет цель с упоминанием:

Let @api-worker know the schema migration finished

Раскрывающийся список показывает ваши другие активные сеансы на этом компьютере. Два случая требуют больше, чем первые буквы имени:

  • Сеанс за пределами этого компьютера: облачный сеанс или сеанс удаленного управления появляется в раскрывающемся списке только после того, как Claude составит список или отправит сообщения вашим сеансам за пределами этого компьютера, поэтому сначала попросите Claude составить их список.
  • Имя с пробелом или другими символами вне букв, цифр, дефисов и подчеркиваний: введите его в двойных кавычках, например @"release notes". Когда вы выбираете сеанс из раскрывающегося списка, Claude Code вставляет кавычки для вас.

Вы также можете ввести упоминание без средства выбора. Когда более одного активного сеанса отвечает на упомянутое имя, Claude спросит вас, какой вы имеете в виду, прежде чем отправить.

Чтобы увидеть, как выглядит сообщение, которое пишет Claude, когда оно прибывает, включая пример одного, смотрите как выглядит сообщение.

Доставка сообщения

Получающий Claude читает сообщение между вызовами инструментов во время активного хода, поэтому работающий инструмент никогда не прерывается. Когда получающий сеанс неактивен, Claude Code начинает новый ход с сообщением.

Сообщение от другого сеанса прибывает как простой текст. Если оно упоминает файл или ресурс MCP с @, Claude видит упоминание как написанное, и Claude Code ничего не прикрепляет, независимо от того, начинает ли сообщение новый ход или прибывает во время одного. Claude все еще может открыть упомянутый путь на получающей машине со своими собственными инструментами, в соответствии с разрешениями этого сеанса. До v2.1.251 упоминание @ в сообщении, которое начало новый ход, прикрепляло файл или ресурс MCP на получающей стороне.

Claude Code отказывает в сообщении в следующих случаях:

Получающий сеанс проверяет каждое прибывающее сообщение против своих собственных входящих элементов управления, и проверка заканчивается одним из трех результатов:

  • Доставлено: Claude Code передает сообщение получающему Claude.
  • Удержано: Claude Code откладывает сообщение в сторону недоставленным. Удержанное сообщение достигает Claude только когда вы его одобрите или позже применится режим или изменение параметров, которое его позволяет.
  • Отказано: Claude Code отбрасывает сообщение без доставки.

После доставки сообщение учитывается в использовании как подсказка, которую вы вводите, и получающий Claude может ответить отправителю так же, за исключением одностороннего случая между машинами.

Границы разрешений остаются для каждого сеанса. Claude инструктирован никогда не просить другой сеанс о действии, которое было отклонено или заблокировано в его собственном сеансе, или которое его собственные параметры разрешений заблокировали бы, и маршрутизировать эту работу обратно вам. На получающей стороне собственные подсказки разрешений и правила получающего сеанса все еще применяются ко всему, что сообщение просит.

Получение уведомления, когда другой сеанс переходит в режим ожидания

Claude может попросить один из ваших сеансов на этом компьютере отправить обратно одно уведомление, когда этот сеанс следующий раз перейдет в режим ожидания или выйдет. Режим ожидания здесь означает, что сеанс завершил ход без ничего в очереди. Используйте это, когда вы ждете долгую задачу в другом сеансе и хотите услышать, когда она будет готова, вместо проверки. Требуется Claude Code v2.1.236 или более поздней версии в обоих сеансах.

Запрос уведомления

Скажите Claude, что вы ждете. Эта подсказка запрашивает уведомление из сеанса миграции:

Tell me when the migration session finishes what it's working on

Claude подписывается с помощью входного параметра notify_when_idle инструмента SendMessage, либо прикрепленного к сообщению, которое он отправляет в любом случае, либо самостоятельно. Самостоятельно Claude Code подписывается без запуска хода или трат токенов в наблюдаемом сеансе и отправляет уведомление сразу же, если этот сеанс уже неактивен. Прикрепленное к сообщению Claude Code сначала доставляет сообщение и отправляет уведомление позже.

Что показывает каждый сеанс

Наблюдаемый сеанс показывает строку, говорящую, что другой процесс попросил быть уведомленным, когда сеанс следующий раз перейдет в режим ожидания. Запрашивающий сеанс показывает уведомление как строку, называющую наблюдаемый сеанс. Строка может включать время завершения хода этого сеанса и однострочный статус из этого хода. Если запрашивающий сеанс неактивен, Claude Code начинает новый ход с уведомлением.

Ограничения

Уведомление является одноразовым: Claude Code отправляет его один раз из наблюдаемого сеанса, и ни один сеанс не опрашивает другой. Если уведомление не прибывает в течение 12 часов, Claude Code отбрасывает подписку и сообщает Claude, поэтому оно не продолжает ждать.

Входящие элементы управления каждой стороны применяются к уведомлению как к сообщению:

  • refuse на любой стороне: ничего не прибывает. Наблюдаемый сеанс отбрасывает запрос без записи или ответа на него, поэтому подписка истекает без ответа через 12 часов, и запрашивающий сеанс с refuse никогда не подписывается.
  • hold на любой стороне: уведомление прибывает с меньшим. Наблюдаемый сеанс оставляет однострочный статус, и запрашивающий сеанс показывает уведомление в вашей расшифровке без доставки его Claude.

Только Claude в вашем основном разговоре может подписаться, и только на ваши сеансы на этом компьютере. Когда подагент или товарищ команды агентов устанавливает notify_when_idle, Claude Code не делает подписку и сообщает ему об этом. Когда Claude просит уведомление от любого другого агента, такого как товарищ, подагент или сеанс за пределами этого компьютера, Claude Code отказывает весь вызов, включая любое прикрепленное сообщение, и сообщает об отказе Claude, чтобы оно могло отправить сообщение без запроса.

Посмотрите, какие сеансы Claude может достичь

Claude находит цель сообщения самостоятельно, поэтому вам не нужно ничего запускать перед тем как попросить его отправить. Чтобы увидеть самостоятельно, какие сеансы Claude может достичь, запустите команду /list-agents. Первая строка, когда присутствует, — это имя этого сеанса, то, которое ваши другие сеансы используют для отправки ему сообщений. Строки ниже — это сеансы, которые Claude может достичь:

  • Подагенты: агенты, работающие внутри текущего сеанса.
  • Товарищи: товарищи команды агентов этого сеанса. До v2.1.239 товарищи не появлялись в списке, хотя Claude уже мог отправлять им сообщения по имени.
  • Ваши другие локальные сеансы: сеансы Claude Code, работающие на одной машине, включая фоновые сеансы. Сеанс появляется только когда он привязывает входящий сокет.
  • Ваши облачные сеансы: ваши сеансы Claude Code в веб-версии, показанные пока этот сеанс подключен к Удаленному управлению. Claude Code помечает их cloud в списке.
  • Ваши сеансы удаленного управления на других машинах: показаны пока этот сеанс подключен к Удаленному управлению, и помечены Remote Control. Claude Code показывает offline как статус сеанса, чье соединение удаленного управления упало.

Этот сеанс не является одной из строк. Если Claude адресует сообщение собственному имени этого сеанса, Claude Code отказывает и сообщает Claude, что цель — текущий сеанс. До v2.1.239 список не показывал имя этого сеанса, и Claude Code сообщал о сообщении, отправленном ему, как об агенте, которого он не мог найти.

Пока этот сеанс подключен к Удаленному управлению, Claude Code скрывает некоторые детали ваших локальных сеансов из вывода /list-agents, без изменения того, что Claude видит, когда ищет сеанс для отправки сообщения:

  • Рабочие каталоги: он оставляет рабочий каталог каждого локального сеанса.
  • Имена сеансов: он оставляет любое имя сеанса, которое не может приписать человеку, поэтому строка, оставленная без имени, читается как (unnamed session).
  • Первая строка: он оставляет строку с именем этого сеанса, если вы не вводили это имя на этом терминале, с --name или с /rename и имя, с момента запуска или последнего возобновления сеанса.

Когда вывод что-то перечисляет, он заканчивается примечанием, говорящим, что детали были скрыты. Запуск /rename с последующим неиспользованным именем на клавиатуре сеанса дает этому сеансу имя, которое появляется в выводе.

Claude Code читает ваши облачные и списки сеансов удаленного управления от новейших и останавливается после ограниченного количества страниц для каждого. Если ваша учетная запись имеет больше этих сеансов, чем подходит, Claude Code не перечисляет старые, и Claude не может отправлять им сообщения по имени. Когда это происходит, Claude Code говорит об этом в списке, и Claude видит то же примечание, когда отправляет сообщение.

Claude адресует сеанс за пределами этого компьютера по имени, так же как локальный сеанс. Смотрите Отправка сообщений сеансам на других машинах для того, как эти сообщения путешествуют.

Сеанс отвечает на имя, которое вы устанавливаете с помощью команды /rename или флага --name. Когда вы не устанавливаете одно, Claude Code называет сеанс сам. Для интерактивного сеанса это имя, показанное в списках работающих сеансов.

Когда вы переименовываете сеанс, Claude Code также обновляет общую запись, которую ваши другие сеансы используют для поиска имени сеанса. Если он не может обновить эту запись, он предупреждает вас в выводе /rename, что другие сеансы могут все еще показывать старое имя. Запустите сеанс с --debug, и Claude Code регистрирует причину неудачного обновления.

Когда вы переименовываете сеанс или запускаете или возобновляете интерактивный с именем, которое другой активный сеанс на этом компьютере уже использует, Claude Code оставляет имя с сеансом, который уже его имеет, и переименовывает ваше в вариант. Сеансы все еще могут делить имя, например когда один из них запускает более раннюю версию Claude Code или общее имя — это то, что Claude Code сгенерировал. Если этот сеанс не подключен к удаленному управлению, Claude Code показывает рабочий каталог каждого локального сеанса в выводе /list-agents, поэтому вы можете отличить сеансы с одинаковым именем, когда они работают в разных каталогах. Claude адресует сообщение одним из двух способов, в зависимости от того, сколько активных сеансов отвечают на имя:

  • Один сеанс отвечает на имя: Claude Code доставляет сообщение только по имени.
  • Несколько сеансов делят имя, или Claude Code не мог проверить везде, где работают ваши сеансы: Claude добавляет короткий идентификатор к каждой строке своего списка и использует идентификатор в адресе.

Отправка сообщений сеансам на других машинах

Как сообщение путешествует и проходит ли оно через серверы Anthropic, зависит от того, где работает целевой сеанс:

Где работает другой сеанс Как путешествует сообщение
На этом компьютере Через сокет для каждого сеанса на macOS и Linux, или именованный канал для каждого сеанса на нативной Windows, никогда через серверы Anthropic
На другой из ваших машин Через серверы Anthropic, прибывая через соединение Удаленного управления этой машины
На Claude Code в веб-версии Через серверы Anthropic, прямо в облачный сеанс

Начало разговора с сеансом на другой из ваших машин требует Claude Code v2.1.225 или более поздней версии и цели, которая появляется в списке. До v2.1.225 Claude мог только ответить на сообщение, которое прибыло от одного.

Вы можете отправить сообщение сеансу, показанному как offline в списке, тому, чье соединение удаленного управления упало. Отправка проходит, но сообщение прибывает только после того, как машина этого сеанса переподключится. Claude сообщается об этом, когда отправляет.

Доставка на одной машине работает везде, где функция включена. Каждый сеанс регистрирует себя в файлах на диске. Когда Claude составляет список или отправляет сообщения вашим локальным сеансам, Claude Code читает эти файлы для поиска сеансов, поэтому два сеанса могут достичь друг друга только когда они могут видеть одни и те же файлы.

Контейнер имеет свою собственную файловую систему, поэтому сеанс внутри него и сеанс на хосте не могут достичь друг друга. Два сеанса внутри одного контейнера все еще могут отправлять друг другу сообщения, включая на самостоятельно размещенном runner. Сеанс внутри WSL 2 и нативный сеанс Windows на одном компьютере также не могут достичь друг друга, потому что они регистрируются в разных домашних каталогах и слушают разные типы сокетов.

Пока этот сеанс подключен к удаленному управлению, когда вы отправляете сообщение сеансу на другой из ваших машин, Claude Code показывает сообщение в разговоре этого сеанса под именем удаленного управления этого сеанса. Claude на этой машине может ответить на это имя. Например, когда этот сеанс подключен к удаленному управлению как laptop-graceful-unicorn и вы отправляете сообщение вашему рабочему столу, вы видите сообщение в сеансе рабочего стола под laptop-graceful-unicorn.

Если этот сеанс не подключен к удаленному управлению, когда Claude отправляет сеансу за пределами этого компьютера, сообщение все еще проходит, но без адреса ответа, поэтому получающий Claude не может ответить на него. Claude сообщается об этом, когда отправляет.

Чтобы требовать вашего одобрения перед тем как любое сообщение выйдет за пределы этого компьютера, установите isolatePeerMachines.

Как сеанс обрабатывает входящее сообщение

Когда сеанс A отправляет сообщение сеансу B, Claude Code сообщает Claude B, что сообщение пришло от другого сеанса, а не от вас, и ограничивает то, что сообщение может делать:

  • Оно не может одобрить ничего: сообщение от другого сеанса никогда не считается вашим согласием, поэтому оно не может ответить на ожидающий запрос разрешения от вашего имени.
  • Оно не может изменить конфигурацию: Claude Code инструктирует получающего Claude никогда не изменять параметры разрешений, CLAUDE.md или другую конфигурацию, потому что другой сеанс попросил.
  • Команды не запускаются: команда в тексте сообщения, такая как /compact, прибывает как простой текст. Claude Code никогда не выполняет ее.
  • Запросы разрешений все еще срабатывают: если действие на сообщение требует разрешения, которое получающий сеанс не имеет, вы видите тот же запрос, который вы видели бы для любой другой работы.

Как выглядит сообщение

Когда сообщение прибывает, Claude Code показывает его в разговоре как тусклый однострочный предпросмотр, и строка предпросмотра остается в разговоре впоследствии. Предпросмотр несет имя отправителя и первую строку сообщения, обрезанную с … когда она длинная, такую как › Message from @api-worker: Schema migration finished (ctrl+o to expand). До v2.1.247 Claude Code показывал прибывающее сообщение полностью вместо предпросмотра.

Любое из этих показывает вам полный текст:

  • Нажмите Ctrl+O для открытия средства просмотра расшифровки и прочитайте полный текст под именем сеанса отправителя.
  • В сеансе, запущенном с --verbose, Claude Code показывает полный текст вместо предпросмотра.

Предпросмотр сокращает только то, что вы видите. Независимо от того, расширяете ли вы его, Claude читает полное сообщение.

Claude получает сообщение с именем отправителя и адресом ответа, за исключением одностороннего сообщения между машинами, которое не несет адреса ответа. Помимо имени и адреса ответа, получающий Claude получает текст сообщения, никогда историю разговора отправителя или файлы. Доставка сообщения охватывает упоминания @ в тексте.

Сообщение, которое написал подагент, прибывает под именем отправляющего сеанса, с подагентом, идентифицированным в тексте сообщения. Ответ на него достигает основного разговора этого сеанса, а не подагента.

Этот пример — это сообщение, которое один Claude написал другому, как его полный текст читается, когда вы его расширяете:

Schema migration finished
The new column is tenant_id, and rebasing on main is safe now.

Управление входящими сообщениями

Установите crossSessionInbound для выбора того, что сеанс делает с сообщениями, прибывающими от ваших других сеансов:

Значение Поведение
accept Claude Code доставляет каждое сообщение Claude
hold Claude Code показывает уведомление для каждого сообщения и не доставляет его. Если позже применяется accept, согласно правилам приоритета, Claude Code выпускает удержанные сообщения
refuse Claude Code отбрасывает каждое сообщение без доставки

Помимо редактирования файла параметров, вы можете выбрать значение в строке /config Messages from your other sessions. Claude Code записывает выбранное вами значение в ваши пользовательские параметры. Строка требует Claude Code v2.1.232 или более поздней версии и не появляется, пока управляемые параметры или флаг --settings устанавливает ключ, так как значение пользовательских параметров не применялось бы тогда. Claude Code отклоняет сокращение /config crossSessionInbound=value для этого ключа.

Чтобы увидеть, какое значение применяется, следуйте правилам приоритета crossSessionInbound в справочнике параметров. Когда значение не применяется, Claude Code решает для каждого сообщения из режимов разрешений двух сеансов. Он группирует сеансы, которые обходят запросы разрешений в один класс, и каждый другой сеанс в другой. План режим считается обходящим в сеансах с доступными разрешениями обхода, и авто, acceptEdits и dontAsk считаются запрашивающими:

  • Получающий сеанс запрашивает разрешения: Claude Code доставляет каждое сообщение. Он удерживает одно для вашего одобрения только когда отправляющий сеанс идентифицирует себя как обходящий запросы разрешений.
  • Получающий сеанс обходит запросы разрешений: Claude Code удерживает каждое сообщение для вашего одобрения. Он доставляет одно только когда отправляющий сеанс идентифицирует себя как также обходящий.

Когда значение по умолчанию удерживает сообщение, Claude Code открывает диалог одобрения в получающем сеансе. Диалог показывает отправителя и предпросмотр:

  • Approve доставляет то одно сообщение Claude.
  • Deny, или закрытие диалога, отбрасывает его.
  • Когда диалог остается без ответа после крайнего срока dialogExpiry, Claude Code закрывает его и отбрасывает сообщение. Крайний срок по умолчанию составляет пять минут.
  • Пока терминал не прикреплен к фоновому сеансу, Claude Code оставляет диалог открытым после крайнего срока. После того как вы прикрепите, если диалог остается без ответа в течение полного периода крайнего срока, Claude Code закрывает его и отбрасывает сообщение.
  • Если класс режима разрешений этого сеанса изменяется пока сообщения удерживаются, Claude Code повторно применяет входящие правила, доставляет сообщения, которые они теперь принимают, и показывает уведомление.
  • Если изменение параметров делает refuse применимым пока сообщения удерживаются, Claude Code отбрасывает каждое удержанное сообщение и сообщает об отказе каждому отправителю, которого он может достичь.

Когда отправитель — интерактивный сеанс на одной машине, Claude Code показывает уведомление там, когда получатель удерживает сообщение, и последующее, когда получатель позже доставляет, отклоняет или истекает его. Если получатель отказывает ему, Claude Code показывает уведомление там, что получатель не принимает сообщения между сеансами и сообщает Claude отправителя не ждать или отправлять повторно.

Claude Code удерживает максимум 100 сообщений, отдельно от очереди доставки, и после этого отбрасывает самое старое.

Неинтерактивные сеансы

Claude Code привязывает входящий сокет для сеанса claude -p как интерактивный, поэтому долгоживущий рабочий -p может получать сообщения и появляется в списке. Когда вы запускаете сеанс в режиме bare, Claude Code не привязывает сокет, поэтому этот сеанс не может получать сообщения и не появляется в списке агентов.

Сеанс -p не может показать диалог одобрения. Когда входящее значение по умолчанию удерживает сообщение там, Claude Code хранит его для того же крайнего срока dialogExpiry, который использует диалог, пять минут по умолчанию:

  • До крайнего срока: если режим или изменение параметров позволяет сообщение, Claude Code доставляет его.
  • После крайнего срока: Claude Code отбрасывает сообщение и сообщает об истечении отправителю, которого он может достичь.

Установите dialogExpiry на "never" для сохранения сообщений, удерживаемых по умолчанию, до конца сеанса. Сообщение, удерживаемое явным параметром hold, не истекает; Claude Code доставляет его только когда позже применяется accept.

Когда сеанс заканчивается с удержанными сообщениями, Claude Code сообщает об их истечении каждому отправителю, которого он может достичь. До v2.1.225 крайний срок не применялся в сеансе -p: удержанное сообщение оставалось удержанным, если только изменение режима разрешений во время запуска не доставило его, и сеанс, заканчивающийся с удержанными сообщениями, ничего не сообщал их отправителям.

Чтобы позволить рабочему -p принимать сообщения без присмотра, запустите его с crossSessionInbound, установленным на accept в его значении --settings. accept в ваших пользовательских параметрах также работает, но применяется к каждому сеансу, который вы запускаете.

Входящий сокет сеанса

Прочитайте этот раздел, когда сеанс, который вы ожидаете, не находится в списке агентов, когда вы хотите, чтобы скрипт или hook отправил в сеанс, или когда изолированная команда не может достичь сокет.

Claude Code привязывает входящий сокет для каждого сеанса с включенным обменом сообщениями между сеансами, где другие сеансы на машине доставляют сообщения. Сокет — это сокет домена Unix на macOS и Linux, включая Linux внутри WSL 2, и именованный канал на нативной Windows. Для того, какие виды сеансов привязывают один, смотрите Неинтерактивные сеансы.

Вы можете найти путь сокета в двух местах:

  • /status показывает его в строке Peer address. Путь имеет префикс uds:.
  • Claude Code экспортирует его в hooks и команды Bash как переменную окружения CLAUDE_CODE_MESSAGING_SOCKET:
    • В сеансе, который запускается с включенным обменом сообщениями, Claude Code экспортирует переменную перед запуском любого hook, включая SessionStart.
    • Каждый сеанс экспортирует свой собственный сокет, никогда унаследованный от родительского сеанса.

На macOS и Linux Claude Code ограничивает сокет вашему пользователю операционной системы. На нативной Windows он вместо этого требует, чтобы каждое соединение сначала аутентифицировалось с ключом, который может прочитать только ваш пользователь операционной системы. В любом случае, на общей машине сеансы другого пользователя не могут доставить ему.

На macOS и Linux Claude Code также отказывает создавать сокет в каталоге, который он не может принять, например в каталоге, который владеет другой пользователь, и использует вместо этого приватный каталог для каждого пользователя, /tmp/cc-socks-<uid>. Когда он не может принять ни один каталог, сеанс работает без входящего: Claude Code показывает уведомление, /status показывает unavailable и причину в его строке Peer address, и журнал --debug записывает полный отказ.

Наряду с путем сокета, Claude Code экспортирует токен для каждого сеанса как CLAUDE_CODE_MESSAGING_TOKEN. Скрипт, отправляющий в собственный сокет сеанса, может отправить {"type":"auth","token":"<token>"} как первую строку своего соединения, где <token> — это значение CLAUDE_CODE_MESSAGING_TOKEN. Требует ли Claude Code строку, зависит от платформы:

  • macOS и Linux, включая WSL 2: строка необязательна. Claude Code принимает соединение с ней или без нее.
  • Нативная Windows: строка требуется. Claude Code закрывает любое соединение, чья первая строка не является действительной строкой аутентификации, и ничего не доставляет из этого соединения.

Откройте соединение только когда сообщение, которое вы отправляете, готово. Claude Code закрывает соединение, которое не отправило полную строку в течение 30 секунд, поэтому сначала захватите вывод медленной команды, а затем откройте соединение для отправки.

Правила собственного дочернего элемента ниже говорят, когда Claude Code консультирует токен и как он обрабатывает сообщение, которое не может проверить.

Claude Code запускает сообщения, прибывающие на сокет, через те же входящие элементы управления, что и любое другое одноранговое сообщение, с одним исключением и одним предварительным условием:

  • Сообщения собственного дочернего элемента: когда значение crossSessionInbound не применяется, Claude Code доставляет сообщение, которое оно проверяет, пришло из собственных дочерних процессов сеанса, таких как hook или команда Bash, отправляющая обратно в собственный сокет сеанса.
    • На Linux, включая внутри WSL 2, Claude Code может проверить по доказательству процесса даже для дочернего элемента, который уже вышел. На macOS он может проверить это только пока отправляющий процесс все еще работает, и в контейнере, где Claude Code работает как ID процесса 1, он вообще не имеет доказательства процесса. На нативной Windows он также не имеет.
    • На macOS после выхода отправляющего процесса и в контейнерах, где Claude Code работает как ID процесса 1, это доказательство процесса отсутствует, и Claude Code вместо этого проверяет дочерний элемент, который отправил экспортированный сеансом CLAUDE_CODE_MESSAGING_TOKEN в строке аутентификации, которая открыла его соединение. На нативной Windows этот токен — единственный способ, которым Claude Code проверяет сообщение собственного дочернего элемента.
    • Когда Claude Code не может проверить ни одним способом, он обрабатывает сообщение как любое другое, которое не утверждает класс разрешений, поэтому сеанс, который обходит запросы разрешений, удерживает его для вашего одобрения.
  • Изолированные сеансы: управляйте тем, может ли команда Bash достичь сокет изнутри изоляции с параметрами Unix-сокета изоляции, sandbox.network.allowAllUnixSockets и sandbox.network.allowUnixSockets.

Ограничение обмена сообщениями между сеансами

Помимо значений по умолчанию для каждого сообщения, вы можете сузить обмен сообщениями двумя способами. Требуйте вашего одобрения перед тем как любое сообщение покидает машину, или отключите обмен сообщениями для сеанса или организации.

Требование одобрения для сообщений между машинами

Установите isolatePeerMachines на true для требования вашего явного одобрения перед тем как любой SendMessage достигнет сеанс за пределами этого компьютера:

{
  "isolatePeerMachines": true
}

С этим установленным, Claude Code просит вашего одобрения перед тем как сообщение Claude сеансу за пределами этого компьютера уходит, даже в режиме bypassPermissions, который пропускает обычные запросы разрешений. true из любого области параметров применяется, поэтому проверенный файл проекта может включить требование, но не отключить его. Claude Code не запрашивает сообщения между сеансами на одной машине.

Отключение обмена сообщениями между сеансами

Получение и отправка — это отдельные элементы управления, поэтому отключите то направление, которое вам нужно, или оба. Используйте crossSessionInbound для сообщений, которые прибывают, и правила разрешений для того, что Claude здесь может отправить или перечислить:

  • Остановить получение: установите crossSessionInbound на refuse, и Claude Code отбрасывает входящие одноранговые сообщения без доставки. Из параметров проекта или локальных, refuse применяется над каждым другим источником, и из ваших пользовательских параметров применяется, если только управляемые параметры или флаг --settings не устанавливают значение.
  • Остановить отправку и перечисление: добавьте правила отказа разрешений, называющие SendMessage и ListAgents. Оба берут имя инструмента без спецификатора.

Администраторы могут отключить обе стороны для организации в управляемых параметрах, объединяя правила отказа с refuse:

{
  "permissions": {
    "deny": ["SendMessage", "ListAgents"]
  },
  "crossSessionInbound": "refuse"
}

С этим на месте, Claude Code все еще привязывает входящий сокет каждого сеанса, но отбрасывает каждое сообщение, которое прибывает на него, без доставки чего-либо Claude. Отказ SendMessage также удаляет обмен сообщениями подагентам и товарищам команды агентов, так как один и тот же инструмент служит обоим. Отказывающий сеанс не показывает видимого изменения в его собственном /status или в списках других сеансов на одной машине, поэтому для подтверждения проверьте файлы параметров, которые применяются к этому сеансу, вместо его статуса.

Доступность

Обмен сообщениями между сеансами требует Claude Code v2.1.224 или более поздней версии на macOS, Linux и WSL 2, и v2.1.234 или более поздней версии на нативной Windows. Доступность и то, какие сеансы Claude может отправлять сообщения, также зависят от вашей операционной системы, поставщика и конфигурации:

  • Операционная система: доступна на macOS, Windows и Linux, включая Linux внутри WSL 2.

  • Сеансы на этом компьютере: доступны на каждом поставщике, включая Amazon Bedrock, Claude Platform на AWS, Agent Platform Google Cloud и Microsoft Foundry, и в сеансах, которые работают с получением флагов функций отключенным. На этих поставщиках и с отключенным получением флагов, обмен сообщениями на одной машине требует Claude Code v2.1.248 или более поздней версии. Claude Code доставляет эти сообщения через сокет для каждого сеанса на вашей машине, никогда через серверы Anthropic.

    Чтобы остановить сеанс от получения их, установите crossSessionInbound на refuse.

  • Сеансы за пределами этого компьютера: Claude находит ваши сеансы Claude Code в веб-версии и ваши сеансы на других машинах из сеанса, который подключен к удаленному управлению, что требует входа claude.ai как активной аутентификации этого сеанса и другие требования удаленного управления. Claude не может найти эти сеансы с ключом API или на Amazon Bedrock, Claude Platform на AWS, Agent Platform Google Cloud и Microsoft Foundry.

Чтобы проверить сеанс, введите /list-agents, также доступный как /peers. Результат отделяет сеанс, который не имеет функции, от сеанса, где что-то более узкое заблокировало сообщение, такое как отсутствующий инструмент SendMessage или отказанная отправка:

В сеансе с обменом сообщениями, /status также показывает строку Peer address с собственным адресом входящего сеанса, или unavailable и причину, когда Claude Code не мог установить входящий.

Ограничения

Ограничения здесь — это свойства самого канала обмена сообщениями и применяются везде, где функция работает. Для пробелов платформы и поставщика, смотрите Доступность вместо этого.

  • Только простой текст: Claude отправляет только простой текст между сеансами. Структурированные сообщения протокола команды агентов остаются внутри команды.
  • Размер сообщения на одной машине ограничен: Claude Code отказывает сообщение сеансу на этом компьютере один раз его сериализованная форма проходит около миллиона символов. Отказ называет точные размеры. Ничего не достигает получающего сеанса.
  • Быстрые всплески к одному сеансу отказываются на отправителе: один раз быстрый всплеск сообщений к сеансу на этом компьютере достигает того, что принимает входящий этого сеанса, Claude Code отказывает дальнейшие отправки в отправляющем сеансе. Отказ называет всплеск и сообщает Claude объединить остаток в одно сообщение или подождать. До v2.1.236 Claude Code сообщал об этих отправках как отправленных, пока получающий сеанс их отбрасывал.
  • Циклы сообщений ограничены: в получающем сеансе Claude Code ограничивает повторяющиеся сообщения для каждого отправителя, отбрасывает идентичные повторы, прибывающие в короком окне, и ставит в очередь максимум 50 принятых сообщений для Claude для чтения. Цикл сообщений между двумя сеансами поэтому останавливается самостоятельно. Когда ограничение скорости, проверка повтора или ограничение очереди отбрасывает сообщение из интерактивного сеанса на этой машине, Claude Code сообщает этому сеансу, какое отбросило, и сообщает Claude отправителя не отправлять повторно сразу.