不可信程式碼、一次性驗證與可重建任務,優先放進 E2B 沙箱;依賴 macOS 工具鏈、長期會話、固定儲存庫與持續進程的任務,放在受控持久環境。本週先把任務分成「可丟棄」與「必須保留」兩類;兩類都存在時,採用雙軌:持久環境負責控制面與狀態,沙箱負責高風險執行。

這篇適合三類讀者:獨立開發者要判斷臨時任務是否值得導入遠端沙箱;研發團隊同時處理長期儲存庫任務與不可信程式碼;平台負責人則需要分清憑據、狀態、成本與故障責任。

01

先按任務壽命分流,而不是先選產品

對個人試驗者,我們建議先問一個問題:任務結束後,環境內的東西是否仍有價值?

短腳本、依賴公開套件的測試、一次性資料清理、Pull Request 初步檢查,以及可以從 Git 儲存庫重新建立的工作,都適合送入 E2B。E2B 官方將其定義為在雲端執行 AI 產生程式碼的隔離沙箱,而不是一台雲端 Mac。(github.com)

如果任務需要多輪人工介入、反覆修改同一個工作區、保留本地套件快取、維持資料庫或等待背景服務,持久運行環境會更直接。這裡的「持久」不是指程式永遠不會中斷,而是團隊能明確保留工作區、設定、日誌與交接狀態。

個人試驗者的快速判斷

  • 可以重新 git clone、重新安裝相依套件:優先 E2B。
  • 測試失敗後只需保留測試報告:優先 E2B。
  • 需要連續除錯、觀察長時間進程:優先持久環境。
  • 需要人工登入、調整圖形介面或使用 macOS 憑據:不要把 E2B 當成替代品。
  • 輸入內容來自陌生儲存庫或外部工具:先隔離,再決定是否回傳產物。

E2B 的沙箱可設定逾時行為。官方文件列出逾時後終止或暫停兩種生命週期;暫停時可保留檔案系統與記憶體狀態,之後再恢復。這提高了可恢復性,但不等於它自然變成適合所有長期開發工作的持久工作站。(e2b.dev)

02

應用研發團隊:可重建清單比會話名稱更重要

研發團隊最容易誤判的地方,是把 Harness 會話、工作區與執行沙箱視為同一個物件。實際上,沙箱生命週期結束,與 Harness 是否保存對話記錄、工具呼叫、任務識別碼,是兩套不同的責任。

我們會把狀態拆成四層:

  1. 會話狀態:模型對話、工具呼叫歷史、目前任務步驟。
  2. 工作區狀態:原始碼、未提交變更、設定檔、產生的中間檔案。
  3. 執行狀態:資料庫、背景進程、開發伺服器、記憶體中的快取。
  4. 交付狀態:測試報告、Patch、建置產物、截圖與錯誤日誌。

E2B 的 pause/resume 可以保留沙箱的檔案系統、執行中的進程與記憶體內容;官方文件也說明,暫停後對外服務會中斷,恢復後需要重新連線客戶端。(e2b.dev) 因此,團隊仍要自行定義「誰保存工作區、誰重新建立連線、誰確認產物完整」。

任務可重建檢查表

在把任務送入臨時環境前,我們建議逐項勾選:

  • [ ] 儲存庫可以由固定 Commit 或分支重新取得。
  • [ ] 套件版本已寫入鎖定檔,而非依賴當下最新版。
  • [ ] 資料庫可用測試資料重新建立。
  • [ ] 私有套件有短期、最小權限的讀取憑據。
  • [ ] 任務輸出會在結束前上傳到指定位置。
  • [ ] 失敗時可由任務識別碼重新接管。
  • [ ] 不需要保留未提交的臨時修改。
  • [ ] 不需要使用實體 USB、簽名裝置或 macOS 專屬服務。

只要有兩項以上無法勾選,這個任務就不應直接採用「建立沙箱、完成後刪除」的單軌流程。可以改成由持久環境保存控制面,E2B 只接收必要檔案與明確輸入。

狀態或依賴 E2B 沙箱 持久運行環境
可由儲存庫重新建立 適合 可用,但管理成本較高
未提交變更需跨日保留 需自行同步 適合
背景資料庫與開發伺服器 可做,但要處理暫停與重連 適合
不可信程式碼 優先選擇 必須額外隔離
Xcode、Keychain、Safari 不適合當作一般替代品 需要真實 Mac
產物回傳 必須由平台明確負責 必須由平台明確負責
03

E2B 能跑長期任務嗎?可以恢復,但不能混淆責任

「DeepSeek Harness E2B 沙箱適合跑長期任務嗎」的答案不是單純的可以或不可以。

