Claude Codeのクロスセッションメッセージング
v2.1.224以降、MacまたはLinuxマシン上の対話型Claude Codeセッションはすべて起動時にUnixソケットをバインドし、自分が動かしている他のどのセッションからでもそこへテキストメッセージを投げ込めるようになりました。私の環境では/tmp/cc-socks/38590.sockにあり、パーミッションは所有者のみです。1 ネイティブWindowsでは、リリースノートによればv2.1.239から代わりに名前付きパイプが使われ、遅延バインドという例外が1つ「落とし穴」の節にあります。この機能を動かすツールは2つです。ListAgentsが自分のセッションのうちどれに到達できるかを見つけ、SendMessageがそのうちの1つへ名前指定で届けます。2 有効化するものも、設定するものもありません。同じマシン上で両方のセッションがv2.1.224以降(Windowsではv2.1.239以降)で動いていれば、もう会話できます。
Claude Codeのセッション同士は、ローカルのUnixソケット(v2.1.239以降のネイティブWindowsでは名前付きパイプ)でメッセージを交わします。ListAgentsが到達できるセッションを見つけ、SendMessageが名前を指定してプレーンテキストを届けます。メッセージは入力であって、権限では決してありません。プロンプトを承認することも、設定を変えることも、コマンドを実行することもできず、会話履歴もファイルも運びません。
TL;DR
Claude Codeのセッション同士がメッセージをやり取りできるようになりました。同じマシン上ではAnthropicのサーバーを一切経由しないローカルソケットで、マシンをまたぐ場合はRemote Control経由です(公開当初は返信のみで、v2.1.225で名前を指定して会話を始められるようになりました)。15 メッセージはプレーンテキストだけで、会話履歴もファイルも権限も運びません。受け取る側のセッションはそれを権限ではなく入力として扱います。プロンプトを承認することも、設定を変えることも、コマンドを実行することもできないのです。1 この機能によって、独立したターミナルの群れがチームに近いものへ変わります。いちばん活きる使い方は、これまで手作業で運んでいた調整のメッセージです。「マイグレーションが終わった」「あのカラムをリネームした」「mainはリベースしても安全」といった類のものです。もっとも鋭い落とし穴は、静かに消えることです。互いに無関係な4つのプライバシー関連の環境変数が、その値次第でそれぞれ黙ってこの機能を無効にしてしまいます。3 公開後、v2.1.239でWindowsがネイティブに加わり、v2.1.236ではnotify_when_idleが追加されました。これは同じマシン上の相手セッションに、次にアイドルになるか終了したときに1回だけ通知するよう頼める仕組みです。910
公開された内容
v2.1.224リリースでは、macOSとLinux向けにクロスセッションのSendMessageとListAgentsによる探索が追加されました。v2.1.225ではこれが拡張され、以前は返信しかできなかった他マシン上のRemote Controlセッションに対して、セッション側から会話を始めることもできるようになっています。45
この仕組みを目にできる場所は3つあります。
/list-agents(エイリアスは/peers)は、1行目にセッション自身の名前(他のセッションがこのセッションに到達するために使う名前で、v2.1.239から表示)を出力し、続いてClaudeが到達できるすべてのセッションを表示します。現在のセッション内のサブエージェント、そのセッションの稼働中のエージェントチームのチームメイト(v2.1.239から表示。それ以前は到達可能なチームメイトが不在に見えていました)、バックグラウンドのものを含む自分の他のローカルセッション、そしてRemote Controlが接続されている間は、他のマシン上のセッションとClaude Code on the web上のセッションです。19/statusにはPeer address行があり、セッション自身の受信ソケットがuds:という接頭辞付きで表示されます。1CLAUDE_CODE_MESSAGING_SOCKETは、受信ボックスがバインドされるとClaude CodeがフックとBashコマンドにエクスポートする変数で(遅延バインドについては「落とし穴」の節を参照)、セッション自身のソケットパスを保持します。16 これがなぜ重要かは後述します。
2026年8月25日にClaude Code 2.1.246で自分のマシンで確認したところ、エージェント一覧は「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).」(このセッションはblakecrosley-com-76 [04e18a]。他のセッションがメッセージを送るときに使う名前で、下の一覧には含まれず、ここへのメッセージは自分宛てになる)という行で始まり、続いて「resumegeni-25 [10d770] · interactive · idle · started 21h ago」のような行で11個のピアセッションが並びました。名前はディレクトリ名に2文字の接尾辞を付けた形で、角括弧付きの短い識別子が添えられ、状態はidle、busy、shellのいずれか、行ごとに起動からの経過時間があり、セッション自身の子については別のSubagentsブロックにまとまっています。/tmp/cc-socks/配下のソケットファイルのパーミッションはsrw-------で、ディレクトリ自体はdrwx------です。読み書きできるのは自分のユーザーだけで、これが共有マシンでの境界になります。1
セッションは名前で呼ばれます。/renameか--nameフラグで名前を付けられ、付けなければClaude Codeが作業ディレクトリからmy-app-3fのような名前を導き出します。111 v2.1.232以降、対話型セッションを起動、再開、リネームした結果、そのマシン上の別の稼働中セッションがすでに使っている名前になった場合、Claude Codeは名前を先に持っていたセッションに残し、こちらをname-word-word形式の派生名(auth-refactor-graceful-unicornのようなもの)にリネームして、その旨を知らせます。110 衝突が残るのは、一方のセッションが古いバージョンで動いている場合、重複した名前がClaude Codeの生成したものである場合、そしてClaude Codeが起動時に確認しない--nameを付けてバックグラウンドまたは-pセッションを起動した場合です。11 一覧には各ローカルセッションの作業ディレクトリが常に表示されるため、同名のセッションでも別のディレクトリで動いていれば見分けがつきます。名前が重複している場合、Claudeはさらに各行に短い識別子を加え、宛先にもそれを使います。クラウドやRemote Controlのセッション一覧が読み取り対象のページ数上限を超えたアカウントのように、セッションが動いているすべての場所をClaude Codeが確認できなかったときも、Claudeは同じ短い識別子による宛先指定にフォールバックします。1
公開後に変わったこと(2026年8月)
公開後2週間で出た5つのリリースが、この記事が指摘したWindowsの空白を埋め、命名と宛先指定を引き締め、記事が指摘していなかった4つの静かな失敗モードを塞ぎました。910
| リリース | 変更 |
|---|---|
| v2.1.232 | 一意な名前と@メンション。 同じマシン上の対話型セッションは一意な名前を保ちます(衝突すると後から来た側がname-word-word形式の派生名にリネームされ、その旨が通知されます)。プロンプトに@を入力すると別の稼働中セッションを名前でメンションでき、ClaudeはSendMessageで直接そこへ到達します。/configには「Messages from your other sessions」(他のセッションからのメッセージ)行が加わり、crossSessionInbound(accept、hold、refuse)をユーザー設定に書き込みます。「Dialog expiry」(ダイアログの有効期限)行も同時に追加されました。同じリリースで、共有/tmp上に自動生成されるソケットディレクトリも強化され、あらかじめ仕込まれたシンボリックリンクや他ユーザーのディレクトリを使わずに拒否するようになりました。110 |
| v2.1.235 | SendMessageは、クロスセッション配信には大きすぎるメッセージを黙って捨てる代わりに、送信前の時点で拒否するようになりました。10 |
| v2.1.236 | notify_when_idle:同じマシン上の別のセッションに、次にアイドルになるか終了したときに1回だけ通知を送るよう頼めます(両セッションともv2.1.236以降)。オプトイン、1回限り、ポーリングなしです。同じリリースで、短時間の連投が受信側の受信ボックスの受け入れ上限を超える場合、受信側が捨てているのに送信済みと報告する代わりに、それ以降のメッセージを送信前の時点で拒否するようになりました。110 |
| v2.1.238 | 配信結果の正直さ:受信メッセージを拒否している(crossSessionInbound: "refuse")このマシン上のセッションへ送ると、黙って成功扱いにする代わりに送信側へ「refused」(拒否)と報告されるようになり、受信ボックスがメッセージを捨てたセッション(レート制限またはキュー満杯)は、メッセージが消えるのではなく、こちらのセッションにそのことを伝えるようになりました。10 |
| v2.1.239 | Windows。 クロスセッションメッセージングが、同じSendMessageとListAgentsツールでネイティブに動作します。ListAgentsはセッション自身の名前(ピアが到達に使う名前)を伝え、以前は不在に見えていた稼働中のチームメイトも一覧に出すようになりました。自分自身の名前へのSendMessageは、「no agent named …」(その名前のエージェントはない)ではなく、その旨を伝えます。9 |
実用上の効果はこうです。後述の「報告する長時間実行セッション」パターンには、もう確認のプロンプトが要りません。見守る側のセッションがnotify_when_idleで長時間実行側に1回のアイドル通知を頼んでおけば、長時間実行側が次にアイドルになるか終了したときに返事が届きます。4つの失敗モードのうち2つ(大きすぎるメッセージと、受信ボックスに対して速すぎる連投)は送信側で事前に失敗するようになり、残りの2つ(拒否されたメッセージと捨てられたメッセージ)は、同じマシン上の対話型の送信者へ明示的な報告として返ってきます。
面白いのは信頼モデルです
Anthropicの設計は、多くのマルチエージェントシステムが取りこぼす問いに答えています。別のエージェントからのメッセージには、どれだけの重みがあるのか、という問いです。ここでの答えは明確です。メッセージは情報であって、権限では決してありません。1
セッションAがセッションBにメッセージを送るとき、届いたものには4つのルールが課されます。1
- 何も承認できません。 Bで保留中の権限プロンプトは、Aが何を言おうと無視します。プロンプトに答えるのは自分だけです。
- 設定を変更できません。 Claude Codeは受信側のClaudeに対し、別のセッションに頼まれたからといって権限設定、
CLAUDE.md、その他いかなる設定も決して変えないよう指示しています。 - コマンドはテキストとして届きます。 メッセージ本文の
/compactは8文字の文章であって、実行されるコマンドにはなりません。 - 権限プロンプトは変わらず出ます。 メッセージに従って動くのにBが持っていない権限が必要なら、他のどんな作業とも同じプロンプトが表示されます。
受信側の配信にも独自のゲートがあります。届いた各メッセージは3つの結果(配信、承認待ちで保留、拒否)のいずれかに落ち着き、これをcrossSessionInbound設定(accept、hold、refuse)が制御します。1 何も設定しなければ、Claude Codeは2つのセッションの権限モードを使ってメッセージごとに判断します。このデフォルトのロジックが見事です。権限プロンプトをバイパスするセッションが1つのクラスを、それ以外が別のクラスを形成します(プランモードはバイパスが利用可能なセッションではバイパス側に数えられ、auto、acceptEdits、dontAskはプロンプト側に数えられます)。プロンプト側のセッションはメッセージを自由に受け取りますが、バイパス側のセッションから届いたものは保留します。バイパス側のセッションは、同じくバイパス側のセッションからのメッセージ以外をすべて保留します。1 この非対称は意図的なものです。メッセージが寛容なセッションの権限に便乗してはならない、という原則を、v2.1.222がautoモードの送信側に適用した(権限分類器が各送信をディスパッチ前に審査する)のに続いて、v2.1.224が受信側にも適用したのです。7
保留されたメッセージは、送信者とプレビューを示す承認ダイアログを開きます。応答のないダイアログは5分(dialogExpiryで調整可能)で期限切れになり、メッセージは破棄されます。1 ターミナルが接続されていないバックグラウンドセッションでは、この期限を過ぎてもダイアログは開いたままです。接続した後、ダイアログが期限の一期間まるごと未応答のままだった場合にだけメッセージが破棄されます。1 一度に保留されるのは最大100件です。1 さらに2つの制御で範囲を絞れます。isolatePeerMachines: trueにすると、bypassPermissionsモードであっても、メッセージがマシンの外へ出る前に明示的な承認が必要になります。どの設定スコープからのtrueでも優先されるため、チェックインされたプロジェクトファイルは締めることはできても緩めることは決してできません。1 組織として機能を完全に止めるには、マネージド設定でSendMessageとListAgentsへの拒否ルールにcrossSessionInbound: "refuse"を組み合わせます。1
メッセージの通り道
相手のセッションがどこで動いているかによって、トランスポートと送れるものの両方が決まります。1
| 宛先 | トランスポート | 送れるもの |
|---|---|---|
| 同じマシン | セッションごとのUnixソケット(ネイティブWindowsでは名前付きパイプ)。Anthropicのサーバーは一切経由しない | 新規メッセージと返信 |
| 自分の別のマシン | Anthropicのサーバー経由で、そのマシンのRemote Control接続を通じて到着 | 返信。v2.1.225以降は、Remote Controlが接続されている間、新規の会話も5 |
| Claude Code on the web | Anthropicのサーバー経由で、クラウドセッションへ直接 | 返信。Remote Controlが接続されている間に一覧に現れるクラウドセッションへの新規の会話も1 |
この記事の初出時、Anthropicのドキュメントページはマシンをまたぐメッセージングをすべて返信のみと記述していましたが、v2.1.225のリリースノートはSendMessageが「can now start a conversation with your Remote Control sessions on other machines by name.」(他のマシン上のRemote Controlセッションと名前指定で会話を始められるようになった)と述べていました。ドキュメントはその後追いつき、自分の別のマシン上のセッションと会話を始めるにはv2.1.225以降と、一覧に現れる宛先が必要だと明記しています。15
同じマシンかどうかを決めるのはファイルシステムの可視性です。セッションはディスク上のファイルに登録されるため、2つのセッションが互いに到達できるのは同じファイルが見えるときだけです。コンテナ内のセッションとホスト上のセッションは会話できませんが、同じコンテナ内の2つのセッションなら会話できます。1
配信は受信側セッションのリズムを尊重します。受信側のClaudeは、進行中のターンではツール呼び出しの合間にメッセージを読み、実行中のツールを中断することはありません。セッションがアイドルなら、Claude Codeがそのメッセージで新しいターンを始めます。1 配信されたメッセージは、自分で入力したプロンプトと同じように使用量に数えられます。1
作る価値のある5つのパターン
1. ワークツリー間の調整。 いちばん分かりやすいもので、ドキュメントが自前の例文で示しているケースでもあります。同じリポジトリを別々のワークツリーで作業しているセッション同士が、何が入ったかを伝え合うのです。1 「Schema migration finished: the new column is tenant_id, and rebasing on main is safe now.」(スキーマのマイグレーション完了。新しいカラムはtenant_idで、mainへのリベースはもう安全)は、そうでなければ自分が気づいてターミナルを切り替え、打ち直さなければならない類の更新です。複数のセッションがワークツリーではなく1つのチェックアウトを共有している場合、この調整メッセージの価値はさらに上がります。「これからcontent/guides/をコミットするので、ステージしないで」という一言が、あるセッションが別のセッションの作りかけの作業をコミットしてしまう、共有ツリーでの典型的な衝突を防ぎます。
2. 監視役と作業役。 デプロイ、テストスイート、ログを見張る監視セッションを走らせておき、何かが壊れた瞬間に修正担当のセッションへメッセージを送らせます。受け取る側のセッションは、その発見をコマンドではなくコンテキストとして受け取り、何をするかは自身の権限のもとで自分で決めます。監視役をバックグラウンドセッションと通知フックに組み合わせれば、本当に必要なときにだけ人間に行き着くエスカレーションの連鎖ができあがります。
3. 報告する長時間実行セッション。 あるセッションでマイグレーションや長いテスト実行を始め、実際に見ているセッションへ報告させます。1 状況が、忘れ去られたターミナルの中に閉じ込められなくなります。逆向きも成り立ちます。見ている側から尋ねるのです。「もう1つのターミナルで動いているセッションに、マイグレーションが終わったか聞いて」というプロンプトを出せば、探索も宛先指定も言い回しもClaudeが自分で処理します。1 v2.1.236以降は、質問そのものを省けます。見ている側のセッションに長時間実行側へnotify_when_idleを設定させておけば、次にアイドルになるか終了したときに1回だけ報告が返り、どちら側もポーリングしません。110 両方のセッションがv2.1.236以降である必要があり、制限は受信側の制御に従います。すべての購読には12時間の上限があり、それまでに通知が届かなければClaude Codeは購読を破棄し、Claudeに待つのをやめるよう伝えます。監視される側がrefuseだと、そのセッションは要求を記録も応答もせずに破棄するため、購読は上限まで応答のないまま期限切れになります。尋ねる側がrefuseだと、Claude Codeはそもそも購読しません。どちらか一方がholdだと通知は劣化した形で届きます。監視される側は1行のステータスを省き、尋ねる側は通知をClaudeに配信せずトランスクリプトに表示するだけになります。1
4. 無人のワーカー群。 ヘッドレスのclaude -pセッションも受信ソケットをバインドするので、長時間動く-pワーカーはメッセージを受け取れ、一覧にも現れます。8 注意点は、-pセッションは承認ダイアログを表示できないことです。デフォルトで保留されたメッセージはdialogExpiryの期限(デフォルトで5分。dialogExpiryには60s、5m、10m、neverを指定できます)まで待った後に破棄され、到達できる送信者には期限切れと報告されます。その時間内にモードか設定が変わった場合にだけ配信されます。1 メッセージが保留されたままセッションが終了すると、Claude Codeは到達できる各送信者に期限切れとして報告します。1 v2.1.225より前は期限がまったく存在せず、保留されたメッセージは通知も期限切れもなく放置され、保留メッセージを抱えたまま終了したワーカーは送信者に何も伝えませんでした。1 無人でメッセージを受け取るワーカーを動かすには、その--settingsの値にcrossSessionInbound: "accept"を入れて起動します。ワーカー単位の許可であって、自分が動かすすべてのセッションに効いてしまうユーザー設定でのacceptではありません。8 ベアモードのセッションはソケットを一切バインドせず、到達不能のままです。8
5. スクリプトからの投函。 地味ながら強力です。Claude CodeがCLAUDE_CODE_MESSAGING_SOCKETをフックとBashコマンドにエクスポートするため、スクリプトからセッション自身の受信ボックスへ投稿できます。6 Claude Codeは自分の子からのメッセージを検証します。フックやコマンドが自分のセッションへ投稿し返す場合、明示的なcrossSessionInboundが適用されていなければ、手続きなしで配信されます。1 セッション自身のコミットが起動したgitフック、セッションが立ち上げたテストラッパー、セッションが実行したデプロイスクリプト。セッション自身が始めたフックやBashコマンドなら何でも、1行のコンテキストをそのセッションに投稿し返せます。Claude Codeは投稿者が自分の子であることを検証しなければならず、プロセスの証拠でもトークンでも検証できない場合は、権限クラスを主張しないメッセージとして扱います。そのため、バイパス側のセッションはそれを配信せず、承認待ちで保留します。1 ネイティブWindowsでは、接続の1行目がCLAUDE_CODE_MESSAGING_TOKENを含む認証行でなければならず、そうでなければClaude Codeは読まずに接続を閉じます。Windowsが自分の子からのメッセージを検証する手段も、このトークンだけです。1 Linuxではプロセスの証拠による検証が投稿プロセスの終了後も機能しますが、macOSでは動いている間しか機能しません。macOSで終了した後や、Claude CodeがPID 1のコンテナ内では、代わりにセッションがエクスポートしたCLAUDE_CODE_MESSAGING_TOKENを認証行で送った子を検証します。1 サンドボックス化されたコマンドにはソケットの許可が必要です。macOSではsandbox.network.allowUnixSocketsにソケットパスを列挙し、seccompフィルターがパスを検査できないLinuxとWSL 2ではsandbox.network.allowAllUnixSockets: trueだけが開放します。このオプションのフィルターがインストールされていなければ、サンドボックスがソケットをブロックすることはそもそもありません。112
この機能がなろうとしないもの
制限は設計上の決定であり、それを尊重すれば間違ったものを作らずに済みます。
承認チャネルではありません。 信頼モデルのすべては、あるセッションが別のセッションの行動を認可するのを防ぐために存在します。「セッションAが承認し、セッションBが実行する」という形のワークフローは、設計上明示的に排除されています。権限は常に人間を経由させてください。1
コンテキストの転送ではありません。 メッセージはあるClaudeが別のClaudeに宛てて書くテキストであって、会話履歴やファイルでは決してありません。Anthropicのドキュメントは率直に述べています。会話を移したければ、代わりにセッションを再開してください、と。1 要約して渡すのであって、丸ごと投げ込むのではありません。
エージェントチームではありません。 独立したセッション同士のメッセージングはピアツーピアのケースです。Claudeが生成して監督する協調チーム(構造化されたプロトコルメッセージ、名簿、共有タスク状態)はエージェントチーム機能であり、構造化されたチームメッセージは意図的にチーム内にとどまります。1 クロスセッションのテキストの上にメッセージプロトコルを設計している自分に気づいたら、必要なのはエージェントチームです。
チャットループではありません。 Claude Codeは送信者ごとに繰り返しメッセージをレート制限し、短い時間内に届く同一の繰り返しを捨て、未読の受理済みメッセージをセッションあたり50件に制限します。そのため、2つのセッション間のメッセージループは設計上、自ら枯れていきます。1 v2.1.236ではさらに、短時間の連投が受信側の受信ボックスの受け入れ上限を超える場合、受信側が捨てているのに送信済みと報告する代わりに、それ以降のメッセージを送信前の時点で拒否します。10 作るべきは要求と応答のやり取りであって、会話ではありません。
落とし穴
プライバシー変数が黙って無効にします。 クロスセッションメッセージングはフィーチャーフラグの評価に依存しており、CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC、DISABLE_TELEMETRY、DO_NOT_TRACK、DISABLE_GROWTHBOOKのいずれもがその評価を止め、メッセージングを道連れに、しかも静かに落とします。3 診断には/list-agentsを使います。セッションがこのコマンドを認識しないなら、そのセッションには機能自体がありません。コマンドは動くのに送信が届かないなら、もっと狭い原因のどれかです。拒否ルール、受信側の受信制御、一覧にない宛先(Remote Controlが未接続か、Claude Codeが読み取るページ数上限からセッションがこぼれた)、あるいはv2.1.225より前の送信者がマシンをまたぐ会話を始めようとしている、といった場合です。1 受信ボックスを一度もバインドしていない宛先は、静かなケースではありません。プライバシー変数の影響下にあるセッション、ベアモードのセッション、コンテナ境界の向こう側のセッションは/list-agentsに決して現れないため、そこへの送信はClaude Codeが見つけられない名前として派手に失敗します。さらにv2.1.234以降、SendMessageは見えないセッションを不在として扱う代わりに、セッション一覧を完全には確認できなかったときにそう伝えます。1310 アップグレード後の最初のセッションは遅延バインドであって、欠落ではありません。Claude Codeはフィーチャーフラグの取得が完了した時点で受信ボックスをバインドしてソケット変数をエクスポートし、その最初のセッションが受信ボックスなしで起動することがあった問題はv2.1.228で修正されました。110 本当に静かなケースは送信側にあります。ドキュメントが保留通知とその続報、到着時の拒否通知、破棄通知を約束しているのは同じマシン上の対話型の送信者だけなので、マシンをまたぐ送信者や-pワーカーには、それらのケースで約束された通知がありません。「each sender it can reach」(到達できる各送信者)に届く報告は2つあります。デフォルトで保留されたメッセージの期限切れと、設定変更によって保留メッセージが破棄されたときの拒否です。明示的なhold設定によって留め置かれたメッセージは決して期限切れにならないため、期限切れの報告が返ってくることもありません。1
プラットフォームとプロバイダーの空白。 ネイティブWindowsはv2.1.239で対応しました。それ以前はWSL 2内のLinuxだけが動いていました。19 AnthropicのドキュメントページはWindowsの下限をv2.1.234としていますが、リリースノートで最初に告知されたのはv2.1.239です。安全な下限はv2.1.239と考えてください。19 同じコンピューター上のWSL 2内のセッションとネイティブWindowsのセッションも互いに到達できません。異なるホームディレクトリに登録され、異なる種類のソケットで待ち受けるからです。1 Amazon Bedrock、Claude Platform on AWS、Google CloudのAgent Platform、Microsoft Foundryでは利用できません。1
一方通行の返信という端のケース。 返信する側のセッションがRemote Controlに接続していない状態で送った他マシン上のセッションへの返信は届きはしますが、返信先アドレスがないため受信側は答えられません。Claude Codeは送信時にその旨をClaudeに伝えます。v2.1.225では宛先指定も引き締められ、Claude Codeが自身のセッション一覧を確認できなかったとき、確認済みの他マシン上の宛先を同名のローカルセッションと取り違えることは決してなくなりました。5
ヘッドレスでの保留。 メッセージを不可解に無視する-pワーカーは、ほぼ例外なく保留メッセージの問題です。ダイアログがなければ配信もありません。受け取るべきワーカーにはcrossSessionInbound: "accept"を設定してください。8
重要なポイント
日常的にClaude Codeを使う人向け:
- 一度/list-agentsを実行して、セッションがすでに何に到達できるかを確かめましょう。重要なセッションには/renameで名前を付けておくと、メッセージの宛先がきれいに定まります。Claude Codeガイドでは、この機能が依存するセッションコマンドと設定を扱っています。
- メッセージは普通の言葉で頼み(「決済を担当しているセッションに、何を変えたか伝えて」)、文面はClaude自身に書かせましょう。1
自動化を組む人向け:
- フックやスクリプトからはCLAUDE_CODE_MESSAGING_SOCKET経由でセッションに投稿します。自分の子からのメッセージは、Linuxでは承認の手間なく配信されます。16
- 無人の-pワーカーには、グローバルではなくそれぞれの--settingsでcrossSessionInbound: "accept"を与えます。8
チームとセキュリティレビュアー向け:
- この機能は正しいデフォルトで出荷されています。メッセージは権限を持たず、デフォルトでバイパス側のセッションは隔離され、isolatePeerMachinesとマネージド設定の拒否ルールがマシン単位と組織全体のオフスイッチになります。1
- メッセージングが壊れていると結論づける前に、4つのプライバシー環境変数を点検してください。拒否しているセッションは一覧でも自身の/statusでも見た目が変わらないので、ステータスではなくそのセッションに適用される設定ファイルを確認します。v2.1.238以降は、同じマシン上のセッションからの送信でも拒否が報告として返ってきます。110
よくある質問
Claude CodeのクロスセッションメッセージングはWindowsで動きますか?
はい。リリースノートによればv2.1.239からネイティブに動作し、同じSendMessageとListAgentsツールを使い、Unixソケットの代わりに名前付きパイプが使われます。それ以前はWSL 2内のLinuxだけが動いていました。AnthropicのドキュメントページはWindowsの下限をv2.1.234としていますが、安全な下限はv2.1.239と考えてください。同じコンピューター上のWSL 2のセッションとネイティブWindowsのセッションは、今でも互いに到達できません。19
あるClaude Codeセッションが別のセッションの権限プロンプトを承認できますか?
いいえ。メッセージは情報であって、権限では決してありません。保留中の権限プロンプトは送信側のセッションが何を言おうと無視します。プロンプトに答えるのは自分だけだからです。Claude Codeは受信側のClaudeに対し、別のセッションに頼まれたからといって権限設定、CLAUDE.md、その他いかなる設定も変えないよう指示しており、メッセージ本文の/compactは8文字の文章であって、実行されるコマンドにはなりません。1
他のセッションが/list-agentsに現れないのはなぜですか?
まずプライバシー関連の環境変数を点検しましょう。メッセージングはフィーチャーフラグの評価に依存しており、CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC、DISABLE_TELEMETRY、DO_NOT_TRACK、DISABLE_GROWTHBOOKのいずれもがその評価を止め、メッセージングを道連れに、しかも静かに落とします。ベアモードのセッションや、コンテナ境界の向こう側のセッションも決して現れません。2つのセッションが互いに到達できるのは、ディスク上の同じファイルが見えている場合だけだからです。13
無人のclaude -pワーカーにメッセージを受け取らせるには?
そのワーカーの--settingsの値にcrossSessionInbound: "accept"を入れて起動します。実行するすべてのセッションに効いてしまうユーザー設定のacceptではなく、ワーカーごとの許可として与えるわけです。-pセッションは受信ボックスのソケットをバインドして一覧にも現れますが、承認ダイアログを表示できません。そのため、デフォルトで保留されたメッセージはdialogExpiryの期限を待ち切って破棄されます。8
会話履歴やファイルを別のセッションに送れますか?
いいえ。メッセージはあるClaudeが別のClaudeに宛てて書くプレーンテキストであって、会話履歴でもファイルでも権限でもありません。Anthropicのドキュメントは率直に述べています。会話を移したければ、代わりにセッションを再開してください、と。丸ごと投げ込むのではなく、要約して渡しましょう。そして、クロスセッションのテキストの上にメッセージプロトコルを設計している自分に気づいたら、本当に必要なのはエージェントチームです。1
参考文献
-
Anthropic、“Message your other Claude Code sessions”、Claude Codeドキュメント。2026年8月8日に参照、2026年8月25日に再確認。 ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Anthropic、“Tools reference”、Claude Codeドキュメント:
ListAgentsとSendMessageの項目。 ↩ -
Anthropic、“Environment variables”、Claude Codeドキュメント:
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC、DISABLE_TELEMETRY、DO_NOT_TRACK、DISABLE_GROWTHBOOKに関するフィーチャーフラグ評価の注記。 ↩↩↩↩ -
Anthropic、Claude Code v2.1.224リリースノート、2026年8月7日(UTC):”Added cross-session
SendMessage: Claude Code sessions can now message each other, on any of your machines, withListAgentsto discover them (macOS and Linux).”(クロスセッション対応のSendMessageを追加。Claude Codeのセッション同士が、どのマシン上でもメッセージを送り合えるようになり、相手はListAgentsで発見できる(macOSとLinux))。 ↩ -
Anthropic、Claude Code v2.1.225リリースノート、2026年8月8日(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.”(SendMessageは、相手から先にメッセージが来た後に返信するだけでなく、他のマシン上のRemote Controlセッションと名前指定で会話を始められるようになった。ListAgentsにはname [ref]の形で表示される)。同じリリースは、Claude Codeが確認済みのRemote Controlの宛先をこのマシン上の同名セッションと取り違えることは”when its own list couldn’t be checked.”(自身の一覧を確認できなかったときも)決してないと述べています。 ↩↩↩↩↩ -
Anthropic、“Environment variables”、Claude Codeドキュメント:
CLAUDE_CODE_MESSAGING_SOCKETは、ソケットがバインドされるとフックとBashコマンドにエクスポートされ、メッセージングが有効な状態で始まるセッションでは、どのフックが走るよりも前にバインドされます。クロスセッションのページは”includingSessionStart“(SessionStartを含む)と付け加えています。 ↩↩↩ -
Anthropic、Claude Code v2.1.222リリースノート、2026年8月4日:”Improved auto mode safety: messages sent to other agent sessions via
SendMessageare now evaluated by the permission classifier before dispatch.”(autoモードの安全性を改善。SendMessageで他のエージェントセッションに送るメッセージは、ディスパッチ前に権限分類器で評価されるようになった)。分類器の審査が適用されるのはautoモード(および、autoの分類器がコマンドを審査するプランモード)であって、全面的ではありません。プランモードに関する記述の出典はAnthropic、“Permission modes”、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.”(分類器は、ClaudeがSendMessageで別のエージェントに送る各メッセージを、プレーンテキストでも構造化されたエージェントチームメッセージでも、Claude Codeが配信する前に審査する。対象はautoモードと、分類器がコマンドを審査している間のプランモードの両方で、この送信審査にはClaude Code v2.1.222以降が必要)。 ↩ -
Anthropic、“Message your other Claude Code sessions: Non-interactive sessions”、Claude Codeドキュメント:
-pセッションは受信ソケットをバインドして一覧に現れ、そこでデフォルトで保留されたメッセージはdialogExpiryまで待ち、無人での配信にはワーカー自身の--settingsにcrossSessionInbound: "accept"が必要です。ベアモードについては、ヘッドレスのページの“Headless mode”に記述があります。 ↩↩↩↩↩↩ -
Anthropic、Claude Code v2.1.239リリースノート、2026年8月21日:”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”(Windows:クロスセッションメッセージングが利用可能になり、macOSやLinuxと同様に、各マシン上のClaude CodeセッションがSendMessageでメッセージを送り合い、ListAgentsで互いを見つけられる)、”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 …"“(ListAgentsはセッション自身の名前(ピアがメッセージ送信に使う名前)を伝えるようになり、自分の名前へのSendMessageは「no agent named …」ではなくその旨を伝える)、”ListAgentsand/list-agentsnow list your live teammates (previously only subagents and other sessions appeared, so a reachable teammate looked absent).”(ListAgentsと/list-agentsは稼働中のチームメイトを一覧に出すようになった。以前はサブエージェントと他のセッションしか表示されず、到達可能なチームメイトが不在に見えていた)。 ↩↩↩↩↩↩↩ -
Anthropic、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”:プロンプトに@を入力して別のClaudeセッションを名前でメンションすると、ClaudeはSendMessageでそのセッションに直接到達する。”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”:同じマシン上の対話型セッションは一意な名前を保つようになり、稼働中の別セッションがすでに使っている名前でセッションを起動またはリネームすると、name-word-word形式の派生名が与えられ、その旨が通知される。”Added/configrows for "Dialog expiry" and "Messages from your other sessions" (cross-session inbound accept/hold/refuse)”:/configに「Dialog expiry」と「Messages from your other sessions」の行を追加(クロスセッション受信の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”:共有/tmp上に自動生成されるクロスセッションメッセージング用ソケットディレクトリを強化し、あらかじめ仕込まれたシンボリックリンクや他ユーザーのディレクトリは使われず拒否されるようになった)、v2.1.234(”SendMessageandListAgentsnow say when your account’s session list was too long to check completely, instead of treating unseen sessions as absent”:SendMessageとListAgentsは、アカウントのセッション一覧が長すぎて完全には確認できなかったとき、見えないセッションを不在として扱う代わりにそう伝えるようになった)、v2.1.235(”SendMessagenow refuses messages too large for cross-session delivery up front instead of silently dropping them”:SendMessageは、クロスセッション配信には大きすぎるメッセージを黙って捨てる代わりに事前に拒否するようになった)、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)”:クロスセッションのSendMessageにnotify_when_idleを追加。このマシン上の別のClaude Codeセッションに、次にアイドルになったとき1回だけ通知を送るよう頼める。オプトイン、1回限り、ポーリングなし(macOSと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”:SendMessageは、短時間の連投がそのセッションの受信ボックスの受け入れ上限を超える場合、捨てられているのに送信済みと報告する代わりに、それ以降のメッセージを事前に拒否するようになった)、およびv2.1.238(受信拒否と受信ボックスでの破棄の報告)。2026年8月25日に正規のCHANGELOG.mdと照合済み。 ↩↩↩↩↩↩↩↩↩↩↩↩ -
Anthropic、“Sessions: Name your sessions”、Claude Codeドキュメント。”In three cases Claude Code doesn’t rename the duplicate”(3つのケースではClaude Codeは重複をリネームしない):AI生成のタイトルやデフォルトの表示名は確認せず、”the
--nameof a background or-psession at startup”(バックグラウンドまたは-pセッションの–nameを起動時に)確認せず、以前のバージョンのClaude Code上のセッションはリネームできません。 ↩↩ -
Anthropic、“Settings reference:
sandbox.network.allowUnixSockets“、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.”(macOSでサンドボックス化されたコマンドが接続できるUnixソケットのパスを列挙する。seccompフィルターがソケットパスを検査できないLinuxとWSL2ではこのリストは無視されるので、代わりにallowAllUnixSocketsを使う)。allowAllUnixSocketsの項目は、LinuxとWSL2ではseccompフィルターがsocket(AF_UNIX, ...)呼び出しをブロックするため、そこでUnixソケットを許可する唯一の手段がこのキーになると付け加えています。 ↩