Claude Code クロスセッション・メッセージング:仕組み、使用場面、およびセキュリティ上の考慮事項
TL;DR
Claude Code は、あるアクティブなセッションから別のセッションへプレーンテキストのメッセージを自動的に送信できます。これにより、手動でのコピー&ペーストなしで、破壊的な変更に関する警告の共有、ステータス更新の共有、またはブロックされた質問への回答が可能になります。この機能は、セッションごとの受信制御、権限モードを尊重し、完全に制限または無効化することも可能です。
クロスセッション・メッセージングとは
クロスセッション・メッセージングは、Claude Code の組み込み機能であり、所有している別の Claude セッションに テキストメッセージ を届けることができます。これは会話履歴、ファイル、または構造化されたデータを転送するものではなく、メッセージのテキストのみを転送します。
- 内部で使用されるツール:
ListAgents(到達可能なエージェントの検出)およびSendMessage(メッセージの配信)。ユーザーがこれらのツールを直接呼び出すことはありません。 - スコープ: 同一マシン上の独立したセッション間、Remote Control を介したマシン間、または Web ベースの Claude Code セッション間で動作します。リモートセッションで新しい会話を開始することはできず、受信したメッセージに返信することのみ可能です。
使用場面
あるセッションが、別のセッションが タスクの途中で 必要とする情報を知ったときにメッセージングを使用します。典型的なパターンは以下の通りです:
| ユースケース | メッセージングによるメリット |
|---|---|
| 調査結果の引き継ぎ | あるセッションが破壊的な変更を発見した場合、Claude がそれを要約して依存するセッションに送信し、手動での再説明を回避します。 |
| 並行するワークツリーの調整 | 複数のセッションが同じリポジトリの異なるワークツリーで動作している場合、Claude が互いにマージされた変更を通知します。 |
| 長時間実行中の作業からのステータス取得 | マイグレーションやテスト実行の進捗を、監視用セッションに報告できます。 |
| マシン間での返信 | ノートPC上のセッションが、デスクトップセッションから届いたメッセージに回答できます。 |
セッションの再開、調整されたエージェントチームの実行、多数のセッションの監視、セッションのリモート制御、または外部イベントのプッシュが必要な場合は、Claude Code はすでに専用の機能(resume, agent teams, agent view, Remote Control, channels)を提供しています。クロスセッション・メッセージングは、上記のシナリオにのみ使用してください。
メッセージの送信と配信プロセス
- 検出 (Discovery) – Claude が
ListAgentsを呼び出して、到達可能なセッションを見つけます。 - 送信 (Sending) – Claude がターゲットの名前とメッセージテキストを指定して
SendMessageを呼び出します。 - 配信 (Delivery) – 受信セッションは、現在のターン中にメッセージを処理するか、アイドル状態であれば新しいターンを開始します。
- 結果 (Outcome) – 受信制御により、メッセージが Delivered(配信済み)、Held(保留)、または Refused(拒否)されるかが決定されます。
Delivered メッセージは受信側の Claude に渡され、通常のプロンプトと同様に利用量としてカウントされます。Held メッセージは、承認(または設定の変更)があるまでキューに保持されます。Refused メッセージは、何も表示されずに破棄されます。
受信制御 (crossSessionInbound)
crossSessionInbound 設定は、受信メッセージのデフォルトの処理を決定します:
| 値 | 動作 |
|---|---|
accept |
すべてのメッセージが配信されます。 |
hold |
各メッセージが通知を発生させます。配信前に承認が必要です。 |
refuse |
メッセージは配信されずに破棄されます。 |
明示的な値が適用されない場合、Claude は権限モードのクラスにフォールバックします:
- 権限プロンプトをバイパスする セッション(例:
auto,acceptEdits)では、送信側もバイパスしていない限り、受信メッセージは hold されます。 - 権限を求める セッションでは、メッセージは即座に配信されます。
保留されたメッセージが承認されると配信されます。期限(デフォルト5分)が切れた場合、または拒否された場合は破棄されます。1つのセッションは最大100件のメッセージを保持でき、古いものから破棄されます。
マシン間メッセージングの制限
| 送信先 | 転送手段 | 送信可能な内容 |
|---|---|---|
| 同一マシン | Direct Unix-domain socket | 新しいメッセージ および 返信 |
| 他の所有マシン (Remote Control) | Anthropic servers → Remote Control | 返信のみ |
| Web上の Claude Code | Anthropic servers | 返信のみ |
リモートマシンへのメッセージは 返信専用 です。セッションがリモートのピアと新しいやり取りを開始することはできません。ホストからマシン間メッセージが送信される前に明示的な承認を必要とするには、isolatePeerMachines=true を設定してください。
セキュリティと権限モデル
- 暗黙的な同意はなし – 受信メッセージがユーザーの承認としてカウントされることはありません。メッセージによって権限プロンプトを承認したり、設定ファイルを変更したり、テキスト内のコマンドを実行したりすることはできません。
- 権限プロンプトは依然として発生する – メッセージに基づいてアクションを実行するために、受信セッションが持っていない権限が必要な場合、他の操作と同様のプロンプトが表示されます。
- ツールの拒否 – 管理者は、権限ルールで
SendMessageおよびListAgentsツールを拒否することで、メッセージングを完全にブロックできます。 - 潜在的な攻撃対象領域 – Hacker News のコメントにあるように、メッセージングチャネルを公開すると、設定ミスがあった場合にリモートコード実行のベクトルを追加することになります。適切な受信制御 (
crossSessionInbound=holdまたはrefuse) とisolatePeerMachinesがこのリスクを軽減します。
セッションと名前の管理
/list-agents(または/peers) を使用して、到達可能なセッションとその名前を確認できます。- セッションは、
/renameまたは--nameCLI フラグで設定された名前で指定されます。名前が重複する場合、Claude は区別するために短い識別子を追加します。 - 受信ソケットをバインドしているセッションのみがリストに表示されます。bare mode のヘッドレスな
claude -pセッションはソケットをバインドしないため、メッセージを受信できません。 - 受信ソケットのパスは
CLAUDE_CODE_MESSAGING_SOCKETを介して公開され、/statusの Peer address に表示されます。
コミュニティからの実用的なヒント
"私はこれを tmux、メモリツリー、およびハンドオフファイルを使って自分で構築しました。これにより、重複するコンテキストが最小限に抑えられ、トークンコストを節約できました。" – eigenblake
"Tailscale を介して、Linux マシンのフリート全体で他のモデルにメッセージを送るように Claude をスクリプト化しました。うまく機能しますが、ループを止めるために手動での介入が必要なこともあります。" – Cyuonut
"この機能を使用して、『swarmを停止せよ、安全な持ち出しを準備中』といったメッセージを見ました。システムは繰り返されるメッセージをスロットリングし、保留中のメッセージをセッションあたり50件に制限しているため、暴走するループを防いでいます。" – dist-epoch
これらの逸話は、組み込みのツールが、Claude の権限システムとより緊密に統合されている一方で、カスタムのオーケストレーション (tmux, IRC, HTTP hooks) に匹敵することを裏付けています。
メッセージングをオフにする方法
- 受信を停止する – ユーザー、プロジェクト、または管理設定で
crossSessionInbound=refuseを設定します。 - 送信/リスト表示を停止する –
SendMessageおよびListAgentsに対する権限拒否ルールを追加します。 - 組織全体での無効化 – 管理設定で両方のアプローチを組み合わせることで、どのセッションもメッセージを送信または受信できないようにできます。
無効にされている場合でも、各セッションは受信ソケットをバインドしたままですが、メッセージは単に可視的な副作用なしに破棄されます。
利用可能性と要件
- バージョン – Claude Code v2.1.224 以降が必要です。
- OS – macOS および Linux (WSL 2 を含む) でサポートされています。ネイティブ Windows では利用できません。
- プロバイダー – Amazon Bedrock、AWS 上の Claude Platform、Google Cloud Agent Platform、または Microsoft Foundry では利用できません。
- フィーチャーフラグ – 環境変数
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC、DISABLE_TELEMETRY、DO_NOT_TRACK、またはDISABLE_GROWTHBOOKのいずれかが、基盤となるフラグをオフにする値に設定されている場合、この機能は無効になります。
/list-agents (または /peers) でセッションを確認してください。コマンドが認識されない場合は、そのセッションに必要なバージョンまたはフィーチャーフラグが不足しています。
制限事項
- プレーンテキスト メッセージのみがサポートされています。構造化されたチームプロトコルはエージェントチーム内でのみ使用されます。
- メッセージループはスロットリングされます。短い期間内の同一の繰り返しは破棄され、セッションは保留中のメッセージを50件に制限します。
- コンテナは隔離されたファイルシステムを持っています。コンテナ内のセッションは、同じソケットディレクトリを共有していない限り、ホストのセッションに到達できません。
結論
Claude Code のクロスセッション・メッセージングは、独立した Claude セッションが手動でのコピー&ペーストなしに、作業を調整し、調査結果を共有し、ステータスを報告するための、軽量で権限を意識した方法を提供します。受信制御、分離フラグ、および権限ルールを構成することで、ユーザーは利便性とセキュリティのバランスを取ることができます。
Sources
関連
- Dispatch
- Dispatch
- Dispatch
- プロジェクト
- プロジェクト