SpyBara
Go Premium

cross-session-messaging.md 2026-09-13 21:00 UTC to 2026-09-14 22:58 UTC

This page contains 405 additions and 0 deletions.

2026
Mon 14 22:58 Fri 18 23:58

他の Claude Code セッションにメッセージを送信する

Claude が同じマシン上の他の Claude Code セッションをリストアップしてメッセージを送信できるようにし、他のマシンまたはウェブ上のセッションに到達します。

クロスセッションメッセージングにより、Claude は一つの Claude Code セッションから別のセッションにメッセージを配信できます。一つのセッションでの変更が別のセッションが構築しているものを破壊する場合、Claude はあなたが気付く前にそのセッションに警告することができます。一つのセッションが別のセッションがブロックされている質問を解決する場合、Claude は答えを送信することができます。

メッセージは、一つの Claude が別の Claude に書くテキストの一部であり、送信者の会話履歴またはファイルではありません。会話全体またはそのコンテキストを移動するには、代わりにセッションを再開してください。

Claude はこのために 2 つのツールを使用します。到達できるエージェントを発見するための ListAgents と、名前でそのうちの 1 つにメッセージを配信するための SendMessage です。同じ SendMessage ツールを使用して、Claude は単一のセッションまたはチーム内のサブエージェントとエージェントチームチームメイトにもメッセージを送信できます。このページは、独立したセッション間のメッセージについて説明しています。

クロスセッションメッセージングを使用する場合

1 つのセッションが別のセッションが必要とするものを持っている場合にメッセージングを使用します。Claude は必要に応じて自動的にメッセージを送信できます。たとえば、別のセッションが実行している作業に影響する変更を加えた後、または送信するよう求めることができます。一般的なケースは次のとおりです。

  • 検出結果を引き継ぐ: 1 つのセッションが破壊的な変更を発見するか決定を下すと、Claude はそれを影響を受ける領域で作業しているセッションに要約します。そこで再度説明する代わりに。
  • 並列ワークツリーを調整する: セッションが別のワークツリーで同じリポジトリで作業する場合、Claude は他のセッションに何がマージされたかを伝えることができます。
  • 長時間実行される作業からステータスを取得する: マイグレーションまたはテスト実行を監視しているセッションに報告させるか、そこから自分で尋ねます。そのセッションがこのマシン上にある場合、Claude は次にアイドル状態になるか終了するときに 1 つの通知を求めることもできます。
  • マシン間でメッセージを送信する: 別のマシンまたはウェブ上の 1 つのセッションに到達します。

独立したセッション間でメッセージングを使用します。これらは、自分で開始して操舵するセッションです。Claude Code には、複数のセッションを実行または到達する他の各方法に専用の機能があるため、実行している内容に対して構築されたものを使用してください。

  • 別のターミナルで 1 つの会話を続行するか、その コンテキストを新しいセッションと共有するには、セッションを再開してください。
  • Claude が生成および監督する調整されたセッションチームの場合は、エージェントチームを使用してください。
  • 1 つの場所から多くのセッションを監視および操舵するには、エージェントビューを使用してください。
  • セッションをセッション間でメッセージを送信させるのではなく、電話または別のデバイスから自分で操舵するには、リモートコントロールを使用してください。
  • CI 結果やチャットメッセージなどの外部イベントをセッションにプッシュするには、チャネルを使用してください。

別のセッションにメッセージを送信する

1 つのセッションが別のセッションが必要とするもの(検出結果、ステータス、決定など)を学習すると、Claude はターミナル間でコピーペーストする代わりに、それを渡します。Claude は ListAgents でターゲットを検出し、SendMessage で送信するため、ツール自体を呼び出すことはありません。Claude はメッセージを送信するよう求められずに決定でき、メッセージを求めるよう促すこともできます。

自分でメッセージを促すには、他のセッションが知る必要があることまたは実行する必要があることを Claude に伝えます。この例は、Claude が送信するメッセージではなく、入力するプロンプトです。

他のターミナルで実行しているセッションがマイグレーションを完了したかどうかを確認してください

Claude は実際のメッセージ自体を書くため、プロンプトはコンテンツを Claude に任せることができます。このプロンプトは、その文言を指定せずに要約を求め、Claude が送信するものは異なります。

支払い API で作業しているセッションに、私たちが今行ったことを説明してください