E2B 官方文件目前列出,連續運行時間上限依方案而異:Pro 為 24 小時,Base 為 1 小時;使用 pause/resume 後,連續運行時間窗口可以重設。官方亦說明,預設逾時值為 5 分鐘,而 kill 會永久刪除沙箱,不能再恢復。(e2b.dev)

這些數字代表的是沙箱執行生命週期,不是 DeepSeek Harness 會話的保留承諾。若團隊把「下一次可以重新連線」誤當成「模型一定能從上次步驟繼續」,就會在以下地方出錯:

  • Harness 保存了文字會話,但沒有保存未提交檔案。
  • 工作區保留了檔案,但背景服務在暫停時已斷線。
  • 沙箱 ID 還存在,但外部簽發的短期憑據已失效。
  • 產物已產生,但沒有和任務 ID 綁定,失敗接管時找不到。
  • 沙箱被 kill 後,團隊仍以為可以從原狀態恢復。

E2B 也提供獨立於沙箱生命週期的 Volume,但官方目前標示為 private beta。這表示它可作為狀態設計的參考,不應在沒有核准與驗收前,直接當作團隊唯一的正式儲存方案。(e2b.dev)

04

macOS 工具鏈團隊:E2B 與真實 Mac 不是同一層

需要 Xcode 的 Agent 任務能不能放進 E2B?如果任務依賴 Xcode、iOS SDK、Apple Developer 簽名、Safari、Keychain 或其他 macOS 專屬能力,答案是:不能把通用 E2B 沙箱當作真實 Mac 執行面。

原因不是「遠端」二字,而是作業系統與工具鏈邊界。E2B 官方描述的是雲端隔離沙箱;其公開文件以沙箱、模板、環境變數、檔案與命令執行為核心,沒有把它定義為 macOS 裝置。(github.com) Apple 的開發文件則將 Xcode 與 Apple SDK 放在 Apple 平台開發流程內。(developer.apple.com)

我們會將任務拆成兩段:

  1. 在 E2B 執行不可信預處理、靜態檢查、格式化、依賴掃描或一般測試。
  2. 只有通過檢查的 Commit、Patch 或產物,才交給受控 Mac 執行 Xcode 建置、簽名、Safari 驗證或 Keychain 相關動作。

這種分工不能被描述成自動安全。若沙箱可以連到網路、推送 Git、發布套件或呼叫外部 API,這些仍是真實副作用。社群建立的 E2B MCP 方案也特別提醒:沙箱雖然與本機隔離,但網路請求、Git 推送與套件發布仍然會發生。這類案例只能作為待驗證參考,不能取代團隊自己的權限測試。(github.com)

05

平台團隊:控制面放持久環境,執行面採雙軌

平台團隊通常不需要在 E2B 與持久 Mac 之間二選一。更穩妥的做法,是把「控制面」與「執行面」拆開。

持久環境保存:

  • Harness 設定與版本。
  • 任務佇列、任務 ID 與重試記錄。
  • 審計日誌與人工接管入口。
  • 儲存庫來源、Commit、分支與交付規則。
  • 哪些任務可進沙箱、哪些任務必須進 Mac 的政策。

E2B 承接:

  • 不可信程式碼的初步執行。
  • 一次性測試與資料轉換。
  • 可由固定輸入重建的建置前檢查。
  • 失敗後可直接丟棄的中間工作區。

第二張表不比較「哪個更安全」,而是比較每個交付責任由誰承擔。隔離本身不會自動阻止提示注入,也不會自動防止資料外洩;工具權限、網路出口、輸入來源與人工核准仍要由平台設計。

交付環節 建議負責面 驗收條件
檔案同步 控制面 記錄來源 Commit、檔案雜湊與排除清單
任務識別 持久環境 每次沙箱執行都有唯一任務 ID
產物回傳 執行面產生、控制面收件 報告、Patch、日誌與任務 ID 可對上
憑據注入 控制面政策 預設不注入生產密鑰,只給短期最小權限
失敗接管 平台負責 可連回工作區,或能由輸入重建
外部副作用 明確審批層 Git 推送、發布、資料寫入需分開授權

E2B 文件顯示,環境變數可以在建立沙箱、執行程式碼或執行命令時注入;但命令層的環境變數不是私密儲存機制。(e2b.dev) 因此,不能因為變數名稱叫 SECRET,就推定模型、程式碼或其他工具無法讀取它。

06

安全敏感團隊:先分憑據,再分環境

高風險程式碼執行和長期工作區怎麼分開?我們建議使用「輸入風險 × 外部副作用」矩陣,而不是只用一個 sandbox=true 開關。

