机器

机器是 Bromure Agentic Coding 的隔离单位:一台 Ubuntu VM,有自己的系统磁盘、自己的持久主目录、自己的凭据与自己的安全策略。每个会话都在一台机器上运行。一台随手用的机器可以带着用完即丢的 API 密钥完全放行,同时另一台面向生产的机器把每一次 AI 往来都记录下来、每一次破坏性写入前都先询问,而这两台永远不共用一个字节。

机器在设置编辑器、部分菜单(新建工作区…、删除工作区)与命令行中被称为工作区;在代码与导出的 JSON 中则是配置文件。它们都是同一件事。本章涵盖机器本身:它们列在哪里、如何启动与停止、你如何创建、回退、重置与删除它们,以及你可以直接在一台机器上做什么:开终端、在网格中看好几台、浏览文件、把文件贴进去。每台机器的设置记载于设置参考。隔离模型见概念与架构。

机器是持久存在的。系统磁盘与主目录会在每次重启后保留。只有刻意的操作(重置磁盘、清除主目录…、删除工作区)或凭据外泄警报后的强制清除才会销毁数据。停止一台机器只是决定它的 VM 接下来要做什么:继续运行、挂起,或关机。

注意: 大多数时候你完全不需要管理机器。在已关机或已挂起的机器上开始一个会话就会唤醒它,而暂停中会话的机器会随你的下一条消息再次启动。本章是给你想看看引擎盖底下时用的。

虚拟机区段

机器位于侧边栏底部的虚拟机区段,在会话、任务与自动化之下。它默认折叠;点击标题即可展开。侧边栏较窄时,标题会显示 VM。

主窗口,侧边栏底部的虚拟机区段已展开:一个绿色标记显示 2 个运行中与总数 3、一个 + 按钮,接着是网格节点与 Payments API 和 Web app 两行,每行各有一个 + 与一个 ⋯ 按钮。舞台显示新建会话界面。

区段的标头带有:

  • 一个绿色标记,显示运行中或正在启动的机器数量;
  • 机器的总数;
  • 一个 + 按钮(工具提示为新建工作区),可创建一台机器。按住 Option 点击它,会先从你 Mac 上的配置文件导入设置(见创建一台机器)。

展开后,这个区段由上而下列出:

项目是什么
网格一个把实时终端并排铺陈的舞台。见网格。
每台机器一行机器本身、它运行时的终端标签页,以及只要其中至少有一个容器在运行就会出现的 Docker 节点。
Kubernetes你的 Kubernetes 集群,每个一行。只有在存在集群时才显示。见Kubernetes 集群与注册表。
注册表你的私有容器注册表。只有在存在注册表时才显示。见Kubernetes 集群与注册表。
消息消息连接器的 VM,在你设置它之后出现。见总机与消息。

集群、注册表与连接器也都是受管 VM,但它们不是机器:你不在上面运行会话,而且它们各有自己的仪表板。

机器行

每台机器那一行由左至右显示:

  • 一块带色磁贴。 一个服务器机架字符,用的是该机器的颜色(在通用设置中设定),角上有一个小的运行状态圆点。
  • 名称。 当机器被凭据泄漏检测器标记为已遭入侵时,名称后会跟着一个红色警告三角形;这样的机器在被清除之前会拒绝开机(见凭据)。
  • 名称下方的状态标签:关闭、正在启动…或已挂起。运行中的机器不显示标签。
  • 按钮。 机器运行时,+ 会开一个新的终端标签页(新建标签页(⌘T)),把光标移到该行上会露出分离到独立窗口与关闭此 VM。⋯ 按钮在每一行都会打开机器菜单。

点击机器的名称可显示它的仪表板。点击它的某个标签页,可把那个终端显示在舞台上。

状态圆点含义
关闭灰未在运行。没有使用 RAM 或 CPU;只有磁盘存在。
正在启动…橙,脉动VM 正在开机。
运行中绿已开机。它的终端与代理都活着。
已挂起黄RAM 已存到磁盘。它会从中断处接续。

代理标签页就是会话

