總機與訊息

有好幾個代理程式在工作時,你不會想一個個點進每個工作階段,才知道哪一個需要你。總機就是一段關注其他所有工作階段的對話。它會告訴你什麼在工作、什麼卡住了、什麼在等你。它把你的答覆帶到正確的工作階段,也會在你要求時啟動、恢復或收起工作階段。

有了訊息連接器,你也可以從手機或 Slack 和它說話。

總機

舞台上總機自己的聊天(機器 Web app 上的 Claude Code,檔案夾 ~/.bromure/switchboard):被問到「我的工作階段現在怎麼樣?」時,它以每個工作階段一個項目的方式回答,並附上一個 工作階段/機器/狀態 的表格,接著主動提議用「兩者都做」回覆 @checkout。總機那一列在側邊欄頂端被選取,寫著「1 個需要你 · 2 個工作中 · 2 個就緒」。

它出現在哪裡

總機那一列位於工作階段清單的最上方,在房間與工作階段之上。當有兩個以上的工作階段正在進行時它就會出現,也就是正在啟動、工作中、就緒,或在等你。已暫停、已結束或已封存的工作階段不算。只要總機自己在忙或正在問你什麼,這一列也會留著,所以它絕不會在回答途中消失。只有一個工作階段時,你已經在看那唯一重要的東西了,這一列就會退到一旁。

  • 在總機第一次啟動之前,這一列寫著「一次詢問你所有的工作階段」。點選它就會啟動總機。
  • 執行中時,這一列會給出摘要:「n 個需要你 · n 個工作中 · n 個就緒」。沒有任何在進行時,它會寫「關注你的工作階段」。
  • 在收合的側邊欄邊條上,總機是頂端的一個魔杖圖示,遵循同樣的規則。它的工具提示會給出同樣的摘要,例如「總機——1 個需要你 · 2 個工作中」。

點選那一列或魔杖,就會把總機的對話放上舞台。它就是一般的聊天:對它輸入、附加檔案、往回捲動。見聊天。

它是什麼

在底層,總機是一個帶有特殊角色的普通 Claude Code 工作階段:

  • 它在你最後使用的那台機器上執行(機器在設定編輯器中就是工作區)。若你還沒有任何工作階段,它會在第一台機器上執行。
  • 它在檔案夾 ~/.bromure/switchboard 中工作。 那裡的 CLAUDE.md 就是它的任務說明,每次啟動都會重寫。
  • 它是唯一擁有 bromure-switchboard MCP 伺服器的工作階段(vsock 通訊埠 5836)。主機會拒絕把這些工具給任何其他工作階段。
  • 它不寫程式碼,也不編輯檔案。 它的任務說明要它持續關注、用幾行告訴你重點,並傳遞你的決定。

啟動時,它會以每個工作階段的簡短狀況向你打招呼。之後它不會輪詢。當發生值得它注意的事,主機會在它的對話中輸入一行以 [Switchboard] 開頭的通知。例如某個工作階段已經等你幾秒鐘了,或是它動過手的某個工作階段已完成。只有它的提示列空著時通知才會進來,而且最多每 20 秒一次。總機接著查看、告訴你重點,然後結束這一輪。

總機絕不會被自動封存。如果你封存了它,或它的代理程式停了,點一下那一列就會把它帶回來。

它能做什麼

以下是它的工具,來自 bromure-switchboard MCP 伺服器:

工具作用
list_sessions列出每個工作階段:它的代號(@暱稱,或標題的簡短縮寫)、機器、代理程式、檔案夾、狀態、最後活動,以及它的代理程式最後說的話。
read_session顯示某個工作階段最近的幾輪,或它終端機的最後幾行。終端機會顯示任何逐字紀錄都不會留下的權限詢問與對話框。
pending_question顯示一個需要你的工作階段在等什麼:它的問題與編號選項,以及它的畫面。
list_workspaces列出新工作階段可以執行的機器。
next_events顯示它上次查看以來發生的事:已啟動的工作階段、完成了一輪的、已結束的、需要你的,以及被拒絕的模型呼叫(API 金鑰有誤,或沒有額度)。
send_to_session在某個工作階段中輸入一則訊息,或用它喚醒一個睡著的工作階段。較長或多行的文字會留在該工作階段 ~/.bromure/inbox/ 的一個檔案中,並附一行指引。
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 開一個 Codex 工作階段來升 Node 版本」、「把負載測試封存起來」。

如果某個模型供應商拒絕了某個工作階段的呼叫(HTTP 401、402 或 403),總機會告訴你是哪個工作階段、至少是哪台機器受到影響,讓你可以去修它的憑證。見模型與供應商。反覆的拒絕會每 10 分鐘就每台機器報告一次。

安全:它只依你的話行動

總機會讀取每個工作階段的輸出。那些輸出可能含有藏在網頁或檔案裡的指令。因此,代你發言的那些動作是由主機檢查的,不交給模型判斷。

  • 會被檢查的動作: 回覆一個被卡住的工作階段,這包含 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 開一個 codex 工作階段來升 coturn 映像」*會開始新工作。
  • STOP / RESUME 如上所述,用來暫停與恢復。

