工作区
工作区是 Bromure Agentic Coding 的隔离单元:一个 Ubuntu 虚拟机,拥有自己的系统磁盘、自己的持久化主文件夹、自己的编码代理和凭据,以及自己的安全策略。应用所做的一切都发生在工作区内部——一个临时工作区可以用一次性 API 令牌完全放开运行,而一个面向生产的工作区则会记录每一次 AI 交互并在每次破坏性写入前发出提示,而两者之间从不共享一个字节。
应用中几乎每一项设置都是按工作区独立的。例外是应用级的 自动化 服务器、下载的浏览器镜像,以及已安装的本地模型——它们都在各工作区之间共享。在代码和导出的 JSON 中,工作区被称为 profile;CLI 可以互换地接受工作区的名称、其 id 或短 id 前缀。本章介绍你用来管理工作区的窗口,以及你从中执行的生命周期操作——创建、编辑、复制、重置、删除。每个工作区所带的 15 个窗格的设置编辑器记录于 设置参考;工作区运行后发生的事情记录于 会话;隔离模型本身记录于 概念与架构。
工作区浏览器
应用的主窗口就是工作区浏览器:左侧边栏列出你的工作区、终端 网格 和你已排定的自动化,右侧详情窗格显示所选工作区的实时状态与配置。
侧边栏从上到下有三个区段:
- WORKSPACES — 一个固定的 网格 节点,后跟每个工作区一行。
- AUTOMATIONS — 你排定的无人值守代理运行,带有一个用于添加的 + 按钮。
- 最底部的黑色 + 按钮,用于创建新工作区。
选中某个工作区行会填充详情窗格。如果工作区处于 关闭 或 已挂起 状态,窗格会显示其仪表板以及 启动 或 恢复 按钮;一旦运行起来,舞台就会转而显示实时会话(其终端标签页、浏览器窗格和仪表板),记录于 会话。
侧边栏可在 100 到 600 点之间调整宽度(默认 220)。将下方的分隔条拖到约 100 点以下,或按 ⌃⌘S,可将其折叠为窄图标条;再次操作可恢复。工作区按最近使用优先排列,对于你从未打开过的工作区则回退到创建日期排序。
侧边栏
工作区行
每个工作区行从左到右带有:
- 一个着色图块 — 一个用工作区颜色着色的服务器机架字形,角落带有一个小的运行状态圆点。
- 工作区名称,在该行被选中时以粗体显示。
- 名称下方的状态标签 — 关闭、正在启动… 或 已挂起。正在运行的工作区不显示标签;取而代之的是其终端标签页加上一个始终在线的 Docker 节点嵌套显示在该行下方(该节点带有一个运行中容器计数徽章,无容器运行时显示 0)。
- 名称之后的红色警告三角 — 当工作区被凭据泄漏检测器标记为已受损并在擦除前拒绝启动时显示(参见 概念与架构)。
将鼠标悬停在正在运行的工作区上,会在该行显示三个快捷操作按钮:弹出到独立窗口、关闭此虚拟机 和 新建标签页 (⌘T)。每行末尾的 ⋯ 按钮会打开该工作区的上下文菜单——本章其余部分所述每一项生命周期与管理操作的中枢。
运行状态
工作区 VM 始终处于以下几种状态之一,既由行的状态圆点体现,也由详情窗格标题中名称旁的胶囊标签体现:
| 状态 | 行圆点 | 含义 |
|---|---|---|
| 关闭 | 灰色 | 未运行。不占用 RAM、不占用 CPU;仅磁盘留存于磁盘上。 |
| 正在启动…(引导中) | 橙色,脉动 | VM 正在开机。 |
| 运行中 | 绿色 | 已引导并处于活动状态;会话已上线。 |
| 已挂起 | 黄色 | RAM 已保存到磁盘;可几乎即时地从停止处恢复。 |
这些状态背后的生命周期——挂起与关机有何不同,以及“关闭操作”会做什么——记录于 概念与架构。
详情窗格
当工作区未运行时,其详情窗格是一个仪表板:顶部一排状态卡片,下方是 CONFIGURATION 摘要,右上角是 启动 / 恢复 按钮。
状态卡片
五张卡片报告工作区的资源概况。它们的值会因 VM 是否运行而不同:
| 卡片 | 关闭 / 已挂起时 | 运行中时 |
|---|---|---|
| CPU | —(说明 off) | 实时 CPU 负载,带有历史迷你折线图。 |
| 内存 | 已分配的 RAM,例如 8 GB(说明 allocated) | 客户机内部正在使用的内存。 |
| vCPUs | 核心数,例如 4(说明 cores) | 同样的数量,附带客户机当前的 负载 平均值。 |
| 磁盘 | 0 MB(说明 of 0 MB (host)) | 工作区已用磁盘占宿主机容量的比例,从客户机实时读取。 |
| 运行时长 | —(说明 off) | 自引导以来的时间,例如 3h 12m。 |
已分配的内存和 vCPU 数字来自工作区的 资源设置。运行中的仪表板,包括实时端口列表和互联网暴露情况,记录于 会话。
CONFIGURATION 摘要
CONFIGURATION 卡片是对工作区最关键设置的快速只读概览——这样你就能在启动工作区之前确认它会做什么:
| 行 | 显示内容 |
|---|---|
| <代理名称>(每个启用的代理一行) | 它在何处运行以及如何认证——Cloud · API token、Cloud · Subscription、On-device · <model> 等等。 |
| 护栏 | Off、统一时的单一模式,或混合时的 Custom (N domains)。 |
| 提示注入扫描 | On 或 Off。 |
| 共享文件夹 | 已挂载的文件夹名称,或 None。 |
其中每一项都对应设置编辑器中的一个窗格:代理、护栏、提示注入 和 文件夹。
注意: 一个刚解码、早于某项设置存在的工作区,会在此处显示该设置的旧版默认值——例如上方截图中的 Codex Sandbox 报告 护栏 Off 和 提示注入扫描 Off,因为它是在这些默认值出现之前创建的。新创建的工作区则会继承当前的出厂模板(护栏设为 写入前提示,追踪设为 AI 请求详情)。参见 偏好设置模板。
启动与恢复
右上角的按钮在工作区 关闭 时显示 启动,在 已挂起 时显示 恢复。点击它会引导 VM(或将其从保存的 RAM 状态中唤醒)并将舞台切换到实时会话。同样的操作也可从该行的 ⋯ 菜单中获得。
创建工作区
点击侧边栏底部的黑色 + 按钮(其工具提示为 新建工作区)。这会在一个标题为 New workspace 的窗口中打开设置编辑器,其内容预填自你的 偏好设置模板,并带有一个占位名称——Default workspace,如果名称已被占用则自动编号为 Default workspace 2、3,依此类推。
- 在 通用 窗格中为工作区起一个 Name。这是保存所需的唯一字段。
- 按需调整任何其他窗格——代理、凭据、护栏、外观、资源。每个窗格都记录于 设置参考。
- 点击 Create。按 Esc(或 Cancel)可丢弃草稿。
新工作区是从模板派生出来的,因此你在 Bromure → Preferences… 中设置的内容会成为它的起点。出厂模板将 Claude Code 启用为 Subscription 认证模式下的主代理,将每项护栏设为 写入前提示,并开启一个 ed25519 SSH 密钥对(凭据 → SSH 密钥 下的 生成 ed25519 密钥对 开关默认已勾选,除非模板已带有一个密钥)。
提示: 大多数编辑器更改仅在你点击 Create 或 存储 时才应用。少数操作无论如何都会立即生效——本地模型与提示注入模型下载、MCP OAuth 授权、订阅注册以及 SSH 密钥导入——因为它们触及的是共享状态或宿主机侧状态,而非工作区文档。
编辑和重命名工作区
打开工作区的 ⋯ 菜单并选择 Edit… 以重新打开同一个编辑器,此时它的标题为 编辑工作区 并绑定到现有工作区。更改任意值后点击 存储。
没有单独的“重命名”命令——重命名工作区是通过在 通用 窗格中编辑其 Name 字段完成的。同一时间只存在一个编辑器窗口;为另一个工作区打开编辑器会拆除该窗口并重建它。
颜色与工作区图块
每个工作区都有一个强调 Color,在 通用 窗格中从八种预设中选择:
| 蓝色(默认) | 红色 | 绿色 | 橙色 |
| 紫色 | 粉色 | 青色 | 灰色 |
该颜色为工作区的侧边栏图块、其选中高亮以及其标签页强调色着色——它是一眼区分各工作区的最快方式。颜色是唯一的按工作区视觉标识:没有图标选择器。图块始终是你所选颜色的服务器机架字形,叠加以 运行状态 下所述的运行状态圆点。
复制工作区
从工作区的 ⋯ 菜单中选择 复制 以对其进行深度复制。副本会立即出现在侧边栏中,以原名加上 copy 后缀命名——复制 Codex Sandbox 会产生 Codex Sandbox copy——且没有确认对话框。
副本是一个真正的克隆。它会复制所有设置和凭据、系统磁盘、主文件夹以及宿主机侧的 SSH 和代理材料,并在可能时使用 APFS 写时复制克隆(即时完成,且在两个工作区分叉之前不占用额外磁盘空间)。有意不复制的是三样与原工作区身份绑定的东西:
- 保存的 RAM 快照,因此副本是冷启动为全新状态,而非恢复原工作区的实时状态;
- 标签页布局;
- 持久 MAC 地址,因此副本以一台独立的机器加入网络。
由于其创建日期被重新盖章,副本会作为最新工作区排到侧边栏顶部。
启动、挂起和关机
工作区行的 ⋯ 菜单会根据其当前状态自适应。当 VM 关闭或已挂起时,它提供单一的启动条目;当它运行时,它提供三种停止或重启方式:
| 状态 | 菜单条目 |
|---|---|
| 关闭 | 启动 |
| 已挂起 | 恢复 |
| 运行中 或 正在启动… | 关机 · 挂起 · 重启 — 运行时另加 将工作树添加到网格 |
挂起 会将 VM 的 RAM 保存到磁盘并停止它,因此稍后的 恢复 会精确地从你离开的地方继续;关机 执行干净的下电,下次启动是一次完整的冷引导。重启 会原地重启一个正在运行的工作区。它们之间的权衡,以及决定窗口关闭触发哪一种操作的按工作区 关闭窗口时 默认设置,记录于 概念与架构 和 通用设置。
重置系统磁盘
重置磁盘(在 ⋯ 菜单中,或 资源 窗格中的 重置为基础镜像…)会从当前基础镜像重新克隆工作区的系统磁盘。它会丢弃你在 OS 层中更改的所有内容——用 apt 安装的软件包、对 /etc、/var、/usr、/opt 以及系统级配置的编辑——同时保持你的主文件夹不变:项目、dotfiles、.ssh 密钥、npm-global、.cargo 和 shell 历史记录全部保留。确认对话框标题为 Reset "<name>" system disk to base?,其按钮为 Reset to base 和 Cancel。
重置磁盘还会丢弃保存的 RAM 状态和标签页布局,以便下次引导保持一致。如果工作区的会话窗口是打开的,该操作会被拒绝并显示 Close "<name>" first.——请在重置前先将其关闭。
注意: 若要改为擦除主文件夹——项目、dotfiles 以及生成的 SSH 密钥对——请使用 资源 窗格中的 擦除主文件夹…。主文件夹回滚检查点以及可还原到每次引导快照的 恢复主文件夹… 控件记录于 会话。
删除工作区
删除工作区(⋯ 菜单底部红色的破坏性条目)会永久移除一个工作区。一个标题为 Delete workspace "<name>"? 的确认警告会说明其影响范围:
移除其磁盘、设置和 SSH 密钥。已挂载的宿主机文件夹不受影响。
确认后会删除工作区在 ~/Library/Application Support/BromureAC/profiles/ 下的整个目录——其 profile.json、加密的 secrets.enc、系统磁盘、主镜像、所有检查点以及宿主机侧的 SSH 密钥材料——并释放其保留的 MAC 地址。删除不会触及你共享进工作区的宿主机文件夹:那些文件夹位于你的 Mac 上,以读写方式挂载,会被原样保留。它们在 VM 内部的内容会随 VM 一起消失;你 Mac 上的原件不会。
警告: 删除操作无法在应用内恢复。没有废纸篓也没有撤销——磁盘、主文件夹和机密都会消失。任何你想保留的内容都应放在共享的宿主机文件夹上,或在删除前提交并推送。
网格
WORKSPACES 区段顶部固定的 网格 节点是一个舞台,它将多个正在运行的终端并排平铺,以便你同时观察多个代理。有两种方式填充它:从正在运行的工作区的 ⋯ 菜单中选择 将工作树添加到网格,一次性将该工作区的所有工作树标签页放到网格上;或将单个终端标签页拖到网格节点上。每个单元格的上下文菜单都提供 从网格移除。网格布局及其与工作树的交互记录于 会话。
自动化一览
AUTOMATIONS 区段列出你排定的无人值守代理运行。其 + 按钮(工具提示 新建自动化)会打开自动化编辑器。每一行显示该自动化的名称、其所属工作区的一个彩色圆点、其触发器的单行摘要(例如 Weekdays 9:00 或 PR · owner/repo),以及其上次运行的一个字形。右键点击某一行会提供 立即运行、暂停 或 恢复,以及 删除…。
一个自动化属于一个工作区;当它触发时,会在该工作区的仓库中创建一个全新的 git 工作树,并在那里用你的提示启动所选代理,因此这些运行会显示为普通的工作树标签页。触发器涵盖从挂钟计划表,到 GitHub 拉取请求、议题和提交轮询、Linear 议题轮询,以及在另一个自动化之后链式执行。完整功能——触发器、过滤器、对事件文本强制进行的提示注入筛查、运行历史,以及与之对应的 CLI 和控制套接字接口——记录于 自动化与 CLI。
工作区的存储位置
每个工作区都是 ~/Library/Application Support/BromureAC/profiles/<uuid>/ 下的一个目录。你可能关心的组成部分:
| 路径 | 内容 |
|---|---|
profile.json | 所有非机密设置。 |
secrets.enc | 每一项机密,在保存时被拆分出来并用 Keychain 持有的密钥进行 AES-GCM 加密(chmod 600)。 |
disk.img | 工作区对基础 OS 的读写副本。 |
home.img | 持久化的 /home/ubuntu(ext4 主文件夹模型)。 |
checkpoints/ | 磁盘和主文件夹的每次引导回滚快照。 |
vm.state | 已挂起工作区保存的 RAM 快照。 |
agent/、ssh/ | 宿主机侧的 SSH 密钥材料——私钥从不进入 VM。 |
偏好设置模板位于 profiles/ 之外(作为 profile-template.json 加上一个加密的伴随文件),这就是它从不作为工作区出现在侧边栏中的原因。持久的工作区到 MAC 的绑定被单独记录在 profile-macs.json 中。机密从不写入 profile.json,也从不复制到 VM 中——客户机只持有伪造值,宿主机代理服务器会在传输时将其替换为真实值(参见 凭据)。
提示:
disk.img、home.img以及checkpoints/下的快照都是 Linux ext4 镜像。你可以直接在 Mac 上浏览、提取乃至修复它们——无需引导 VM——使用 进阶 中所述的 ext4 文件浏览器。
命令行等效操作
本章中的每一项操作都有一个无头对应形式。在应用(或其后台代理)运行时,bromure-cli vm ls 会列出带有实时状态的工作区,而 workspaces create、workspaces edit、workspaces describe 和 workspaces rm 涵盖创建/编辑/检查/删除流程——vm 是 workspaces 组的一个可接受别名。这些命令、环回自动化 API,以及镜像整个编辑器的 SSH 远程菜单,记录于 自动化与 CLI。