运行中机器的标签页,就是它里面的 tmux 窗口:你的会话所在的代理标签页,加上你自己开的任何终端。你在机器的终端中启动的任何编码代理(输入 claude、codex 等等),以及由编码任务或自动化所启动的每个代理,也都会以会话的形式出现在侧边栏的会话列表中。你可以用 Linux 胶囊(⌥⌘U)在代理的聊天与它的终端标签页之间切换;见会话主页。

已删除机器上的会话

当你删除一台机器,它的会话会留在侧边栏中、变淡,状态为机器已移除。在已归档折叠区中,它们会和任何文件夹已消失的会话一起被归成一行,“1 个会话的机器或文件夹已消失”或“N 个会话的机器或文件夹已消失”,并附一个删除按钮来删除那些对话。

机器仪表板

仪表板是一台机器的控制面板。打开方式:

  • 在虚拟机区段中点击机器的名称;
  • 在工具栏的机器菜单中,或在会话的机器胶囊的右键菜单中,选择机器详情;
  • 在 ⌘K 面板的机器下选择那台机器。

顶部是机器的磁贴、名称、一个状态胶囊(运行中、启动中、已挂起或关闭)以及它的 IP 地址。右侧是操作栏:机器运行时是新建终端、挂起、重启与关机,否则是启动 / 恢复。

下方有五张卡片报告资源:

卡片关闭或已挂起运行中
CPU—实时 CPU 负载,附走势线。
内存分配的 RAM,例如 8 GB(已分配)使用中的内存,占分配量之中的多少。
vCPU核心数(核心)同样的数字,附客户机的平均负载。
磁盘系统磁盘在 Mac 上占的空间((主机))客户机自己的文件系统所报告的磁盘使用量。
运行时间—自开机以来的时间。

内存来自该机器的资源设置。数值大约每 1.5 秒更新一次;开机后立刻出现的零,表示客户机还没回报。

机器运行时,一张监听端口卡片会把从 VM 外部可连到的套接字列为 <VM 的 IP>:<端口> 端点;点击其中一个即可拷贝。看起来像 HTTP 的服务还会多一个地球按钮,通过 Cloudflare 快速通道把那一个服务公开到互联网上。第一次时,一个标题为通过 Cloudflare Tunnel 把服务公开到互联网?的对话框会说明那次一次性的下载(约 18 MB),并请你同意并公开。

一张配置卡片会在你启动之前,把最重要的设置做个摘要:每个代理一行,附它运行的位置、护栏、提示注入扫描与共享文件夹。

工具栏中的机器菜单

当舞台上是一个会话或一个机器标签页时,工具栏会显示一个带有机器颜色与名称的胶囊。点击它可取得关于那台机器的一切:

项目作用
设置…打开该机器的设置编辑器。
机器详情显示仪表板。
复制 IP 地址(…)复制该机器的 IP 地址。只在它运行时可用。
检查跟踪为这台机器打开跟踪检查器(⇧⌘I 亦可)。
分离到独立窗口把机器移到它自己的窗口(见分离与重新并入)。
重启在重启“…”?的确认之后,把机器干净地关掉再重新开机。选择时按住 ⌥——该项目会变成强制重启——则会改为立刻切断电源。见重启一台机器。

当会话的机器未在运行时,菜单开头是“未在运行——会随你的下一条消息启动”,并只提供设置…与机器详情。

在机器自己的终端标签页上,工具栏还会显示 Fusion 闪电,并在机器使用设备端模型时显示一个引擎标记(见模型与提供方)。地球(⌃⌘B)与文件(⌃⌘E)按钮可切换浏览器与文件窗格。

启动与停止

启动一台机器

机器会在以下情况启动:

  • 你在它上面开始一个会话,或对它上面某个暂停中的会话发送消息;
  • 你在它的仪表板上点击启动(或恢复),或从它的 ⋯ 菜单中选择;
  • 你在网格中它的某个占位格上点击启动;
  • 某个自动化或编码任务需要它(见自动化);
  • 你登录 Mac,而它的通用设置中登录时启动此虚拟机是开启的;
  • 你运行 bromure-cli vm run(见CLI、API 与 MCP)。

