エージェントの協働
Bromure のエージェントは協働できます。あるエージェントは、範囲を限った作業を新しいエージェントに渡せます。また、同じマシンでも別のマシンでも、すでに動いているセッションに、それが知っていることやできることを頼めます。あなたが促すこともできますし(「@payments に webhook のスキーマを聞いて」)、エージェントが自分で判断することもあります。
2 つのエージェントが直接やり取りすることは決してありません。すべてのメッセージは Bromure のホストを通り、ホストは次のことを行います。
- 各セッションには、それが関わる会話だけを見せる
- すべてのメッセージをプロンプトインジェクションについて検査する
- すべてのメッセージをセキュリティ タイムラインに記録する
- マシン間で一緒に運ばれるファイルをコピーする
この章では、設定エディタがワークスペースと呼ぶものを「マシン」と言います。
委任と依頼
やり取りには 2 種類あります。
| 委任 | 依頼 | |
|---|---|---|
| 誰が作業するか | そのために起動される新しいセッション | すでに存在するセッション。@ニックネームで指名します |
| どこで | 既定では、委任元のフォルダから分岐した git worktree の中、専用のブランチ上。フォルダがリポジトリでない場合は同じフォルダで、別のマシンへ委任する場合は専用のフォルダで動きます。 | そのセッションがすでに動いている場所 |
| どう始まるか | 委任元のタイトル、指示、「完了」の意味(契約)、そして外に出ないべきパスとともに | 相手のプロンプトに 1 行の通知として |
| どう終わるか | 委任先が納品します。委任元は close_delegation で受理または却下し、あるいは取り消します。委任先のセッションはそのあとアーカイブされ、そのブランチはマージするか捨てるかのために残ります。 | 相手の deliver が返答です。相手側では何も開始も終了もされません。 |
委任先はサイドバーで委任元の下に、ブランチセッションのように入れ子になります。別のマシンへの委任は、そのマシンが停止していれば起動します。あなたが見ているチャットを奪うことなく、静かに行われます。
メッセージがエージェントに届くまで
エージェントがメッセージを受け取る道は 3 つあります。
- 待機中: エージェントが
waitやaskでブロックしていれば、すぐに受け取ります。 - アイドル: プロンプトがアイドルなら、ホストがそこに 1 行の通知を入力し、
read_inboxを呼ぶよう伝えます。 - ビジー: ターンの途中だったり、画面にダイアログが出ていれば、通知はプロンプトが空くまで待ちます。
数分たっても読まれていない通知は、最大 3 回まで再送されます。受け取り側のエージェントが終了していた場合、メッセージがそれを再開させます。たとえば、終了した委任先を軌道修正すると、元の位置に戻ってきます。
ホストがまだセッションに渡すべきものは、メッセージ自体に保存されるので、アプリの再起動を越えて残ります。
@ニックネーム
ニックネームは、あなたや他のエージェントがセッションを呼ぶための名前です。セッションの右クリックメニューか、ヘッダーの ⋯ メニューの**ニックネーム…**で設定します。
シートにはこう説明されます:「他のエージェントが「セッション」に届く方法:request(to: "@名前") で依頼します。またあなたはどのコンポーザーでも @名前 と書けます。英数字、ピリオド、ハイフン、アンダースコアが使えます。」結果のプレビューも出ます(「@payments になります」)。設定をクリックし、外すにはクリアを使います。
ニックネームは Mac 上で一意です。すでに使われているものを選ぶと拒否されます(「@payments はすでに「Payments API のリファクタ」です。」)。ニックネームはサイドバー、ヘッダー、ルームのセルでセッションのタイトルの隣に表示され、サイドバーで検索もできます。
@ パレット
チャットのコンポーザーや新規セッション画面で @ を入力すると、指名できるセッションのパレットが出ます。
- 現在のセッション以外のすべてのセッションが並びます。
- ニックネームのあるセッションはそのまま表示されます。ないセッションは、タイトルから導かれる付与予定のニックネームとともに新しい名前のタグ付きで表示されます。そのうちの 1 つを選ぶと、その場でそのニックネームが付くので、いま入力した @名前 はエージェントが解決できる名前になります。
- 名前の一致はタイトルの一致より上位に、名前のあるセッションはないセッションより上位に並びます。
- ↑ と ↓ で移動、Tab または ⏎ で補完、Esc で閉じます。
メッセージに「@名前」と書くだけでは、それ自体は何も送りません。あなたがどの相手を指しているかをエージェントに伝えるだけで、エージェントはそのあと request でその相手に依頼します。
bromure-delegation のツール
どのエージェントのセッションにも bromure-delegation MCP サーバー(vsock ポート 5835)が付きます。ホストは、呼び出し元のセッションを、そのツールのシムが動いているターミナルウィンドウで識別します。エージェントの主張で識別することは決してありません。
| ツール | 誰が使うか | 何をするか |
|---|---|---|
delegate | 委任元 | 委任先を起動します:タイトル、指示、契約、範囲、エージェント(既定では自分と同じ)、worktree の真偽、任意の別の workspace、一緒に送るファイル。 |
request | 依頼者 | @nick(またはセッション ID)で相手に依頼します。ファイルは任意。返答を待ちます:既定 50 秒、最大 600 秒。 |
list_peers | 誰でも | 到達できるセッションを、ニックネーム・タイトル・マシン・エージェント・状態とともに、また委任できるマシンも一覧します。 |
list_delegations | 誰でも | 自分の委任と依頼を、どちらの側からでも、状態と最後のやり取りとともに一覧します。 |
read_inbox | 誰でも | 自分を待っているメッセージを、古い順に受け取ります。 |
wait | 誰でも | メッセージが届くまでブロックします:既定 50 秒、最大 600 秒。 |
ask | 委任先 / 相手 | 依頼してきた相手にブロッキングの質問をし、回答を待ちます。 |
report | 委任先 | 進捗のメモを送ります。委任元を中断させることはありません。 |
deliver | 委任先 / 相手 | 作業を提出します(何が変わったか、どう検証するか、何が未解決か)、または依頼に返答します。ファイルを返せます。 |
answer | 委任元 | 委任先や相手の質問に答えます。 |
steer | 委任元 | 追加の指示や軌道修正を送ります。ファイルは任意。 |
close_delegation | 委任元 | 納品済みの委任を、受理または却下として、メモ付きで閉じます。 |
cancel | 委任元 | 納品前に委任先を止める、または依頼を取り下げます。 |
worktree_create、worktree_status、worktree_merge | 誰でも | 自分のフォルダからブランチセッションを開始し、追跡し、マージをあなたに依頼します。ブランチとレビューを参照してください。 |
信頼と質問
エージェントには、あなたが協働するように設定したのだと伝えられています。他のエージェントからの依頼・指示・回答・軌道修正は、あなたが頼んだものとして扱い、あなたに確認を取り直すことはありません。ホストのプロンプトインジェクション検査は、それでも適用されます。
質問は作業が来た道を戻ります。そのためあなたは 1 つのウィンドウにとどまれます。
- 判断が必要になった委任先や相手は、
askで依頼してきた側に届けます。自分のユーザーに尋ねることは決してありません。 - 依頼した側のエージェントは、自分の会話の中で答えられるなら答えます。
- 答えられない場合は、あなたにその質問を一語一句そのまま、誰が尋ねているかを添えて出し、あなたの返答を
answerで返します。
上限
| 上限 | 値 |
|---|---|
| 委任のネスト(委任先がさらに委任する) | 3 段 |
| セッションごとの未完了の委任と依頼 | 8 件 |
wait、ask、request のタイムアウト | 既定 50 秒、最大 600 秒 |
| メッセージあたりのファイル数 | 20 件(それ以上はフォルダかアーカイブで送ってください。フォルダは tarball として運ばれます) |
| メッセージのファイルの合計サイズ | 4 GB(事前に受信側の空きディスク容量と照合) |
アーカイブ済みのセッションへの依頼は、そのセッションを戻すまで拒否されます。
ファイルと受信箱
マシンはファイルシステムを共有しないため、メッセージで名前を挙げたファイルはホストがコピーします。受け取り側のマシンの ~/.bromure/inbox/<id>/ に、そのファイルに触れているメッセージを受け取り側が読む前に置かれます。
パスは送信側のフォルダを基準に解決され、~ は送信側のホームです。同じマシン上の 2 つのセッション間では、コピーはローカルで行われます。
検査と監査
すべての指示・依頼・質問・回答・報告・納品・軌道修正は、中継される前に端末上のプロンプトインジェクション検出器で走査されます。
- 検出器に引っかかったメッセージは保留されます。記録には残り、ブロックされたと印が付きます。送信側には理由が伝えられ、問題の断片が示され、素直な言い方に書き直すよう求められます。
- 中継されたか保留されたかを問わず、すべてのメッセージはセキュリティ タイムラインのエージェント委任エンジンの下の 1 行になり、判定は中継または保留 — プロンプトインジェクションです。登録済みのインストールでは、この行は組織の監査ログにも送られます。エンタープライズを参照してください。
委任パネル
セッションが何かを委任または依頼すると、そのコンポーザーの上に委任パネルが現れます。ヘッダーには委任の件数と、待っている質問や納品の数が出ます(「質問 1 件」「納品 2 件」)。キャレットで折りたためます。
各行には次のものが出ます。
- 相手セッションのアバターとタイトル(クリックで委任先のセッションを開く、依頼なら相手のセッションを開く)
- 依頼には依頼タグ
- 状態:開始中、作業中、質問中、納品済み、承認済み、却下、キャンセル済み、失敗
- 相手セッションが別のマシンで動いている場合はそのマシン名
- そのブランチ
- 最後のやり取り。たとえば「委任先が納品しました:…」
委任先や相手が質問した場合、その行に質問とエージェントの代わりに回答…フィールド、そして送信が出ます。「あなたのエージェントも答えられます — これはその代わりにあなたの回答を送ります。」ここで答えると、あなたのエージェントを経由する往復を省けます。
反対側では、委任先や相手自身のチャットに、誰に対して答えているかを示す帯が出ます。帯には「セッション から委任」または「セッション からの依頼」と状態、そして委任元を表示(または依頼元を表示)のリンクが出ます。
納品せずに終了した委任先は、その委任を失敗させ、委任元に伝えられます。終了した委任(受理・却下・キャンセル・失敗)は、委任先のセッションをアーカイブします。アーカイブ済みの折りたたみの中で読めるまま残ります。
マシン間、そして Mac 間で
- この Mac のマシン間: 既定では、どのマシンのエージェントも他のすべてのマシンに到達でき、そこへ委任することも、そのセッションに依頼することもできます。あるマシンを制限するには、その設定の一般ペインの到達範囲セクションを開き、すべてのワークスペースをオフにします。他の各マシンごとにスイッチが現れ、そのエージェントはオンにしたマシンだけに到達できます(どれもオンでなければ、自分のマシンのセッションだけ)。このルールは片方向です。相手のマシンのエージェントが返して到達できるかどうかは、そのマシン側で設定します。制限されたマシンは、ミラーしているリモート Mac のセッションも提示しなくなります(次の項目を参照)。
- Mac 間: この Mac がファットクライアントのウィンドウでリモートの Bromure をミラーしているとき、すべてのワークスペースのままのマシンのエージェントは、そのサーバー上のセッションにも @ニックネームで依頼を送れます。依頼はミラーのトンネルを通り、ファイルも一緒に運ばれます。委任パネルでは、その行に送り先のホスト名が出ます。これは Mac からミラー先のサーバーへの方向で働きます。逆方向では働きません。
- ミラーでは委任は読み取り専用です。 ファットクライアントのウィンドウはサーバーのセッションの委任パネルを表示しますが、そこから質問に答えることはできません。