你的訊息會以 [Signal] …、[WhatsApp] … 或 [Slack] … 的形式進入總機的對話。總機會在你最後寫來的那個管道上回覆你。它的回覆以「☎️ 」開頭。若總機沒有在執行,你的訊息會把它啟動。

首次執行時的訊息連接器視窗:一條橙色 BETA 橫幅,警告你在這裡連接的任何人都能和總機說話;標題「訊息連接器——從 Signal、WhatsApp 或 Slack 和 Bromure 聊你的工作階段。」;一段簡短說明;以及「設定連接器」按鈕。

設定它

開啟工作區 › 基礎架構 › 訊息連接器…。連接器建立之後,你也可以使用側邊欄的訊息那一列。

視窗上有一條 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 會使用第二個帳號,在你的聊天中像一個人一樣出現,所以它的回覆會通知你。

  • Signal 需要一個能收到一次簡訊或一次來電的備用電話號碼:

    1. 輸入 Bromure 的號碼——那個備用的(國際格式),點選用簡訊傳送驗證碼。
    2. 若 Signal 要求 captcha,點選開啟 Signal 的 captcha 頁面。解開之後,對 Open Signal 按右鍵、拷貝連結,貼進欄位裡。
    3. 若沒收到簡訊(市話、部分 VoIP 號碼),點選改為來電,Signal 會把驗證碼念出來。Signal 只會打給它先嘗試發過簡訊的號碼,所以這個按鈕在簡訊之後才會啟用。
    4. 點選我已收到驗證碼。輸入驗證碼,以及你自己的號碼——Bromure 唯一會回覆的號碼。點選驗證。
  • WhatsApp: Bromure 無法建立 WhatsApp 帳號。它連結到你為它準備的一個帳號:

    1. 取得一個備用號碼:第二張 SIM 或 eSIM,或一支市話(WhatsApp 可以用語音通話驗證它)。
    2. 安裝 WhatsApp Business,它可以在同一支手機上與你平常的 WhatsApp 並存,並用那個備用號碼註冊它。
    3. 輸入你個人的 WhatsApp 號碼。Bromure 只會回覆來自這個號碼的訊息。點選我已備好第二個帳號——繼續。
    4. 用 WhatsApp Business 掃描 QR 碼(設定 › 已連結的裝置 › 連結裝置),或使用配對代碼。

    然後從你個人的 WhatsApp 寫訊息給那個聯絡人。

警告: WhatsApp 並未正式支援這種連結,而且可能會把它斷開。Signal 是比較可靠的管道。

Slack

Slack 是透過你自己在工作區中的一個 Slack App 連接的。「Slack 會以填好的設定開啟:只有私訊、沒有頻道、沒有公開 URL。」你的工作區管理員可能需要核准這個 App。

  1. 點選在 Slack 中建立 App,選擇你的工作區並點選 Create。若連結沒有開啟表單,改在 Slack 中選 Create New App › From an app manifest。貼上顯示在 App 的資訊清單下的內容(拷貝資訊清單)。

  2. 在 Slack 中選 Install App › Install to Workspace 並允許。若你的工作區需要管理員核准,就會等待他們。之後點選我已安裝——繼續。

  3. 貼上兩個權杖並點選連接:

    • 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 上。」

  4. 配對你的帳號。 Bromure 會顯示一組六位數代碼。在 Slack 中開啟(Apps 下的)Bromure,用私訊把代碼傳給它。送出代碼的人就成為 Bromure 在 Slack 上唯一會回覆的人。 請自己送,不要分享出去。

    • 代碼有效 10 分鐘。新代碼可以再取一組。
    • 若對該 App 送出多次錯誤代碼,配對就會停止(「如果那不是你,你工作區裡的其他人正在嘗試」)。

    配對完成後,Bromure 會在那個對話中傳訊息給你。從那時起,只有你的私訊會到達總機。頻道與其他所有人都會被忽略。

若你在配對之前就關閉面板,Slack 的卡片會顯示「App 已設定——尚未與你的帳號配對」,並提供配對…。

確認它能用

已連接管道的卡片提供傳送測試訊息。用與自己聊天時,它會安靜地落在你自己的聊天裡,所以要打開來確認。

視窗底部的記錄會記下連接器的步驟,以及每一則收到或被忽略的訊息,但絕不記內容。

中斷連接與移除

  • 管道卡片上的**中斷連接…**會讓連接器忘掉該管道的連結或權杖。至於 Slack,App 會留在你的工作區中,直到你在那裡移除它(Slack › Settings › Manage apps)。
  • 從側邊欄那一列移除連接器,會刪掉它的機器與上面的一切:已連結的帳號與 Slack 權杖。連結到你自己帳號的裝置,會一直列在你的手機上,直到你在那裡移除它。

隱私與安全

  • 只有你能到達總機: 你自己的號碼(一個 Bromure 聯絡人)、你自己與自己的聊天,或你已配對的 Slack 帳號。其他一切都會在總機可能看見之前就被連接器丟掉。
  • 你的訊息金鑰與權杖留在連接器的機器上。 Bromure 的其餘部分從不持有它們。
  • 總機傳給你的,只有它選擇轉述的內容。 你機器裡的憑證都是替身,從不是真正的祕密。見憑證與線路邊界。