开机时会发生什么

  • 首次启动。 应用会把机器的系统磁盘(disk.img)做成共用 Ubuntu 基础镜像的 APFS 写时复制克隆。克隆是瞬间完成的,在客户机写入之前不占空间。主目录镜像会被创建,VM 则以其资源设置中的 RAM 开机。
  • 之后的启动。 会重复使用同一个系统磁盘与主目录,所以你安装过的一切都还在。
  • 已挂起的机器。 会还原已存的 RAM 快照而不是开机,机器会连标签页一起从原处接续。

每次成功开机也会取一个主目录的回退点(见回退主目录)。

默认情况下,每台机器都会加入 Bromure 的私有 NAT 网络、取得一个稳定地址,并可以连到其他机器与浏览器 VM。每台机器的桥接模式在通用设置中。

开机画面

机器开机时,一层动画覆盖层会盖住它的终端:机器名称位于一条扫描进度条之上,有时还带一行状态。只有在开机超过 0.4 秒时才会出现,并在第一个终端就绪时立刻淡出。仍在使用旧的共享文件夹式主目录的机器,会在下次开机时被移到私有的 ext4 主目录镜像;此时覆盖层会显示确定的进度,例如“正在搬移主目录 — 7.9 GB 的 42%”。

若 30 秒内没有任何终端出现,覆盖层会变成一个潜入失败面板(“‘…’在 30 秒后仍未返回终端。VM 可能卡住了,或它的系统磁盘可能已损坏。”),带两个按钮:

  • 继续等待会重新开始 30 秒的等待。
  • **重置系统磁盘…**会从基础镜像重新克隆机器的系统磁盘。你的主目录会保留。

若开机因为系统磁盘未通过文件系统检查而停止,覆盖层会改为显示一个磁盘错误面板,带修复磁盘(就地重放磁盘的日志)与重置系统磁盘…。两种情况下你的主目录都会保留。若开机一直失败,见故障排查。

开机前的问题

启动之前可能会先出现以下之一:

提问何时选择
有更新的基础镜像可用。你 Mac 上的基础镜像比这台机器的系统磁盘所克隆自的那个更新。是,升级会从新的基础重置系统磁盘,然后开机(你的主目录不受影响)。否会照原样开机,并且在有不同的基础镜像推出之前不再询问。稍后提醒我会照原样开机,并在一天之后的第一次开机时再问一次。答案会按机器分别记住。
已遭入侵的机器先前某次运行被标记为凭据外泄。在开机之前,确认清除系统磁盘、主目录与已存状态。设置、令牌与 SSH 密钥会保留。见凭据。
模型仍在下载机器所需的设备端模型尚未下载完成。在完成之前,启动会被拒绝。

当没有人在旁边回答时(自动化、编码任务、登录时启动),待处理的基础镜像升级会被跳过,机器照原样开机;已遭入侵的机器则要等你亲自启动才会启动。

停止一台机器

从机器的 ⋯ 菜单或它的仪表板:

  • 挂起会把 VM 的 RAM 存到磁盘并停止它。恢复会从原处精确接续。因为没有任何损失,所以不需确认。
  • 关机会在确认之后把 VM 电源关掉(“关闭 VM 的电源,并停止其中运行的一切。系统磁盘会保留;运行中进程内进行中的工作会丢失。”)。下一次启动是完整开机。
  • 重启 — 见重启一台机器。

在客户机中运行 reboot 也可以:应用会注意到,并就地把机器重新开机。

重启一台机器

重启在所有提供它的地方都是一样的——机器那一行的 ⋯ 菜单、机器仪表板、工具栏的机器菜单——而且在胖客户端上与在这台 Mac 上也一样:

  1. **重启“…”?**会请求确认:“把机器干净地关掉再重新开机。其中运行的一切都会停止。”
  2. 系统会请机器关机,就像按下它的电源按钮,好让它的文件系统写出、服务停止。若 15 秒后(Kubernetes 节点或注册表则为 60 秒)仍未关机,就会切断它的电源。
  3. 它会重新开机——绝不从已存状态——完全和一次启动一样,使用当前的设置(包含偏好设置 › 模型)。

