Skip to content

原文(日本語に翻訳)

再スポーンされたエージェントが以前のエージェントの名前を再利用した際にSendMessageが黙って誤ったあて先にメッセージを送ってしまう問題を修正。ツールが名前の不一致を検出し、呼び出し元に送信先の指定し直しを求めるようになった。

原文(英語)

Fixed SendMessage silently misrouting when a re-spawned agent reuses a previous agent's name — the tool now detects the mismatch and asks the caller to retarget

概要

SendMessageは、サブエージェントを名前やエージェントIDをtoフィールドに指定して再開(resume)するために使われるツールです。バックグラウンドで動いていたエージェントが停止後に再スポーンされ、以前と同じ名前を再利用した場合、修正前はSendMessageがその名前の履歴を追跡していなかったため、送信者が意図した「以前のエージェント」ではなく「名前を引き継いだ新しいエージェント」に黙ってメッセージが届いてしまうことがありました。v2.1.199では、会話内で一度到達した名前が別のエージェントに切り替わったことを検出し、誤送信せずにエラーを返してあて先の指定し直しを促すようになりました。

基本的な使い方

修正前:

1. 名前「researcher」のサブエージェントを起動し、作業を依頼
2. そのエージェントが停止し、別のバックグラウンドエージェントが
   同じ「researcher」という名前で再スポーンされる
3. SendMessage({ to: "researcher", ... }) を実行
   → ❌ 意図せず新しい「researcher」に届いてしまう(誤配信)

修正後(v2.1.199):

1. 名前「researcher」のサブエージェントを起動し、作業を依頼
2. そのエージェントが停止し、別のバックグラウンドエージェントが
   同じ「researcher」という名前で再スポーンされる
3. SendMessage({ to: "researcher", ... }) を実行
   → ✅ 名前が別のエージェントに切り替わったことを検出し送信を拒否
   → エラーで「researcher」が現在どのエージェントを指しているか報告
4. 以前のエージェントに届けたい場合は、スポーン結果に含まれる
   エージェントID宛てに送信し直す

実践例

バックグラウンドサブエージェントを名前で再開しようとする場合

長時間セッションで同名のバックグラウンドエージェントが何度も起動・停止を繰り返すワークフローでは、以前の名前が別プロセスに再割り当てされていることに気づかずSendMessageで作業を依頼してしまうリスクがありました。v2.1.199以降は、名前が指すエージェントが変わっていればエラーで知らせてくれるため、誤って無関係なエージェントに指示を出してしまう事故を防げます。

エージェントIDでの確実な再開

以前のエージェントがまだ動作中で、名前が別のエージェントに奪われている場合でも、そのエージェントのスポーン結果に含まれるエージェントIDをtoに指定すれば、名前の衝突とは無関係に正しい相手へメッセージを届けられます。

/clearをまたいだ長時間セッション

この名前重複チェックは現在の会話スコープに限定されており、/clearを実行するとリセットされます。頻繁に/clearを挟みながら多数のバックグラウンドエージェントを使い回す場合は、チェックがリセットされる点を踏まえてエージェントの状態を確認する習慣を持つとよいでしょう。

注意点

  • このチェックは現在の会話内に限定されており、/clearを実行するとリセットされます。
  • SendMessageはagent teams機能が無効でも、サブエージェントの再開のために利用できます。agent teams固有のプロトコルメッセージ(shutdown_requestplan_approval_responseなど)だけがagent teamsの有効化を必要とします。
  • 停止中のサブエージェントがSendMessageを受け取ると、新たにAgentを呼び出さなくてもバックグラウンドで自動的に再開されます。

関連情報