CLI、自动化与 MCP
应用中能做的一切,你也可以在不打开窗口的情况下完成。托管 GUI 的同一个二进制文件——bromure-cli,位于 Bromure Agentic Coding.app/Contents/MacOS/ 内——同时是一个功能完整的多命令 CLI、一个 HTTP 控制平面、两个 MCP 服务器、一部 AppleScript 词典和一个调度器。本章是所有这些的参考。
四个自动化界面构建在同一个控制平面之上:
bromure-cli命令行 — 一个 Docker/kubectl 风格的 CLI,用于创建工作区、启动虚拟机、附加终端、运行命令和读取追踪。- 自动化 API — 同一控制平面在环回接口上以 JSON-over-HTTP 形式暴露,可用任何语言编写脚本。
- MCP 服务器 — 一个 stdio 服务器,让 AI 代理(Claude Code、Claude Desktop)管理应用,以及一个
browser服务器,让代理驱动其工作区的嵌入式 Chromium。 - AppleScript — Bromure AC Suite 词典,用于 macOS 脚本编写和截图工具。
计划自动化——周期性、无人值守的代理运行——建立在同一控制平面之上,将在本章末尾介绍。
控制平面:套接字与 API
上述每一个界面最终都通过以下两种传输方式之一与运行中的应用进行 HTTP 通信:
| 传输方式 | 位置 | 访问门控 | 默认开启 |
|---|---|---|---|
| 控制套接字 | ~/Library/Application Support/BromureAC/control.sock(Unix 域,HTTP/1.1) | 文件权限——套接字为 0600 模式,仅所有者可访问。能访问到该文件即是授权,Docker 套接字风格。 | 是,只要应用或无头代理在运行 |
| 自动化 API | 127.0.0.1:9223(TCP) | 默认仅环回;自省和变更路由还额外需要 BROMURE_DEBUG_CLAUDE 环境变量(参见调试端点) | 否——需在 偏好设置 → 自动化 中主动启用 |
CLI 从不直接与虚拟机通信。每个子命令都是控制套接字之上的轻量 HTTP 客户端,因此相同的命令在本地有效,并且——当套接字通过 SSH 隧道转发时——也可从富客户端对远程实例生效。如果你调用一个需要代理的命令时没有代理在运行,CLI 会自动启动一个无窗口的后台代理(bromure-cli run --headless),并最多等待 40 秒等它响应 /health。只读命令(vm ls、describe、trace …)不会自动启动;它们会改为打印 No bromure-cli agent running.。
注意: 只要应用在运行,控制套接字始终可用,并且独立于 启用自动化服务器 开关。该开关仅控制端口 9223 上的 TCP 监听器。使用
bromure-cliCLI 不需要启用自动化 API。
bromure-cli 命令行
你可以通过完整的 bundle 路径调用该二进制文件,但应用提供了一次性安装短别名的选项。启动时它会显示一个提示——安装 “bromure-cli” 命令行工具?——带有 安装 / 暂不 / 不再询问 按钮。选择 安装 会将 /usr/local/bin/bromure-cli 符号链接到应用二进制文件(一次管理员提示)。在 bromure-cli 这个名称下,该二进制文件会隐藏应用内部命令——镜像管理、mcp 服务器和 GUI run 默认命令——并仅暴露面向终端的命令组(工作区、追踪、本地推理、企业、remote);直接运行 bromure-cli 会打印帮助而不是启动应用。以 bromure-cli 方式调用时,所有命令都可用,且默认子命令是 run(GUI)。下面的示例使用 bromure-cli;对于它所暴露的命令,可以自由地用 bromure-cli 替换。
在显示工作区参数的任何位置,命令都接受工作区 id、短 id 前缀或其 名称。工作区是工作区中所述的持久化虚拟机配置;vm 和 workspaces 命令组互为别名。
应用与后台代理
| 概要 | 作用 |
|---|---|
bromure-cli run [--headless] | 默认(隐藏)子命令——启动 GUI。--headless 运行一个无窗口的菜单栏辅助代理;这正是 CLI 为服务控制套接字而自动启动的代理。 |
镜像管理
基础镜像只安装一次。这些命令在 bromure-cli 别名下是隐藏的。
| 概要 | 作用 |
|---|---|
bromure-cli init [--build-local] | 安装 Ubuntu 基础镜像:下载预构建镜像,下载失败时回退到大约 10 分钟的本地构建。--build-local 强制进行本地构建。 |
bromure-cli info | 打印基础镜像的版本、虚拟大小、磁盘占用大小和路径。 |
bromure-cli reset [--yes] | 删除基础镜像(磁盘、EFI 变量、版本戳、状态),以便下一次 init 从头开始;除非使用 --yes,否则会请求确认。 |
bromure-cli init-foss-image --output <dir> | 仅发布流水线使用——将可再分发的纯自由软件基础镜像构建到 <dir>。 |
bromure-cli verify-image --disk <path> [--timeout 300] | 仅发布流水线使用——以无头方式启动一个一次性克隆,并要求在超时时间内出现串行登录提示。 |
注意: 没有
setup子命令——那属于姊妹产品 Bromure(浏览器)。Agentic Coding 的镜像安装命令是init。如果不存在基础镜像,启动 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 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 以非交互方式应用一个文档。 |
bromure-cli workspaces rm <workspace> [-f] | 在 y/N 确认后删除工作区及其所有数据(磁盘 + home),使用 -f 可跳过确认。 |
bromure-cli workspaces ssh-keygen <workspace> | 为工作区生成一个新的宿主机端 SSH 密钥,并打印用于你的 Git 宿主的公钥。 |
一些值得了解的操作细节:
vm run标志。--tool为claude、codex或grok;--auth为token、subscription或bedrock。-v/--volume <hostdir>将宿主机文件夹挂载到客户机的~/<basename>(可重复,最多 8 个)。-d/--detach启动虚拟机并返回,而不附加。--rm在虚拟机停止时删除工作区及其磁盘。使用Ctrl-b d从已附加的 tmux 分离——这会让虚拟机继续运行。- TTY 感知。 将终端交给 tmux 的 Docker 风格默认行为仅在真实终端上适用;管道或脚本化调用会静默地表现得如同你传入了
-d。 workspaces create认证。 对于create,--auth还接受local。颜色可为blue、red、green、orange、purple、pink、teal或gray。- 编辑时留空保留。
workspaces edit导出整个配置并将机密置空;保存回去的文档中若某机密为空白,则保留已存储的值,因此往返操作绝不会清除你的密钥。未改动的缓冲区不会保存任何内容;无效的 JSON 会中止操作。 - Exec 等待。
vm exec最多等待 10 秒等待客户机 shell 代理;返回502意味着虚拟机可能未运行,或名称不匹配。在已附加会话期间触发的批准提示会呈现在你的终端上(参见附加终端上的许可),绝不会出现在客户机内部。
模型、路由与 Fusion
本地推理在本地模型中有深入介绍,多模型综合在 Fusion 中介绍;CLI 的切换命令为:
| 概要 | 作用 |
|---|---|
bromure-cli model catalog|ls|pull|use|rm … | 管理本地 MLX 推理模型——浏览精选目录、带实时进度下载、按工作区选择、移除。 |
bromure-cli vm fusion enable|disable <vm> | 在正在运行的虚拟机上启用或停用 Fusion。要求工作区配置了两个或更多模型。 |
bromure-cli vm routing cloud|local|hybrid <vm> | 为正在运行的虚拟机设置 LLM 后端路由。 |
bromure-cli vm hybrid budget <tokens> <vm> | ttft <seconds> <vm> | split <percent> <vm> | 调整混合路由:每滚动 24 小时的云端令牌上限(0 = 无限制)、软性首个令牌时间回退阈值(默认 5 秒),以及固定到本地的新会话百分比(0–100)。 |
fusion 还接受 on/engage 和 off/disengage 作为同义词。
追踪检查
这些命令读取每个工作区的 MITM 会话追踪。除非工作区启用了追踪,否则它们不返回任何内容——参见追踪设置——完整内容见追踪。
| 概要 | 作用 |
|---|---|
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-cli mcp [--debug] [--api-url http://127.0.0.1:9223] | 在 stdio 上运行 AC MCP 服务器,供 AI 工具使用。参见 AC MCP 服务器。 |
bromure-cli __remote-menu、__attach-window、__fatclient…、__forward…、__dial、__tunnel-helper | 内部入口点(SSH ForceCommand TUI、终端字节泵和富客户端隧道助手)。不供交互使用。 |
远程 TUI (__remote-menu)
启用 SSH 远程访问后,每次远程登录都会被强制(通过 ForceCommand)进入一个手工编写的 ANSI 终端 UI 而非 shell——一个使用备用屏幕、256 色、由方向键和数字驱动的迷你 shell,可在任何 SSH PTY 上工作(使用 ssh -t)。它以菜单形式镜像整个 CLI:
- 工作区 — 通过单屏表单创建(名称、工具、认证、API 密钥、内存、颜色、文件夹、生成 SSH、完整设置…、创建)、按工作区的操作(对于正在运行的工作区:附加、新建标签页、描述、配置…、Fusion、路由、工作树…、重启…、挂起、终止;对于已关闭的工作区:启动、描述、配置…、删除),以及一个原始表格视图。配置… 会以原生方式重现每个 GUI 编辑器窗格。
- 模型 — 已安装的模型和下载目录;选择未安装的模型时会提供带实时进度的内联
model pull。 - 追踪 — 摘要 / 主机名 / 泄漏 / 最近 / 清除。
当你附加到某个工作区的 tmux 时,一个魔法组合键(默认 Ctrl-],显示在横幅中)会弹出一个由宿主机绘制的 控制器叠加层:标签页树、新建标签页、工作树…、Fusion、路由、编辑设置…、重启…、挂起、断开连接。客户机永远看不到触发键——可通过 remote/overlay-key 文件或 $BROMURE_OVERLAY_KEY 覆盖它。Ctrl-b d 会从 tmux 断开并回到菜单。完整的远程和富客户端说明,包括叠加层和连接设置,见远程访问。
环回自动化 API
控制平面也可以在 TCP 上以 JSON-over-HTTP 形式暴露,以便用任何语言编写脚本。它 默认关闭。
启用它
打开 Bromure → 偏好设置 → 自动化——即 自动化 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 环回) |
|---|---|---|
| Profile 和会话列表、会话打开/关闭 | 允许 | 允许 |
虚拟机控制、exec、/app/state、/debug/* | 允许 | 需要应用上设置 BROMURE_DEBUG_CLAUDE |
remote、/state、automations、grid-layout、prompts | 允许 | 仅控制套接字 |
换句话说:控制套接字是完全访问、仅所有者可用的路径;TCP API 在环回上开放安全子集,并将强大的路由置于调试标志之后。路径段采用单次百分号编码(因此带空格的工作区名称也能正常工作),并接受最大 8 MB 的请求体。
用于脚本编写的端点
最有用的路由:
| 端点 | 传输方式 | 用途 |
|---|---|---|
GET /health | 两者 | 存活性检查以及 debugEnabled。 |
GET /state | 套接字 | 一次性镜像快照:工作区、虚拟机、网格布局、自动化、pendingPrompts、vmnet 子网。 |
GET /vms | 两者 | 列出正在运行的虚拟机。 |
POST /vms | 两者(TCP 上受调试门控) | 从 profile 引用或内联规格加挂载启动虚拟机。 |
GET /sessions / POST /sessions | 两者 | 列出会话;为工作区打开一个会话。 |
GET /profiles / POST /profiles | 两者 | 列出工作区;从 JSON 文档创建一个(?full=1 返回整个机密置空的文档)。 |
POST /vms/<id>/exec | 两者(TCP 上受调试门控) | 在虚拟机中运行命令;interactive 会将连接劫持为原始的分帧 pty 流。 |
GET /automations / POST /automations/<id>/run | 套接字 | 读取并驱动计划自动化(参见计划自动化)。 |
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 (control socket — no debug flag needed here)
curl --unix-socket "$SOCK" http://localhost/vms
# Boot a workspace by name
curl --unix-socket "$SOCK" -X POST http://localhost/vms \
-d '{"profile":"Claude Dev"}'
# 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 使用——例如,列出和打开会话不需要调试标志:
# List sessions
curl http://127.0.0.1:9223/sessions
# Open a session for a workspace
curl -X POST http://127.0.0.1:9223/sessions -d '{"profile":"Claude Dev"}'
注意:
GET /vms(列出正在运行的虚拟机)可通过 TCP 自动化 API 使用,无需任何调试标志。变更虚拟机的路由——POST /vms(启动虚拟机)和POST /vms/<id>/exec——在 TCP 上需要BROMURE_DEBUG_CLAUDE;当你不想以调试模式运行应用时,请通过控制套接字驱动它们(如上所示)。完整的端点范围——包括工作树和标签页操作、/trace、/remote以及富客户端镜像路由——在附录中有汇总。
AC MCP 服务器 (bromure-cli mcp)
bromure-cli mcp 运行一个 stdio JSON-RPC MCP 服务器(服务器名称 bromure-cli),让 AI 工具管理应用。它封装了自动化 HTTP API 和 AppleScript,因此 请先启用自动化服务器——会话和 profile 列表工具会调用位于 --api-url(默认 http://127.0.0.1:9223)的 HTTP API。
它暴露的工具:
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(键包括name、color、comments、tool、authMode、apiKey、closeAction、memoryGB、folderPathsCount、mcpServerCount、keyboardLayoutOverride、keyRepeatDelayMs、keyRepeatRateHz)
使用 --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-cli": {
"command": "/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-cli",
"args": ["mcp"]
}
}
}
注意:
get/setprofile 工具会调用osascript(针对运行中应用的 AppleScript),因此 GUI 应用必须在运行,且 macOS 可能会为自动化权限提示一次。除非设置了BROMURE_DEBUG_CLAUDE,否则 profile JSON 在传输时机密会被置空。
工作区内浏览器 MCP 服务器
与 AC MCP 服务器分开,每个工作区代理都会自动获得一个 browser MCP 服务器——无需配置。它驱动工作区的嵌入式 Chromium,后者运行在自己的一次性虚拟机中。工作区编辑器的 MCP 窗格描述工作区自己的 MCP 服务器;无论你在那里添加什么,内置的浏览器服务器始终额外存在。
该服务器暴露 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 秒元素选择器)。
传输层是一个生成的 Python stdio 垫片 bromure-browser-mcp.py,以只读方式暂存到客户机的 /mnt/bromure-meta/。它通过 vsock 端口 5830 拨号连接宿主机,并在连接中断时永久重连,因此 MCP 客户端永远不会撤回这些工具。对已关闭的浏览器发起的工具调用会将其打开并等待冷启动。由于浏览器是一个独立的虚拟机,服务器指令会警告代理通过工作区的 LAN IP(hostname -I)访问工作区开发服务器,而绝不要用 localhost。
注意: 在富客户端上,代理的 browser-MCP 流可以通过 SSH 通道拼接,使远程代理驱动你在本地看到的浏览器窗格。一次只有一个中继处于活动状态。参见远程访问。
你在编辑器中添加的 HTTP MCP 服务器可以通过宿主机端的 OAuth 代理进行认证:它执行 RFC 8414 发现和 RFC 7591 动态客户端注册(以 Bromure AC 身份),在你的系统浏览器中运行 PKCE 授权码流程,并在环回监听器上(端口 28500–28599)提供回调。成功页面显示 已授权 — 您可以关闭此标签页并返回 Bromure AC。 整个流程在宿主机上运行,因此虚拟机永远看不到真正的 OAuth 凭据。
AppleScript (Bromure AC Suite)
脚本词典 Bromure AC Suite 是第三个自动化界面——对于编排以及需要窗口 ID 的截图工具很有用。从 Script Editor 或 osascript 中以 application "Bromure Agentic Coding" 为目标。它涵盖:
- Profiles —
list profiles、create ac profile <name> [color <c>](返回一个 UUID)、delete ac profile <name|uuid>,以及通过get profile json/set profile json进行完整文档往返(整个 Codable profile;保留 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 "Claude Dev"'
注意: 除非设置了
BROMURE_DEBUG_CLAUDE,否则 profile JSON 在传输时机密会被清除。通过set profile setting将apiKey设置为空字符串会清除该密钥,而不是保留它——这与 JSON 往返桥接的留空保留行为不同。语言区域切换刻意不可脚本化;请改为使用例如-AppleLanguages "(fr)"重新启动应用。
计划自动化
计划自动化是绑定到某个工作区的周期性、无人值守的代理运行:当它触发时,会创建一个新的 git 工作树,并在其中以你的提示启动所选代理,该运行会作为一个普通的工作树标签页出现。自动化在自动化看板(⇧⌘A,或侧边栏的 自动化 部分)创建和管理,整个功能——触发器、计划语法、链接、强制的注入屏幕、运行历史以及自动化持久化的位置——都在自动化中有说明。本节仅涵盖该功能所暴露的控制平面界面:通过 API 驱动自动化、回应无人值守运行可能引发的决策提示,以及许可如何在附加终端上工作。
通过 API 控制自动化
整个功能都为富客户端镜像到了控制套接字上:
| 端点 | 用途 |
|---|---|
GET /automations | 列出自动化及其运行历史。 |
POST /automations | 创建或更新(upsert)一个自动化。 |
DELETE /automations/<id> | 删除一个自动化。 |
POST /automations/<id>/run | 立即触发它(不改变计划)。 |
POST /automations/<id>/toggle | 暂停或恢复它。 |
回应待处理的提示
某些生命周期决策——存储升级、漂移重置、遭入侵擦除——通常表现为本地提醒。当它们改由远程富客户端触发时,会被排队而不是显示在宿主机上:它们出现在 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":"Upgrade"}'
将提示自己的某个按钮标签作为 choice 传入。如果 180 秒内没有客户端回应,提示会解析为其安全回退(取消 / 暂不——绝不是破坏性选项);如果 10 秒内没有客户端轮询过 /state,它会立即回退。这些路由仅限控制套接字。富客户端会将这些提示呈现为普通的本地提醒。
附加终端上的许可
当终端以交互方式附加到某个会话时——通过 vm exec -it、vm attach 或 SSH 附加——宿主机端的批准提示(凭据使用等)会呈现在你的终端上,而不是客户机内部。提示显示为 🔒 Bromure — 需要批准,带有编号选项和 选择 [1-N](回车或超时 = 拒绝)。回车、超时、EOF 或分离都意味着拒绝,因此被入侵的客户机永远无法伪造批准。之后客户机 tmux 会被重绘。
调试端点 (BROMURE_DEBUG_CLAUDE)
在设置了 BROMURE_DEBUG_CLAUDE 的情况下启动应用,会解锁 TCP 自动化 API 上的额外路由,并解除对虚拟机控制的调试门控:
POST /sessions/<id>/exec以及/vms/…控制路由,无需控制套接字。GET /app/state。GET /debug/ui-shot?path=…&which=unified|picker|editor— 应用将自己的窗口渲染为 PNG(无需屏幕录制权限)并返回子视图帧转储;默认输出为/tmp/bromure-ui-shot.png。POST /debug/editor— 为截图工具驱动设置编辑器。POST /detect/prompt-injection— 运行真实的检测器并返回其判定(此路由即使在控制套接字上也需要调试标志)。
该标志还允许机密原样通过 AppleScript 和 MCP profile-JSON 桥接传输,并且是 bromure-cli mcp --debug 的虚拟机工具所必需的。GET /health 会报告 debugEnabled,以便你判断应用处于哪种模式。
警告:
BROMURE_DEBUG_CLAUDE会移除通常将exec、虚拟机控制和原始 profile 机密挡在环回 TCP API 之外的安全门控。仅在你控制的机器上使用它运行应用,且绝不要将其与非环回绑定地址组合使用——这样做会将完整的虚拟机 shell 访问、未脱敏的机密和窗口截图暴露给任何能访问该端口的人。它与BROMURE_AC_DEBUG(stderr 事件日志)和BROMURE_CLI_DEBUG(CLI 套接字诊断)不同,后两者是无害的日志开关。本章涉及的调试端点、所有环境变量以及每个文件位置都在附录中编目。