ターゲット自体に名前を付けるには、プロンプトでセッションに言及します。@ の後にセッション名の最初の文字を入力し、タイプアヘッドからセッションを選択します。これはサブエージェントを @-mention するのと同じ方法です。Claude Code v2.1.232 以降が必要です。Claude Code はメンション(@api-worker など)を挿入し、Claude にどのセッションに名前を付けるかを伝えるため、Claude は最初にセッションをリストせずにそのセッションにメッセージを送信できます。このプロンプトはメンションでターゲットに名前を付けます。

@api-worker にスキーママイグレーションが完了したことを知らせてください

タイプアヘッドは、このマシン上の他のライブセッションをリストします。2 つのケースでは、名前の最初の文字以上が必要です。

  • このマシンを超えたセッション: クラウドまたはリモートコントロールセッションは、Claude がこのマシンを超えたセッションをリストまたはメッセージした後にのみタイプアヘッドに表示されるため、Claude に最初にそれらをリストするよう求めます。
  • 文字、数字、ハイフン、アンダースコア以外の文字を含む名前: @"release notes" のように二重引用符で入力します。タイプアヘッドからセッションを選択すると、Claude Code は引用符を挿入します。

ピッカーなしでメンションを入力することもできます。複数のライブセッションが言及された名前に応答する場合、Claude はメッセージを送信する前にどちらを意味するかを尋ねます。

メッセージが到着したときの Claude が書いたメッセージの外観(1 つの例を含む)については、メッセージの外観を参照してください。

メッセージ配信

受信側の Claude はアクティブなターンの間にツール呼び出し間でメッセージを読むため、実行中のツールは中断されません。受信側のセッションがアイドル状態の場合、Claude Code はメッセージで新しいターンを開始します。

別のセッションからのメッセージはプレーンテキストとして到着します。@ でファイルまたはMCP リソースに言及する場合、Claude は書かれたとおりにメンションを見て、Claude Code は、メッセージが新しいターンを開始するか、1 つの間に到着するかに関わらず、何も添付しません。Claude は、受信側のマシン上の言及されたパスを独自のツールで開くことができます。そのセッションの権限に従います。v2.1.251 より前では、新しいターンを開始したメッセージ内の @ メンションは、受信側のファイルまたは MCP リソースを添付しました。

Claude Code は次の場合、メッセージを拒否します。

受信側のセッションは、到着する各メッセージを独自のインバウンドコントロールに対してチェックし、チェックは 3 つの結果のいずれかで終了します。

  • 配信: Claude Code はメッセージを受信側の Claude に渡します。
  • 保留: Claude Code はメッセージを配信されていない状態で脇に置きます。保留されたメッセージは、承認するか、後のモードまたは設定変更がそれを許可するときにのみ Claude に到達します。
  • 拒否: Claude Code はメッセージを配信せずにドロップします。

配信されると、メッセージは使用量に対して入力したプロンプトのようにカウントされ、受信側の Claude は一方向クロスマシンケースを除いて同じ方法で送信者に返信できます。

権限の境界はセッションごとに保持されます。Claude は、独自のセッションで拒否またはブロックされたアクション、または独自の権限設定がブロックするアクションを別のセッションに求めないよう指示され、その作業を代わりに戻すよう指示されます。受信側では、受信側のセッション独自の権限プロンプトとルールがメッセージが求めるものに引き続き適用されます。

別のセッションがアイドル状態になったときに通知を取得する

Claude は、このマシン上の 1 つのセッションに、そのセッションが次にアイドル状態になるか終了するときに 1 つの通知を送り返すよう求めることができます。ここでアイドルとは、セッションがキューに入っていない状態でターンを完了したことを意味します。長いタスクを別のセッションで待機していて、チェックする代わりに完了したときに聞きたい場合に使用します。両方のセッションで Claude Code v2.1.236 以降が必要です。

通知をリクエストする

待機しているものを Claude に伝えます。このプロンプトはマイグレーションセッションから通知をリクエストします。

マイグレーションセッションが実行している内容を完了したときに教えてください

Claude は SendMessage ツールの notify_when_idle 入力で購読します。送信しているメッセージに添付するか、独自に。独自に、Claude Code は監視されているセッションでターンを開始したり、トークンを費やしたりせずに購読し、そのセッションが既にアイドル状態の場合は通知をすぐに送信します。メッセージに添付されている場合、Claude Code はメッセージを最初に配信し、後で通知を送信します。

各セッションが表示するもの

