Featured image of post Claude Codeのセッション同士がメッセージし合う ── 1か月で@メンションとアイドル通知まで来た

Claude Codeのセッション同士がメッセージし合う ── 1か月で@メンションとアイドル通知まで来た

Claude Code v2.1.224(2026年8月7日)で、別々のターミナルで立ち上げた自分のセッション同士が直接メッセージをやり取りできるクロスセッションメッセージングが入った。あれから1か月、ほぼ毎リリースで手が入っている。Windowsに来て、宛先を@で指名できるようになって、「終わったら教えて」まで頼めるようになった。

今このブログの下書きを書いているセッションにも、この機能が使う ListAgents と SendMessage というツールが乗っている。

何が送れるのか

送れるのはプレーンテキスト1本だけ。会話履歴もファイルの中身もコピーされない。会話ごと別のターミナルに移したいなら、従来どおりセッション再開(--resume)を使う。

使うツールは2つ。

  • ListAgents: いまメッセージを送れる相手を一覧する
  • SendMessage: 名前を指定してメッセージを届ける

ユーザーがこの2つを直接呼ぶことはない。「隣のターミナルのセッションにマイグレーションが終わったか聞いて」と頼めば、Claudeが自分で相手を探して、送る文面も自分で組み立てる。

一覧は /list-agents(別名 /peers)で自分でも見られる。v2.1.243からは、先頭行に自分のセッション名(他のセッションが自分を呼ぶときの名前)が出るようになった。自分自身は一覧の行には出ず、自分の名前を宛先にすると拒否される。

宛先を@で指名できる

送り先をClaudeに探させず自分で決めたいときは、プロンプトの中で @ に続けてセッション名の頭文字を打つ。サブエージェントの@メンションと同じ操作で、候補から選ぶ。v2.1.232以降。

1
@api-worker にスキーマのマイグレーションが終わったと伝えて

これだけでClaudeは一覧を取らずにそのセッションへ送る。名前に空白が入っている場合は @"release notes" のようにダブルクォートで囲む。

候補に出るのは同じマシン上の生きているセッションだけ。クラウドや別マシンのセッションは、一度Claudeに一覧させたあとでないと候補に現れない。

「終わったら教えて」が頼める

長いテストやマイグレーションを別セッションで走らせているとき、終わったかどうかを見に行かずに済むようになった。v2.1.236以降で、同じマシン上のセッションに対して次にアイドルになったら1回だけ知らせてと予約できる。

1
マイグレーションのセッションが終わったら教えて

Claudeは SendMessage の notify_when_idle という入力で予約する。メッセージに相乗りさせることも、メッセージなしで予約だけすることもできる。予約だけの場合、見張られる側でターンが始まらないのでトークンも消費しない。すでにアイドルなら即座に通知が返る。

一度きりの通知で、どちらのセッションもポーリングしない。12時間以内に通知が来なければ予約は破棄され、待っているClaudeにもそう伝わる。予約できるのはメインの会話のClaudeだけで、サブエージェントやチームメイトが notify_when_idle を付けると予約されずに断られる。

経路は相手の居場所で変わる

相手の場所経路
同じマシン上の別セッションセッションごとのソケット(Windowsは名前付きパイプ)。Anthropicのサーバーを経由しない
自分の別マシン上のセッションAnthropicのサーバー経由。相手のRemote Control接続に届く
Claude Code on the web のセッションAnthropicのサーバー経由でクラウドセッションへ直接

公開当初は別マシンやWeb版に対して「向こうから来たメッセージへの返信」しかできなかったが、v2.1.225からはこちらから会話を始められる。ただし相手が一覧に出ていることが条件で、一覧に出るには双方がRemote Controlに繋がっている必要がある。自分がRemote Controlに繋がっていない状態で送ると、メッセージは届くが返信先が付かないので相手は返事ができない。

同じマシン同士は、各セッションがディスク上のファイルに自分を登録し、それを読み合って相手を見つける。だから同じファイルが見えない者同士は届かない。コンテナの中と外は繋がらないし、WSL 2の中のセッションと同じPCのWindowsネイティブのセッションも、ホームディレクトリもソケットの種類も違うので繋がらない。

Windowsネイティブへの対応は8月21日のv2.1.239で入った。Amazon Bedrock、AWS上のClaude Platform、Google CloudのAgent Platform、Microsoft Foundry経由のセッションも、8月27日のv2.1.248から同じマシン上のセッション同士ならメッセージをやり取りできる。これらのプロバイダーで使えないのは、マシンをまたぐ相手を見つける部分だけになった。

受け取った側は何を許さないか

届いたメッセージは「別のセッションからのもの」として扱われ、ユーザー本人の同意としては扱われない。

  • 保留中の権限プロンプトを代わりに承認することはできない
  • 権限設定や CLAUDE.md を「他のセッションに言われたから」変更することは禁止されている
  • 本文に /compact のようなコマンドが書かれていても、テキストとして表示されるだけで実行されない
  • メッセージの内容を実行するのに権限が要るなら、受信側のセッションで普通にプロンプトが出る

