概念與架構

Bromure Agentic Coding 在你 Mac 上以硬體虛擬化的 Linux 機器執行 AI 程式設計代理程式,並在代理程式無法繞過的單一點上執行每一項安全控管。本章定義手冊其餘部分所依賴的詞彙——工作階段、機器、房間、分支、主機與客體、傳輸邊界——並說明各部分如何組合在一起。除了快速入門之外,如果你只讀一章,就讀這一章。

工作階段、機器、房間與分支

你在應用程式中所做的幾乎一切,都由四種物件構成。

工作階段

工作階段是與一個代理程式、在一個檔案夾、在一台機器上的一段對話。你從新增工作階段畫面開始它;它有一個標題(代理程式會依你的第一則訊息設定,你也可以重新命名)、一個代理程式(Claude Code、Codex、Grok、Kimi Code 或 Oh My Pi)、一台機器,以及該機器中的一個工作檔案夾。側邊欄列出的、聊天顯示的,都是工作階段。

在機器內部,工作階段就是在自己的終端機分頁中執行的代理程式。你很少需要看到那個分頁,但也可以看:工具列上的 Linux 膠囊(⌥⌘U)或工作階段選單中的 在 Linux 終端機中開啟 會切換過去,而膠囊(此時顯示 工作階段)會切換回來。

工作階段的存續比代理程式程序更長。當代理程式結束,或其機器關機時,工作階段會連同對話留在側邊欄中,而你的下一則訊息會在同一段對話上重新啟動代理程式。請參閱工作階段主頁。

機器

機器是一台隔離的 Linux VM,連同它的設定與持久儲存空間。主視窗稱之為機器;設定編輯器、數個選單(新增工作區…、工作區)與命令列則稱之為工作區(在內部以及 profile.json 等檔名中稱為描述檔)。這三個詞指的都是同一件事。

機器定義了適用於其上每個工作階段的憑證、共用檔案夾、環境、MCP 伺服器、防護欄、模型覆寫、外觀與 VM 大小——也就是你在設定編輯器中編輯的一切。每個代理程式在每台機器上都可以使用。無論是否正在執行,機器都存在,而且同一台機器上可以同時執行許多工作階段,每個都有自己的檔案夾與終端機分頁。

常見的做法是每個專案或每個憑證邊界一台機器:同一台機器上的工作階段共用其磁碟、憑證與網路身分。機器列在側邊欄的虛擬機器之下;請參閱機器。

機器執行期是機器的 VM 持續開機的一段期間:從機器啟動或恢復時開始,到關機或暫停時結束。有些狀態屬於執行期而非機器:你授予的憑證核准存在記憶體中,會在執行期結束時撤銷,而每次開機的設定分享會在每次啟動時重建。

房間

房間把處理同一件事的工作階段歸在一起。開啟房間時,會以即時聊天的格線並排顯示其工作階段,並提供一個可以傳送給其中任一個或同時傳給全部的輸入區。房間可以有自己的總機,這是一個只掌握該房間工作階段的工作階段。房間中的工作階段可以在不同的機器上執行。請參閱房間。

分支工作階段

分支工作階段是從另一個工作階段開始、位於自己 git 分支上的工作階段,存在於同一台機器上同一個儲存庫的另一份簽出(git 工作樹)中。它在不動到原工作階段檔案夾的情況下工作,而當你對結果滿意時,就檢視並合併回去。請參閱分支與檢視。

由其他工作階段啟動的工作階段

有兩種工作階段是替你啟動的,而不是由你啟動:

  • 受託者。 代理程式可以把一項工作交給新的子工作階段——在它自己的分支上,或另一台機器上——並等待結果。子工作階段會列在啟動它的工作階段之下。代理程式也可以透過**@暱稱**向既有的工作階段送出請求。請參閱代理程式協同工作。
  • 總機。 一個掌握所有其他工作階段的 Claude Code 工作階段。當有兩個以上工作階段在進行時,它就會出現在側邊欄中,在你上次使用的機器上的 ~/.bromure/switchboard 檔案夾中工作,並能在嚴格的規則下替你閱讀、回答與啟動工作階段。房間專屬的總機在 ~/.bromure/rooms/<room> 中工作,只看得到該房間。請參閱總機與訊息。