强制重启。 选择重启时按住 ⌥(Option):在工具栏的机器菜单中,只要按着 ⌥,该项目就会显示为强制重启。确认会变成强制重启“…”?,机器的电源会在重新开机前立刻被切断——就像拔掉插头。其中未保存的任何东西都会丢失,所以请把它留给无法响应正常重启的机器。

在命令行中,bromure-cli vm reboot <机器> 做干净的重启,--hard 则是强制的(见CLI、API 与 MCP)。

已停止或已挂起机器上的会话不会丢失。它们会显示为已暂停,并随你的下一条消息继续,而那条消息会把机器再次启动。若你是关闭一台机器,会发生什么请见关闭一台机器。

⋯ 菜单

机器那一行上的 ⋯ 按钮会随机器的状态调整:

项目何时作用
启动关闭把机器开机。
恢复已挂起还原已存的状态。
关机 · 挂起 · 重启运行中或正在启动见停止一台机器。
将工作树添加到网格运行中把这台机器的每个工作树标签页加入网格。
编辑…总是打开设置编辑器。
复制总是复制这台机器。
回退主目录…总是把主目录回退到较早的一次开机。
重置磁盘总是从基础镜像重新克隆系统磁盘。
删除工作区总是删除这台机器。

编辑与重命名

编辑…(或工具栏机器菜单中的设置…,或 ⌘K 与会话菜单中的**“…”设置…)会打开设置编辑器,标题是该机器的名称。改动任何内容后点击存储**。要重命名一台机器,请在通用窗格中改名称。一次只会打开一个编辑器窗口。各窗格记载于设置参考。

复制

复制会立刻做一份完整副本,以原本的名称加上副本命名(例如 Web app 副本)。没有确认。副本会取得每一项设置与凭据、系统磁盘与主目录,能用写时复制的地方就用,所以在两者分歧之前不占额外空间。有三样不会复制:已存的 RAM 状态(副本会重新开机)、标签页布局,以及网络 MAC 地址(副本会以不同机器的身份加入网络)。

回退主目录

每次机器成功开机,Bromure 都会保留它主目录镜像的一个写时复制检查点。这个阶梯会保留最近几次开机,接着一周内每天一个,接着一个月内每周一个。创建检查点不花成本,但随着主目录与它们渐行渐远,它们会占用实际的磁盘空间。

**回退主目录…**会打开一张列出这些回退点的面板。

“回退‘Web app’的主目录”面板,说明每个点都是那次开机开始时的主目录样貌。它显示“还没有回退点”、一条机器正在运行的提示与一个“关机”按钮,以及“取消”和一个禁用的“回退”按钮。

每个点会显示它的日期、距今多久,以及大小。挑一个并点击回退。下一次启动就会从那个主目录开机。当前的主目录会先被保留为一个新的点,所以回退本身也能从同一份列表中撤回。

机器必须是关闭的,因为主目录镜像是整个替换的。它运行时,面板会显示“机器正在运行——使用中时无法替换它的主目录。请先关机。”并附一个关机按钮,而回退会保持禁用。从未开机过的机器会显示“还没有回退点——这台机器每次启动都会取一个。”

同样的回退也可以在资源窗格中以**恢复主文件夹…取得,就在会完全清空主目录的清除主目录…**旁边。

重置系统磁盘

重置磁盘(也就是资源窗格中的重置为基础…)会从当前的基础镜像重新克隆机器的系统磁盘。确认信息把“…”的系统磁盘重置为基础?会列出将要丢失的东西:你用 sudo apt install 安装的一切、对 /etc、/var、/usr、/opt 的更改,以及全系统设置。你的主目录不受影响:项目、dotfiles、.ssh 密钥、npm-global、.cargo 与 shell 历史都会保留。用重置为基础确认。