監視されているセッションは、別のプロセスがセッションが次にアイドル状態になったときに通知されるよう求めたことを示す行を表示します。求めているセッションは、監視されているセッションに名前を付ける行として通知を表示します。行には、そのセッションのターンが完了した時刻と、そのターンからの 1 行のステータスを含めることができます。求めているセッションがアイドル状態の場合、Claude Code は通知で新しいターンを開始します。

制限

通知は 1 回限りです。Claude Code はそれを監視されているセッションから 1 回送信し、どちらのセッションも他方をポーリングしません。12 時間以内に通知が到着しない場合、Claude Code は購読をドロップし、Claude に伝えるため、待機し続けません。

各側のインバウンドコントロールはメッセージのような通知に適用されます。

  • どちらかの側で refuse: 何も到着しません。監視されているセッションは、記録または応答せずにリクエストをドロップするため、購読は 12 時間後に未応答で期限切れになり、refuse を持つ求めているセッションは購読しません。
  • どちらかの側で hold: 通知は少なくなって到着します。監視されているセッションは 1 行のステータスを除外し、求めているセッションはトランスクリプトに通知を表示し、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 として表示します。

このセッションは行の 1 つではありません。Claude がこのセッション自体の名前にメッセージをアドレス指定する場合、Claude Code はそれを拒否し、ターゲットが現在のセッションであることを Claude に伝えます。v2.1.239 より前では、リストはこのセッションの名前を表示せず、Claude Code は見つけられないエージェントとしてそれに送信されたメッセージを報告しました。

このセッションがリモートコントロールに接続されている間、Claude Code は /list-agents 出力からローカルセッションの詳細の一部を保留し、Claude 自体がメッセージを送信するセッションを探すときに見るものを変更しません。

  • 作業ディレクトリ: 各ローカルセッションの作業ディレクトリを除外します。
  • セッション名: 人に属性付けできないセッション名を除外するため、名前なしで残された行は (unnamed session) と読みます。
  • 最初の行: このセッション自体の名前の行を除外します。ただし、このターミナルでその名前を入力した場合は除外します。--name または /rename を使用して、セッションを起動または最後に再開してから。

出力がリストするとき、それは詳細が保留されたことを示す注記で終わります。/rename の後に未使用の名前を実行すると、セッション独自のキーボードで、そのセッションに名前が付けられ、出力に表示されます。

Claude Code はクラウドおよびリモートコントロールセッションリストを最新のものから最初に読み、各ページの制限数の後に停止します。アカウントにそれ以上のセッションがある場合は、古いセッションをリストしません。Claude は名前でメッセージを送信できません。これが発生すると、Claude Code はリストでそう言い、Claude はメッセージを送信するときに同じ注記を見ます。

Claude は、ローカルセッションと同じ方法で、このマシンを超えたセッションに名前でアドレス指定します。これらのメッセージがどのように移動するかについては、他のマシン上のメッセージセッションを参照してください。

セッションは、/renameコマンドまたは--nameフラグで設定した名前に応答します。設定しない場合、Claude Code はセッション自体に名前を付けます。インタラクティブセッションの場合、それは実行中のセッションのリストに表示される名前です。

セッションの名前を変更すると、Claude Code は、他のセッションがセッションの名前を検索するために使用する共有レコードも更新します。そのレコードを更新できない場合、他のセッションが古い名前を表示する可能性があることを /rename 出力で警告します。--debugでセッションを実行し、Claude Code は失敗した更新の原因をログに記録します。

セッションの名前を変更するか、別のライブセッションがこのマシン上で既に使用している名前でインタラクティブセッションを開始または再開する場合、Claude Code は既に持っているセッションの名前を残し、あなたのセッションを変種に名前変更します。セッションは、たとえば、1 つが Claude Code の以前のバージョンを実行する場合、または共有名が Claude Code が生成した名前である場合、名前を共有できます。このセッションがリモートコントロールに接続されていない限り、Claude Code は /list-agents 出力に各ローカルセッションの作業ディレクトリを表示するため、異なるディレクトリで実行する場合、同じ名前のセッションを区別できます。Claude は、名前に応答するライブセッションの数に応じて、2 つの方法のいずれかでメッセージをアドレス指定します。

  • 1 つのセッションが名前に応答する: 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 はそれらのファイルを読んでセッションを見つけるため、2 つのセッションは同じファイルを見ることができる場合にのみ相互に到達できます。