自動化的執行與編碼任務也以工作階段的形式執行,完成時封存;請參閱自動化與編碼任務。

工作階段狀態

側邊欄依工作階段需要你做什麼來分組,而不是依它們在哪台機器上執行:

狀態圓點意義
需要你紅色代理程式在等你:一個提問、一個權限提示,或一次登入(「需要登入」)。
工作中橘色代理程式正在忙,或工作階段仍在啟動中。
就緒綠色代理程式已完成這一輪,正在等你的下一則訊息。
已暫停—工作階段的機器已關機或暫停。你的下一則訊息會啟動機器並接續對話。
已完成—代理程式已結束,或你結束了工作階段。你的下一則訊息會在同一段對話上重新啟動代理程式。

另有兩處存放不屬於這些分組的工作階段:

  • 已封存 是工作階段清單底部的折疊區,用來放你收起的對話。已封存的工作階段仍然可以閱讀,只要一則訊息就能讓它回來。完成超過三天的工作階段會自動封存,但房間中的工作階段與總機除外。受託者、編碼任務與自動化執行一完成就會封存。
  • 若工作階段的機器或檔案夾已不存在,它會以淡色顯示為「機器已移除」或「檔案夾已移除」。已刪除機器的工作階段會集中在清單末尾的一列,並附有 刪除 按鈕。

主機會保存每個工作階段對話的副本(在 ~/Library/Application Support/BromureAC/transcripts/ 中),並在代理程式執行時更新,因此已暫停、已完成或已封存的工作階段不必啟動其機器就能閱讀。

主機與客體

Bromure Agentic Coding 中的一切都位於一條硬性界線的其中一側:

  • 主機是你的 Mac——搭載 Apple Silicon 的 macOS 14 或更新版本——以及在其上執行的 Bromure Agentic Coding 應用程式。主機保存所有敏感的東西:你真正的憑證(以 macOS 鑰匙圈中的主金鑰加密)、你的登入、替代理程式與網際網路溝通的 MITM 代理伺服器、Bromure 根 CA 的私密金鑰、追蹤記錄與安全性時間軸,以及應用程式的視窗、聊天與終端機。你輸入文字的聊天與終端機是在主機上繪製的,而不是在 VM 內部。
  • 客體是代理程式實際執行的 Linux VM——Claude Code、Codex、Grok、Kimi Code、Oh My Pi 或單純的 shell 工具,以及它們安裝與接觸的一切:複製的儲存庫、套件快取、Docker 容器、virtualenv。客體在設計上被視為不受信任。它不持有任何真正的機密,只有刻意設為無效的假憑證,而它對外的網頁流量會經過主機的代理伺服器。

兩端透過兩條狹窄的通道溝通:vsock(virtio 通訊端,一條不需要網路的主機–客體通道),用於控制、終端機、MCP 伺服器與代理伺服器路徑;以及一個私人虛擬網路,用於一般的 IP 流量。兩者都會在下文說明。

正是這種劃分讓安全性主張變得具體:遭到提示注入或行為失常的代理程式,可以在客體內部為所欲為,但它無法讀取真正的 API 金鑰、無法用真正的 AWS 秘密簽署,也無法取出 SSH 私密金鑰——這些東西在它那一側根本不存在。

架構一覽

Bromure Agentic Coding 架構:macOS 主機程序(工作階段視窗、機密保管庫,以及每個工作區一個、在傳輸途中把假憑證換成真憑證的 MITM 代理伺服器)透過 vsock 橋接連接到一台持久的 Ubuntu 工作區 VM 與一台短暫的 Chromium 瀏覽器 VM,兩者共用一個私人虛擬網路。

請由下往上閱讀這張圖:代理程式在機器的 VM 中工作;它的 HTTPS 透過 vsock 離開,送到主機的代理伺服器,那是假憑證變成真憑證的唯一地方;應用程式透過另外的 vsock 橋接連到 VM 的終端機;而選用的用完即丟瀏覽器 VM 共用同一個私人網路,因此能載入代理程式的開發伺服器。