重置也会丢掉已存的 RAM 状态与标签页布局,所以下一次开机会是干净的。机器运行中时,它会以**请先关闭“…”。**被拒绝。

注意: 检查点与挂起回答的是不同的问题。挂起保留的是运行中的状态,好让你可以恢复它。检查点保留的是已知良好的某次开机时的主目录,好让你把坏掉的环境倒回去。每当某个已存挂起状态所属的磁盘被重置或回退,那个状态就会被丢弃。

删除一台机器

删除工作区(也就是工作区 › 删除,它会删除舞台上的机器——显示会话时即该会话的机器——而在舞台没有显示单一机器时,例如房间、看板或新建会话界面,它会被禁用)会问删除工作区“…”?——“移除它的磁盘、设置与 SSH 密钥。已挂载的主机文件夹不受影响。”用删除确认。

这会删除 ~/Library/Application Support/BromureAC/profiles/ 之下该机器的整个文件夹:它的设置、加密的秘密、系统磁盘、主目录镜像、检查点与主机端的 SSH 密钥。它也会把该机器从任何 Kubernetes 集群的访问列表中移除。你分享进机器里的主机文件夹位于你的 Mac 上,会被原样留下。

警告: 删除一台机器无法撤销。没有回收站。你想保留的任何东西,都应该在删除之前放在共享的主机文件夹中,或已提交并推送。

创建一台机器

你可以从以下位置创建一台机器:

  • 虚拟机标头上的 +;
  • 工作区 › 新建工作区…(⇧⌘N);
  • 工作区 › 从我的配置新建工作区…(⇧⌥⌘N),或在 + 上按住 Option 点击;
  • 新建会话界面上机器标签列表末端的新建机器…;
  • ⌘K 面板中的新建机器…。

以上每一个都会打开设置编辑器,标题为新建工作区,内容以你在偏好设置中的默认值填好,并带一个尚未使用的名称,例如默认工作区或默认工作区 2。在通用窗格中给它一个名称,改动其他你需要的部分,然后点击创建(或取消)。**从我的配置新建工作区…**会先运行设置向导的凭据导入,让新机器一开始就带着在你 Mac 上找到的凭据。

每个代理在每台机器上都可用,而机器会使用在偏好设置 › 模型中设定的模型,除非你在它的模型窗格中给它自己的。见模型与提供方。

提示: 编辑器中的大多数更改会在你点击创建或存储时套用。有少数会立刻生效,因为它们动到的是共用状态而不是机器自己的设置:模型下载、MCP 的 OAuth 登录,以及 SSH 密钥导入。

机器终端与标签页

在一台机器里,每个终端都是某一个 tmux 会话的窗口。tmux 是事实来源:应用把机器的窗口映射成它那一行下的标签页,因此一台机器可以在没有任何窗口开着的情况下继续运行、被分离出去,或从另一台 Mac 被镜像(见远程访问与客户端),而不扰动它的代理。

当机器的终端在舞台上时,这些按键组合会作用于它的标签页:

快捷键操作
⌘T新建标签页(机器那一行的 + 与工作区 › 新建标签页亦同)
⌘W关闭标签页。关闭最后一个标签页会关闭机器(见关闭一台机器)。
⌘1 – ⌘9前往该编号的标签页。编号会出现在所选机器前九个标签页的旁边。
⌘D把这个终端加入网格并显示网格(工作区 › 将终端添加到网格)

⌘N 仍然是开始一个新的会话。当舞台上是会话而不是终端时,⌘1 – ⌘9 与 ⌘W 会改为作用于会话;见会话主页。

标签页标签显示前台的程序(claude、codex、某个 shell…)。每个标签页的图标带着代理的状态圆点:工作中是橙色并脉动,完成后是绿色,需要你时是红色。

工作树标签页

工作树标签页是一个在自己的 git 工作树中运行的代理:同一个仓库的另一个分支,签出在它自己的文件夹里。对代理的对话来说,分支会话才是惯常的做法。在机器的终端标签页上,传统的工作树命令仍然存在。

