メインコンテンツまでスキップ

セッション間メッセージング

上級
What you'll learn
  • 同じマシン上の2つのClaude Codeセッションが標準では会話できない理由 — そしてあなたが依然としてコピー&ペーストの橋渡し役であり続ける理由
  • ピア間セッションメッセージングのための現行の3つのパターン: ファイルシステム、ローカルWebSocketバス、およびMCPチャネル
  • 動作するプラグインを2分以内にエンドツーエンドでインストールして使用する方法
  • 設定すべき信頼境界 — ピアのメッセージは指示として届く任意のテキストである
  • このパターンをサブエージェント、共有ワークツリー、または単一セッションでのすべての実行と比較して、いつ選択すべきか

問題: あなたが橋渡し役である

ターミナルAlibfoo/のClaude Codeを開き、ターミナルBapp-that-uses-libfoo/を開きます。ターミナルBがライブラリから型エラーを受け取ります。今日、あなた — 人間 — がルーティングを行います: エラーを読み、ターミナルを切り替え、Aに貼り付け、修正を待ち、切り替えて戻り、ビルドを再実行します。各コンテキストスイッチは両側で状態を失います。

これはまさに、クローズされたAnthropic RFE claude-code#36181(2026年3月にオープン)の痛点です: 「複数のターミナルにまたがる相互依存プロジェクトで作業する場合、ユーザーは現在、セッション間で手動でコンテキストを切り替える必要があります。」 このissueはクローズされていますが — Claude Codeにはまだネイティブのセッション間チャネルはありません。そのため、コミュニティが独自のものを構築しました。

3つのパターン

3つの独立したオープンソースプロジェクトが、2026年初頭に同じ問題に収束し、それぞれ異なるトランスポートを選択しました。トレードオフはトランスポートの選択に組み込まれており、特定のプロジェクトに組み込まれているわけではないため、これらは重要です。

パターントランスポート提供形式レイテンシマルチマシンデバッグ性
ファイルベースの受信箱~/.claude/session-bridge/sessions/<id>/{inbox,outbox}/配下のJSONファイル9つのbashスクリプト + jq約5〜10秒(3秒ポーリング)❌ 単一マシンcat message.json
ローカルWebSocketバスlocalhost WebSocket、セッションデーモンClaude Codeプラグインミリ秒レベル❌ 単一マシン⚠️ バスダンプが必要
MCPチャネルSlack風チャネル + セマンティック検索を備えたMCPサーバーnpx claude-slackネットワークホップ✅ ネットワーク経由で動作✅ MCPをクエリ

すでにデバッグしている方法と、実際にエージェントを実行しているマシン数に一致するトランスポートを選択してください。

1. ファイルベースの受信箱 — PatilShreyas/claude-code-session-bridge(MIT、65★)

各セッションにはディレクトリがあります: ~/.claude/session-bridge/sessions/<6文字ID>/。メッセージはstatusフィールドを持つJSONファイルで、原子的にpending → readに反転します。受信者は3秒ごとに受信箱をポーリングします。作者自身がWebSocketとMCPをスキップした理由: 「デバッグ可能だから。文字通りcatメッセージができる。」

セッションAがリスナーになり、セッションBが質問する

# In session A (the library repo)
/bridge listen
# → prints A's 6-char session id, e.g. a1b2c3

# In session B (the app that consumes the library)
/bridge connect a1b2c3
/bridge ask "Which version of libfoo exports the parseDate() helper, and did its signature change?"

セッションAはライブコンテキストから答えます — 読み込まれたファイル、最近のツール結果、そのプランモードから。セッションBは、信頼できる人間に類する入力として扱うメッセージとして返信を受け取ります。その最後の文がこのパターンにおけるセキュリティの全体像です。読み続けてください。

2. ローカルWebSocketバス — yilunzhang/claude-code-inter-session(MIT、27★)

ローカルデーモンがループバックインターフェイスでWebSocketをバインドします。接続された各セッションは名前を登録し、sendbroadcast(ペイロード上限256 KB)、またはlistピアが可能です。配信にはClaude CodeのMonitorツールを使用するため、アイドルセッションはトークンを消費せず、ポーリングループも実行されません。Claude Code ≥ 2.1.105とPython ≥ 3.10が必要です。

プラグインマーケットプレイスとしてインストールし、そのスラッシュコマンドを使用します:

セッション間プラグインをインストールして2つのターミナルを接続する

# In any Claude Code session (run once per machine)
/plugin marketplace add https://github.com/yilunzhang/claude-code-inter-session
/plugin install inter-session

# Terminal A
/inter-session:inter-session connect libfoo

# Terminal B
/inter-session:inter-session connect app
/inter-session:inter-session send libfoo "Does parseDate() still accept a string?"

# Broadcast to everyone
/inter-session:inter-session broadcast "About to bump libfoo to 2.0 — hold merges."

3. MCPチャネル — theo-nash/claude-slack(MIT、8★)

Slack風の抽象化を公開する完全なMCPサーバー: #general、プロジェクトごとのチャネル、DM、およびQdrantを基盤とするセマンティック検索の知識層。メッセージは再起動をまたいで永続化されます — 他の2つはそうではありません。トレードオフ: ネットワークサービスとその依存関係を実行するようになり、メッセージは各ターンでツール呼び出しの往復を経由しなければなりません。

MCPサーバーを起動し、エージェントのターンから使用する

# Start once (in its own terminal)
npx claude-slack