除了機器與瀏覽器 VM 之外,應用程式還能執行三種自己管理的 VM,全都位於同一個私人網路上:Kubernetes 叢集節點與一個容器登錄庫(請參閱 Kubernetes 叢集與登錄檔),以及把總機連接到 Signal、WhatsApp 或 Slack 的訊息連接器(請參閱總機與訊息)。它們列在側邊欄的虛擬機器之下,但不是機器:其中沒有代理程式在執行。

機器的 VM

每台機器的 VM 都是在 Apple 的 Virtualization.framework 下執行的 Ubuntu 24.04 客體;該框架需要 Apple Silicon,且只支援 ARM64 客體。它以 4 個 vCPU 以及機器的資源窗格中設定的記憶體容量,從兩個虛擬磁碟開機:

  • disk.img——系統磁碟。機器第一次啟動時,它會以共用、已簽署的 Ubuntu 基礎映像檔的 APFS 寫入時複製副本建立(請參閱安裝與首次執行):副本瞬間出現,在客體寫入之前不會使用新的磁碟空間。之後的啟動會重複使用同一份副本,因此你用 apt install 安裝的套件、拉取的 Docker 映像檔以及其他系統層級的變更都會保留。
  • home.img——存放 /home/ubuntu 的私人 ext4 磁碟,以第二顆磁碟掛載。預設大小為 16 GiB,但只會隨著填入內容而佔用空間,並會在客體中刪除檔案時於主機上縮小。家目錄在 重置磁碟 後仍會保留,這就是為什麼你的儲存庫、dotfiles、shell 歷史記錄以及每個工作階段的檔案夾,在系統磁碟重置後依然存在。

客體也會掛載一些每次開機的小型分享:一個唯讀的中繼分享,載有該次開機的設定(假憑證環境檔、代理伺服器設定、Bromure CA 憑證、客體代理、MCP 設定),以及一個可寫入的寄件匣,供客體向主機回報(其 IP 位址、終端機分頁、代理程式狀態)。兩者都會在每次啟動時重建,不保存任何持久狀態。你 Mac 上最多 8 個檔案夾也可以分享給客體;它們會出現在家目錄中。

設計上即為持久——與 Bromure(Web)的對比

Bromure Agentic Coding 與它的姊妹應用程式——網頁瀏覽器 Bromure——共用程式碼庫,而兩者刻意在存續期間上做出相反的選擇:

Bromure(Web)Bromure Agentic Coding
客體映像檔Ubuntu + ChromiumUbuntu 24.04
VM 存續期間每個瀏覽工作階段一個用完即丟的 VM,視窗關閉時銷毀每台機器一個持久 VM,在多次執行之間重複使用
關閉時的資料全部銷毀保留系統磁碟與家目錄
控管的對象VM 的全部狀態(它會被丟棄)VM 的機密暴露面(假憑證、傳輸邊界)

寫程式需要持久的狀態——複製的儲存庫、套件快取、virtualenv、shell 歷史記錄——因此每個工作階段結束就丟掉 VM,會讓代理程式毫無用處。Bromure Agentic Coding 不去控管 VM 的狀態,而是控管 VM 被允許持有什麼:沒有任何真正的機密,也沒有未經中介的網際網路路徑。用完即丟的機器仍然是一個選項:重置磁碟 會從基礎映像重新複製系統磁碟,回復個人檔案夾… 會把家目錄回復到較早的檢查點,bromure-cli vm run --rm 會建立一台停止時即刪除的一次性機器,而入侵處理流程會清除受汙染的磁碟與家目錄,同時保留你的設定與金鑰。

瀏覽器 VM

Bromure(Web)有一部分在 Bromure Agentic Coding 中延續了下來:工作階段旁的內嵌瀏覽器。當你(或代理程式)開啟它時,機器會得到第二台用完即丟的 VM,執行 Ubuntu 與 Chromium,複製到暫存檔案夾,並在瀏覽器關閉時刪除。瀏覽狀態預設會被丟棄,除非機器開啟 保持網站登入狀態,這會把 Chromium 的描述檔保存在每台機器專屬的加密磁碟上。瀏覽器 VM 與機器位於同一個私人網路上,因此能載入代理程式剛啟動的開發伺服器。請參閱內嵌瀏覽器。