コンテナは独自のファイルシステムを持つため、コンテナ内のセッションとホスト上のセッションは相互に到達できません。同じコンテナ内の 2 つのセッションは、セルフホストランナーを含めて、相互にメッセージを送信できます。WSL 2 内のセッションと同じコンピューター上のネイティブ Windows セッションも相互に到達できません。異なるホームディレクトリに登録し、異なるソケットタイプでリッスンするためです。

このセッションがリモートコントロールに接続されている間、別のマシン上のセッションにメッセージを送信するとき、Claude Code はそのセッションの会話でこのセッションのリモートコントロール名の下にメッセージを表示します。そのマシン上の Claude はその名前に返信できます。たとえば、このセッションが laptop-graceful-unicorn としてリモートコントロールに接続されていて、デスクトップにメッセージを送信する場合、デスクトップセッションで laptop-graceful-unicorn の下にメッセージが表示されます。

このセッションがこのマシンを超えたセッションに Claude が送信するときにリモートコントロールに接続されていない場合、メッセージは通過しますが、返信アドレスなしで、受信側の Claude は答えられません。Claude はメッセージを送信するときにそう伝えられます。

このマシンを超えたメッセージが出発する前に承認を要求するには、isolatePeerMachinesを設定します。

セッションが受信メッセージをどのように扱うか

セッション A がセッション B にメッセージを送信する場合、Claude Code は B の Claude に対して、そのメッセージがあなたからではなく別のセッションから来たことを伝え、メッセージが実行できることを制限します。

  • 何も承認できません: 別のセッションからのメッセージはあなたの同意としてカウントされないため、保留中の権限プロンプトに代わって応答することはできません。
  • 設定を変更できません: Claude Code は受信側の Claude に対して、別のセッションが要求したため権限設定、CLAUDE.md、またはその他の設定を変更しないよう指示します。
  • コマンドは実行されません: メッセージのテキスト内のコマンド(/compact など)はプレーンテキストとして到着します。Claude Code はそれを実行することはありません。
  • 権限プロンプトは引き続き発火します: メッセージに対応するために受信側セッションが持っていない権限が必要な場合、他の作業と同じプロンプトが表示されます。

メッセージの外観

メッセージが到着すると、Claude Code は会話内に薄い 1 行のプレビューとして表示し、プレビュー行は後で会話に残ります。プレビューには送信者の名前とメッセージの最初の行が含まれ、長い場合は … で切られます。例えば › 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 が別の 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 は 2 つのセッションの権限モードに基づいてメッセージごとに決定します。権限プロンプトをバイパスするセッションを 1 つのクラスにグループ化し、他のすべてのセッションを別のクラスにグループ化します。Plan mode は、バイパス権限が利用可能なセッションではバイパスとしてカウントされ、auto、acceptEdits、dontAsk はプロンプトとしてカウントされます。

  • 受信側セッションが権限をプロンプト: Claude Code は各メッセージを配信します。送信側セッションが権限プロンプトをバイパスしていることを識別する場合のみ、承認のために 1 つを保留します。
  • 受信側セッションが権限をバイパス: Claude Code は各メッセージを承認のために保留します。送信側セッションも同様にバイパスしていることを識別する場合のみ、1 つを配信します。

デフォルトがメッセージを保留する場合、Claude Code は受信側セッションで承認ダイアログを開きます。ダイアログには送信者とプレビューが表示されます。

  • Approve はそのメッセージを Claude に配信します。
  • Deny またはダイアログを閉じると、ドロップされます。
  • ダイアログが dialogExpiry 期限を過ぎて未回答のままの場合、Claude Code はそれを閉じてメッセージをドロップします。期限のデフォルトは 5 分です。
  • バックグラウンドセッションにターミナルが接続されていない場合、Claude Code はダイアログを期限を過ぎて開いたままにします。接続後、ダイアログが完全な期限期間未回答のままの場合、Claude Code はそれを閉じてメッセージをドロップします。
  • このセッションの権限モードクラスがメッセージが保留されている間に変更される場合、Claude Code はインバウンドルールを再適用し、現在受け入れるメッセージを配信し、通知を表示します。
  • 設定変更により refuse がメッセージが保留されている間に適用される場合、Claude Code はすべての保留中のメッセージをドロップし、到達できる各送信者に拒否を報告します。

送信者が同じマシン上のインタラクティブセッションの場合、Claude Code はそこに通知を表示し、受信者が後でメッセージを配信、拒否、または期限切れにするときにフォローアップを表示します。受信者がそれを拒否する場合、Claude Code はそこに受信者がクロスセッションメッセージを受け入れていないことを示す通知を表示し、送信者の Claude に待機または再送信しないよう指示します。