# In any Claude Code session, once claude-slack is added to your MCP config:
Post to #libfoo-consumers that parseDate() moved from utils to date-helpers in v2.0.
Then search the channel for prior questions about parseDate to make sure I answered them.

永続性が必要な場合(明日開始したセッションが昨日のセッションが言ったことを検索できる)や、ピアが異なるマシン上に存在する場合はMCPチャネルを使用してください — 他の2つは単一マシンのみです。

適切なトランスポートを選択する

Guided walkthrough1 of 5
  1. セッションが異なるノートパソコンやリモートボックスで実行される場合、MCPチャネルパターンのみが機能します。ファイル受信箱とローカルWebSocketバスは、設計上単一マシンです。

絶対に省略してはいけない信頼境界

これは誰も明確に語っていない部分です。上記のすべてのパターンで、メッセージは受信セッションにデフォルトでエージェントが指示として扱うテキストとして届きます。つまり、別のセッション — またはあなたのマシン上で受信箱/ソケット/MCPに書き込めるあらゆるもの — があなたのエージェントにプロンプトを注入できるということです。

Watch out
  • ピアメッセージは信頼できない入力であり、ユーザーのターンではありません。自分のマシン上でも、送信者は別の自律エージェントであり、それ自体が読んだファイルによってプロンプト注入されている可能性があります。
  • 広く開かれたツールセットでセッション間メッセージングを実行しないでください。破壊的なシェル、任意のWebフェッチ、シークレットパスをブロックするClaude Codeの権限プロファイルと組み合わせてください。
  • WebSocketとファイルベースのパターンには、デフォルトで送信者の認証がありません。ループバックソケットにバインドできる、または~/.claude/session-bridge/に書き込めるローカルプロセスは、ピアを装うことができます。
  • ブロードキャストを爆発半径として扱ってください。接続された5つのセッションへの毒された1つのメッセージは、5つの侵害されたエージェントであり、1つではありません。
  • 疑問がある場合は、仲介してください: 受信セッションに、行動する前に受信メッセージを承認のためにあなたに要約させてください — 軽量なフックやプラグインのフロントマターにおけるプロンプトガードレールが仕事をします。

これが当てはまる一般的な脅威モデルについては、プロンプトインジェクションエージェントのセキュリティ確保を参照してください。MCP固有のバスリスクについては、不可視コメントMCP攻撃が直接関連しています — 「メッセージが隠された指示とともに届く」バグの同じクラスが、ツール結果と同じようにSlack風チャネルにも当てはまります。

サブエージェントに勝る場合 — と勝らない場合

ピアセッションとサブエージェントは異なる問題を解決します。サブエージェントは、メインコンテキストを保護するかタスクを専門化するために生成する、スコープされたツールセットを持つ新鮮なClaudeです; 空で始まり、結果を返します。ピアセッションは、独自のファイルが読み込まれ、プランモードがアクティブで、状態の会話全体を持つ長時間実行される、人間主導のClaude Codeインスタンスです — あなたはそのコンテキストを借りているのであって、新しいものを作成しているのではありません。

価値が他のセッションのライブ状態にある場合は、セッション間メッセージングを検討してください: それがすでに推論しているライブラリ、実行したばかりの失敗したテスト、ステージしたばかりのコミット。価値が分離して1つの制限されたタスクを実行することにある場合は、サブエージェントを検討してください。ピアのコンテキストに依存しないワンショットの質問を発火するためにセッション間メッセージングを使用している自分に気付いた場合、おそらくサブエージェント — または共有ワークツリー — が必要です。

両方のパターンを超える長期間の複数エージェントワークフローについては、長時間実行エージェントハーネスネイティブマルチエージェントAPIを参照してください。

よくある間違い

落とし穴 — 各カードをめくって修正を確認
Enter キーまたはスペースキーでカードを裏返します。左右の矢印キーでカードを移動できます。用語を表示しました。
1 / 5

理解度チェック

0/3
  1. 同じノートパソコン上の2つのClaude Codeセッションがメッセージを交換する必要があり、明日開いたセッションが昨日のコンテキストを検索できるように保存したいと考えています。どのパターンが適していますか?
  2. ファイルベースの受信箱とローカルWebSocketバスの両方で、デフォルトで真であるセキュリティ前提はどれですか?
  3. スコープされたツールセットを持つ新鮮なClaudeを1つの制限されたタスクを実行して結果を返すために生成する必要があります。何を使用すべきですか?
Key takeaways
  • Claude Codeはネイティブのセッション間メッセージングをまだ提供していません; 3つのコミュニティプロジェクトが異なるトランスポートを使用してギャップを埋めています。
  • デバッグ性のためにはファイルベース、1台のマシン上でのサブ秒レイテンシのためにはWebSocket、永続性またはクロスマシンピアが必要な場合にのみMCPチャネルを選択してください。
  • ピアセッションからのメッセージは信頼できない入力です — 他のプロンプトインジェクションの表面と同様に扱い、バスを厳格な権限プロファイルと組み合わせてください。
  • 1つのタスクのためのスコープされたワーカーが必要なだけなら、代わりにサブエージェントを使用してください; ピアセッションは別のセッションのライブ状態を借りるためのものです。
  • 公式のRFE(claude-code#36181)はクローズされていますが実装されていません — ネイティブバージョンについてはリポジトリを監視し、それが登場したらコミュニティプロジェクトが収束するか消滅すると予想してください。

ソースと参考文献