機器狀態:關閉、已暫停與執行中

每台機器永遠處於三種持續狀態之一。機器開機時,你也會短暫看到 正在啟動…。

展開 VIRTUAL MACHINES 區段的側邊欄:一列格線,接著是機器 Payments API、Web app 與 Data pipeline,各帶一個 + 與一個 ⋯ 按鈕。

展開側邊欄底部的虛擬機器即可看到你的機器。點按一台機器會顯示其儀表板:執行時即時顯示 CPU、記憶體、磁碟與運作時間,關機時則顯示其規格與設定,並附有 啟動 或 恢復 按鈕。在關機的機器上開始工作階段,會替你啟動它。

狀態VM 目前…保留消失
關閉完全沒有執行。系統磁碟(disk.img)、家目錄(home.img)、檢查點、設定、SSH 金鑰、網路身分。執行中的程序、記憶體、終端機分頁、任何已儲存的記憶體快照(正常關機會清除它,因此下次啟動是全新開機)。機器上的工作階段顯示為 已暫停。
已暫停凍結。其記憶體儲存在機器檔案夾中的 vm.state,終端機分頁則儲存在 tabs.json。關閉 所保留的一切,再加上每個執行中的程序與終端機分頁——恢復時會完全從停下的地方繼續。在恢復之前,工作階段顯示為 已暫停。無,除非快照必須被捨棄(見下文)。
執行中運作中。一切都在運作。—

幾條值得了解的規則:

  • 暫停是記憶體快照,不是存檔。 要還原它,VM 的設定必須與儲存時相同。如果你變更了快照所依賴的設定——例如記憶體大小或共用檔案夾——機器就會改為全新啟動,而且不會影響任何檔案。應用程式記錄會指出變更了什麼。
  • 快照絕不會比它的磁碟活得更久。 重置或清除系統磁碟時,也會一併捨棄任何已儲存的記憶體快照,因為全新的磁碟加上過時的記憶體會立刻損毀。
  • 關閉不等於清除。 已關機的機器會無限期保留其系統磁碟與家目錄。真正的刪除一律是明確的操作(重置磁碟、回復個人檔案夾…、刪除工作區),或由入侵處理流程強制執行。

關閉動作

關閉機器視窗時會發生什麼,是每台機器各自的選擇(一般 窗格中的 關閉視窗時):在背景執行(機器在沒有視窗的情況下繼續執行)、暫停、關機,或 詢問——預設值,每次都會詢問。請參閱機器。

傳輸邊界

傳輸邊界是這個產品的核心理念:客體所有對外的網頁流量都會經過主機端的中間人(MITM)代理伺服器,而每一項防護——保管機密、限制憑證範圍、供應鏈掃描、提示注入偵測、個人資料保護、追蹤——都在這一點上執行。代理程式無法繞過它,因為在它那一側沒有任何有用的東西。

端到端的流程:

  1. 客體只持有假值。 機器啟動時,主機會把刻意設為無效的替代憑證寫入 VM——例如 ANTHROPIC_API_KEY 之類的環境變數,以及 ~/.git-credentials、~/.docker/config.json、~/.kube/config 之類的檔案。假值保有真值的形狀(sk-ant-api03-brm-…、ghp_… 形式、brm_…),讓用戶端的檢查接受它們,而且在同一次安裝中保持不變,因此工具永遠不會在兩次執行之間看到金鑰改變。對應的真值會載入主機上代理伺服器的記憶體中,各自綁定到所屬的主機。
  2. 客體的 TLS 終結於代理伺服器。 客體中的每個 shell 都會匯出 HTTPS_PROXY=http://127.0.0.1:65534,這是 VM 內的一個端點,透過 vsock(連接埠 8443)以通道連到主機的代理伺服器。此外,主機的虛擬網路交換器會把客體連往 80 與 443 連接埠的對外連線導向同一個代理伺服器,因此即使某個工具忽略代理伺服器變數,仍然會經過它。代理伺服器會出示由 Bromure 根 CA 簽署的逐主機憑證,檢查請求,並重新加密送往真正的伺服器。
  3. 假值只在離開時才變成真值。 代理伺服器會把每個假值換成真值——API 金鑰與權杖以標頭替換、訂閱登入背後的替代金鑰、AWS 以完整的 SigV4 重新簽署(客體用假的秘密簽署;主機移除該簽章,再用真的重新簽署),以及 SSH 透過 vsock 以 ssh-agent 簽署。替換只套用到已註冊的主機及其子網域,絕不套用到外觀相似的網域,因此為 api.anthropic.com 註冊的憑證絕不會被注入到其他網域。