Claude Code は最大 100 個のメッセージを保留し、配信キューとは別に、それを超えると最も古いものをドロップします。

非インタラクティブセッション

Claude Code は claude -p セッションのインボックスソケットをインタラクティブなものと同様にバインドするため、長時間実行される -p ワーカーはメッセージを受信でき、リストに表示されます。ベアモードでセッションを開始する場合、Claude Code はソケットをバインドしないため、そのセッションはメッセージを受信できず、エージェントリストに表示されません。

-p セッションは承認ダイアログを表示できません。インバウンドデフォルトがそこでメッセージを保留する場合、Claude Code はダイアログが使用する同じ dialogExpiry 期限(デフォルトは 5 分)でそれを保持します。

  • 期限前: モードまたは設定変更によりメッセージが許可される場合、Claude Code はそれを配信します。
  • 期限後: Claude Code はメッセージをドロップし、到達できる送信者に期限切れとして報告します。

dialogExpiry を "never" に設定して、デフォルト保留メッセージをセッション終了まで保持します。明示的な hold 設定で保留されたメッセージは期限切れになりません。Claude Code はそれを配信するだけで、後で accept が適用される場合です。

セッションがメッセージが保留されたまま終了する場合、Claude Code はそれらを到達できる各送信者に期限切れとして報告します。v2.1.225 より前では、-p セッションに期限は適用されませんでした。保留中のメッセージは、実行中の権限モード変更によって配信されない限り保留されたままで、保留中のメッセージでセッションが終了した場合、送信者に何も報告されませんでした。

-p ワーカーが無人でメッセージを受け取れるようにするには、その --settings 値で crossSessionInbound を accept に設定して開始します。ユーザー設定の accept も機能しますが、実行するすべてのセッションに適用されます。

セッションのインボックスソケット

期待するセッションがエージェントリストにない場合、スクリプトまたはフックをセッションに投稿したい場合、またはサンドボックス化されたコマンドがソケットに到達できない場合は、このセクションを読んでください。

Claude Code は、クロスセッションメッセージングが有効になっている各セッションのインボックスソケットをバインドします。ここで、マシン上の他のセッションはメッセージを配信します。ソケットは macOS と Linux(WSL 2 内の Linux を含む)では Unix ドメインソケットで、ネイティブ Windows ではネームドパイプです。どのセッションの種類がバインドするかについては、非インタラクティブセッションを参照してください。

ソケットのパスは 2 つの場所で見つけることができます。

  • /status は Peer address 行に表示します。パスは uds: で始まります。
  • Claude Code はフックと Bash コマンドに CLAUDE_CODE_MESSAGING_SOCKET 環境変数としてエクスポートします。
    • メッセージングがオンで開始するセッションでは、Claude Code は SessionStart を含むすべてのフックが実行される前に変数をエクスポートします。
    • 各セッションは独自のソケットをエクスポートし、親セッションから継承されたものは決してエクスポートしません。

macOS と Linux では、Claude Code はソケットをオペレーティングシステムユーザーに制限します。ネイティブ Windows では、代わりに各接続がまずオペレーティングシステムユーザーのみが読み取ることができるキーで認証することを要求します。どちらの方法でも、共有マシン上の別のユーザーのセッションはそれに配信できません。

