dekinai 開発ブログ 記事の一覧

Claude Code のセッション同士がメッセージを送れるようになった — 渡るのはテキスト1本だけ

執筆 / 公開

claude-codemulti-sessioncontext-handoff

この記事で分かること

Claude Code を複数のターミナルや複数の端末で並行して動かしている人に向けて書いている。


Claude Code v2.1.224 で、走っている別のセッションへテキストを送れるようになった

Claude Code は、ターミナル1枚につき1つのセッションが走る。 複数のターミナルを開けば、その数だけセッションが並ぶ ― 片方でアプリを書きながら、もう片方でインフラを直す、という使い方になる。

これまで、並んでいるセッションは互いの存在を知らなかった。 片方の結果をもう片方へ渡す方法は2つしかない。 人がコピーして貼るか、ファイルに書いて後から別のセッションに読ませるかだ。

v2.1.224 で、そこに3つ目が入った。走っているセッションを一覧し、名前を指定してテキストを届ける。

ツール 役割
ListAgents いま手が届くセッションを列挙する
SendMessage その1つに名前を指定してテキストを届ける

どちらも人が直接叩くものではなく、Claude が自分で使う。 人が書くのは「隣のターミナルのセッションに、マイグレーションが終わったか聞いて」の一言で、 相手を探して、選んで、投げて、返事を待つところまでを Claude がやる。


渡るのは送信者名・返信先・本文の3つだけ

会話履歴は渡らない。読んだファイルも渡らない。CLAUDE.md も、メモリも、権限設定も渡らない。

受け手は、自分の端末のディスクから自分の設定を読んで起動している別のセッションのままで、 そこへ短いテキストが1本届く。これは文脈の共有ではなく、宛先を指定した伝言である。

会話と文脈ごと移したい場合に使うのは、この機能ではなくセッションの resume になる。


届くのはツール呼び出しの合間で、実行中のコマンドは中断されない

3つ目は見落としやすい。増えるのは送った側ではなく、受けた側の消費である。


新しいのは対等なセッション同士で、SendMessage 自体は前からあった

以前の SendMessage は、親セッションが自分で spawn した子(subagent)へ届くだけで、 親から子への一方通行の木構造だった。 この木の外にいる対等なセッションへ広がったのが、今回の差分である。

これまでは親が spawn した子へ届く木だった。v2.1.224 で対等なセッション同士がつながった
これまでは親が spawn した子へ届く木だった。v2.1.224 で対等なセッション同士がつながった

従来の引き継ぎでは、書いた時点で受け手のプロセスが存在しない

セッションをまたいで仕事を渡すこと自体は前からできた。やり方が違う。 成果物を書いて、後から別のセッションに読ませる。

書き置き型。A が書いた時点で B というプロセスはまだ存在しない
書き置き型。A が書いた時点で B というプロセスはまだ存在しない

A が渡している相手は B ではなく、保存された成果物である。 B は後から起動して、それを読む。宛先は無く、誰かが見に来るまで動かない。


直通で増えるのは、受け手が生きていること・中継が要らないこと・宛先を指定できること

直通型。相手を列挙して指名し、走っているセッションへ直接届ける
直通型。相手を列挙して指名し、走っているセッションへ直接届ける
  1. 受け手が実行中の文脈を持っている — 「何の件か」から読ませ直さなくていい
  2. 人も中継の仕組みも挟まらない — 配送待ちも、人の「着手して」も要らない
  3. 相手を発見して指名できる — 書き置きには宛先が無かった

裏返すと、この3つ以外は増えていない。 セッションをまたいで仕事を渡す能力そのものは、前からあったものだ。


速さと引き換えに、記録が残らない

成果物を経由した引き継ぎ セッション間メッセージ
到達 遅い(人の起動待ち・中継待ち) 即時
受け手 まだ居ない。後から読む 走っている。割り込まれる
残るか 残る。後から辿れる 残らない。受け手の文脈に溶ける
セッションが死んだら 生き残る 消える
人の判断 挟まる 挟まらない
コスト 書く1回 + 読む1回 受け手の文脈を1本ぶん消費する

上位互換ではない。 人の判断が要るものと、後から根拠として辿る必要があるものは直通に載せない。 直通に向くのは、その場で完結して消えてよい確認だけになる。


書き置き型は読む前に前提が揃い、直通型はその時点の文脈で解釈される

書き置き型は読む前に前提が揃う。直通型はその時点の文脈で解釈する
書き置き型は読む前に前提が揃う。直通型はその時点の文脈で解釈する

書き置きを読む側は、起動時に常時載る層(設定・作法・環境の事情)を全部読んでから本文に触る。 直通はそこを飛ばして、走っている最中の文脈へ割り込む。 「遅い」ことの対価として買っていたのは、受け手が読む前に前提を揃え終えていることだった。


端末ごとの設定の差は、メッセージでは埋まらない

複数の端末で Claude Code を動かしていると、端末ごとに文脈の厚みが違う状態になる。 端末A には作法や環境の事情が書き溜められていて、端末B には無い。すると端末B では、

セッション間メッセージでこれは埋まらない。渡るのはテキスト1本で、 端末B のセッションは端末B のディスクにある薄い設定を読んで起動したままだからだ。

渡るのはテキスト1本だけ。設定は端末ごとに残り、受け手は薄いまま解釈する
渡るのはテキスト1本だけ。設定は端末ごとに残り、受け手は薄いまま解釈する

むしろ差は開きうる。送り手は、受け手の設定に何が載っているかを知らない。 人が書くプロンプトなら、人は相手の薄さを知っていて前提を補える。 送り手が Claude だと、自分の厚い文脈を前提にした1行を投げ、 受け手は自分の薄い文脈の上でそれを解釈する。 届いた1本は利用量に計上されるので、薄い側が動き出す回数だけが増える。

常時載る層は、端末ごとに置くしかない。


受信側は、メッセージを理由に設定や権限を変えない

送りつけて相手の設定を直す使い方は、実装の不足ではなく意図的に塞がれている。

ここが通れば、メッセージ1本が乗っ取りの経路になる。


用途ごとの使い分け

やりたいこと 使うもの
会話と文脈ごと移す セッションの resume
常に載っていてほしい作法 設定ファイル。その端末に置く
走っている相手に短い事実を1本渡す セッション間メッセージ
CI 結果など外部イベントを流し込む channels

動かない環境がある


受信側で決められること