機器可以在其防護欄窗格中關閉透明導向;代理伺服器變數、憑證替換、追蹤與防護欄仍然適用。請參閱憑證與傳輸邊界。

Bromure 根 CA

代理伺服器之所以能讀取客體的 TLS,是因為客體信任它。首次啟動時,應用程式會建立一個每次安裝專屬的憑證授權單位——Bromure Agentic Coding 根 CA——其公開憑證會在開機時透過中繼分享安裝到每台 VM 的信任存放區。私密金鑰永遠不會離開主機(它位於 ~/Library/Application Support/BromureAC/ca/,只有你能讀取)。你的 Bromure VM 之外沒有任何東西信任這個 CA:它無法用來攔截你 Mac 自己的流量,而刪除 ca/ 檔案夾只會在下次啟動時建立新的 CA。

設計上即為故障關閉

設計採取失效即關閉:萬一客體流量繞過了代理伺服器——例如在不尋常連接埠上的原始通訊端,或刻意的繞過企圖——它唯一能出示的憑證也只是沒有伺服器會接受的假值。AWS 會回傳 InvalidSignatureException;API 供應商會拒絕替代金鑰。繞過邊界對攻擊者毫無好處,因為邊界不是檢查機密的地方——它是機密唯一存在的地方。

入侵偵測器

邊界也會留意相反方向的濫用:資料外洩。代理伺服器會掃描每個對外請求,尋找為該機器註冊的任何假權杖。假值只有一個正當的目的地——為它製作的那台主機——因此假值若被送往其他地方,就是代理程式企圖外洩憑證的特徵。代理伺服器會攔下請求、暫停機器並提醒你,讓你選擇關閉機器、封鎖請求,或在工作階段的剩餘時間內允許該目的地。由於外流的只有假值,真正的憑證完全不需要輪替。完整的憑證模型,包括逐一憑證的核准提示與有時限的授權,請見憑證與傳輸邊界。

什麼會持久保存、什麼不會

Bromure Agentic Coding 明確界定哪些東西會留下。每台機器的檔案位於 ~/Library/Application Support/BromureAC/profiles/<uuid>/;你的工作階段則位於旁邊的支援檔案夾中。

持久——關機與應用程式重新啟動後仍會保留:

項目位置附註
系統磁碟disk.img基礎映像檔的 APFS 寫入時複製副本。由 重置磁碟、刪除工作區 或入侵清除移除。
家目錄home.img存放 /home/ubuntu,包括每個工作階段的檔案夾。重置磁碟 後仍會保留;可由 回復個人檔案夾… 回復。
檢查點checkpoints/、checkpoints/home/磁碟與家目錄的快照,供 回復個人檔案夾… 與還原使用。
機器設定profile.json非機密設定;機密另外加密存放在主機上。
SSH 金鑰ssh/機器的金鑰對(客體只能透過 vsock 請求簽章)。
網路身分machine-identifier.bin 與 profile-macs.json 中的 MAC 位址讓 VM 的身分——通常也包括其 IP 位址——保持穩定;還原已暫停的機器時必需。
暫停快照vm.state + tabs.json只在機器 已暫停 時存在。
瀏覽器描述檔(選用)browser-profiles/<uuid>/image/只在開啟 保持網站登入狀態 時存在;每台機器各自加密。
工作階段與房間sessions.json、rooms.json、delegations.json(支援檔案夾)標題、代理程式、檔案夾、狀態、房間成員,以及代理程式之間交付的工作。
對話副本transcripts/(支援檔案夾)主機保存的每個工作階段對話副本,供機器關機時閱讀。