在标签页上点右键可取得:

  • 新建工作树…(⇧⌘G,工作区 › 新建工作树)。当该标签页不在仓库中时,会以**新建工作树…(不在 git 仓库中)**显示为禁用。它会打开一个对话框,“从这个标签页当前的提交分出一个 git 工作树,并在其中打开一个嵌套的代理。”,内含任务名称、代理(claude、codex、grok、kimi 或 omp)与选填的初始提示。分支会按任务名称命名为 wt/<slug>。
  • 新建自动化…,它会以这个标签页的机器与文件夹打开自动化编辑器(见自动化)。
  • 在工作树标签页上:合并…(⇧⌘M,工作区 › 合并工作树)、附加终端(在工作树文件夹中的一个纯 shell)与丢弃工作树(在询问后移除签出并删除它的分支)。
  • 在遇到冲突的合并标签页上:让代理解决冲突。

合并…让你挑选合并到哪里:上层工作树(默认),或直到仓库根的任何祖先;当它跳过一层时会标注⚠︎ 会跳过中间层。若该机器有 GitHub 凭据,创建 Pull Request 会推送分支,并改为让代理开一个 pull request。有冲突时会在合并标签页中启动代理来解决。只有已提交的工作会被合并;当你丢弃工作树时,未提交的更改会丢失。

工作树标签页会嵌套在它们所分出的那个标签页之下,最多六层。当文件窗格在机器标签页上显示一个仓库时,其标头下方的一条栏会提供新建工作树…,若该标签页本身就是工作树,则还有合并与删除。

终端外观

机器终端是原生的、由 GPU 绘制的终端。它们的字体、颜色、光标与窗口不透明度来自该机器的外观设置,一经存储就套用。只会使用等宽字体;其他一律退回 Menlo。不透明度低于 1.0 时,终端区域会是桌面之上的毛玻璃(不透明度限制在 0.3–1.0)。⌘+、⌘− 与 ⌘0 可缩放字体,触控板的捏合与双指双击(重置)也是。

这些设置只适用于终端。会话的聊天视图有它自己的外观。

网格

网格最多可铺陈 25 个实时终端(最多 5 × 5),来自任何机器的任意组合,让你一次看好几个代理。每个格子都是那个 tmux 窗口自己的实时视图,与机器自身的舞台无关,所以两者可以同时开着。

  • 显示它:点击虚拟机区段顶部的网格节点,或折叠侧边栏上的网格按钮。它的成员终端列在该节点之下;点击其中一个可聚焦它的格子。
  • 加入终端:把标签页那一行拖到网格节点上(“把终端拖到这里就能并排观看”)、在终端上按 ⌘D,或用机器 ⋯ 菜单中的将工作树添加到网格。
  • 新终端会自己加入。 机器起来之后打开的每个终端(代理标签页、工作树、纯终端)都会被加到末尾。网格满了时,最旧的格子会离开以腾出空间。在网格节点上点右键可开关自动添加新终端。用手重新排列格子会把它关掉;之后布局就由你决定。
  • 格子。 每个格子的标头显示一个状态圆点、机器名称与标签页标签,并附在工作区中打开与从网格移除——终端会继续运行两个按钮,以及一个把格子拖到别处的把手。在标头上点右键可取得同样的操作,或在网格节点下的成员上点右键取得从网格移除。
  • 缩放。 双击一个格子,或在被聚焦的格子上按 ⌘↩,就能让它填满舞台。再做一次可缩回。Esc 不会缩回,因为代理会用 Esc。

已关机或已挂起机器的格子会保留为占位格,显示关闭或已挂起与一个启动按钮。终端已从运行中机器消失的格子会被移除。网格(含自动添加的设置)会保存在 ~/Library/Application Support/BromureAC/grid-layout.json,跨重启保留。

分离与重新并入

分离到独立窗口(工具栏的机器菜单,或机器那一行上的分离按钮)会把一台运行中的机器移到它自己的窗口;它的标签页会变成那个窗口标题栏上的一排胶囊。分离出来的窗口有自己的工具栏:IP 地址(点击可拷贝)、一个列出分享进机器里的主机文件夹的文件夹按钮、重启、跟踪、设置,以及把它并回去的把此 VM 移回主窗口。