macOS と Linux では、Claude Code は受け入れることができないディレクトリ(例えば別のユーザーが所有するディレクトリ)にソケットを作成することも拒否し、代わりにプライベートなユーザーごとのディレクトリ /tmp/cc-socks-<uid> を使用します。受け入れることができるディレクトリがない場合、セッションはインボックスなしで実行されます。Claude Code は通知を表示し、/status は Peer address 行に unavailable と理由を表示し、--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 はソケットに到着するメッセージを、1 つの例外と 1 つの前提条件を除いて、他のピアメッセージと同じインバウンドコントロールを通して実行します。

  • 独自の子メッセージ: crossSessionInbound 値が適用されない場合、Claude Code はセッションの独自の子プロセス(フックや 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 で制御します。

クロスセッションメッセージングを制限する

メッセージごとのデフォルトを超えて、2 つの方法でメッセージングを狭めることができます。マシンを超えたメッセージが出発する前に承認を要求するか、セッションまたは組織のメッセージングをオフにします。

クロスマシンメッセージの承認を要求する

isolatePeerMachinesを true に設定して、SendMessage がこのマシンを超えたセッションに到達する前に明示的な承認を要求します。

{
  "isolatePeerMachines": true
}

これが設定されている場合、Claude Code は、bypassPermissions モード(通常の権限プロンプトをスキップする)でも、Claude のメッセージがこのマシンを超えたセッションに出発する前に承認を求めます。任意の設定スコープからの 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 またはマシン上の他のセッションのリストに目に見える変化を示さないため、確認するには、ステータスではなく、そのセッションに適用される設定ファイルを確認してください。

利用可能性

クロスセッションメッセージングには、macOS、Linux、WSL 2 では Claude Code v2.1.224 以降が必要です。ネイティブ Windows では v2.1.234 以降が必要です。利用可能性と Claude がメッセージを送信できるセッションは、オペレーティングシステム、プロバイダー、設定によって異なります。

  • オペレーティングシステム: macOS、Windows、Linux(WSL 2 内の Linux を含む)で利用可能です。

  • このマシン上のセッション: Amazon Bedrock、Claude Platform on AWS、Google Cloud の Agent Platform、Microsoft Foundry を含むすべてのプロバイダーで利用可能です。また、フィーチャーフラグ取得がオフで実行されるセッションでも利用可能です。これらのプロバイダーでフラグ取得がオフの場合、同一マシン上のメッセージングには Claude Code v2.1.248 以降が必要です。Claude Code はこれらのメッセージを セッションごとのソケットを通じてマシン上で配信し、Anthropic サーバーを経由することはありません。

    セッションがメッセージを受け取らないようにするには、crossSessionInboundをrefuseに設定してください。

  • このマシンを超えたセッション: Claude は ウェブ上の Claude Codeセッションと、Remote Control に接続されているセッションから他のマシン上のセッションを検出します。このセッションのアクティブな認証として claude.ai サインインが必要であり、他の Remote Control 要件も必要です。Claude は API キーまたは Amazon Bedrock、Claude Platform on AWS、Google Cloud の Agent Platform、Microsoft Foundry ではこれらのセッションを検出できません。

セッションを確認するには、/list-agentsを入力してください。/peersとしても利用可能です。結果は、フィーチャーを持たないセッションと、SendMessageツールの欠落や送信の拒否など、より狭い範囲でメッセージをブロックしたセッションを区別します。

  • /list-agentsが認識されない: セッションはクロスセッションメッセージングを持っていません。上記の要件を確認してください。バージョン要件についてはclaude --versionから始めてください。
  • /list-agentsは機能するが、送信が到着しなかった: メッセージングはオンであり、より狭い範囲の何かが適用されます。

メッセージング機能を持つセッションでは、/statusはセッション自身のインボックスアドレスを含むPeer address行も表示するか、Claude Code が インボックスをセットアップできなかった場合はunavailableと理由を表示します。

制限

ここの制限はメッセージングチャネル自体の特性であり、機能が実行される場所に適用されます。プラットフォームとプロバイダーのギャップについては、代わりに利用可能性を参照してください。

  • プレーンテキストのみ: Claude はセッション間でプレーンテキストのみを送信します。構造化されたエージェントチームプロトコルメッセージはチーム内に留まります。
  • 同じマシンメッセージサイズは上限があります: Claude Code は、シリアル化された形式が約 100 万文字を超えると、このマシン上のセッションへのメッセージを拒否します。拒否は正確なサイズに名前を付けます。受信側のセッションには何も到達しません。
  • このマシン上のセッションへの急速なバーストは送信者で拒否されます: このマシン上のセッションへのメッセージの急速なバーストがそのセッションのインボックスが受け入れるものに達すると、Claude Code は送信側のセッションでさらなる送信を拒否します。拒否はバーストに名前を付けます。Claude に残りを 1 つのメッセージにバッチするか、待機するよう伝えます。v2.1.236 より前では、Claude Code はそれらの送信を送信されたと報告しましたが、受信側のセッションはそれらをドロップしました。
  • メッセージループはスロットルされます: 受信側のセッションでは、Claude Code は送信者ごとに繰り返されたメッセージをレート制限し、短いウィンドウ内に到着する同一の繰り返しをドロップし、最大 50 個の受け入れられたメッセージを Claude が読むためにキューに入れます。したがって、2 つのセッション間のメッセージループは独自に停止します。レート制限、繰り返しチェック、またはキューキャップがこのマシン上のインタラクティブセッションからメッセージをドロップする場合、Claude Code はそのセッションにどちらがドロップされたかを伝え、その Claude に右に再送信しないよう伝えます。