高風險輸入包括陌生儲存庫、使用者上傳檔案、未審核插件、外部網頁內容與模型自行產生的命令。這些任務可放入 E2B,但必須同時限制:

  • 不自動取得生產資料庫憑據。
  • 不直接取得雲端管理權杖。
  • 不允許任意外部寫入。
  • 不將完整工作區與所有內部設定一併掛載。
  • 不把沙箱輸出的指令原樣轉交持久 Mac 執行。
  • 不把通過測試誤當成已完成安全審查。

持久環境同樣不是天然可信。若它保存了固定儲存庫、登入狀態、工作區密鑰與長期進程,就必須設定審批、分支隔離、人工確認與工作區清理規則。長期保留狀態,只是方便除錯與交付;它同時也增加了憑據殘留和跨任務污染的風險。

第二步:先做最小驗收,再擴大雙軌

我們建議平台團隊依以下順序落地:

第一步:列出任務契約。
為每個 Agent 任務記錄輸入來源、預期命令、輸出檔案、是否需要網路、是否會修改遠端系統,以及是否需要人工接管。

第二步:建立可重建包。
固定儲存庫 Commit、套件鎖定檔、測試資料、環境變數名稱與啟動命令。不要只保存一段自然語言提示。

第三步:在 E2B 做丟棄測試。
建立一次沙箱,執行任務,回傳報告與產物,再刪除沙箱。驗證沒有依賴本機檔案、隱藏會話或未記錄的背景進程。

第四步:測試暫停與恢復。
若任務需要較長時間,確認 pause/resume 後檔案、進程、任務 ID 與外部連線的實際狀態。不要只檢查目錄是否仍然存在。

第五步:測試憑據邊界。
用假的金鑰與測試端點驗證工具能看見什麼、能寫入什麼,以及提示注入後是否能誘導 Agent 呼叫不該使用的工具。

第六步:在真實 Mac 驗證專屬流程。
將 Xcode 建置、簽名、Safari、Keychain 和需要圖形介面的流程,放到受控 Mac 逐項核驗。這些兼容結論不能由沙箱文件推定。

第七步:設定接管規則。
E2B 任務失敗時,平台要能根據任務 ID 取得日誌與產物;Mac 任務失敗時,則要保留工作區、版本與人工接管入口。

第八步:先只放一小類任務。
優先選擇可重建、無生產憑據、無外部寫入的一次性任務。完成最小驗收後,再增加私有依賴或長時間背景服務。

07

團隊選擇表:單軌還是雙軌?

最後可用下表作為環境路由規則。只要「macOS 依賴」或「長期狀態」其中一欄為高,便不應把任務強行放進短生命週期沙箱。

決策維度 選 E2B 沙箱 選持久運行環境 選雙軌
任務壽命 短期、一次性 跨日或持續執行 任務本身短,但控制面長期存在
可重建性 低或重建成本高 輸入可重建,狀態由控制面保存
macOS 依賴 Xcode、Safari、Keychain 等 預處理進沙箱,正式驗證進 Mac
會話狀態 可重新建立 需保留原工作區 Harness 記錄與工作區分層保存
憑據需求 測試金鑰、最小讀取權限 受控長期憑據 沙箱與 Mac 使用不同權限邊界
外部副作用 預設禁止或審批 可控且可追蹤 沙箱只產生候選產物,Mac 或控制面批准
除錯方式 看日誌、重跑任務 直接接管現場 沙箱重現,持久環境負責交接
故障責任 平台負責產物回傳 平台負責工作區維護 控制面負責路由,執行面負責結果

若任務短、輸入不可信、輸出可丟棄,選 E2B。若任務長、依賴固定工作區或需要 macOS,選持久環境。若團隊同時有兩種任務,雙軌通常比把所有工作塞進同一種環境更容易控制,但必須先定義檔案同步、任務識別碼、憑據邊界和失敗接管。

對目前只使用單一 Linux 或通用雲端執行面的團隊,常見缺點是無法承接 Xcode 與 Apple 簽名流程、長期工作區需要自行拼裝、背景服務中斷後難以交接,而且人工除錯時缺少穩定的圖形介面。若任務確實包含這些條件,持久 Mac 方案會比把所有流程硬改成 E2B 更合理。可先參考 DeepSeek Harness 雲端 Mac 選型,再按地區查看 美東 Mac 雲端交付美西 Mac 雲端交付

如果本週的檢查表顯示仍有任務必須保留 macOS 工具鏈、登入狀態或長期工作區,MESHLAUNCH 的持久 Mac 環境更適合承接這一段;如果只是臨時算力、隔離測試或可丟棄驗證,則不必為了使用 Mac 而放棄 E2B。真正需要租用的,是那些無法可靠重建、又必須在真實 Mac 上完成的執行面。