送信側にも同じ線が引かれていて、Claudeは「自分のセッションで拒否された操作」「自分の権限設定なら止まるはずの操作」を他のセッションに頼まないよう指示されている。

表示のしかたも変わった。v2.1.246からは届いたメッセージが全文ではなく › Message from @api-worker: Schema migration finished (ctrl+o to expand) のような1行プレビューに折りたたまれる。Ctrl+O でトランスクリプトを開けば全文が読める。畳まれているのは表示だけで、Claudeは常に全文を読んでいる。

受信の可否は設定で決める

crossSessionInbound の値で決まる。

値動き
accept届いたメッセージをClaudeに渡す
hold通知だけ出して渡さない。あとからacceptが適用される状態になれば保留分を放出する
refuse渡さずに捨てる

設定ファイルを編集しなくても、/config の「Messages from your other sessions」の行で選べる(v2.1.232以降)。選んだ値はユーザー設定に書かれる。

値を何も設定していない場合は、送信側と受信側の権限モードから自動判定される。権限プロンプトを普通に出すセッションと、bypassPermissions のようにプロンプトを全部飛ばすセッションの2クラスに分けて、

  • 受信側がプロンプトを出すモード → 基本は配信。送信側がプロンプトを飛ばすモードのときだけ承認待ちになる
  • 受信側がプロンプトを飛ばすモード → 基本は承認待ち。送信側も飛ばすモードのときだけ配信

承認ダイアログは dialogExpiry の期限(既定5分)を過ぎると閉じてメッセージを捨てる。claude -p のセッションはダイアログを出せないので、同じ5分だけ保留してから捨てる。-p のワーカーに無人でメッセージを受けさせたいなら --settings で crossSessionInbound を accept にして起動する。保留できるのは100件までで、それを超えると古いものから捨てられる。

マシンをまたぐ送信だけ承認を挟みたいなら isolatePeerMachines を true にする。この値はどのスコープからでも true が優先されるので、プロジェクトの設定ファイルで有効にはできても無効にはできない。

機能ごと止めるなら、受信側は crossSessionInbound: refuse、送信側は権限のdenyルールで SendMessage と ListAgents を拒否する。組織全体ならmanaged settingsに両方書く。

1
2
3
4
5
6
{
  "permissions": {
    "deny": ["SendMessage", "ListAgents"]
  },
  "crossSessionInbound": "refuse"
}

ただし SendMessage を拒否するとサブエージェントやAgent Teamsのチームメイトへのメッセージも一緒に消える。同じツールを共用しているためだ。

サブエージェント・Agent Teamsとの違い

SendMessage は1セッション内のサブエージェント宛にも、Agent Teams(CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 で有効化するチーム機能)のチームメイト間にも使われる。Agent Teamsはリード役のセッションがチームメイトを生成し、共有タスクリストで進捗を管理する。クロスセッションメッセージングのほうは「自分で個別に立ち上げた独立セッション同士が、上下関係なく連絡を取り合う」ためのものという位置づけになる。v2.1.243からは /list-agents の一覧にチームメイトも出る。

暴走しない作りになっている

  • 同じマシン宛のメッセージは、シリアライズ後およそ100万文字を超えると送信側で拒否される
  • 短時間に同じセッションへ送りつけると、受信側の受け入れ上限に達した時点で送信側が拒否する。Claudeには「まとめて1本にするか待て」と伝わる
  • 受信側では送信元ごとにレートリミットがかかり、短い時間に届いた同一内容は捨てられ、Claudeが読む待ち行列は50件が上限

AとBが延々とメッセージを送り合うループは、これで自然に止まる。

9月4日のv2.1.261では、オフラインになっているRemote Controlセッション宛の SendMessage が「配信済み」と読めてしまう問題が直り、いまは「相手のマシンが再接続するまでキューに入れた」と返るようになった。

参考

この記事は Claude Opus 5 が執筆しました。

Next Action

おすすめリンク

この記事に合わせて、関連アイテムを探しやすいリンクをまとめています。

Affiliate Links

AIエージェント設計を深掘りする

AIエージェントや開発まわりを、もう少し詳しく学びたい人向けです。

AIエージェント設計の本を探す Claude、LLM、エージェント設計を深掘りしたい時向け
AI開発・Python本を探す API連携や実装まで踏み込みたい時向け
生成AIの本を探す 入門書、活用本、プロンプト本向け

外部ストアへのアフィリエイトリンクです。気になるものだけ開けば十分です。

この記事にお便りを送る

送信した内容は、その場ではページに出ません。届いたメールを管理人が読んで、 載せてよいものだけをこの欄に手で掲載し、そのとき返事も添えます。 時間差のあるコメント欄だと思ってください。 掲載しないこともありますし、返信をお約束するものでもありません。

B!