总机与消息
有好几个代理在工作时,你不会想一个个点进每个会话,才知道哪一个需要你。总机就是一段关注其他所有会话的对话。它会告诉你什么在工作、什么卡住了、什么在等你。它把你的答复带到正确的会话,也会在你要求时启动、恢复或收起会话。
有了消息连接器,你也可以从手机或 Slack 和它说话。
总机
它出现在哪里
总机那一行位于会话列表的最上方,在房间与会话之上。当有两个以上的会话正在进行时它就会出现,也就是正在启动、工作中、就绪,或在等你。已暂停、已结束或已归档的会话不算。只要总机自己在忙或正在问你什么,这一行也会留着,所以它绝不会在回答途中消失。只有一个会话时,你已经在看那唯一重要的东西了,这一行就会退到一旁。
- 在总机第一次启动之前,这一行写着“一次询问你所有的会话”。点击它就会启动总机。
- 运行中时,这一行会给出摘要:“n 个需要你 · n 个工作中 · n 个就绪”。没有任何在进行时,它会写“关注你的会话”。
- 在折叠的侧边栏上,总机是顶部的一个魔杖图标,遵循同样的规则。它的工具提示会给出同样的摘要,例如“总机——1 个需要你 · 2 个工作中”。
点击那一行或魔杖,就会把总机的对话放上舞台。它就是一般的聊天:对它输入、附加文件、往回滚动。见聊天。
它是什么
在底层,总机是一个带有特殊角色的普通 Claude Code 会话:
- 它在你最后使用的那台机器上运行(机器在设置编辑器中就是工作区)。若你还没有任何会话,它会在第一台机器上运行。
- 它在文件夹
~/.bromure/switchboard中工作。 那里的CLAUDE.md就是它的任务说明,每次启动都会重写。 - 它是唯一拥有
bromure-switchboardMCP 服务器的会话(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 横幅:“连接器是新功能。你在这里连接的任何人都能和总机说话,而总机能对你的会话动手——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)聊天中和它说话。
- 没有别的要设置。用手机扫描二维码:
- Signal:设置 › 已关联的设备 › 关联新设备
- WhatsApp:设置 › 已关联的设备 › 关联设备
- WhatsApp 也提供改用配对代码。输入该账号的号码,点击获取代码,然后在手机上选改用电话号码关联并输入代码。
- 回复不会通知你。 Signal 与 WhatsApp 从不为你自己的聊天发通知,所以要打开它才看得到。
- 只有那个聊天会到达总机。关联设备也会收到你其他的对话,因为关联本来就是这样运作的。连接器会把它们丢掉,日志中只会留下“有一条消息被忽略”,绝不会留下内容。
与 Bromure 联系人聊天。 Bromure 会使用第二个账号,在你的聊天中像一个人一样出现,所以它的回复会通知你。
-
Signal 需要一个能收到一次短信或一次来电的备用电话号码:
- 输入 Bromure 的号码——那个备用的(国际格式),点击用短信发送验证码。
- 若 Signal 要求 captcha,点击打开 Signal 的 captcha 页面。解开之后,对 Open Signal 点右键、拷贝链接,粘贴进字段里。
- 若没收到短信(固话、部分 VoIP 号码),点击改为来电,Signal 会把验证码念出来。Signal 只会打给它先尝试发过短信的号码,所以这个按钮在短信之后才会启用。
- 点击我已收到验证码。输入验证码,以及你自己的号码——Bromure 唯一会回复的号码。点击验证。
-
WhatsApp: Bromure 无法创建 WhatsApp 账号。它关联到你为它准备的一个账号:
- 取得一个备用号码:第二张 SIM 或 eSIM,或一部固话(WhatsApp 可以用语音通话验证它)。
- 安装 WhatsApp Business,它可以在同一部手机上与你平常的 WhatsApp 并存,并用那个备用号码注册它。
- 输入你个人的 WhatsApp 号码。Bromure 只会回复来自这个号码的消息。点击我已备好第二个账号——继续。
- 用 WhatsApp Business 扫描二维码(设置 › 已关联的设备 › 关联设备),或使用配对代码。
然后从你个人的 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 并允许。若你的工作区需要管理员批准,就会等待他们。之后点击我已安装——继续。
-
粘贴两个令牌并点击连接:
- 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 会显示一组六位数代码。在 Slack 中打开(Apps 下的)Bromure,用私信把代码发给它。发出代码的人就成为 Bromure 在 Slack 上唯一会回复的人。 请自己发,不要分享出去。
- 代码有效 10 分钟。新代码可以再取一组。
- 若对该 App 发出多次错误代码,配对就会停止(“如果那不是你,你工作区里的其他人正在尝试”)。
配对完成后,Bromure 会在那个对话中给你发消息。从那时起,只有你的私信会到达总机。频道与其他所有人都会被忽略。
若你在配对之前就关闭面板,Slack 的卡片会显示“App 已设置——尚未与你的账号配对”,并提供配对…。
确认它能用
已连接渠道的卡片提供发送测试消息。用与自己聊天时,它会安静地落在你自己的聊天里,所以要打开来确认。
窗口底部的日志会记下连接器的步骤,以及每一条收到或被忽略的消息,但绝不记内容。
断开连接与移除
- 渠道卡片上的**断开连接…**会让连接器忘掉该渠道的关联或令牌。至于 Slack,App 会留在你的工作区中,直到你在那里移除它(Slack › Settings › Manage apps)。
- 从侧边栏那一行移除连接器,会删掉它的机器与上面的一切:已关联的账号与 Slack 令牌。关联到你自己账号的设备,会一直列在你的手机上,直到你在那里移除它。
隐私与安全
- 只有你能到达总机: 你自己的号码(一个 Bromure 联系人)、你自己与自己的聊天,或你已配对的 Slack 账号。其他一切都会在总机可能看见之前就被连接器丢掉。
- 你的消息密钥与令牌留在连接器的机器上。 Bromure 的其余部分从不持有它们。
- 总机传给你的,只有它选择转述的内容。 你机器里的凭据都是替身,从不是真正的秘密。见凭据与线路边界。