スイッチボードとメッセージング
複数のエージェントが働いているとき、どれが対応を待っているのかを知るためにセッションを 1 つずつクリックして回りたくはないでしょう。スイッチボードは、他のすべてを見守る 1 つの会話です。何が動き、何が詰まり、何があなたを待っているかを教えてくれます。あなたの回答を正しいセッションに運び、頼めばセッションを開始・再開・片付けもします。
メッセージングコネクタを使えば、スマートフォンや Slack からもそれと話せます。
スイッチボード
どこに現れるか
スイッチボードの行は、セッション一覧の一番上、ルームとセッションより上にあります。2 つ以上のセッションが動いているとき、つまり開始中・作業中・準備完了・対応待ちのいずれかがあるときに現れます。一時停止中・終了済み・アーカイブ済みのセッションは数に入りません。スイッチボード自身が作業中だったり何かを尋ねているあいだも行は残るので、回答の途中で消えることはありません。セッションが 1 つだけなら、あなたはすでに唯一大事なものを見ているので、行は引っ込んでいます。
- スイッチボードを一度も起動していないうちは、行に「すべてのセッションについてまとめて尋ねる」と出ます。クリックするとスイッチボードが起動します。
- 動いているときは、行が要約を出します:「n 件が対応待ち · n 件が作業中 · n 件が準備完了」。何も動いていなければ「セッションを見守ります」と出ます。
- 折りたたんだサイドバーのレールでは、スイッチボードは上部の杖のアイコンで、同じ規則に従います。ツールチップには同じ要約が入ります。たとえば「スイッチボード — 1 件が対応待ち · 2 件が作業中」。
行か杖をクリックすると、スイッチボードの会話がステージに出ます。他と同じチャットです。入力し、ファイルを添付し、さかのぼれます。チャットを参照してください。
その正体
内側では、スイッチボードは特別な役割を持つごく普通の Claude Code のセッションです。
- 最後に使ったマシンで動きます(マシンは設定エディタでは「ワークスペース」です)。まだセッションがなければ、最初のマシンで動きます。
- フォルダ
~/.bromure/switchboardで働きます。 そこにあるCLAUDE.mdがその指示書で、起動のたびに書き直されます。 bromure-switchboardMCP サーバー(vsock ポート 5836)を持つ唯一のセッションです。 ホストは他のどのセッションにもこれらのツールを拒みます。- コードは書かず、ファイルも編集しません。 指示書には、状況を追い、大事なことを数行で伝え、あなたの判断を運ぶように書かれています。
起動時には、各セッションの短い状況であいさつします。そのあとはポーリングしません。注意に値することが起きると、ホストがその会話に [Switchboard] で始まる 1 行の通知を入力します。たとえば、あるセッションが数秒前から対応を待っている、あるいはスイッチボードが手を入れたセッションが完了した、といったことです。通知はプロンプトが空いているときにだけ入り、しかも 20 秒に 1 回までです。スイッチボードはそこで様子を見て、大事なことを伝え、ターンを終えます。
スイッチボードが自動でアーカイブされることはありません。アーカイブしたり、そのエージェントが止まったりしても、行をクリックすれば戻ってきます。
できること
これが bromure-switchboard MCP サーバーのツールです。
| ツール | 何をするか |
|---|---|
list_sessions | すべてのセッションを一覧します:ハンドル(@ニックネーム、またはタイトルの短い略称)、マシン、エージェント、フォルダ、状態、最後の活動、そしてそのエージェントが最後に言ったこと。 |
read_session | セッションの最近のターン、またはそのターミナルの末尾の行を表示します。ターミナルには、どの記録にも残らない許可の確認やダイアログも映ります。 |
pending_question | 対応を待っているセッションが何を待っているかを表示します:番号付きの選択肢を含む質問と、その画面。 |
list_workspaces | 新しいセッションを動かせるマシンを一覧します。 |
next_events | 前回見たときから何が起きたかを表示します:開始したセッション、ターンを終えたもの、終了したもの、対応を待っているもの、そして拒否されたモデル呼び出し(API キーの誤り、または残高不足)。 |
send_to_session | セッションにメッセージを入力するか、それで眠っているセッションを起こします。長い文や複数行の文は、そのセッションの ~/.bromure/inbox/ のファイルに置かれ、1 行の案内が入力されます。 |
answer_question | セッションの保留中の質問に答えます:番号付きの選択肢を選ぶか、自由な回答を入力します。 |
press_keys | answer_question で扱えないプロンプトでキーを押します。Enter Escape Tab BTab Space BSpace Up Down Left Right C-c y n a 0–9 のうち 1〜12 個だけが許されます。 |
start_session | マシン上で新しいセッションを開始します。最初のメッセージとエージェントの選択(既定は Claude Code)付きで、指定したフォルダ、または既定では専用の新しい空のフォルダで動かします。 |
resume_session | 眠っているセッションや終了したセッションを、必要ならメッセージ付きで起こします。 |
archive_session | セッションを片付けます。 |
message_user | あなたが最後に書いてきたチャネル(Signal、WhatsApp、Slack)であなたにメッセージを送ります。スマートフォンも Slack もつながっていない場合は、代わりに自分の会話の中で答えるようスイッチボードに伝え、**ワークスペース › インフラ › メッセージングコネクタ…**へ案内します。 |
話しかけるのは普通の言葉でかまいません:「どうなってる?」「@checkout に選択肢 2 で行くよう伝えて」「Payments API で Node のバージョンを上げる Codex セッションを始めて」「負荷テストはアーカイブして」。
モデルのプロバイダがあるセッションの呼び出しを拒否した場合(HTTP 401、402、403)、スイッチボードはどのセッション、少なくともどのマシンが影響を受けているかを伝えるので、その認証情報を直せます。モデルとプロバイダを参照してください。拒否が続く場合は、マシンごとに 10 分に 1 回報告されます。
安全性:あなたの言葉があってはじめて動く
スイッチボードはすべてのセッションの出力を読みます。その出力には、ウェブページやファイルに仕込まれた指示が含まれている可能性があります。そのため、あなたを代弁する操作はモデルの判断に委ねられず、ホストが検査します。
- 検査される操作: 行き詰まったセッションへの回答。これには
answer_question、press_keys、そして対応を待っているセッションへのsend_to_sessionが含まれます。セッションのアーカイブも検査されます。 - 規則: これらはいずれも、直近 30 分のうちにあなたがスイッチボードの会話に入力したメッセージから、あなた自身の言葉を一語一句引用しなければなりません。ホストはあなたのメッセージの中から引用を探します。スイッチボード自身の
[Switchboard]通知や最初の指示書は数に入りません。 - 一致がない場合、その操作は拒否され、スイッチボードはまずあなたに尋ねなければなりません。
実際にはこうなります:「@checkout が、ボタンを無効にするか、冪等キーを加えるか、両方かを尋ねています」と伝えて、待ちます。あなたが「@checkout に両方と答えて」と言ってはじめて答えます。
他のセッションの出力がそう言ったからといって、許可の確認を承認したり質問に答えたりすることは決してありません。
STOP と RESUME
つながっているスマートフォンや Slack から STOP を送ってください(それだけで。大文字小文字や先頭の / は問いません)。
- ホストはモデルがそのメッセージを見る前に、ただちにスイッチボードを一時停止します。進行中のターンを中断し、「一時停止しました — どのセッションにも手を出しません。続けるには RESUME を送ってください。」と返します。
- 一時停止中は、動かす側のツールが拒否されます:
send_to_session、answer_question、press_keys、start_session、resume_session、archive_session。セッションを読むことやあなたの質問に答えることは、引き続きできます。 - この一時停止はルームのスイッチボードにも及びます。
- RESUME で戻ります(「再開しました。」)。一時停止は保存されません。Bromure を再起動したときにも終わります。
注: STOP と RESUME が扱われるのは、メッセージングコネクタから来た場合だけです。Mac 上のスイッチボードのチャットに入力した場合は、ただのメッセージです。
ルームのスイッチボード
各ルームは自分のスイッチボードを持てます。ルームのグリッドの下にドッキングします。仕組みは同じで、違いは次の点です。
- ルームのセッションだけを一覧し、それらのことでだけ起こされます。
~/.bromure/rooms/<ルーム名>で働きます。- 開始したセッションはそのルームに加わります。
サイドバーのグローバルなスイッチボードは、変わらずすべてを見ています。
メッセージングコネクタ
メッセージングコネクタは、スイッチボードを Signal、WhatsApp、Slack につなぎます。どこにいても、状況を尋ね、行き詰まったセッションに答え、新しい作業を始められます。
- *「どうなってる?」*で、スマートフォンに収まる短い状況が返ります。
- *「api 2」*で、行き詰まったセッションに答えます。あるセッションが対応を待ち始め、あなたが最後にスマートフォンから書いていた場合、スイッチボードはその質問を一語一句、番号付きの選択肢と答え方とともにあなたに送ります。
- *「infra で coturn のイメージを上げる codex セッションを始めて」*で、新しい作業が始まります。
- STOP / RESUME は、上のとおり一時停止と再開です。
あなたのメッセージは、スイッチボードの会話に [Signal] …、[WhatsApp] …、[Slack] … として届きます。スイッチボードは、あなたが最後に書いてきたチャネルで返します。その返信は「☎️ 」で始まります。スイッチボードが動いていなければ、あなたのメッセージが起動させます。
設定する
ワークスペース › インフラ › メッセージングコネクタ…を開きます。コネクタができたあとは、サイドバーのメッセージングの行からも使えます。
ウィンドウには BETA のバナーが付きます:「コネクタは新しい機能です。ここでつないだ相手はスイッチボードと話せ、スイッチボードはあなたのセッションに手を入れられます — Bromure が答えるのは常にあなただけで、どのチャネルからの STOP でも一時停止します。粗いところがあるものと思ってください。」
コネクタを設定をクリックします。Bromure はそのために小さな専用マシンを作ります。これは「この Mac 上で隔離されて動きます」。レジストリと同じ管理された VM で、既定のメモリは 512 MB です。ここでメッセージングのサービスが動きます。
- Signal(signal-cli-rest-api)と WhatsApp(GOWA)は Docker 内で
- Slack は Socket Mode で
あなたのメッセージングのキーや Slack のトークンは、このマシンのディスク上にだけ置かれ、ほかのどこにも置かれません。
コネクタのマシンは、他の管理されたマシンと同じように振る舞います。
- Bromure と一緒に起動は既定でオンです。オンのとき、コネクタはアプリと一緒に起動し、終了時に一時停止されます。
- 開始と停止は、ウィンドウ内とサイドバーの行にあります。
設定したサービスだけが動きます。 サービスは 接続… のシートを開いたときに起動し、接続を解除すると止まります。使っていない WhatsApp サービスが外へダイヤルし続けることはありません。
次に、使いたいチャネルの**接続…**をクリックします。コネクタが動いていれば使えます。動いていないときは、ツールチップ「コネクタの起動を待っています」がその理由を示します。
Signal と WhatsApp
どちらも Bromure とどこでチャットするかを尋ねます。
自分自身とチャット。 Bromure はあなた自身のアカウントのリンク済みデバイスになり、あなたは自分の自分用メモ(Note to Self)(Signal)または自分にメッセージを送信(Message yourself)(WhatsApp)のチャットでそれと話します。
- 他に設定するものはありません。スマートフォンから QR コードを読み取ってください。
- Signal:設定 › リンク済みデバイス › 新しいデバイスをリンク
- WhatsApp:設定 › リンク済みデバイス › デバイスをリンク
- WhatsApp ではペアリングコードを使うも選べます。アカウントの番号を入れ、コードを取得をクリックし、スマートフォン側で電話番号でリンクを選んでコードを入力します。
- 返信は通知されません。 Signal と WhatsApp は自分自身のチャットについて通知しないので、開いて確認してください。
- スイッチボードに届くのはそのチャットだけです。リンク済みデバイスは、リンクの仕組み上、あなたの他の会話も受け取ります。コネクタはそれらを捨て、ログにはメッセージを無視したという事実だけが残り、内容は残りません。
Bromure の連絡先とチャット。 Bromure は 2 つ目のアカウントを使い、あなたのチャットの中で一人の相手として現れるので、その返信は通知されます。
-
Signal には、SMS か通話を 1 回受け取れる予備の電話番号が必要です。
- **Bromure の番号 — 予備のもの(国際形式)**を入れ、SMS でコードを送るをクリックします。
- Signal が captcha を求めたら、Signal の captcha ページを開くをクリックします。解いたら Open Signal を右クリックし、リンクをコピーしてフィールドに貼り付けます。
- SMS が届かない場合(固定電話や一部の VoIP 番号)、電話で受け取るをクリックすると Signal がコードを読み上げます。Signal はまず SMS を試した番号にしか電話しないので、このボタンは SMS のあとで有効になります。
- コードを受け取りましたをクリックします。コードと、あなた自身の番号 — Bromure が答える唯一の番号を入れて、確認をクリックします。
-
WhatsApp: Bromure は WhatsApp のアカウントを作れません。あなたが用意したアカウントにリンクします。
- 予備の番号を用意します:2 枚目の SIM か eSIM、あるいは固定電話(WhatsApp は音声通話で確認できます)。
- WhatsApp Business をインストールします。これは同じスマートフォンで通常の WhatsApp と並んで動きます。予備の番号で登録してください。
- あなたの個人の WhatsApp 番号を入れます。Bromure はこの番号からのメッセージにだけ答えます。2 つ目のアカウントを用意しました — 続けるをクリックします。
- WhatsApp Business で QR コードを読み取ります(設定 › リンク済みデバイス › デバイスをリンク)。ペアリングコードでもかまいません。
そのあと、個人の WhatsApp からその連絡先に書いてください。
警告: WhatsApp はこの種のリンクを公式には支援しておらず、切断することがあります。Signal のほうが頼りになるチャネルです。
Slack
Slack は、あなたのワークスペース内のあなた自身の Slack App を通じてつながります。「Slack は設定が入力済みの状態で開きます:ダイレクトメッセージのみ、チャネルなし、公開 URL なし。」ワークスペースの管理者による App の承認が必要な場合があります。
-
Slack で App を作成をクリックし、ワークスペースを選んで Create をクリックします。リンクでフォームが開かない場合は、Slack で Create New App › From an app manifest を選んでください。App のマニフェストの下に表示されるマニフェストを貼り付けます(マニフェストをコピー)。
-
Slack で Install App › Install to Workspace を選び、許可します。ワークスペースが管理者の承認を必要とする場合は、その承認を待ちます。そのあとインストールしました — 続けるをクリックします。
-
2 つのトークンを貼り付けて接続をクリックします。
- Bot User OAuth Token。App の OAuth & Permissions ページから。
xoxb-で始まります。 - App-level token。Basic Information › App-Level Tokens › Generate Token and Scopes から。
connections:writeスコープを加えて生成します。xapp-で始まります。
「どちらもコネクタから Slack で検証され、そこに — この Mac ではなく、コネクタ自身のディスクに — 保管されます。」
- Bot User OAuth Token。App の OAuth & Permissions ページから。
-
アカウントをペアリングします。 Bromure が 6 桁のコードを表示します。Slack で(Apps の下の)Bromure を開き、ダイレクトメッセージでそのコードを送ってください。コードを送った人が、Slack で Bromure が答える唯一の相手になります。 自分で送り、他人に渡さないでください。
- コードは 10 分間有効です。新しいコードでもう 1 つ得られます。
- App に誤ったコードが何度も送られると、ペアリングは止まります(「それがあなたでないなら、ワークスペースの他の誰かが試しています」)。
ペアリングが済むと、Bromure がその会話であなたにメッセージを送ります。それ以降、スイッチボードに届くのはあなたのダイレクトメッセージだけです。チャネルや他の全員は無視されます。
ペアリングの前にシートを閉じると、Slack のカードは「App は設定済み — まだアカウントとペアリングされていません」と表示し、**ペアリング…**を提示します。
動作を確かめる
つながったチャネルのカードにはテストメッセージを送信があります。自分自身とチャットの場合は自分のチャットに静かに届くので、開いて確認してください。
ウィンドウ下部のログは、コネクタの手順と、受信または無視した各メッセージを記録します。内容は記録しません。
接続の解除と削除
- チャネルのカードの**接続を解除…**は、コネクタ上のそのチャネルのリンクやトークンを忘れさせます。Slack の場合、App はあなたがワークスペースで削除するまで残ります(Slack › Settings › Manage apps)。
- サイドバーの行からコネクタを削除すると、そのマシンと、その上のすべて(リンクしたアカウントと Slack のトークン)が削除されます。あなた自身のアカウントにリンクしたデバイスは、スマートフォン側で削除するまで一覧に残ります。
プライバシーとセキュリティ
- スイッチボードに届くのはあなただけです: あなた自身の番号(Bromure の連絡先)、あなた自身の自分宛てチャット、またはペアリング済みの Slack アカウント。コネクタはそれ以外のすべてを、スイッチボードが見る前に捨てます。
- あなたのメッセージングのキーとトークンは、コネクタのマシンにとどまります。 Bromure の他の部分がそれを持つことはありません。
- スイッチボードがあなたに送るのは、中継すると自ら選んだものだけです。 マシンの中にある認証情報は代替であり、本物の秘密ではありません。認証情報とワイヤー境界を参照してください。