文件窗格

文件窗格是舞台右侧的一个文件浏览器。用 ⌃⌘E 或工具栏的文件按钮切换它。

它显示:

  • 舞台上会话的文件夹,不论其代理是否在运行(在房间中是被聚焦格子的会话);
  • 在机器的终端标签页上,则是该标签页当前的文件夹(在仓库中时是仓库的根)。

在会话或标签页之间移动时,窗格会跟着你走。没有东西可显示时,它会写“未选择会话”。

浏览

  • 标头会写出所显示的文件夹。↑(上一级外围文件夹)前往上层;双击某个文件夹,或点右键选择显示此文件夹,即可进入它。
  • 文件会按它们的 git 状态上色,并带一个字母的标记(M、A、U、D、R、!),含有更改的文件夹会带一个圆点。这对该文件夹自己的仓库,以及嵌套在其中的仓库都有效,所以浏览你的主目录仍然看得到每个项目的更改。含有更改的文件夹会自行展开一次。
  • 一个胶囊会计算已更改的文件数。筛选按钮可切换为只显示已更改的文件,刷新按钮会重新加载(窗格在可见时也会每 4 秒自行更新)。
  • 点击一个文件会打开含差异与文件两个标签页的详情视图:带 +/− 计数的彩色差异,或一份预览(Markdown 已渲染、源码带语法高亮)。一个分离按钮会把详情开在它自己的窗口中,并跟随你的选择。

当显示的文件属于舞台上的代理时,差异的边界会长出评论气泡:对行加评论,然后用发送给代理把评论以一条消息交给那个代理。审查窗口则是对整个更改做同样的事。

把文件移进移出

  • 向外。 把文件拖到 Finder,或点右键选择存储到“下载”。拷贝路径会拷贝它在机器内的路径。
  • 向内。 从 Finder 把文件放到窗格的任何地方,即可把它们复制到所显示的文件夹。空的文件夹会写“空文件夹——把文件放到这里以加入一些。”

传输走的是机器自己的通道,而不是共享文件夹,所以在任何机器上都能用,包含远程的。机器必须在运行中。

它何时会自己打开

  • 对会话: 应用大约每十秒检查运行中会话的文件夹。舞台上的会话第一次出现更改时(仓库中未提交的工作;在其他任何文件夹中,则是会话开始以来写入的文件),文件窗格就会打开。如果你把它关掉,它会保持关闭,直到该文件夹再次变干净(例如提交之后),然后又再有更改。
  • 在机器标签页上: 进入一个 git 仓库会打开窗格,离开它进入非仓库的文件夹则会关闭。手动关闭优先,直到你移到另一个仓库。

注意: 文件窗格从不编辑文件内容。它最多列出 20,000 个文件(超过则树状结构会被截断),预览最大 512 KB 的文件,差异最大 1 MB。

剪贴板与粘贴文件

剪贴板通过终端本身跨入机器终端;没有什么要设置的。

  • 客户机 → Mac。 在客户机中复制(tmux 的复制模式,或任何使用 OSC 52 的程序)会落在 Mac 的剪贴板上。在 tmux 中放开鼠标选取就会复制它。
  • Mac → 客户机。 ⌘V 会把 Mac 的剪贴板当作文本粘贴(bracketed paste)。
  • 选取。 鼠标拖动可选取文本;⌘C 复制它。单纯选取绝不会复制。

粘贴与放入文件