暫時——自動重建或刪除:

項目存續期
中繼分享(meta-share/:假憑證檔案、代理伺服器設定、CA 憑證、客體代理)每次啟動時重建。
寄件匣(outbox/)一次機器執行期。
瀏覽器 VM 的磁碟(暫存檔案夾中的寫入時複製副本)瀏覽器關閉時刪除。
憑證的核准與拒絕只存在記憶體中;機器執行期結束時撤銷。
客體的記憶體、程序、終端機分頁關機時消失,除非機器被暫停。

由此可以得出兩點。第一,關閉視窗或結束工作階段本身絕不會刪除任何東西——具破壞性的操作都是明確且需要確認的。刪除工作階段會把其對話從應用程式中移除,但會把其檔案夾留在機器上。第二,當你想要從頭開始時,有一系列選擇:回復個人檔案夾…、重置磁碟(家目錄會保留)、刪除機器,或用 bromure-cli vm run --rm 建立一次性機器。

附註: 從你 Mac 分享的檔案夾是你磁碟上的一般檔案夾,位於 Bromure 的儲存空間之外。任何 Bromure 操作都不會刪除它們——包括入侵清除在內——而清除提示也會說明這一點。

主機—客體橋接(vsock)

Mac 與客體之間所有互動式的內容都透過 virtio 通訊端傳遞——這是直接連接主機與客體、獨立於 VM 網路之外的通道。你永遠不必設定它們,但知道它們存在,有助於閱讀追蹤記錄或疑難排解。每個橋接都使用一個編號的 vsock 連接埠:

機器 VM 的橋接:

連接埠橋接它承載什麼
8443MITM 代理伺服器客體的所有網頁流量——也就是傳輸邊界本身。
8444ssh-agent 橋接來自客體 SSH_AUTH_SOCK 的簽章請求;私密金鑰永遠不會跨越。
8445AWS 憑證輔助程式credential_process 饋送(真實存取金鑰 ID、假密鑰)。
8446Claude 登入/本機推論Claude 訂閱的替代金鑰,以及客體通往裝置端模型的路徑(兩者共用此連接埠)。
8447Codex 登入ChatGPT 訂閱的替代金鑰。
5800Shell 橋接終端機連接、bromure-cli exec、檔案窗格,以及從聊天與終端機上傳的檔案。
5010登入回呼轉送把迴路登入重新導向(供 gh、gcloud 等工具使用)送回客體。
5840二進位檔證明程式在 Enforce binaries 下:點名每條連線背後程式的 root 所屬證明程式。以一個祕密綁定。見沙盒原則。
5841核心哨兵來自客體核心的核心哨兵事件串流,經過驗證、加上編號,並監看是否有缺口。

內建 MCP 伺服器——主機提供給機器上每個代理程式的工具,各自透過客體中的一個小型墊片連接:

連接埠伺服器提供給代理程式的功能
5830browser控制內嵌瀏覽器。請參閱內嵌瀏覽器。
5831任務看板編碼任務工具:設定計畫、建立子任務、把工作交付檢視。請參閱編碼任務。
5832計畫串流規劃編碼任務時使用的即時計畫通道。
5833bromure-automations列出、建立、編輯、刪除並執行這台機器的自動化。請參閱自動化。
5834bromure-infrastructure這台機器可以使用的 Kubernetes 叢集與登錄庫。請參閱 Kubernetes 叢集與登錄檔。
5835bromure-delegation委派給其他工作階段,以及以 @暱稱 提出請求。請參閱代理程式協同工作。
5836bromure-switchboard總機的工具;只有總機工作階段可以使用。請參閱總機與訊息。

瀏覽器 VM 的橋接: 設定(5000)、檔案傳輸(5100)、Chrome DevTools Protocol(5200)、連結轉送(5300)、網路攝影機(5400)、分頁列(5810)與網路追蹤(5900)。

剪貼簿

