こんにちは、AIニュースアプリ Morning AI 開発者の矢野哲平です。この記事ではClaude Codeに追加された「クロスセッションメッセージング」を、どういう機能で、何ができて、何が変わり、どう使うのかという順に整理します。
Message your other Claude Code sessions - Claude Docs
一言で言うと、別々に立ち上げたClaude Codeのセッション同士が、人間を経由せずにメッセージをやりとりできる機能です。Claude Code v2.1.224以降のmacOSとLinuxで、特に設定せずに有効になっています。
Claude Code Session?
Claude Codeを日常的に使っていると、ターミナルを複数開いて並行作業する場面が出てきます。片方でAPIの実装、もう片方でフロントエンド、さらに別のタブでマイグレーション、といった具合です。
このとき困るのが、片方のセッションで起きたことをもう片方のClaudeが知らないことです。
スキーマを変更したのに、隣のセッションは古いカラム名のままコードを書き続ける。
移行が終わったかを確認するために、いちいちタブを切り替えて眺める。
結局、人間が連絡役になって各エージェントに事情を説明することになります。
クロスセッションメッセージングは、この橋渡しをClaude自身にやらせるものです。
ClaudeはListAgents(到達できるセッションの一覧)とSendMessage(名前を指定して送信)の2つのツールを使います。
この時にやり取りするのはプレーンテキストです。会話履歴やファイルが渡るわけではありません。受信側が受け取るのは、送信者の名前と本文だけです。
何ができるのか
公式ドキュメントが挙げているのは次のようなケースです。
- 発見の引き継ぎ: 破壊的変更や設計判断を、影響を受ける側のセッションに要約して伝える
- 並列worktreeの調整: 同じリポジトリを別々のworktreeで触っているセッション同士で、何がマージされたかを共有する
- 長時間タスクの進捗確認: マイグレーションやテスト実行の状況を、手元で見ているセッションに報告させる
- 別マシンからのメッセージへの返信
いちばん実用性を感じるのは発見の引き継ぎです。
並列でエージェントを走らせたときの失敗は、「片方の前提が古くなっていることに人間もAIも気づかない」形で起きます。
その検知を、いちばん早く気づける立場にいるClaude自身にやらせるという発想は理にかなっていると思います。
一方で、Claude Code Sessionで対応できないことも明確に線引きされています。
| できないこと |
理由・挙動 |
| 会話履歴やファイルを渡す |
送れるのはテキストのみ。コンテキストごと引き継ぎたい場合はresumeを使う |
| 権限確認の承認の代行 |
他セッションからのメッセージは、保留中の権限確認への同意としては扱われない |
| 設定の書き換え |
権限設定やCLAUDE.mdを、他セッションに言われたからという理由では変更しない |
| コマンドの実行 |
本文に/compactのような文字列があっても、ただのテキストとして届く |
| 別マシンのセッションに話しかける |
マシンをまたぐ場合は返信のみ。会話を始められるのは常に手元から |
送信側にも制約があり、自分のセッションで拒否された操作を他のセッションに代行させないよう指示されています。
厳しい設定のセッションが緩い設定のセッションに「代わりにこれを消して」と頼む、という権限の抜け道を送受信の両側から塞ぐ設計です。
Claude Code Sessionの導入で変わること
Claude Code Sessionを導入することで変わるのは人間が連絡役をやめられることです。
これまでは片方のセッションの状況を人間がコピーして、もう片方に貼り付けて説明していました。
それをClaudeが直接対応してくれます。
しかも嬉しいことに頼まなくても、ある変更が別のセッションの作業を壊すと気づいたときには自分から警告を飛ばします。
もうひとつの変化は、渡すものが要約に限られることです。
履歴を丸ごと受け取れる設計にすると、受信側のコンテキストは他人の作業ログで一気に埋まります。
テキスト一本に絞る制約は、不便に見えて送信側のClaudeに「何が本当に重要か」を判断させる仕掛けにもなっています。
並列実行まわりの機能は増えてきたので、役割の違いも整理しておきます。
| やりたいこと |
使う機能 |
| 別のターミナルで同じ会話の続きをしたい |
セッションのresume |
| Claudeが自分でチームを組んで統括してほしい |
Agent Teams |
| 多数のセッションを一箇所から監視・操作したい |
Agent View(並列エージェント対応のデスクトップ版) |
| スマホなど別デバイスから自分で操作したい |
Remote Control |
| CIの結果など外部イベントをセッションに流し込みたい |
channels |
| 自分で立てた独立セッション同士で情報を渡したい |
クロスセッションメッセージング |
境界線はシンプルです。
誰かがまとめて指揮を執る構造ならAgent Teams、
コンテキストごと持っていきたいならresume、
自分で始めて自分で操縦している対等なセッション同士の連絡だけがクロスセッションメッセージングです。
GitHub Copilot CLIの /fleetやGemini CLIのサブエージェントと比べても、「並列に動かす」ことより「並列に動いているものを噛み合わせる」ことに寄った機能です。
Claude Code Sessionの使い方
ユーザー側でツールを呼ぶ必要はありません。宛先の特定も含めてClaudeが判断するので、自然言語による指示で通ります。
もう一方のターミナルで動いているセッションに、マイグレーションが終わったか聞いて
いま実装した内容を、決済APIを触っているセッションに説明しておいて
送る文面もClaude自身が書きます。実際に届くのは、たとえばこんな一文です。
スキーマ移行が完了しました。新しいカラムは tenant_id です。mainへのリベースは安全です。
受信側では、Claudeが処理の合間にこれを読みます。ツールの実行中に割り込むことはなく、アイドル状態なら新しいターンとして受け取ります。読み終わると1行に折りたたまれ、Ctrl+Oで展開できます。
どのセッションに届くのかは/list-agents(別名 /peers)で確認します。(仮に/list-agentsが出てこなければClaude Codeのバージョンが古いのでアップデートしましょう)
ここに出てくる名前がそのまま宛先です。名前は/renameコマンドか起動時の--nameフラグで設定でき、指定しなければ作業ディレクトリ名からmyapp-3fのような名前が自動でつきます。
同一マシン内の通信はローカル完結で、Anthropicのサーバーを経由しません。各セッションが自分専用の受信ソケットをディスク上に作り、OSのユーザー単位でアクセスを制限します。この「ファイルを見に行く」実装のため、コンテナの内と外は相互に到達できません。同じファイルシステムを共有しているセッション同士だけが会話できる、と覚えておくと挙動を予測しやすいです。
受信の挙動を明示したい場合はcrossSessionInboundで指定します。
| 値 |
挙動 |
accept |
届いたメッセージをそのままClaudeに渡す |
hold |
通知だけ出して配送しない。後から条件が変われば解放される |
refuse |
配送せずに破棄する |
指定しない場合は、両セッションの権限モードから自動で判断されます。Auto modeのように権限確認をするモードなら基本は配送し、権限確認をスキップするモード(bypassPermissions)で動いているセッションは、逆に外からの指示を基本は承認待ちにします。無確認で実行できるセッションほど慎重にする、という優先順位づけです。保留されたメッセージは承認ダイアログとして表示され、放置すると5分(dialogExpiry)で破棄されます。
機能そのものを止めたい場合、組織全体なら管理設定でこう書きます。
{
"permissions": {
"deny": ["SendMessage", "ListAgents"]
},
"crossSessionInbound": "refuse"
}
なおSendMessageを拒否すると、サブエージェントやエージェントチームへのメッセージ送信も同時に使えなくなります。同じツールが両方の役割を担っているためです。
Claude Codeを1つのターミナルで使っているうちは出番のない機能ですが、並列で走らせ始めた途端に効いてきます。ルーティン機能で長時間のジョブを回している場合も、進捗を手元のセッションに報告させる使い方ができそうです。すでに複数タブで開いている方は、次にコピペしそうになった瞬間に「隣のセッションに伝えておいて」と言ってみてください。