总机与消息

有好几个代理在工作时,你不会想一个个点进每个会话,才知道哪一个需要你。总机就是一段关注其他所有会话的对话。它会告诉你什么在工作、什么卡住了、什么在等你。它把你的答复带到正确的会话,也会在你要求时启动、恢复或收起会话。

有了消息连接器,你也可以从手机或 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)聊天中和它说话。

  • 没有别的要设置。用手机扫描二维码:
    • 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 扫描二维码(设置 › 已关联的设备 › 关联设备),或使用配对代码。

    然后从你个人的 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 的其余部分从不持有它们。
  • 总机传给你的,只有它选择转述的内容。 你机器里的凭据都是替身,从不是真正的秘密。见凭据与线路边界。