機器

機器是 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。