工作階段
工作階段是一個正在執行的工作區:其 Ubuntu VM 已開機、其終端機分頁運作中,且其代理程式正在工作。本章涵蓋從按下 啟動 到關閉視窗之間發生的一切——工作階段視窗的版面配置、分頁與 git 工作樹、內嵌瀏覽器與檔案窗格、在 Mac 與 VM 之間移動檔案與剪貼簿內容、檢查點,以及工作階段結束時你可做的選擇。
與同門的 Bromure 網頁瀏覽器(其工作階段會在視窗關閉時銷毀)不同,Bromure Agentic Coding 的工作區在設計上是持久保留的。VM 的系統磁碟與家目錄會跨工作階段保存;只有刻意的動作(重設為基底…、清除家目錄…、刪除工作區)或安全清除才會銷毀資料。關閉工作階段只是決定 VM 接下來要做什麼:保持執行、暫停,或關機。
工作階段如何運作
每個工作區恰好對應一個 VM。VM 從各工作區專屬的系統磁碟(disk.img)開機——這是共用 Ubuntu 基底映像檔的 APFS 寫入時複製(copy-on-write)複本,於首次啟動時即時建立,並在之後每次啟動時重複使用。你在 VM 內安裝的任何東西(sudo apt install、語言工具鏈、系統設定)都會跨工作階段保存。家目錄 /home/ubuntu 則另外儲存——現代工作區儲存在私有的稀疏 ext4 磁碟映像檔上——即使完整重設系統磁碟後仍會留存。深入的儲存模型請參閱概念。
在 VM 內部,所有終端機都屬於單一個 tmux 工作階段。tmux 是真相來源:每個 UI 分頁都是一個 tmux 視窗,主機會將客體的分頁清單鏡像至側邊欄。這種設計意味著 UI 可以自由分離與重新連接——工作階段可以在背景無介面持續執行、彈出到自己的視窗,或從另一台 Mac 鏡像(參閱遠端存取),而不會干擾代理程式的工作。
附註: 工作區 VM 不會從集區預先暖機。每一個都從自己的磁碟冷開機(或從暫停快照還原)。只有代理式瀏覽器窗格背後的側車 VM 會使用預先暖機的集區。
啟動工作階段
你可以從多個位置啟動已停止的工作區:
- 在側邊欄選取工作區並按下 啟動(若已暫停則為 恢復)——可在舞台的啟動卡片上,或在 VM 儀表板中操作。
- 按下工作區側邊欄列上的 ⋯ 並選擇 啟動。
- 按一下終端機格狀檢視(Grid)中屬於關閉工作區的預留位置格。
開機的內容
- 首次啟動——應用程式使用 APFS 寫入時複製複本,將基底映像檔複製到工作區的
disk.img。複製是即時的,且前期不佔用磁碟空間;區塊僅在客體寫入時才配置。家目錄映像檔與各次啟動的共用區(中繼資料共用區與寄件匣)也會建立,VM 隨後以 4 個 vCPU(固定)與工作區設定中配置的 RAM 開機。 - 後續啟動——重複使用既有的系統磁碟與家目錄,因此在 VM 內安裝的一切都還在。
- 已暫停的工作區——不進行冷開機,而是還原已儲存的 RAM 快照(
vm.state),工作階段恰好從中斷處恢復,其分頁列也會從已儲存的分頁快照重新填充。恢復幾乎是即時的。
依預設,VM 會加入 Bromure 的共用 NAT 交換器:每個工作區 VM(以及代理式瀏覽器 VM)共用一個私有子網路、取得穩定的 DHCP 位址,並可觸及其他 VM——因此瀏覽器窗格可以透過 VM 的 IP 載入代理程式啟動的開發伺服器。工作區設定中另提供各工作區專屬的 橋接(Bridged) 模式。記憶體與網路選項請參閱設定——一般。
開機畫面
VM 開機時,一個動畫「潛入」覆蓋層會覆蓋終端機區域——掃描進度列上方顯示工作區名稱,並有選用的狀態列。它只有在開機超過 0.4 秒時才會出現,並在客體回報其第一份分頁清單的當下淡出。在家目錄儲存遷移期間,覆蓋層會改為顯示確定式進度(例如「MOVING HOME — 42% OF 7.9 GB」)。
若 30 秒內沒有終端機出現,覆蓋層會切換為 DIVE FAILED 面板——「«name» never returned a terminal after 30 seconds. The VM may be stuck, or the base image may be damaged.」——並有兩個按鈕:
- Keep Waiting——重新啟動監視程式並繼續開機。
- Reset Base Image…——當共用映像檔本身損壞時,開始重建基底映像檔。
若開機反覆失敗,請參閱疑難排解。
啟動時的提示
啟動之前可能會出現以下其中一種提示:
| 提示 | 出現時機 | 選項 |
|---|---|---|
| 基底映像檔漂移 | 自本工作區的磁碟被複製以來,共用基底映像檔已重建 | 重設並啟動(從新基底重新複製;家目錄不變)/照原樣啟動/取消 |
| 遭入侵的工作區 | 先前的工作階段被標記為憑證外洩 | 在開機前確認清除磁碟、家目錄、RAM 快照與各次啟動的共用區;設定、權杖與 SSH 金鑰會保留。請參閱憑證。 |
| 家目錄儲存升級 | 工作區仍使用舊版共用資料夾式家目錄 | 立即升級(在本次開機期間遷移至 ext4 家目錄映像檔)/稍後(下次啟動時再詢問) |
| 模型仍在下載 | 必要的本機模型尚未完成下載 | 啟動會被拒絕並附上說明。請參閱本機模型。 |
| 磁碟已滿 | 主機儲存區可用空間少於 1 GB | 啟動會被拒絕並顯示明確錯誤,而非在工作階段中途卡住。 |
工作階段視窗
所有工作階段都存在於單一個共用視窗中,標題為 Bromure(預設 1320 × 860 點)。它是 Mail.app 風格的分割:左側是可調整大小的側邊欄,列出每個工作區;右側是單一 舞台,顯示所選工作區的終端機。標題列透明並與工具列統一;按一下其空白區域可拖曳視窗,類似瀏覽器。
上方螢幕截圖顯示選取了某個關閉工作區的視窗:左側是 WORKSPACES 側邊欄(含釘選的 Grid 節點、兩個顯示 Off 狀態的工作區、一個 AUTOMATIONS 區段,以及用於建立工作區的黑色 + 按鈕),舞台則顯示該工作區的 VM 儀表板——CPU、Memory、vCPUs、Disk 與 Uptime 的統計卡片、一份 CONFIGURATION 摘要,以及一個 啟動 按鈕。
工作區側邊欄
側邊欄是一份來源清單,每個工作區佔一列——無論是否執行中。每列顯示工作區名稱、其強調色磚,以及執行狀態徽章:
| 徽章 | 狀態標籤 | 意義 |
|---|---|---|
| 綠點 | — | 執行中 |
| 橘色、脈動 | Starting… | 開機中 |
| 黃點 | Suspended | RAM 快照已存於磁碟 |
| 灰點 | Off | 已關機 |
紅色驚嘆號三角形標示遭入侵的工作區。執行中的工作區會在其下方巢狀顯示終端機分頁(依工作樹樹狀順序),外加一個永遠存在的 Docker 節點,並顯示滑鼠懸停控制項:彈出、關閉(×),以及用於新增分頁的 +。每列上的 ⋯ 選單提供依狀態而定的生命週期動作:啟動/恢復/Shutdown/Suspend/Reboot、Add Worktrees to Grid(僅限執行中)、編輯…、複製、Reset disk,以及 刪除工作區。
附註: Shutdown 與 Reboot 會要求確認,因為它們會停止執行中的處理程序。Suspend 不會——它可完全復原。
拖曳側邊欄與舞台之間的分隔線可調整其大小(預設寬度 220 點)。拖曳到約 100 點以下時,側邊欄會貼齊為 44 點的圖示欄;往回拖過該界線可展開。⌃⌘S 可切換側邊欄的摺疊狀態。在摺疊的圖示欄中,容器分頁會隱藏,工具提示則帶有工作區與分頁的脈絡資訊。
舞台
舞台顯示所選分頁的終端機。它也可以被全幅覆蓋層表面覆蓋:
- VM 儀表板——按一下側邊欄中工作區的 名稱(見下文)。
- 終端機格狀檢視(Grid)——按一下釘選的 Grid 節點(參閱終端機格狀檢視)。
- Docker 儀表板——按一下執行中工作區下的 Docker 節點以管理容器與映像檔。
- 自動化編輯器——從 AUTOMATIONS 區段(參閱自動化與 CLI)。
舞台右緣內另有兩個分割:代理式瀏覽器窗格(⌃⌘B)與檔案總管窗格(⌃⌘E)。
VM 儀表板
按一下工作區的名稱(而非其某個分頁)會在舞台上覆蓋其儀表板,適用於任何執行狀態。對於執行中的 VM,它會顯示即時生命徵象:帶有走勢圖的 CPU、已用/已配置記憶體、帶有平均負載的 vCPU、磁碟使用量(取自客體本身的 df,比主機端的複本大小更真實)、運作時間,以及一張 Listening Ports 卡片,將客體對外可觸及的通訊端列為 <VM-IP>:<port> 端點並可一鍵複製。可能是 HTTP 的服務還會有一個地球按鈕,可透過 Cloudflare 快速通道將該單一服務公開至網際網路(一次性同意對話框會說明下載內容與條款)。對於已暫停或關閉的工作區,儀表板則改為顯示機器規格與設定。
動作列在執行中提供 New Terminal、Suspend、Reboot 與 Shut Down,其餘狀態則為 啟動/恢復。一張 CONFIGURATION 卡片摘要各工具的驗證模式、防護欄、提示注入掃描,以及共用資料夾。
附註: 生命徵象約每 1.5 秒從客體重新整理一次。剛開機後出現的零值代表客體代理程式尚未回報。
標題列控制項
當所選工作區執行中時,一組因所選 VM 而異的控制項群集會位於工具列的尾端:
| 控制項 | 作用 |
|---|---|
| IP 藥丸 | 以等寬字型顯示的 VM IP 位址。按一下即可複製——它會閃現 Copied。工具提示:VM IP — click to copy。 |
| 串流點 | 當工作階段中繼資料正被傳送至 bromure.io 時顯示的脈動紅點(已註冊的 Mac、非私密工作區)。請參閱企業版。 |
| 引擎徽章 | 本機推論狀態:引擎暖機時為旋轉圖示、就緒時為綠色 cpu 圖示、失敗時為橘色。請參閱本機模型。 |
| Fusion 閃電 | 為此工作區切換 Fusion。啟用時為黃色(Fusion engaged — click to disengage)。在至少兩個供應商擁有可用憑證之前會停用,並顯示工具提示 Enable at least two models to use Fusion。 |
| Browse files | 開啟各工作區專屬的檔案瀏覽器視窗(參閱移動檔案與剪貼簿)。 |
| Reboot the VM | 重新開機客體。 |
| Inspect trace (⇧⌘I) | 開啟追蹤檢視器。 |
| 編輯工作區 | 開啟工作區編輯器。 |
| Pop out to its own window | 將工作區移入其自己的視窗(見下文)。 |
| Show or hide the agentic browser (⌃⌘B) | 切換瀏覽器窗格(地球圖示)。 |
| Show or hide repo files (⌃⌘E) | 切換檔案總管窗格。 |
彈出與重新停靠
任何執行中的工作區都可以從統一視窗彈出到其自己的單一 VM 視窗:按一下其側邊欄列或工具列上的彈出圖示。它的分頁會成為該視窗標題列中的膠囊藥丸列,窗格則保留其 VM 與分頁狀態——只有承載的視窗改變。彈出的視窗帶有相同的工具列控制項,外加一個重新停靠按鈕(Move this VM back into the main window)與一個共用資料夾彈出視窗,列出已掛載的主機資料夾(按一下某列可在 Finder 中開啟)。按下重新停靠按鈕可將工作區摺回統一視窗。
使用分頁
每個分頁都是工作區 VM 單一 tmux 工作階段中的一個 tmux 視窗。tmux 是權威來源:客體約每 0.7 秒發布其視窗清單,主機則將其鏡像至側邊欄各列(以及彈出視窗的藥丸列)。重新命名等分頁變更約在 40 毫秒內就會被擷取。
- 新增分頁——按 ⌘T,或按一下工作區側邊欄列上的 +。
- 關閉分頁——按 ⌘W,或將滑鼠懸停在某分頁列並按其 ×。關閉 最後一個 分頁會結束工作階段,並經由與關閉視窗相同的關閉動作管線處理。
- 切換分頁——按 ⌘1 至 ⌘9。所選工作區前九列旁會出現小型和弦標籤;編號依循側邊欄可見的樹狀順序(不含容器分頁)。
分頁標籤顯示前景程式(claude、codex、某個 shell 等等);工作樹分頁則顯示較友善的顯示名稱,例如「Website refactoring (claude)」。透過將 shell 連接進 Docker 容器所開啟的分頁,會巢狀顯示於 Docker 節點中該容器之下,而非最上層。
附註: 分頁關閉後,tmux 視窗索引可能出現空隙;UI 會處理對應關係,而 ⌘-數字和弦一律依循你在側邊欄所見的內容。
代理程式狀態點
每個分頁的圖示都帶有一個彩色狀態點,追蹤其中執行的代理程式:
| 點 | 意義 |
|---|---|
| 橘色、脈動 | 代理程式工作中 |
| 綠色 | 代理程式已完成 |
| 紅色 | 代理程式需要你的輸入 |
狀態由 Claude Code 的各視窗掛勾以及其他代理程式的流量代理伺服器驅動,因此這些點無需在 VM 內做任何設定即可運作。
Git 工作樹
git 工作樹 是同一個儲存庫的第二份工作副本:另一個分支被簽出到自己的目錄中,共用儲存庫的歷史記錄,但擁有自己的檔案與自己的索引。Git 支援同時擁有多個工作樹,因此可以平行處理數個分支,無需暫存變更、重新複製或在原地切換分支。
Bromure 在此基礎上建立平行的 代理程式 工作線。任何工作目錄位於 git 儲存庫內的終端機分頁,都可以衍生一個帶有自己巢狀代理程式分頁的工作樹——一個代理程式在 wt/website-refactoring 上重構網站,同時另一個在 wt/login-fix 上追查錯誤,各在自己的簽出中,彼此都不會踩到對方未提交的檔案。當某條工作線就緒時,你將其分支合併回去(或從中開啟拉取請求)並捨棄工作樹。這是將一項任務同時分散給數個代理程式並在終端機格狀檢視中觀看它們的自然方式。
建立工作樹
在側邊欄中的任何分頁列上按右鍵可開啟其快捷選單。有兩個項目一律存在:
- New worktree…——開啟下方所述的對話框。當分頁的工作目錄不是 git 儲存庫時,此項目仍會顯示但停用,標示為 New worktree… (Not in a git repo),因此選單永遠不會靜默地空白。工作樹分頁本身就是一個簽出,因此它也提供 New worktree…——這正是從工作樹分出工作樹的方式。
- New automation…——以該分頁的目錄預先填入自動化編輯器(參閱自動化)。
New worktree 對話框——「Creates a git worktree branched from this tab's current commit and opens a nested agent in it.」——會收集三項資訊:
| 欄位 | 用途 |
|---|---|
| Task name | 一個簡短的人類標籤,例如 Website refactoring。它會被 slug 化為分支名稱並顯示在分頁上。 |
| 工具彈出選單 | 要在新簽出中啟動的代理程式——claude、codex 或 grok。預設為工作區配置的代理程式。 |
| Initial prompt(選用) | 代理程式啟動時交給它的第一則訊息,因此工作樹可以在無人看管下開始工作。留空則讓代理程式閒置開啟。 |
按 Create(或 Cancel)。Bromure 會新增一個從該分頁目前提交分出的 git 工作樹,分支名為 wt/<slug>——slug 是任務名稱轉為小寫、將其他字元的連續段落收合為單一破折號並上限 40 個字元;若某名稱的分支已存在,則會加上 -2、-3… 後綴。接著會在新簽出中開啟一個巢狀代理程式分頁,以任務名稱與工具標示,例如「Website refactoring (claude)」。
附註: 若無法判定分頁的工作目錄,會有一則警示——「This tab's working directory isn't available yet」——說明工作區可能正在執行較舊的 VM 內代理程式,並建議重新啟動它(Shutdown,然後 啟動),以便它取得工作樹支援。
工作樹分頁如何巢狀
工作樹分頁巢狀顯示於它們所分出的分頁之下,並縮排、加上小型分支圖示前綴,讓巢狀子代理程式讀起來像分支而非普通分頁。由於工作樹本身也可以被分出,這種巢狀是一棵樹:支援從工作樹分出的工作樹,縮排在每一層向內遞進,最深達 6 層。一個 Attach terminal 分頁與一個執行中的 Merge → … 分頁會以相同方式巢狀於其工作樹之下。這只是一種顯示順序——每個分頁仍是普通的 tmux 視窗,而 ⌘-數字和弦依循可見的樹狀順序。
若要並排觀看數個工作樹代理程式,請使用工作區 ⋯ 選單中的 Add Worktrees to Grid,它會一次將該工作區的每個工作樹分頁加入終端機格狀檢視。
工作樹動作
在工作樹分頁上按右鍵可取得其專屬動作——Merge…、Attach terminal,以及(在分隔線下方的)Discard worktree。
Merge… — 將分支合併回去。 該對話框會在一個於目的地簽出的新分頁中執行合併;只有工作樹分支上已提交的工作會被合併。其目的地選擇器會沿著 祖先鏈 走——直接的上層工作樹、然後該工作樹的上層,如此一路向上直到儲存庫根(「«branch» (repo root)」)。直接上層是安全的預設值,會為你選定;選擇更上層的任何項目都會標示 «label» ⚠︎ skips intermediates,因為那些中間的工作樹屆時永遠不會收到該變更。選擇一個目的地並按 Merge。
- 衝突會自行解決。 若合併發生衝突,程式碼代理程式會就在該合併分頁中啟動以自動解決。若它在衝突未解決的情況下停止,合併分頁會在其自己的右鍵選單中提供 Have the agent resolve conflicts 以再次嘗試。
- Create Pull Request。 當工作區擁有 GitHub 憑證(這正是在 VM 內驗證
gh的憑證)時,合併對話框會多出第三個按鈕 Create Pull Request。它不在本機合併,而是推送分支並讓代理程式針對所選目的地開啟一個乾淨的 GitHub 拉取請求。請參閱憑證。 - 合併不會捨棄工作樹——待你對結果滿意後再自行清理它。
Attach terminal 會開啟一個純終端機分頁——沒有代理程式,只是一個已 cd 進工作樹簽出的 shell——巢狀於該工作樹之下,讓你可以手動檢查或測試其變更。
Discard worktree 是清理步驟,且具破壞性:它會移除簽出並刪除分支。該分支上任何從未合併的提交都會遺失,因此它會先詢問——「Discard worktree "«name»"?」——並連同簽出一起關閉分頁。
附註: 只有已提交的工作會跨越合併或拉取請求。工作樹中未提交的變更會留在該工作樹中,一旦你捨棄它便永久消失。
來自排程自動化的工作樹
排程自動化也會建立工作樹。每次無人看管的執行都會在自己的 wt/<slug> 分支上建立一個全新的 git 工作樹並在其中啟動代理程式,因此一次執行會落地為一個普通的工作樹分頁——縮排、可連接、可合併,與你手動建立的工作樹完全相同。請參閱自動化。
終端機
作用中的分頁會在原生、主機端的終端機表面(libghostty、Metal 算繪)中呈現,並透過 virtio 通訊端連接至其 tmux 視窗。該表面的子處理程序只是位元組泵,因此死掉的子處理程序——VM 重新開機、通訊端斷線——永遠不會遺失終端機狀態:表面只會重新衍生並以退避方式重新連接。若原生終端機無法啟動,應用程式會靜默地退回到 VM 的圖形框架緩衝區;兩者都是同一個 tmux 工作階段的檢視。
外觀——字型家族與大小、背景與前景色彩、游標形狀與閃爍——來自工作區的外觀設定,並在你儲存設定檔時即時套用。新工作區會以深灰藍背景(#212734)上的 JetBrains Mono 12 為預設,前景色則取自你的 Terminal.app 佈景主題。只有固定間距字型會算繪;無法解析或比例字型的字型家族會退回到 Menlo。
字型縮放可依表面而定:⌘+/⌘−/⌘0、觸控板縮放手勢(每 ±0.25 放大倍率調整一個字型大小),以及雙指點兩下重設。
視窗不透明度低於 1.0 的工作區會取得毛玻璃終端機:終端機區域會以背景模糊與桌面合成,而標題列、側邊欄與分隔線保持不透明。不透明度會夾限於 0.3–1.0,並在儲存設定檔時即時套用。
終端機格狀檢視
格狀檢視(Grid)是一種舞台表面,可並排顯示最多 25 個即時終端機(版面配置會盡量趨於方形,上限 5 × 5),來自任意混合的工作區——非常適合觀看一整群工作樹代理程式。每個格子都是該 tmux 視窗上自己的即時終端機表面,獨立於工作區的舞台檢視,因此兩者可同時開啟。
- 新增終端機——將任何分頁列拖曳到側邊欄頂端釘選的 Grid 節點上(其工具提示為「Drag terminals here to watch them side by side」),或在作用中的終端機上按 ⌘D 以將其釘選並跳至格狀檢視。工作區 ⋯ 選單中的 Add Worktrees to Grid 會一次加入每個工作樹分頁。
- 顯示格狀檢視——按一下 Grid 節點(或摺疊圖示欄上的格狀檢視按鈕)。按一下某個成員列會聚焦其格子。
- 格子控制項——每個格子的標頭顯示狀態點、工作區名稱與分頁標籤,並有滑鼠懸停控制項 Open in workspace 與 Remove from grid — the terminal keeps running,外加一個用於交換格子位置的拖曳把手。在格子標頭上按右鍵可取得相同動作。
- 縮放——在格子上按兩下(或在聚焦的格子上按 ⌘↩)可將其縮放為全舞台;重複操作可取消縮放。Esc 刻意 不 取消縮放,因為代理程式會使用 Esc。
屬於關閉或已暫停工作區的格子仍會保留為預留位置卡片,帶有 Off 或 Suspended 標籤與一個 啟動 按鈕;其 tmux 視窗已消失的格子則會被修剪。格狀檢視的成員資格會跨應用程式重新啟動保留(存於 ~/Library/Application Support/BromureAC/grid-layout.json)。
代理式瀏覽器窗格
瀏覽器窗格是舞台內右側的分割,承載一個即時的 Chromium——在其自己的可拋棄式側車 VM 中執行,每個工作區一個,於首次開啟時延遲建立。你與代理程式都可以驅動它:代理程式透過內建的瀏覽器 MCP 伺服器控制它,而它們的工具呼叫可以為所選工作區自動開機並顯示瀏覽器。在你手動關閉之後,窗格永遠不會自行重新開啟。
提示: 本節將瀏覽器視為工作階段視窗的一個窗格。關於使用它的完整指南——自己驅動它、讓代理程式透過
browser_*工具驅動它、保持登入狀態,以及隱私模型——請參閱內嵌瀏覽器。
以 ⌃⌘B 或工具列的地球按鈕切換窗格。你第一次開啟時,會有一張同意卡片詢問 Install the browser?,並提供 Download & Install/Not Now——瀏覽器映像檔是一次性下載,約 500 MB。
你可以在其中做什麼
窗格是一個無 chrome 的瀏覽器檢視,頂端有一列精簡、Safari 風格的分頁列:
- 上一頁/下一頁——箭頭按鈕,或 ⌘[ 與 ⌘]。
- 分頁藥丸——每個分頁一個藥丸;作用中 的藥丸兼作 URL 欄位(「Search or enter URL」)。裸主機名稱會被加上
https://前綴;任何不是 URL 的內容都會變成 Google 搜尋。 - +——新增分頁(窗格具焦點時按 ⌘T)。
- DevTools——切換 Chromium 的 DevTools(F12)。
- Share——標準的 macOS 分享選單。
- Site info——按一下網站圖示(favicon)可取得網站資訊彈出視窗,包括 HTTPS 頁面上的憑證詳細資訊。
由於瀏覽器 VM 與工作區 VM 共用相同的 NAT 子網路,它可以透過工作區的 IP 直接載入代理程式的開發伺服器——從工具列的 IP 藥丸複製即可。
拖曳窗格的左緣可調整其大小(預設 640 點,介於 380 與 1400 之間;終端機一律至少保留 240 點)。拖曳到最小值以下會關閉窗格。
生命週期與持久保留
瀏覽器依預設是可拋棄的:其磁碟是一個短暫的複本,會在瀏覽器拆除時刪除,因此 cookie 與登入資訊會隨之消失。隱藏的瀏覽器會在 10 秒後暫停,並在摺疊 5 分鐘後完全拆除。窗格的開啟/關閉狀態會在應用程式執行期間依工作區記住,但刻意不跨應用程式重新啟動保留——反正短暫的瀏覽器也無法在重新啟動後留存。
若要保留登入資訊,請在工作區的瀏覽器設定中啟用 Stay signed in to websites:Chromium 的設定檔屆時會存於各工作區專屬的加密磁碟上,並在拆除後留存。切換此設定會重新啟動工作區的瀏覽器(儲存時會警告你)。
附註: 當瀏覽器檢視具鍵盤焦點時,⌘Q 與 ⌘Tab 會被客體擷取。按一下終端機或側邊欄可將它們取回。
檔案總管窗格
檔案總管窗格(標頭 FILES)將作用中分頁的 git 儲存庫顯示為 IDE 風格的原始檔樹。當作用中分頁的目錄進入 git 儲存庫的那一刻,它會自行開啟——cd 進入儲存庫,或切換到已在儲存庫內的分頁——因此你很少需要手動開啟它;你也可以用 ⌃⌘E 或 Show or hide repo files (⌃⌘E) 工具列按鈕切換它。進入儲存庫是觸發條件,因此從不造訪儲存庫的工作區就永遠不會顯示此窗格。
- 一眼看清 git 狀態——檔案依狀態上色並帶有單字母徽章(M/A/U/D/R/!),含變更的資料夾帶有橘點,一個藥丸顯示變更檔案數。標頭中有一個「僅變更檔案」篩選器與一個手動重新整理按鈕。
- 差異與預覽——選取某個檔案會開啟一個帶有 Diff/File 分段控制項的詳細分割:帶有 +/− 計數與行號邊欄的彩色統一差異,或算繪的預覽(Markdown 已算繪、原始檔語法高亮、影像與二進位檔已標示)。已刪除的檔案顯示為刪除線——「File was deleted — switch to Diff to see what was removed.」未追蹤與新加入的檔案沒有差異,只有預覽。
- 彈出檢視器——彈出按鈕會在一個獨立、可全螢幕的 File Viewer 視窗中開啟詳細資訊,並即時追隨窗格的選取。
- 工作樹動作——標頭正下方的一列可管理目前儲存庫的 git 工作樹,而無需開啟側邊欄選單:New worktree… 在儲存庫內一律可用,而 Merge 與 Delete 會在作用中分頁本身就是工作樹時出現。它們執行與 Git 工作樹一節所述相同的操作——New worktree… 開啟建立對話框、Merge 開啟目的地選擇器,而 Delete 在確認後捨棄工作樹及其分支。(僅限本機工作階段;在遠端鏡像中,請從側邊欄分頁選單管理工作樹。)
所有資料都是透過在 virtio 通訊端 shell 通道上於 客體內部 執行 git(與 head)收集而來——即使沒有共用資料夾,此窗格也能運作,遠端工作區亦然。此樹在可見時每 4 秒自動重新整理一次,含變更的目錄則每個儲存庫自動展開一次。
此窗格會以 IDE 風格自行開啟與關閉:進入儲存庫(cd 進入其中,或切換到目錄在其中的分頁)會開啟它;離開至非儲存庫目錄則會關閉它。手動關閉會優先,直到你變更儲存庫為止。拖曳窗格的左緣可調整大小(預設 260 點,介於 200 與 1000 之間;低於 200 會關閉它)。
附註: 檔案樹是唯讀的——它從不編輯檔案內容(工作樹列執行 git 操作,而非檔案編輯)。限制:列出 20,000 個檔案(超過則截斷樹)、每個預覽 512 KB、每個差異 1 MB。
移動檔案與剪貼簿
檔案與剪貼簿內容以四種方式跨越主機/VM 邊界:檔案瀏覽器視窗、共用資料夾、終端機剪貼簿,以及影像貼上。
檔案瀏覽器視窗
按一下 Browse files 工具列按鈕(資料夾圖示)會開啟一個標題為 Files — «workspace» 的 Finder 風格視窗,用於將檔案送入及送出 VM。其 Locations 側邊欄提供 Home——客體真正的 /home/ubuntu,透過 virtio 通訊端檔案服務即時瀏覽——外加每個共用主機資料夾各一個項目(直接在主機上瀏覽)。各列顯示圖示、名稱、大小與修改日期,且列表每 1.5 秒自動重新整理一次。
- 複製出來——將檔案從視窗拖曳到 Finder。客體檔案會在放下時延遲下載。
- 複製進去——將檔案放到面板上任何位置以將它們複製到目前目錄。傳輸會分塊(6 MB)進行,並帶有「Copying … in/out」進度藥丸;名稱衝突會取得 Finder 風格的「 copy」後綴;放下的資料夾會整個送達。
- 工具列——上箭頭(Enclosing folder)、一個等寬字型的客體路徑麵包屑、New folder、Reveal in Finder(僅限主機位置),以及 Refresh。
- 快捷選單——Open、Reveal in Finder(主機列),以及 Move to Trash(主機)或 Delete(客體)。
- 按兩下——主機檔案以其預設應用程式開啟;客體檔案會先下載到各工作區專屬的快取,再開啟。
附註: 隱藏的點檔案(dotfiles)不會顯示。客體位置需要執行中的 VM(「The workspace must be running to browse its files.」),而剛開機的 VM 可能會短暫回報「The in-VM agent is updating — try again in a few seconds.」。
共用資料夾
對於持續進行的專案工作,共用資料夾通常比一次性傳輸更佳:最多可將 8 個主機資料夾掛載進 VM,各以符號連結連入客體家目錄為 ~/<basename>(並有自動去重複,例如 src-2)。請在工作區的資料夾設定中設定它們。
剪貼簿
剪貼簿是透過終端機協定本身橋接的——無需設定另外的代理程式:
- 客體 → Mac——在客體內複製(tmux 複製模式、OSC 52)會自動落到 macOS 的剪貼簿上;在 tmux 中放開滑鼠選取即會複製它。
- Mac → 客體——⌘V 會使用括號貼上(bracketed paste)將 macOS 剪貼簿貼入終端機。
- 選取——普通的滑鼠拖曳會以 macOS 風格選取文字;⌘C 會複製主機端的選取內容。選取本身從不複製。
貼上影像
在剪貼簿有影像的情況下按 ⌘V 會變成一次檔案傳輸:影像會被寫入客體的 /home/ubuntu/.bromure/pastes/clipboard-<timestamp>-<id>.<ext>,而客體檔案路徑則以文字形式貼在其位置——如此代理程式便可從磁碟讀取該影像。一個暫時的縮圖標籤會出現在游標處,並在上傳期間帶有進度列,完成後短暫停留(失敗時為紅色),並在你下一次按鍵時消失。
被辨識為影像者:從 Finder 複製的影像檔(僅當 每一個 複製的項目都是影像時)以及裸點陣圖,例如螢幕截圖或瀏覽器的「Copy Image」——任何同時帶有文字風味的內容都會照常以文字貼上,因此普通的 ⌘V 絕不會被挾持。貼上總量上限為 96 MB(更大者會退回文字),而超過 7 天的貼上檔案會在客體內自動清理。貼上目錄位於家目錄映像檔中,因此貼上的路徑可在 VM 重新開機後留存。
提示: 連結會自動朝反方向運作:代理程式或 CLI 工具在客體內開啟的 URL(OAuth 登入、
xdg-open)會轉送至主機,並在你的預設 Mac 瀏覽器中開啟。只有http/httpsURL 會被轉送,且有速率限制;mailto:連結則刻意捨棄。
檢查點與回復
Bromure 會自動建立回復點,讓出錯的工作階段無需完整重設即可回退。
擷取的內容與時機
在工作區每次 成功 開機時,應用程式會靜默地將兩個儲存層都快照為寫入時複製複本,存於工作區的 checkpoints/ 目錄下:
- 系統磁碟(
disk.img),以及 - ext4 家目錄映像檔(
home.img,存於checkpoints/home/下),適用於採用現代家目錄模型的工作區。
由於檢查點只在產生可用終端機的開機之後才建立,每個檢查點都是經證明可開機的。保留遵循分層階梯:最近幾次開機無條件保留,接著一週內每天保留一個,再接著一個月內每週保留一個。檢查點建立免費,但會隨著即時磁碟與其分歧而消耗實際磁碟空間。
還原家目錄
Restore home… 位於工作區編輯器的資源窗格中,在 Your home folder 儲存列上(工作區執行中時它會停用——請先關閉工作階段視窗)。
按一下它會在彈出視窗中列出可用的回復點——如對話框所述,「each one is the home as it was when that session started」。挑選一個並確認:目前的家目錄會先被建立檢查點,因此還原本身也可以復原。從未在 ext4 家目錄模型上開機過的工作區則會改為顯示 No home checkpoints yet。
重設系統磁碟
Reset to base… 位於同一窗格的 Workspace system disk 列上(在側邊欄的 ⋯ 選單中也是 Reset disk),是系統層的核彈選項:它會刪除 disk.img,讓下次啟動重新複製一份全新的基底映像檔複本。確認訊息——「Reset "«name»" system disk to base?」——會明確說明會清除什麼:你 sudo apt install 的一切、對 /etc、/var、/usr、/opt 的修改,以及系統層級的設定。你的家目錄不受影響:專案、dotfiles、SSH 金鑰與 shell 歷史全都留存。
重設在 VM 執行時會被封鎖,且重設也會捨棄任何已儲存的 RAM 快照與分頁狀態——全新磁碟搭配舊 RAM 會立即損毀。
附註: 檢查點回答的問題與暫停不同。暫停保留目前工作階段的 執行狀態 讓你可以恢復;檢查點則保留 已知良好時間點的磁碟內容 讓你可以將損壞的環境回退。暫停快照會在其所屬磁碟被重設或還原時捨棄。
提示: 若要在不開機任何東西的情況下,對某個檢查點或已停止工作區的家目錄映像檔進行取證存取,Workspaces ▸ Open ext4 file… 可在唯讀、Finder 風格的瀏覽器中開啟任何 ext4
.img——你可以直接在 Mac 上預覽並擷取檔案。關於完整的瀏覽器、原地編輯與fsck整合,請參閱進階。
關閉工作階段
關閉工作階段——透過工作區側邊欄列上的 ×、其彈出視窗的關閉按鈕,或在其最後一個分頁上按 ⌘W——會解析工作區在一般設定窗格中的 When closing the window 偏好設定:
| 動作 | 作用 |
|---|---|
| Run in the background | 只分離 UI。VM 保持無介面執行——代理程式持續工作——你可隨時從側邊欄重新連接。 |
| Suspend | 暫停 VM 並將其 RAM 儲存至磁碟(工作區儲存區中的 vm.state)。下次啟動會幾乎即時還原它,並帶有相同的終端機;分頁列也會被快照(tabs.json),因此還原的工作階段會立即顯示其分頁。 |
| Shut down | 一次乾淨的 ACPI 關機。進行中的處理程序會停止。系統磁碟與家目錄會保留——什麼都不會被銷毀。完整關機會清除任何已儲存的暫停狀態,因此下次啟動會冷開機。 |
| Ask(預設) | 每次顯示一個提示:「Close "«name»"?」,帶有 Run in the Background、Suspend、Shut Down 與 Cancel 按鈕,以及說明「Run in the background keeps the VM running so you can reattach later. Suspend saves its state to disk. Shut down powers it off.」。 |
有幾個值得知道的細節:
- 暫停/恢復身分——還原需要完全相同的 VM 設定,因此工作區的機器識別碼、MAC 位址與共用區路徑會與快照一併保存。恢復時,主機會 ping 客體以重新同步其時鐘。
- 還原失敗——若已儲存的快照在互動式啟動時無法還原,應用程式會退回到全新開機。由自動化發起的啟動則會改為中止——它們絕不會靜默地銷毀已暫停的工作階段。
- 暫停期間變更共用資料夾——快照無法針對不同的共用區集合恢復,因此編輯共用資料夾會強制出現 Discard suspended VM… 確認;下次啟動會冷開機。家目錄與共用資料夾檔案不受影響。
- 客體發起的重新開機——在客體內執行
reboot不會結束工作階段:應用程式會偵測到重新開機意圖並就地重新啟動 VM。 - 銷毀資料一律是明確的——已關機的工作區會保留其磁碟與家目錄。資料只會被 Reset to base…、Erase home…、刪除工作區(全都需確認;參閱工作區)或憑證外洩入侵後的強制清除所銷毀——而即使如此,你的設定檔設定、權杖與 SSH 金鑰仍會保留,共用主機資料夾也永不會被觸及。
鍵盤快速鍵
工作階段視窗的和弦由主機擁有——它們會在終端機看到之前就被攔截,因此無論 VM 內執行什麼都能運作。
視窗與分頁
| 快速鍵 | 動作 |
|---|---|
| ⌘T | 新增分頁 |
| ⌘W | 關閉分頁(最後一個分頁會關閉工作階段) |
| ⌘1 – ⌘9 | 依側邊欄列順序選取分頁 |
| ⌘D | 將作用中的終端機釘選至格狀檢視並顯示它 |
| ⌘↩ | 縮放/取消縮放聚焦的格狀檢視格子 |
| ⌘N | 開啟工作區管理員 |
| ⌃⌘S | 切換側邊欄 |
| ⌃⌘E | 切換檔案總管窗格 |
| ⌃⌘B | 切換代理式瀏覽器窗格 |
| ⇧⌘I | 開啟追蹤檢視器 |
終端機
| 快速鍵 | 動作 |
|---|---|
| ⌘C | 複製選取內容 |
| ⌘V | 貼上(影像會以檔案形式上傳進客體) |
| ⌘+ / ⌘− / ⌘0 | 字型放大/縮小/重設 |
| 縮放手勢/雙指點兩下 | 縮放字型/重設縮放 |
瀏覽器窗格(具焦點時)
| 快速鍵 | 動作 |
|---|---|
| ⌘T / ⌘W | 新增/關閉瀏覽器分頁 |
| ⌘R | 重新載入 |
| ⌘[ / ⌘] | 上一頁/下一頁 |
| ⌘L | 聚焦位址欄位 |
| F12 | 切換 DevTools |
附註: 一個 80 毫秒的自動重複防護意味著按住某個和弦只會觸發一次;刻意的重新按壓則全都會觸發。