附录 — 文件位置、端口与环境
本附录将散布在手册其余部分中的具体事实汇总为参考表格:磁盘上的位置、网络端口、环境变量和启动参数,以及客户机虚拟机速查表。此处的所有内容都以当前发行版本(版本 4.3.0,bundle ID io.bromure.agentic-coding)为准。有关读写这些内容的命令,请参阅自动化与 CLI;有关安装时创建的内容,请参阅安装。
下文使用的占位符:<uuid> 是工作区的标识符,<version> 是固定的工具版本,<org>--<name> 是模型仓库,<host-UUID> 是已保存的远程主机。
磁盘上的位置
应用拥有的所有内容都位于一个支持目录下,另加少量该目录之外的文件和几个 Keychain 项。下面的表格已去重并分组;以 / 结尾的路径是目录。
支持目录
应用的支持根目录为 ~/Library/Application Support/BromureAC/。下面的路径相对于该目录。
| 路径 | 保存内容 |
|---|---|
base.img | 每个工作区克隆自的 Ubuntu 24.04 基础镜像(逻辑大小 24 GB,物理大小约 6–8 GB)。 |
efivars.bin | 基础镜像启动时使用的 EFI 变量存储。 |
base.version | 已安装镜像的版本戳,例如 200 或 200.1。 |
image-state.json | 镜像来源信息以及已应用的安装后步骤的 UUID。 |
img-catalog.json | 已下载镜像目录的缓存副本。 |
browser-img-catalog.json | 嵌入式浏览器镜像的缓存目录。 |
catalog.json | 本地推理模型的缓存远程目录清单。 |
base.img.partial、base.img.gz.partial、efivars.partial | 临时安装文件;它们的存在意味着安装正在进行或已被中断。 |
alpine-vmlinuz、alpine-initramfs、alpine-initramfs-shimmed | 本地构建所使用的缓存 Alpine 网络启动安装程序文件。 |
browser/ | 当 Bromure Web 的副本不存在时,AC 自有的 Alpine/Chromium 浏览器镜像副本(linux-base.img、vmlinuz、initrd)。 |
browser-profiles/<uuid>/image/profile.img | 加密的持久化 Chromium 配置磁盘("保持登录网站")。 |
ca/cert.pem、ca/key.pem | 每次安装独立的 Bromure Agentic Coding 根 CA(密钥模式 0600)。删除 ca/ 目录可轮换它。 |
control.sock | 仅属主可访问(0600)的 Unix 控制套接字,CLI 和控制平面通过它以 HTTP 通信。 |
profile-macs.json | 确定性的每工作区 MAC 绑定。 |
dhcp-leases.sqlite | 共享 NAT 交换机的持久化 DHCP 租约。 |
default-ssh/id_ed25519.raw、default-ssh/id_ed25519.pub | 复制到每个新工作区的共享默认 SSH 密钥对。 |
profile-template.json、profile-template.enc | 新工作区继承的偏好设置"默认值"模板(保存在 profiles/ 之外,因此永远不会出现在选择器中)。 |
automations.json | 已计划的自动化以及运行历史(最多 1000 条记录)、下次触发时间和事件轮询高水位标记。 |
grid-layout.json | 终端网格成员关系。 |
engine-master.key | 每虚拟机本地推理引擎密钥的 32 字节主密钥。 |
engine-spawn.json | 本地推理引擎子进程生成配置(模型、内存预算、端口)。 |
fake-salt.bin | 用于派生伪造令牌的每次安装独立的 32 字节盐值(0600)。删除它会轮换此 Mac 上的每个伪造项。 |
secrets-master.key | 0600 后备 AES-256 主密钥,仅在无法访问数据保护 Keychain 时使用。 |
claude-subscription.enc、codex-subscription.enc、grok-subscription.enc | AES-GCM 加密、宿主机拥有的订阅 OAuth 存储(共享默认值加每工作区覆盖),0600。 |
cloudflared/<version>/cloudflared | 固定的、经校验和验证的 cloudflared 二进制文件,旁边带有一个 current 符号链接。 |
ghostty/ | 生成的终端配置(基础配置加每工作区配置)。 |
每工作区存储
每个工作区都是支持根目录下 profiles/<uuid>/ 处的一个自包含目录。有关这些内容的使用方式,请参阅工作区和概念。
路径(位于 profiles/<uuid>/ 下) | 保存内容 |
|---|---|
profile.json | 工作区定义,包括 supplyChain 策略块;socket.dev 和 Delpi API 密钥在宿主机端保存于此,从不复制到虚拟机中。仅写入非默认字段。 |
secrets.enc | AES-GCM 加密的工作区机密(chmod 600)。 |
disk.img | 系统磁盘 — base.img 的 APFS 写时复制克隆。 |
home.img | 保存 /home/ubuntu 的稀疏 ext4 镜像(现代 home 模型)。 |
home/ | 旧版 virtiofs home 目录(升级前的工作区)。 |
boot-home/ | 在 ext4 模型启动时共享的微型引导 home。 |
home.pre-ext4/ | 存储升级后保留的 home 备份。 |
checkpoints/、checkpoints/home/ | 启动验证过的磁盘和 home 回滚克隆。 |
vm.state | 挂起虚拟机的内存快照。 |
tabs.json | 已保存的标签页布局,仅当 vm.state 存在时才生效。 |
machine-identifier.bin | 持久化的 VZ 机器标识(恢复挂起虚拟机所必需)。 |
compromised.flag | 检测到凭据泄露后设置的下次启动即擦除标记。 |
meta-share/ | 每次启动的只读客户机配置共享(api_key.env、proxy.env、CA 证书、代理、MCP 配置)。 |
outbox/ | 每次启动的可写客户机→宿主机事件共享。 |
agent/(以及 agent/imported/)、ssh/ | 每工作区 SSH 密钥材料;导入的密钥位于 agent/imported/ 下,ssh/ 是旧版目录。 |
模型与检测器
| 路径(位于支持根目录下) | 保存内容 |
|---|---|
models/<org>--<name>/ | 已下载的 MLX 推理模型权重(每仓库扁平布局)。 |
models/<org>--<name>/.incomplete | 下载进行中或已中断的哨兵标记。 |
Models/prompt-injection/ | PromptGuard 检测器资产(model.onnx、分词器文件、可选的 bromure-injection.json 覆盖项)。 |
Models/claudemd-guard/ | ModernBERT 规则文件检测器资产。 |
traces/YYYY-MM-DD/<sessionID>.jsonl | 每会话的追踪元数据,每行一条 JSON 记录。 |
traces/YYYY-MM-DD/<sessionID>/<recordID>.req.enc、.res.enc | 捕获的请求/响应正文,AES-GCM 加密(0600)。 |
注册、远程访问与富客户端
| 路径(位于支持根目录下) | 保存内容 |
|---|---|
managed/install.json | 注册身份:安装 ID、工作区 slug、用户、服务器 URL、设备名称、注册时间。 |
managed/leaf.crt | mTLS 叶证书(PEM,可检查)。 |
managed/leaf.serial | 指向保存当前叶证书私钥的 Keychain 条目的指针。 |
managed/ca.crt | 工作区组织 CA 证书(PEM)。 |
managed/health | 持久化的注册健康状态(ok / tokenRejected / revoked)。 |
remote/hostkey_ed25519、remote/hostkey_ed25519.pub | 嵌入式 SSH 服务器主机密钥(目录模式 0700,密钥 0600)。 |
remote/authorized_keys | 允许通过 SSH 前门的公钥(0600)。 |
remote/overlay-key | SSH 远程菜单的可选叠加快捷键覆盖项。 |
remote-client/id_ed25519、.pub | 富客户端的 SSH 客户端密钥对(注释 bromure-ac-fatclient)。 |
remote-client/known_hosts | 远程主机密钥的首次使用信任(TOFU)固定项。 |
remote-client/hosts.json | 已保存的远程服务器("最近的服务器")。 |
remote-client/hosts/<host-UUID>/grid-layout.json、automations.json | 每主机镜像持久化,使远程网格永远不会覆盖本地网格。 |
注意:
remote-client/子树会随CFFIXED_USER_HOME一起重新定位,这正是可以并排运行两个隔离实例进行测试的方式。
支持目录之外
| 路径 | 保存内容 |
|---|---|
~/Library/LaunchAgents/io.bromure.agentic-coding.boot.plist | 登录时启动的 LaunchAgent,当任何工作区启用"登录时启动此虚拟机"时写入。 |
<app>/Contents/Library/LaunchDaemons/io.bromure.fatclient-tunnel.plist | 嵌入式特权隧道守护进程,通过 SMAppService 按需注册。 |
/var/run/io.bromure.fatclient-tunnel.sock | 特权隧道守护进程套接字(root 创建,chmod 600,chown 给控制台用户)。 |
/tmp/bromure-ac-cm-<first-12-of-host-UUID> | 每主机 SSH ControlMaster 套接字(保存在 /tmp 中,因为支持路径超过了 AF_UNIX 长度限制)。 |
/tmp/bromure-repair.log | 本地推理修复代理服务器调试日志(仅在设置 BROMURE_REPAIR_DEBUG 时)。 |
/usr/local/bin/bromure-cli | 指向应用二进制文件的可选 CLI 符号链接,在首次启动时提供一次。 |
<NSTemporaryDirectory>/bromure-ac-agent-<pid>.sock | Bromure 私有的宿主机端 ssh-agent 套接字。 |
$TMPDIR/bromure/session-<uuid>.img(以及 -aux.img) | 临时浏览器虚拟机写时复制克隆,拆除时删除。 |
<app temp dir>/bromure-files/<profile-id>/ | 从文件浏览器打开的客户机文件的下载缓存。 |
~/Library/Application Support/Bromure/ | Bromure Web 的支持目录;AC 在其存在时从此处读取浏览器镜像。 |
~/.cache/bromure-ghostty | 仅在从源代码构建终端框架时使用的 Zig 工具链缓存。 |
Keychain 项与 defaults 域
必须在操作系统级别保护下保存的机密位于 macOS Keychain 中,而非磁盘上。
| Keychain 服务 | 账户 | 保存内容 |
|---|---|---|
io.bromure.agentic-coding.master-key | v1 | AES-256 机密保险库主密钥(数据保护 Keychain)。 |
io.bromure.agentic-coding.ssh-key-passphrases | <profileUUID>/<filename> | 导入 SSH 密钥的口令。 |
io.bromure.agentic-coding.managed-install | install-token、leaf-cert-key-<serial> | 注册持有者令牌和每序列号叶证书私钥。 |
应用的所有 UserDefaults 都位于 io.bromure.agentic-coding 域中(用 defaults read/defaults write 读写)。
网络端口与子网
TCP 与回环端口
Bromure Agentic Coding 默认不打开任何固定的入站端口。下面两个可选服务在你启用之前处于关闭状态;其余的仅限回环,且要么是动态的,要么是内部的。
| 端口 | 用途 | 绑定位置 |
|---|---|---|
9223(默认) | 自动化 HTTP API 和 bromure-cli mcp 后端。默认关闭(automation.enabled);选择比浏览器产品的 9222 大一,以便两个应用可以并排运行。提供 GET /health。 | 127.0.0.1(可通过 automation.bindAddress 配置;非回环绑定未经身份验证并会发出警告)。 |
2222(默认) | 可选的 SSH 远程访问前门。默认禁用;可配置为任何 ≥ 1024 的端口。 | 默认为 0.0.0.0(可通过 remoteAccess.bindAddress 配置)。 |
28500–28599 | MCP OAuth 回调监听器(http://127.0.0.1:<port>/callback)。 | 127.0.0.1。 |
| 动态 | 本地推理引擎,在首次生成时分配,以避免与 11434 上的 Ollama/LM Studio 冲突。 | 127.0.0.1(从不使用 0.0.0.0)。 |
| 动态 | 本地推理工具调用修复代理服务器。 | 127.0.0.1。 |
| 临时 | 富客户端浏览器窗格使用的每远程主机 SOCKS5 转发器。 | 绑定 0.0.0.0,但按对端过滤为仅回环加 192.168.127.x。 |
有两个回环端点存在于客户机内部,而非 Mac 上:127.0.0.1:8080(虚拟机内 HTTP(S) 代理服务器,每个 shell 都将其导出为 HTTPS_PROXY)和 127.0.0.1:11434(宿主机上的本地推理引擎通过 vsock 桥接出现的位置)。
安装本身不打开任何 TCP 端口;基础镜像构建的软件包代理服务器为每次构建绑定一个临时 localhost 端口。
虚拟网络子网
| 子网 | 用途 |
|---|---|
192.168.64.0/24 | 工作区虚拟机的默认 NAT 子网(网关 .1,DHCP 池 .2–.254,24 小时租约)。如果 Mac 的 LAN 已使用它,则自动重新定位。 |
192.168.65.0/24–192.168.126.0/24 | Bromure Web 实例重新定位到的范围,避免 AC 和 Web 冲突。 |
192.168.127.0/24 | 富客户端固定的本地浏览器虚拟机子网(网关 .127.1),使网关可预测。 |
100.64.<n>.0/24 | 用于设备群子网冲突的 CGNAT 别名子网 — 已实现并测试,但尚未接入运行时路径(受支持的配置为单个远程主机)。 |
10.98.<unit>.0/30 | 特权 utun 隧道守护进程使用的点对点链路网络。 |
宿主机↔客户机 vsock 桥接
宿主机和客户机通过 virtio 套接字(vsock)通信,这些套接字没有 IP 绑定 — 它们是宿主机(CID 2)与每个客户机之间的编号通道。它们是内部管道,此处列出以供诊断。
| vsock 端口 | 桥接 |
|---|---|
| 5800 | Shell 执行代理 — 为 bromure-cli exec、控制套接字 exec 路由和文件浏览器窗格提供支持。 |
| 5010 | 回环 OAuth 回调中继(将 OAuth 重定向递送回虚拟机内的 CLI)。 |
| 5830 | 内置浏览器 MCP 服务器的宿主机端(客户机 stdio 垫片向外连接)。 |
| 8443 | HTTPS MITM 代理服务器 — 客户机的出口。 |
| 8444 | ssh-agent 桥接(支撑 SSH_AUTH_SOCK)。 |
| 8445 | AWS credential_process 助手。 |
| 8446 | Claude 订阅令牌代理,以及宿主机上的本地推理桥接(客户机 127.0.0.1:11434)。 |
| 8447 | Codex/ChatGPT 订阅令牌代理。 |
| 5000 | 浏览器虚拟机配置代理(认领时宿主机→客户机 JSON 配置)。 |
| 5100 | 浏览器虚拟机文件传输桥接(最大帧 16 MB,最大文件 10 GB)。 |
| 5200 | 浏览器虚拟机 Chrome DevTools Protocol 桥接(截图、求值)。 |
| 5300 / 5400 | 浏览器虚拟机链接发送器 / 网络摄像头。 |
| 5810 | 浏览器虚拟机原生标签页桥接。 |
| 5900 | 浏览器虚拟机网络追踪桥接。 |
环境变量与启动参数
这些会在启动时影响应用。大多数用于调试、测试或从源代码构建;受众列标明了每一项面向的对象。在启动二进制文件之前设置环境变量,或在其后传递启动参数。
| 名称 | 效果 | 受众 |
|---|---|---|
-AppleLanguages "(fr)"(启动参数) | 标准 macOS 区域设置覆盖;强制 UI 语言。在参数解析之前被剥离,以便强制区域设置的重新启动能够正常工作。 | 最终用户 |
BROMURE_DEBUG_CLAUDE | 解锁 TCP 自动化 API 上的调试端点(/app/state、exec、/vms、/debug/ui-shot、/detect/prompt-injection),允许机密通过 AppleScript/MCP profile-JSON 桥接传输,并且是 bromure-cli mcp --debug 虚拟机工具所必需的。 | 高级用户 / 调试 |
BROMURE_AC_DEBUG=1 | 自动化引擎、注入分类器、规则扫描器和追踪管道的带时间戳 stderr 调试。 | 调试 |
BROMURE_CLI_DEBUG | CLI 命令在 stderr 上的详细控制套接字连接诊断。 | 调试(CLI) |
BROMURE_REPAIR_DEBUG | 本地推理修复代理服务器的请求/响应诊断,追加到 /tmp/bromure-repair.log。 | 调试(本地模型) |
BROMURE_INFER_DEBUG | 每请求引擎统计信息(slot、预填充令牌数、TTFT、tok/s)输出到 stderr。 | 调试(本地模型) |
BROMURE_FATCLIENT_LOG | 无缓冲的富客户端 stderr 日志记录。 | 调试(远程) |
BROMURE_ATTACH_DEBUG=<path> | 同时将富客户端日志追加到文件。 | 调试(远程) |
BROMURE_INJECTION_COREML=1 | 在 CoreML/神经引擎提供程序上运行注入分类器(默认为 CPU;在相同精度下 CoreML 的常驻内存约为其 5 倍)。 | 高级用户 |
BROMURE_NO_COREML | 即使设置了 BROMURE_INJECTION_COREML,也强制为分类器禁用 CoreML。 | 高级用户 |
BROMURE_GPU_CACHE_GB | MLX GPU 缓冲区缓存上限(以 GB 为单位,默认 4)。 | 高级用户(本地模型) |
BROMURE_KVBITS、BROMURE_KVBITS_START、BROMURE_CACHE_SLOTS、BROMURE_THINKING | 本地推理调优:KV 缓存量化位数和阈值、KV 缓存会话槽(1–8,默认 4),以及禁用静默思考。请参阅本地模型。 | 高级用户(本地模型) |
VISUAL / EDITOR | bromure-cli workspaces edit 使用的编辑器(回退到 vi)。 | 最终用户(CLI) |
BROMURE_MANAGED_URL | 覆盖用于注册、心跳和证书签发的 bromure.io API 基址。 | 企业管理员 |
BROMURE_FATCLIENT_OPEN | 纯富客户端启动:跳过首次运行的设置窗口(无需本地基础镜像)并抑制 bromure-cli 符号链接提示。 | 高级 / 测试 |
BROMURE_IMAGE_CATALOG_BASE | 将镜像下载指向本地/暂存目录;同时禁用目录签名验证。仅供测试和流水线使用。 | 测试 / CI |
BROMURE_INSTALL_BROWSER_IMAGE=1 | 在启动时自动下载 AC 的嵌入式浏览器镜像副本(正常触发方式是浏览器窗格或 设置 → 浏览器)。 | 测试 / 调试 |
CODESIGN_IDENTITY | build.sh 签名标识;未设置时回退到临时 -(无 Gatekeeper、iCloud 或 vmnet)。 | 开发者(构建) |
DEVELOPER_ID、APPLE_ID、TEAM_ID、APP_PASSWORD | package.sh Developer ID 签名和公证。DEVELOPER_ID 为必需项;公证三元组为可选项(不设置时会生成已签名但未公证的 DMG)。 | 开发者 / 发布者 |
DRY_RUN=1、KEEP_PREVIOUS=1、KEEP_STAGING=1 | 镜像发布/演练流水线开关。 | 发布者 |
引擎还会为其自己的子进程设置内部变量(BROMURE_ENGINE_KEY、BROMURE_ENGINE_MASTER),一次性注册虚拟机会设置 BROMURE_AC_REGISTER;这些不应手动设置。
UserDefaults 键(defaults write)
io.bromure.agentic-coding 域中的持久化设置。大多数都有 UI 等价项;vm.* 和开发者旋钮通过 defaults write 设置。
| 键 | 效果 | 默认值 |
|---|---|---|
automation.enabled | 打开回环自动化 HTTP API。 | false |
automation.port | 自动化 API 端口。 | 9223 |
automation.bindAddress | 自动化 API 绑定地址。 | 127.0.0.1 |
remoteAccess.enabled | 启用 SSH 远程访问前门。 | false |
remoteAccess.port | SSH 前门端口(≥ 1024)。 | 2222 |
remoteAccess.bindAddress | SSH 前门绑定地址。 | 0.0.0.0 |
remoteAccess.passwordAuth、remoteAccess.pubkeyAuth | SSH 身份验证方法。 | 均开启 |
vm.homeImageGB | 新 ext4 home 镜像的表面(客户机可见)大小,以 GiB 为单位(8–1024;稀疏,因此前期不占用任何空间)。 | 64 |
vm.mtu | 客户机 NIC MTU 钳制值 — 在会黑洞化安装程序下载的 VPN 宿主机上将其调低。 | 1280 |
vm.networkMode、vm.bridgedInterface、vm.dnsServers | 浏览器池网络模式、桥接接口和 DHCP DNS 覆盖。 | 模式为 NAT;其余未设置 |
vm.extraChromeFlags、vm.chromeEnvExtra | 附加到浏览器虚拟机 Chromium 启动的开发者旋钮。 | 未设置 |
cloudflareTunnel.consented | 通过 Cloudflare 快速隧道公开 HTTP 服务的一次性许可。 | false |
cliSymlinkDeclined | 在 bromure-cli 符号链接提示上选择"不再询问"时设置。 | false |
ac.sidebarWidth、ac.filePaneOpen | 持久化的侧边栏宽度和文件窗格打开状态。 | 应用设定 |
客户机虚拟机速查表
在运行中的工作区虚拟机内,你是 ubuntu,一个普通用户(具备 sudo 能力),其 home 为 /home/ubuntu。宿主机会接通挂载点和环境,使包管理器、代理和 Git 无需任何客户机内设置即可工作。有关机制,请参阅概念。
挂载点
| 路径 | 是什么 |
|---|---|
/home/ubuntu | 你的 home — ext4 home.img(现代)或 virtiofs 共享(旧版)。 |
/mnt/bromure-meta | 只读的每次启动配置共享:api_key.env、proxy.env、CA 证书、客户机代理、MCP 配置、主机名/MTU 提示。 |
/mnt/bromure-outbox | 可写的客户机→宿主机事件共享(宿主机读取的一次性事件文件)。 |
/mnt/bromure-share-N | 共享的项目文件夹(最多 8 个),也符号链接到你的 home 中为 ~/<basename>。 |
/mnt/bromure-meta/bromure-browser-mcp.py | 生成的浏览器 MCP stdio↔vsock 垫片,以只读方式暂存到每个工作区中。 |
~/.bromure/pastes/ | 拖放到终端中的图像粘贴(7 天后自动清理)。 |
由宿主机设置的环境
| 变量 | 值 / 效果 |
|---|---|
http_proxy、https_proxy、HTTPS_PROXY | http://127.0.0.1:8080 — 将所有客户机 HTTPS 载送到宿主机 MITM 代理服务器的虚拟机内桥接。 |
NO_PROXY | localhost,127.0.0.1,::1。 |
SSH_AUTH_SOCK | /tmp/bromure-agent.sock — 通过 vsock 桥接到宿主机 ssh-agent(只有每工作区和显式导入的密钥可达;你的 macOS 登录代理从不暴露)。 |
| CA 包变量 | 重签名根 CA 通过 node、python、go、rust、curl、deno 和 AWS SDK 的标准包变量得到信任。 |
| 代理 API 密钥 | ANTHROPIC_API_KEY、OPENAI_API_KEY、XAI_API_KEY、GH_TOKEN、GITLAB_TOKEN、DIGITALOCEAN_ACCESS_TOKEN、LINEAR_API_KEY、AWS 变量,以及任何手动/数据库变量 — 全部为占位符值;宿主机在传输过程中换入真实机密。 |
| 本地模式代理变量 | 当工作区路由到本地模型时,Claude Code 会看到 ANTHROPIC_BASE_URL=https://bromure.llm、每虚拟机独立的 ANTHROPIC_AUTH_TOKEN、设置为 bromure-local 哨兵值的模型别名,以及 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1。 |
警告: 客户机能读取的每个凭据都是诱饵。一个仅限于某台主机的伪造令牌若出现在发往另一台主机的请求中,就是数据外泄的特征,会触发入侵检测 — 它永远不会对任何东西进行身份验证。