CLI、API 与 MCP
应用能做的一切,也都能在不打开窗口的情况下操作。应用的二进制文件——位于 Bromure Agentic Coding.app/Contents/MacOS/ 内的 bromure-ac——同时也是一个多命令 CLI、一个 HTTP 控制平面、一个供外部 AI 工具使用的 MCP 服务器,以及一个 AppleScript 目标。在每台虚拟机内部,一组内置的 MCP 服务器让代理拥有自己的 Bromure 视图。本章是这一切的参考资料。
由外而内,这些接口依次为:
bromure-cli命令行——类似 Docker/kubectl 的 CLI,用于机器、虚拟机、终端、命令、追踪、模型、远程访问和注册。- 控制平面——以 HTTP 上的 JSON 提供相同的操作,位于仅限所有者的 Unix 套接字上,并可选择位于环回 TCP 端口上。
- AC MCP 服务器(
bromure-ac mcp)——让你 Mac 上的 AI 工具(Claude Code、Claude Desktop)管理应用。 - 客户机内的 MCP 服务器——内置于每台虚拟机:浏览器、自动化、基础设施、委派,以及供特定会话使用的任务看板和总机。
- AppleScript——Bromure AC Suite 字典。
在本章和 CLI 中,机器都称为工作区(它在设置编辑器和命令行中的名称)。代理对话意义上的会话,通过 /agent-sessions 路由访问;较旧的 /sessions 路由,以及 CLI 和 AppleScript 中的 session 一词,指的是机器的窗口。
控制平面:套接字与 API
每个接口都通过以下两种传输方式之一,以 HTTP 与运行中的应用通信:
| 传输方式 | 位置 | 访问门控 | 默认开启 |
|---|---|---|---|
| 控制套接字 | ~/Library/Application Support/BromureAC/control.sock(Unix 域,HTTP/1.1) | 文件权限——套接字为 0600 模式,仅所有者可访问。能访问到该文件即是授权,Docker 套接字风格。 | 是,只要应用或无头代理在运行 |
| 自动化 API | 127.0.0.1:9223(TCP) | 默认仅限环回;大多数控制路由还需要环境变量 BROMURE_DEBUG_CLAUDE,有些则永远不会通过 TCP 提供(请参阅认证模型) | 否——需在 偏好设置 › 自动化 中选择启用 |
CLI 永远不会直接与虚拟机通信。每个子命令都是控制套接字上的轻量 HTTP 客户端,因此相同的命令在本地可用,而且——当套接字通过 SSH 隧道传输时——也能从富客户端对远程实例使用。当你运行需要代理的命令、而没有代理在运行时,CLI 会自动启动一个无窗口的后台代理(bromure-ac run --headless),并等待最多 40 秒让它响应 /health。只读命令(vm ls、describe、trace …)不会自动启动;它们会改为显示 No bromure-ac agent running.。
注: 只要应用在运行,控制套接字就始终可用,且与 启用自动化服务器 开关无关。该开关只控制端口 9223 上的 TCP 监听器。使用 CLI 不需要启用自动化 API。
bromure-cli 命令行
你可以用包内的完整路径调用二进制文件,但短名称更方便。在应用菜单中选择 Bromure Agentic Coding › 安装命令行工具…。警告 安装“bromure-cli”命令行工具? 会说明它会在 /usr/local/bin/bromure-cli 创建符号链接,并需要输入一次管理员密码;点按 安装(或 取消)。成功后,命令行工具已安装 会提示你运行 bromure-cli --help。应用启动时不会再主动提供此安装——菜单项是唯一的途径,而且你随时都能再次运行(例如在移动应用之后)。
同一个二进制文件会根据调用时使用的名称而表现不同:
- 以
bromure-cli调用时,它会隐藏应用内部命令——镜像管理(init、info、reset和发布流水线工具)、mcp服务器,以及 GUI 默认的run——只公开面向终端的组(Workspaces、Tracing、Local inference、Enterprise features、remote)。单独运行bromure-cli会显示帮助,而不会打开应用。 - 以
bromure-ac调用时(应用包内的二进制文件),所有功能都可用,默认子命令是会打开 GUI 的run。
以下示例使用 bromure-cli;只有它才公开的命令,请使用完整路径 …/MacOS/bromure-ac。
凡是出现工作区参数的地方,命令都接受工作区的 ID、短 ID 前缀或其名称。命令组 vm 和 workspaces 互为别名。机器是什么,以及它与会话的关系,请参阅机器。
应用与后台代理
| 概要 | 作用 |
|---|---|
bromure-ac run [--headless] | 默认(隐藏)子命令——打开 GUI。--headless 会运行无窗口的菜单栏辅助代理;CLI 为提供控制套接字而自动启动的就是它。 |
镜像管理
基础镜像只需安装一次。这些命令只存在于 bromure-ac 名称下。
| 概要 | 作用 |
|---|---|
bromure-ac init [--build-local] | 安装 Ubuntu 基础镜像:下载预构建镜像,下载失败时回退到本地构建。--build-local 强制本地构建。 |
bromure-ac info | 显示基础镜像的版本、虚拟大小、磁盘上大小和路径。 |
bromure-ac reset [--yes] | 删除基础镜像(磁盘、EFI 变量、版本戳、状态),让下一次 init 从头开始;除非加上 --yes,否则会要求确认。 |
bromure-ac init-foss-image --output <dir> | 仅限发布流水线——将可再分发、仅含自由软件的基础镜像构建到 <dir>。 |
bromure-ac verify-image --disk <path> [--timeout 300] | 仅限发布流水线——以无界面方式启动一个一次性克隆,并要求在超时前出现串口登录提示。 |
注: 如果不存在基础镜像,打开 GUI 会带你进入引导向导,并就地安装镜像——请参阅安装与首次运行。
工作区与虚拟机控制
这是核心命令组。vm run 刻意采用 Docker 风格:它启动一个工作区,并将你的终端交给客户机共享的 bromure tmux 会话。
| 概要 | 作用 |
|---|---|
bromure-cli vm ls | 列出每个工作区及其实时状态(off / suspended / booting / running)、运行时长、窗口附加状态、以树形显示的 tmux 标签页(* 标记活动标签页)以及正在运行的 Docker 容器。 |
bromure-cli vm run [<workspace>] [-v <dir>]… [--name N --tool T --auth A --api-key K] [--memory GB] [-d] [--rm] | 启动某个工作区的虚拟机,或临时创建一个一次性工作区。默认:将你的终端附加到客户机 tmux。 |
bromure-cli vm attach <vm> [<tab#> | containers:<name> [-- <shell>]] [-w] | 将终端附加到虚拟机的 tmux(可选择跳转到某个标签页),通过 docker exec -it 进入正在运行的容器(默认 shell 为 bash),或使用 -w/--window 打开/重新附加 GUI 窗口。 |
bromure-cli vm exec <vm> [-i] [-t] [--timeout 600] -- <command…> | 在虚拟机内运行命令(kubectl 风格,位于 -- 之后)。-it 打开一个交互式 pty;配合 -it 省略命令即可获得一个 shell。客户机退出码会被传递。 |
bromure-cli vm kill <vm> [--suspend] | 停止虚拟机:正常关机,或使用 --suspend 挂起(将 RAM 保存到磁盘)。 |
bromure-cli vm reboot <workspace> [--hard] | 就地重启正在运行的工作区;默认为正常重启,--hard 会立即将其拆除。 |
bromure-cli vm describe <workspace> | 打印工作区的设置,以及运行时的实时运行时详情(状态、IP、vCPU、Fusion 状态、来自客户机 df 的磁盘使用情况、标签页、容器、使用中的内存)。 |
bromure-cli vm ports <workspace>(或 vm <workspace> -L) | 显示正在运行的工作区的监听端口(以 root 身份实时执行 ss):PORT、PROTO、ADDRESS、PROCESS,并标记仅环回的绑定。 |
bromure-cli vm fsck <workspace> [--repair] [--home] | 从 Mac 检查已停止工作区的系统磁盘——或加上 --home 检查其主目录镜像——无需虚拟机,也无需额外工具。--repair 会重放文件系统日志,并清除过时的错误标志。请参阅从命令行检查磁盘。 |
bromure-cli workspaces create [--name N] [--tool T] [--auth A] [--api-key K] [--memory GB] [--color C] [-v <dir>]… [--generate-ssh] [--from-json <file|->] | 以无头方式创建工作区。--from-json 应用完整的 profile JSON 文档(命令行标志会覆盖匹配的字段);--generate-ssh 生成一个宿主机端 SSH 密钥并打印公钥。 |
bromure-cli workspaces edit <workspace> [--from-json <file|->] | 获取工作区的完整配置,在 $VISUAL/$EDITOR(回退为 vi)中打开,并将更改保存回去。机密显示为空白——留空即保留,输入即替换。在编辑器中删除一个键会清除该字段。--from-json 以非交互方式应用一个文档;它可以只包含部分内容——缺失的键保留原值,显式的 null 则清除它。 |
bromure-cli workspaces rm <workspace> [-f] | 在 y/N 确认后删除工作区及其所有数据(磁盘 + home),使用 -f 可跳过确认。 |
bromure-cli workspaces ssh-keygen <workspace> | 为工作区生成一个新的宿主机端 SSH 密钥,并打印用于你的 Git 宿主的公钥。 |
一些值得了解的操作细节:
vm run标志。--tool接受代理 ID:claude、codex、grok、kimi或omp。--auth为token、subscription、bedrock或local。无法识别的值会产生错误并列出有效值,例如Invalid --tool “gpt” — expected one of: claude | codex | grok | kimi | omp.;workspaces create也以相同方式检查--tool和--auth。-v/--volume <hostdir>会把宿主机文件夹挂载到客户机的~/<basename>(可重复,最多 8 个)。-d/--detach会启动虚拟机后直接返回,而不附加。--rm会在虚拟机停止时删除工作区及其磁盘。用Ctrl-b d从已附加的 tmux 分离——虚拟机会继续运行。- 代理来自模型。 工具和认证标志只会为新工作区提供初始值。每个代理实际使用的模型和提供方,来自 偏好设置 › 模型 以及工作区自己的模型面板——请参阅模型与提供方。
- 感知 TTY。 将终端交给 tmux 的 Docker 式默认行为只在真正的终端上适用;以管道或脚本调用时,行为就如同传入了
-d。 workspaces create的值。 颜色为blue、red、green、orange、purple、pink、teal或gray。- 编辑时留空保留。
workspaces edit导出整个配置并将机密置空;保存回去的文档中若某机密为空白,则保留已存储的值,因此往返操作绝不会清除你的密钥。未改动的缓冲区不会保存任何内容;无效的 JSON 会中止操作。 - Exec 等待。
vm exec最多等待 10 秒等待客户机 shell 代理;返回502意味着虚拟机可能未运行,或名称不匹配。在已附加会话期间触发的批准提示会呈现在你的终端上(参见附加终端上的许可),绝不会出现在客户机内部。
从命令行检查磁盘
vm fsck 是 ext4 浏览器中 运行 fsck…,以及启动因文件系统错误而停止时应用显示的 修复磁盘 按钮的可脚本化对应版本。它使用 Bromure 自己的 ext4 检查器,因此无需安装任何东西。
bromure-cli vm kill "Web app" # the workspace must be stopped
bromure-cli vm fsck "Web app" # check the system disk, report only
bromure-cli vm fsck "Web app" --repair # replay the journal, clear the error flag
bromure-cli vm fsck "Web app" --home # check the home image instead
工作区运行时,它会拒绝运行。输出会以下列其中一个摘要结尾:“Filesystem is clean.”、“Filesystem repaired; it is now consistent.”或“Filesystem has errors this checker cannot repair.”。未加 --repair 的检查如果发现问题,会建议加上 --repair 重新运行。只要仍有错误,命令就会以状态 4 退出。检查器的范围和限制,请参阅高级。
模型、路由与 Fusion
模型和提供方设置在模型与提供方中说明,多模型综合则在 Fusion 中说明;CLI 的开关如下:
| 概要 | 作用 |
|---|---|
bromure-cli model catalog|ls|pull|use|rm … | 管理设备端 MLX 模型——浏览精选目录(带内存适配和工具调用徽章)、以实时进度下载、为运行中虚拟机的工作区设置当前模型、移除。 |
bromure-cli vm fusion enable|disable <vm> | 在运行中的虚拟机上启用或停用 Fusion。工作区必须配置两个或以上模型。on/engage 和 off/disengage 也被接受为同义词。 |
bromure-cli vm routing cloud|local <vm> | 设置运行中虚拟机的 LLM 后端路由:代理的云提供方,或本地模型。 |
追踪检查
这些命令读取各工作区的代理服务器追踪。除非工作区已启用追踪,否则不会返回任何内容——请参阅追踪设置——完整说明请见追踪与审计。
| 概要 | 作用 |
|---|---|
bromure-cli trace ls [workspace] [--limit 50] | 列出最近的请求:TIME / HOST / METHOD / STATUS / REQ / RESP / LAT / FLAGS(标志包括 swap×N、LEAK×N、conv)。 |
bromure-cli trace summary [workspace] | 汇总总计、状态类别、交换/泄漏/对话计数以及排名靠前的主机。 |
bromure-cli trace hostnames [workspace] | 列出各个不同的主机及其请求计数。 |
bromure-cli trace leaks [workspace] | 显示疑似凭据泄漏的请求(标头、预览、可疑度)。 |
bromure-cli trace clear [-f] | 在 y/N 确认后清除内存中和磁盘上的追踪历史。 |
远程访问
可选的 SSH 前门默认关闭,完整说明请见远程访问与客户端。所有操作都经由控制套接字通过运行中的应用进行。
| 概要 | 作用 |
|---|---|
bromure-cli remote [status] | 默认子命令——打印启用/运行状态、绑定与端口、认证方法、主机密钥指纹、登录用户、一条现成的连接命令以及授权密钥。 |
bromure-cli remote enable [--port 2222] [--bind 0.0.0.0] [--[no-]password] [--[no-]pubkey] | 启用 SSH 服务器。至少必须保留一种认证方法。 |
bromure-cli remote disable | 关闭 SSH 服务器。 |
bromure-cli remote key add <key|path> / key [ls] / key rm <index|fingerprint> | 管理授权公钥(ls 为默认)。 |
企业注册
登录到 bromure.io… 表单的 CLI 对应命令,用于脚本化的设备置备。参见企业。
| 概要 | 作用 |
|---|---|
bromure-cli enroll --code <6-word-code> [--server-url URL] [--device-name NAME] | 使用管理员生成的代码将此 Mac 注册到 bromure.io 工作区。服务器默认为 $BROMURE_MANAGED_URL 或 https://bromure.io/api;设备名称默认为 Mac 的主机名。 |
bromure-cli unenroll [--force] | 从已注册的工作区退出登录(除非使用 --force,否则会请求 y/N)。 |
bromure-cli enrollment-status | 打印注册状态(工作区、用户、安装 id、设备、服务器、注册日期、bearer/leaf 证书是否存在)。“not enrolled” 以 0 退出,因此自动化不会将其视为失败。 |
集成与内部命令
| 概要 | 作用 |
|---|---|
bromure-ac mcp [--debug] [--api-url http://127.0.0.1:9223] | 以 stdio 为 AI 工具运行 AC MCP 服务器。请参阅 AC MCP 服务器。 |
__remote-menu、__attach-window、__fatclient…、__forward…、__dial、__tunnel-helper | 内部入口点(SSH ForceCommand TUI、终端字节泵,以及富客户端的隧道辅助程序)。不供交互使用。 |
远程 TUI (__remote-menu)
启用 SSH 远程访问后,每次远程登录都会(通过 ForceCommand)被强制导入一个手工打造的 ANSI 终端 UI,而不是 shell——一个用方向键和数字操作的备用屏幕、256 色菜单,可在任何 SSH PTY 上工作(请使用 ssh -t)。它以菜单形式呈现 CLI:
- 工作区——用单屏表单创建(Name、Tool、Auth、API key、Memory、Color、Folders、Generate SSH、Full settings…、Create)、各工作区的操作(运行中的工作区有 Attach、New tab、Describe、Configure…、Fusion、Routing、Worktrees…、Reboot…、Suspend、Kill;已关闭的有 Start、Describe、Configure…、Delete),以及原始表格视图。Configure… 以文本表单提供设置编辑器的各个面板;由于模型是在应用中选择的,其 Models 表单为只读(服务器的提供方,以及工作区是否覆盖它们)。
- 模型 — 已安装的模型和下载目录;选择未安装的模型时会提供带实时进度的内联
model pull。 - 追踪 — 摘要 / 主机名 / 泄漏 / 最近 / 清除。
当你附加到工作区的 tmux 时,一组神奇组合键(默认为 Ctrl-],显示在横幅中)会调出由宿主机绘制的控制器覆盖层:标签页树、New tab、Worktrees…、Fusion、Routing、Edit settings…、Reboot…、Suspend、Disconnect。客户机永远看不到触发键——可用 remote/overlay-key 文件或 $BROMURE_OVERLAY_KEY 覆盖。Ctrl-b d 会断开 tmux 并返回菜单。远程 TUI 操作的是机器及其终端;代理会话、房间和总机则改由富客户端访问。完整的远程说明请见远程访问与客户端。
环回自动化 API
控制平面也可以通过 TCP 以 HTTP 上的 JSON 暴露,供任何语言编写脚本使用。它默认关闭。
启用它
打开 偏好设置… › 自动化(⌘,)——即 自动化 API 与 MCP 服务器 面板。
- 打开 启用自动化服务器。开启时,窗格显示 正在监听 127.0.0.1:9223;关闭它会立即停止服务器。
- 根据需要设置 端口(说明文字为 (默认:9223))和 绑定地址(默认为
127.0.0.1)。端口和绑定地址会在服务器下次启动时生效——关闭再打开开关即可立即应用。
你也可以不使用 GUI 来切换该开关:
defaults write io.bromure.agentic-coding automation.enabled -bool true
警告: 将 绑定地址 设置为
127.0.0.1以外的任何值都会将 API——以及它所支撑的 MCP 服务器——暴露到网络,窗格会警告 非环回绑定会将 API 暴露到网络。MCP 服务器没有认证。 除了环回边界和下文的BROMURE_DEBUG_CLAUDE门控之外,TCP 监听器上没有任何认证。除非你有明确且可信的理由,否则请将绑定地址保持在环回上。
认证模型
TCP 监听器和控制套接字提供相同的路由,但访问权限不同:
| 路由组 | 控制套接字 | 自动化 API(TCP 环回) |
|---|---|---|
GET /health、GET /profiles、GET /vms、GET/POST /sessions | 允许 | 允许 |
工作区的创建和编辑(POST /profiles、/profiles/<id>…)、虚拟机控制和 exec(POST /vms、/vms/<id>/…)、/trace、/app/state、/preferences、/models/settings、代理会话、房间、委派、任务、自动化、集群和注册表 | 允许 | 应用需设置 BROMURE_DEBUG_CLAUDE |
/state、/state/subscribe、/remote…、/grid-layout、/workspaces、/subscriptions/…、/models/<action>、/connector | 允许 | 永不——仅限控制套接字 |
换句话说:控制套接字是完全访问、仅限所有者的路径;TCP API 只在环回接口上开放安全的子集,其他一切都放在调试标志之后。路径段只进行一次百分号编码(因此含空格的工作区名称也能工作)。
用于脚本编写的端点
最有用的路由:
| 端点 | 用途 |
|---|---|
GET /health | 存活状态,外加 debugEnabled。 |
GET /state | 一次性的镜像快照:工作区、虚拟机、网格布局、自动化、pendingPrompts 等。 |
GET /state/subscribe | /state 的推送形式:连接保持打开,每当状态变化就流式传输一份新的快照。富客户端用它代替轮询。 |
GET /vms / POST /vms | 列出运行中的虚拟机;从工作区引用或带挂载点的内联规格启动虚拟机(即 vm run 调用的)。 |
POST /vms/<id>/exec | 在虚拟机中运行命令;interactive 会把连接接管为原始的分帧 pty 流。 |
GET /profiles / POST /profiles | 列出工作区;从 JSON 文档创建一个。 |
GET / PUT /preferences | 读取或替换偏好设置的 Defaults 模板(读取时清空机密,写入时若留空则保留)。这就是富客户端的偏好设置窗口在远程主机上编辑的内容。 |
GET / PUT /models/settings | 读取或替换全局模型设置(偏好设置 › 模型),密钥会被遮蔽。 |
POST /subscriptions/register / POST /subscriptions/forget | 在这台主机上为客户端启动提供方登录({"provider": …, "profileId": …};登录 URL 会通过 /state 返回),或忘记已保存的登录。 |
POST /agent-sessions/start | 启动代理会话(profile、tool,以及可选的文件夹、仓库或开场消息)。 |
POST /agent-sessions/<id>/<action> | 对会话执行操作:send、keys、resume、close、rename、nickname、archive、unarchive、delete、review,以及分支操作(worktree、branch-merge、branch-pr、branch-discard、branch-keep、branch-decline)。 |
GET /agent-sessions/<id>/transcript、GET /agent-sessions/<id>/pending | 会话的对话(base64 JSONL),以及它正在等待的内容(一个问题及其选项)。 |
POST /agent-sessions/switchboard | 启动或显示总机。 |
POST /agent-rooms/create|move|group、POST /agent-rooms/<id>/rename|color|layout|archive|unarchive|ungroup|delete|switchboard | 创建和编辑房间。 |
POST /delegations/request、POST /delegations/<id>/<action>、GET /delegations/<id>/file | 跨主机委派:一台主机的会话询问另一台主机上的会话,然后发送、回答、调整方向、结束或取消,并获取附加的文件。 |
GET / POST /tasks、/tasks/<id>/… | 读取和操作编码任务看板。 |
GET / POST /k8s、/k8s/<id>/<action>、POST /registries、/registries/<id>/<action> | 创建和操作 Kubernetes 集群与注册表。 |
GET /automations / POST /automations/<id>/run | 读取和操作计划自动化(请参阅通过 API 控制自动化)。 |
POST /prompts/<id>/answer | 回应队列中的生命周期提示(请参阅回应待处理的提示)。 |
由于控制套接字路径包含空格,请先将其捕获到一个变量中:
SOCK="$HOME/Library/Application Support/BromureAC/control.sock"
# Full mirror snapshot (control socket only)
curl --unix-socket "$SOCK" http://localhost/state
# List running VMs
curl --unix-socket "$SOCK" http://localhost/vms
# Boot a workspace by name
curl --unix-socket "$SOCK" -X POST http://localhost/vms \
-d '{"profile":"Web app"}'
# Answer a queued lifecycle prompt with one of its offered button labels
curl --unix-socket "$SOCK" -X POST http://localhost/prompts/PROMPT_ID/answer \
-d '{"choice":"Not Now"}'
启用 TCP API 之后,安全的子集就能通过它工作——例如,列出工作区和打开机器的窗口都不需要调试标志:
curl http://127.0.0.1:9223/profiles
curl -X POST http://127.0.0.1:9223/sessions -d '{"profile":"Web app"}'
注: 控制平面的路由是与富客户端共享的集成接口,而不是有版本管理的公开 API;其请求和响应的格式可能在版本之间变化。上述 CLI 命令才是用脚本操作 Bromure 的稳定方式。仅供调试的路由、环境变量和文件位置都整理在附录中。
AC MCP 服务器 (bromure-ac mcp)
bromure-ac mcp 会运行一个 stdio JSON-RPC MCP 服务器(服务器名称 bromure-ac),让你 Mac 上的 AI 工具管理应用。它封装了 HTTP 自动化 API 和 AppleScript,因此请先启用自动化服务器——列表和窗口工具会调用位于 --api-url(默认 http://127.0.0.1:9223)的 HTTP API。它无法以 bromure-cli 名称使用。
它暴露的工具:
bromure_ac_list_profiles、bromure_ac_list_sessionsbromure_ac_open_session(打开工作区的窗口;最多等待 30 秒)、bromure_ac_close_sessionbromure_ac_get_profile、bromure_ac_set_profile(原子 JSON 替换,保留 id)bromure_ac_get_profile_setting、bromure_ac_set_profile_setting
使用 --debug(并在应用上设置 BROMURE_DEBUG_CLAUDE)时,它会额外添加 bromure_ac_app_state、bromure_ac_vm_exec、bromure_ac_vm_read_file 和 bromure_ac_vm_write_file。
若要接入 Claude Code,请将以下内容添加到 ~/.config/claude-code/.mcp.json(或你客户端的对应文件)。这正是自动化面板的 MCP 客户端配置 部分所显示的片段:
{
"mcpServers": {
"bromure-ac": {
"command": "/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-ac",
"args": ["mcp"]
}
}
}
注意:
get/setprofile 工具会调用osascript(针对运行中应用的 AppleScript),因此 GUI 应用必须在运行,且 macOS 可能会为自动化权限提示一次。除非设置了BROMURE_DEBUG_CLAUDE,否则 profile JSON 在传输时机密会被置空。
虚拟机内的 MCP 服务器
与 AC MCP 服务器无关,Bromure 会为每台虚拟机内的代理提供一组内置的 MCP 服务器——无需任何配置。每一个都是小型的 Python stdio 垫片,以只读方式放在客户机的 /mnt/bromure-meta/ 下;垫片通过 vsock 连接宿主机,断线时会无限重连,因此代理永远不会失去其工具。工具由宿主机提供,每次调用都在宿主机上检查:代理只能看到并操作其自身机器和会话有权访问的内容。
| vsock 端口 | 服务器 | 谁会获得 | 工具 |
|---|---|---|---|
| 5830 | browser | 每个代理 | 操作机器内嵌 Chromium 的 23 个 browser_* 工具(请参阅下文)。 |
| 5831 | task board | 仅限运行编码任务的代理 | board_get_task、board_set_plan、board_create_subtasks、board_set_dependencies、board_ready_for_review、board_report_landing。 |
| 5832 | plan stream | 编码任务的规划运行 | 不是 MCP 服务器:任务的规划运行把计划流式传输到看板所用的通道。 |
| 5833 | automations | 每个代理 | automation_list、automation_get、automation_create、automation_update、automation_delete、automation_run——仅限代理自身机器的自动化。请参阅自动化。 |
| 5834 | infrastructure | 每个代理 | infrastructure_overview、cluster_status、cluster_create、cluster_start、registry_status、registry_create、registry_start——仅限机器有权访问的集群和注册表。请参阅 Kubernetes 集群与注册表。 |
| 5835 | delegation | 每个代理会话 | delegate、request、list_peers、list_delegations、read_inbox、wait、ask、report、deliver、answer、steer、close_delegation、cancel、worktree_create、worktree_status、worktree_merge。垫片会告诉宿主机自己在哪个 tmux 窗口中运行,因此代理无法冒充另一个会话。请参阅代理协同工作。 |
| 5836 | switchboard | 仅限总机会话 | list_sessions、read_session、pending_question、list_workspaces、next_events、send_to_session、answer_question、press_keys、start_session、resume_session、message_user、archive_session。 |
browser、automations、infrastructure 和 delegation 服务器会写入每个代理自己的 MCP 配置,与你在机器的 MCP 面板中添加的服务器并列(MCP 设置)。task board 和 switchboard 服务器只会传给需要它们的运行。
browser 服务器
browser 服务器操作机器内嵌的 Chromium,后者在自己的一次性虚拟机中运行。它的 23 个工具涵盖浏览和检查——browser_navigate、browser_new_tab、browser_list_tabs、browser_activate_tab、browser_close_tab、browser_back、browser_forward、browser_reload、browser_screenshot(含整页选项)、browser_evaluate、browser_get_text、browser_get_html、browser_get_links、browser_click、browser_fill、browser_type、browser_press_key、browser_wait_for、browser_network、browser_network_summary、browser_clear_network、browser_console,以及 browser_pick_element(60 秒的交互式元素选择器)。
在浏览器关闭时调用工具,会打开浏览器并等待冷启动。由于浏览器是独立的虚拟机,服务器的指示会告诉代理用机器的局域网 IP(hostname -I)访问其机器上的开发服务器,绝不要用 localhost。完整说明请见嵌入式浏览器。
注: 在富客户端上,代理的浏览器 MCP 流可以通过 SSH 连接传输,让远程代理操作你在本地看到的浏览器窗格。请参阅远程访问与客户端。
你所添加 MCP 服务器的 OAuth
你在编辑器中添加的 HTTP MCP 服务器可以通过宿主机端的 OAuth 代理进行认证:它执行 RFC 8414 发现和 RFC 7591 动态客户端注册(以 Bromure AC 身份),在你的系统浏览器中运行 PKCE 授权码流程,并在环回监听器上(端口 28500–28599)提供回调。成功页面显示 已授权 — 您可以关闭此标签页并返回 Bromure AC。 整个流程在宿主机上运行,因此虚拟机永远看不到真正的 OAuth 凭据。
AppleScript (Bromure AC Suite)
脚本字典 Bromure AC Suite 是另一个自动化接口——适用于编排,以及需要窗口 ID 的截图工具。从脚本编辑器或 osascript 以 application "Bromure Agentic Coding" 为目标。它涵盖:
- 配置文件——
list profiles、create ac profile <name> [color <c>](返回 UUID)、delete ac profile <name|uuid>,以及通过get profile json/set profile json进行完整文档的往返(整个配置文件;保留 ID;空白字段会并入已存储的机密)。 - 按字段设置 —
get profile setting … key …/set profile setting … key … to value …。 - 编辑器窗口 —
open profile manager、open ac profile editor、close ac profile editor、select editor category <key>,以及get editor window id/get main window id(用于screencapture -l的CGWindowID)。 - 机器窗口——
open ac session、close ac session、list ac sessions。 - 应用状态和设置 —
get app state(JSON),以及针对键automation.enabled、automation.port、automation.bindAddress、remoteAccess.enabled、remoteAccess.port、remoteAccess.bindAddress、managed.serverURL和managed.acIngestURL的get ac app setting/set ac app setting。设置automation.enabled会实时切换 HTTP 服务器。
例如,打开机器的窗口:
osascript -e 'tell application "Bromure Agentic Coding" to open ac session "Web app"'
注意: 除非设置了
BROMURE_DEBUG_CLAUDE,否则 profile JSON 在传输时机密会被清除。通过set profile setting将apiKey设置为空字符串会清除该密钥,而不是保留它——这与 JSON 往返桥接的留空保留行为不同。语言区域切换刻意不可脚本化;请改为使用例如-AppleLanguages "(fr)"重新启动应用。
计划自动化
计划自动化是绑定到一台机器、周期性且无人值守的代理运行。自动化从自动化看板(⇧⌘A,或边栏的 自动化 部分)创建和管理,代理也能通过上述 automations MCP 服务器管理其自身机器的自动化。整个功能——触发条件、计划、串联、强制的注入检查屏幕、运行历史——在自动化中说明。本节涵盖控制平面的接口:通过 API 操作自动化、回应无人值守启动可能引发的决策提示,以及在已附加终端上的同意机制。
通过 API 控制自动化
| 端点 | 用途 |
|---|---|
GET /automations | 列出自动化及其运行历史。 |
POST /automations | 创建或更新(upsert)一个自动化。 |
DELETE /automations/<id> | 删除一个自动化。 |
POST /automations/<id>/run | 立即触发它(不改变计划)。 |
POST /automations/<id>/toggle | 暂停或恢复它。 |
POST /automation-runs/<run-id>/acknowledge | 将失败或受阻的运行从看板的 需要关注 栏中移除。 |
GET /automation-runs/<run-id>/transcript | 已完成运行的归档对话记录(base64)。 |
回应待处理的提示
某些生命周期决策——基础镜像升级提议、启动检查失败的磁盘、入侵警报、因入侵而清除——通常会以本地警报显示。当 Mac 前没有人能回应时(无界面代理,或由远程富客户端请求的启动),它们会改为进入队列:出现在 GET /state 的 pendingPrompts 下(每个都有 id、profileID、title、message 和按钮标签),并用 POST /prompts/<id>/answer 回应:
SOCK="$HOME/Library/Application Support/BromureAC/control.sock"
curl --unix-socket "$SOCK" -X POST http://localhost/prompts/PROMPT_ID/answer \
-d '{"choice":"Remind me later"}'
将提示本身的其中一个按钮标签作为 choice 传入。如果在提示超时前没有任何客户端回应,它会解析为其安全的后备选项——绝不是破坏性的选项(例如入侵警报会回退到关闭虚拟机)。如果完全没有客户端连接,则会立即采用后备选项。富客户端会把这些提示呈现为普通警报。
注: 自动化、委派和其他无人值守的启动绝不会等待提示。需要你回答的启动——被标记为遭入侵的机器,或仍在下载中的本地模型——会被拒绝,并在运行历史中附上清楚的原因(“The workspace is marked compromised — start it yourself to confirm the wipe.”)。已保存状态无法恢复的挂起机器,会以全新状态启动。
附加终端上的许可
当终端以交互方式附加到机器时——通过 vm exec -it、vm attach 或 SSH 附加——宿主机端的批准提示(凭据使用等)会显示在你的终端上,而不是客户机内。提示内容为 🔒 Bromure — approval required,附有编号选项和 Choice [1-N] (Enter or timeout = deny)。Enter、超时、EOF 或分离都表示拒绝,因此遭入侵的客户机永远无法伪造批准。之后会重绘客户机的 tmux。
调试端点 (BROMURE_DEBUG_CLAUDE)
在设置了 BROMURE_DEBUG_CLAUDE 的情况下启动应用,会解除 TCP 自动化 API 的调试闸门,让认证表格中间一行的路由也能通过 TCP 使用,包括下列调试路由(除非另有说明,否则在控制套接字上始终可用):
GET /debug/ui-shot?path=…&which=…——应用会把自己的窗口绘制成 PNG(无需屏幕录制权限),并返回子视图框架的转储;默认输出为/tmp/bromure-ui-shot.png。POST /debug/editor— 为截图工具驱动设置编辑器。POST /detect/prompt-injection— 运行真实的检测器并返回其判定(此路由即使在控制套接字上也需要调试标志)。
此标志还会让机密原样通过 AppleScript 和 MCP 的配置文件 JSON 桥接,且是 bromure-ac mcp --debug 的虚拟机工具所必需。GET /health 会报告 debugEnabled,让你知道应用处于哪种模式。
警告:
BROMURE_DEBUG_CLAUDE会移除通常让exec、虚拟机控制和原始配置文件机密远离环回 TCP API 的安全闸门。只在你能掌控的机器上用此标志运行应用,且绝不要与非环回的绑定地址一起使用——那会让任何能访问该端口的人获得完整的虚拟机 shell 访问、未遮蔽的机密和窗口截图。它不同于BROMURE_AC_DEBUG(stderr 事件日志)和BROMURE_CLI_DEBUG(CLI 套接字诊断),后两者是无害的日志开关。