終端機分頁沒有獨立的剪貼簿服務——剪貼簿透過終端機本身傳遞。在客體中拷貝(tmux 選取範圍,或任何使用 OSC 52 的程式)會進入 macOS 剪貼簿;在終端機中 ⌘C 拷貝選取範圍;⌘V 貼到客體中。在瀏覽器中,客體的剪貼簿代理負責在 Mac 與 Chromium 之間拷貝與貼上。

檔案傳輸

檔案在 Mac 與機器之間有三種傳遞方式,全都在機器中說明:共用檔案夾(存放在你 Mac 上的專案檔案的一般途徑)、檔案窗格(透過連接埠 5800 的 shell 橋接拖入拖出),以及附件——任何放到或貼到聊天或終端機中、最大 512 MB 的檔案,都會拷貝到機器中,並把其路徑交給代理程式。

網路

NAT 模式(預設)

所有 NAT 模式的機器都連接到應用程式內的單一軟體網路交換器,再透過單一的 macOS vmnet NAT 介面連上網際網路。因此:

  • 一個私人子網路。 全新安裝會在 172.16.0.0/12 中隨機挑選一個私人 /24 並保留下來,避開你的 Mac 已經在使用的任何 172.x 網路(例如 Docker 的)。偏好設定 › 資源 中的開關(工作區子網路——使用私有子網路(避免多個遠端之間衝突))會顯示子網路,而 隨機產生 會挑選新的子網路;變更會在你的機器下次啟動時生效。開關關閉時,應用程式使用 192.168.64.0/24,若你的區域網路已使用該範圍,則改用另一個空閒的 192.168.x.0/24。
  • 應用程式在該交換器上執行自己的 DHCP 伺服器,租約保存在 dhcp-leases.sqlite 中。每台機器都有固定的 MAC 位址(在 profile-macs.json 中),因此重新啟動後通常會保有相同的 IP 位址。機器選單中的 拷貝 IP 位址 與機器的儀表板會顯示目前的位址。
  • VM 之間可以互連。 機器、瀏覽器 VM、叢集節點與登錄庫在設計上位於同一個網路,因此瀏覽器可以載入在機器上執行的開發伺服器,兩台機器也能使用彼此的服務。儀表板的監聽連接埠清單會把每個可連線的服務顯示為你從 Mac 連線時要用的 <IP>:<連接埠>。
  • 與外界隔離。 從你的 Mac 可以連到這些 VM,但從實體區域網路則不行,而且除非你明確發佈某項服務(例如從監聽連接埠清單透過 Cloudflare 快速通道),否則其他任何東西都無法連到它們。
  • 僅限 IPv4。 客體中的 IPv6 已關閉,localhost 解析為 127.0.0.1。

客體的網路 MTU 預設為 1280——在 VPN 與企業網路後方都安全的值——可以用 defaults write io.bromure.agentic-coding vm.mtu -int <數值> 調高。

請記住,一般的 IP 流量並不是憑證移動的途徑:網頁流量會被導向代理伺服器,而任何繞過它的流量都只帶著假憑證——也就是上文所述的失效即關閉特性。

橋接模式(每台機器)

機器也可以改為加入你的實體區域網路:在其資源窗格中把網路設為橋接並選擇一個介面,VM 就會以路由器配發的自有位址出現在區域網路上(適合其他裝置必須直接連到它的情況)。如果所選介面在啟動時無法使用,機器會退回 NAT。請參閱設定 › 資源。

快速啟動

有兩件事讓機器能快速啟動:

  • 寫入時複製磁碟。 新機器的系統磁碟是基礎映像檔的即時副本而非完整拷貝,因此第一次啟動不必等待寫入數 GB 的資料。之後的冷啟動就是一般的 Linux 開機。
  • 暫停與恢復。 已暫停 的機器會完全跳過開機:還原其記憶體快照後,就從停下的地方繼續,包括終端機分頁與代理程式。

機器不會集中管理或預先開機:每台機器都是獨立的持久電腦,因此沒有可以互換、需要預熱的東西。用完即丟的瀏覽器 VM 是例外;它來自與 Bromure Web 相同的集區機制。