当剪贴板里是文件而不是文本时,在机器终端中按 ⌘V 就成了一次文件传输。把文件拖到终端上也一样。每个文件会被复制到机器内的 /home/ubuntu/.bromure/pastes/ 之下,并在原处输入它在机器内的路径,让代理可以从磁盘读取它。

  • 任何普通文件都可以:图片、PDF、压缩包,什么都行。复制的文件会保留名称,前面加上时间戳,并把 shell 需要引号处理的字符换成 _。剪贴板上的位图(屏幕截图、浏览器的“复制图片”)会变成一个 clipboard-<时间戳>-<id>.png 文件。
  • 一次粘贴最多 512 MB。更大的东西、包含文件夹的选取,或同时带有文本的剪贴板,都会照常当作文本粘贴,所以普通的 ⌘V 绝不会被劫走。
  • 光标处会出现一个带上传进度的标签,完成后短暂停留(失败则为红色),并在你下一次按键时消失。
  • 粘贴的文件位于主目录镜像中,所以路径能在重启后保留。超过 7 天的文件会在机器内被清理掉。

在会话的聊天中,放入与粘贴的文件会改为成为附件;见聊天。

提示: 链接会自己往另一个方向走。当机器里的程序打开一个 http 或 https URL(OAuth 登录、xdg-open),它会在你 Mac 的默认浏览器中打开。

共享文件夹

若要持续处理位于你 Mac 上的文件,请把那个文件夹分享进机器,而不是把文件来回复制。最多可以分享 8 个主机文件夹;每一个都会在客户机的主目录中以 ~/<文件夹名称> 出现。见文件夹设置。

关闭一台机器

你用关闭此 VM(它那一行上的 ×)、它分离窗口的关闭按钮,或在它最后一个标签页上按 ⌘W 来关闭一台机器。会发生什么由机器通用设置中的关闭窗口时决定:

设置作用
在后台运行只有视图消失。VM 会继续运行,它的代理也会继续工作;随时可从侧边栏再打开它。
挂起把 VM 的 RAM 存到磁盘并停止它。下一次启动会连同同样的终端一起还原它。
关机干净地把 VM 关掉电源。系统磁盘与主目录会保留;下一次启动是完整开机。
询问(默认)每次都问关闭“…”?,并提供在后台运行、挂起、关机与取消。

关闭一台机器和结束一个会话不是同一件事。要停止某一个代理,请结束或归档它的会话(见会话主页);机器会为它的其他会话继续运行。

几个细节:

  • 恢复需要同一台机器。 已挂起的机器只能以同样的配置恢复,所以它的身份、网络地址与共享文件夹都会和快照一起保存。在它挂起期间更改共享文件夹,会要求你丢弃已存状态;下一次启动就会是全新开机。主目录与共享文件夹中的文件不受影响。
  • 恢复失败。 若你亲自启动机器时无法还原已存状态,它会改为重新开机。
  • 关闭不会销毁任何东西。 数据只会因重置磁盘、清除主目录…、删除工作区,或凭据外泄警报后的清除而丢失,而且即使那时,设置、令牌与 SSH 密钥仍会保留,共享的主机文件夹也绝不会被碰到。

机器存在哪里

每台机器都是 ~/Library/Application Support/BromureAC/profiles/<id>/ 之下的一个文件夹:

路径内容
profile.json所有非秘密的设置。
secrets.enc每一项秘密,以保存在你钥匙串中的密钥加密。
disk.img机器自己那份基础操作系统的副本。
home.img持久存在的 /home/ubuntu。
checkpoints/主目录(与系统磁盘)的回退点。
vm.state已挂起机器所保存的 RAM。
agent/、ssh/主机端的 SSH 密钥材料。私钥绝不会进入 VM。

你在偏好设置中的默认值保存在 profiles/ 之外,这就是它们从不以机器的形式出现的原因。秘密绝不会被写进 profile.json,也不会被复制进 VM:客户机只持有替身,由主机的代理服务器在线路上把它们换成真正的值(见凭据与线路边界)。

提示: disk.img、home.img 与各检查点都是 ext4 镜像。**工作区 › 打开 ext4 文件…**可以在你的 Mac 上浏览、从中取出并修复它们,不必启动任何东西。见进阶。

从命令行

本章的一切也都可以不通过窗口完成。应用运行中时,bromure-cli vm ls 会列出机器与它们的状态,而 workspaces create、workspaces edit、workspaces describe 与 workspaces rm 会创建、更改、查看与删除它们(vm 是 workspaces 的别名)。见CLI、API 与 MCP。