不可信程式碼、一次性驗證與可重建任務,優先放進 E2B 沙箱;依賴 macOS 工具鏈、長期會話、固定儲存庫與持續進程的任務,放在受控持久環境。本週先把任務分成「可丟棄」與「必須保留」兩類;兩類都存在時,採用雙軌:持久環境負責控制面與狀態,沙箱負責高風險執行。
這篇適合三類讀者:獨立開發者要判斷臨時任務是否值得導入遠端沙箱;研發團隊同時處理長期儲存庫任務與不可信程式碼;平台負責人則需要分清憑據、狀態、成本與故障責任。
先按任務壽命分流,而不是先選產品
對個人試驗者,我們建議先問一個問題:任務結束後,環境內的東西是否仍有價值?
短腳本、依賴公開套件的測試、一次性資料清理、Pull Request 初步檢查,以及可以從 Git 儲存庫重新建立的工作,都適合送入 E2B。E2B 官方將其定義為在雲端執行 AI 產生程式碼的隔離沙箱,而不是一台雲端 Mac。(github.com)
如果任務需要多輪人工介入、反覆修改同一個工作區、保留本地套件快取、維持資料庫或等待背景服務,持久運行環境會更直接。這裡的「持久」不是指程式永遠不會中斷,而是團隊能明確保留工作區、設定、日誌與交接狀態。
個人試驗者的快速判斷
- 可以重新
git clone、重新安裝相依套件:優先 E2B。 - 測試失敗後只需保留測試報告:優先 E2B。
- 需要連續除錯、觀察長時間進程:優先持久環境。
- 需要人工登入、調整圖形介面或使用 macOS 憑據:不要把 E2B 當成替代品。
- 輸入內容來自陌生儲存庫或外部工具:先隔離,再決定是否回傳產物。
E2B 的沙箱可設定逾時行為。官方文件列出逾時後終止或暫停兩種生命週期;暫停時可保留檔案系統與記憶體狀態,之後再恢復。這提高了可恢復性,但不等於它自然變成適合所有長期開發工作的持久工作站。(e2b.dev)
應用研發團隊:可重建清單比會話名稱更重要
研發團隊最容易誤判的地方,是把 Harness 會話、工作區與執行沙箱視為同一個物件。實際上,沙箱生命週期結束,與 Harness 是否保存對話記錄、工具呼叫、任務識別碼,是兩套不同的責任。
我們會把狀態拆成四層:
- 會話狀態:模型對話、工具呼叫歷史、目前任務步驟。
- 工作區狀態:原始碼、未提交變更、設定檔、產生的中間檔案。
- 執行狀態:資料庫、背景進程、開發伺服器、記憶體中的快取。
- 交付狀態:測試報告、Patch、建置產物、截圖與錯誤日誌。
E2B 的 pause/resume 可以保留沙箱的檔案系統、執行中的進程與記憶體內容;官方文件也說明,暫停後對外服務會中斷,恢復後需要重新連線客戶端。(e2b.dev) 因此,團隊仍要自行定義「誰保存工作區、誰重新建立連線、誰確認產物完整」。
任務可重建檢查表
在把任務送入臨時環境前,我們建議逐項勾選:
- [ ] 儲存庫可以由固定 Commit 或分支重新取得。
- [ ] 套件版本已寫入鎖定檔,而非依賴當下最新版。
- [ ] 資料庫可用測試資料重新建立。
- [ ] 私有套件有短期、最小權限的讀取憑據。
- [ ] 任務輸出會在結束前上傳到指定位置。
- [ ] 失敗時可由任務識別碼重新接管。
- [ ] 不需要保留未提交的臨時修改。
- [ ] 不需要使用實體 USB、簽名裝置或 macOS 專屬服務。
只要有兩項以上無法勾選,這個任務就不應直接採用「建立沙箱、完成後刪除」的單軌流程。可以改成由持久環境保存控制面,E2B 只接收必要檔案與明確輸入。
| 狀態或依賴 | E2B 沙箱 | 持久運行環境 |
|---|---|---|
| 可由儲存庫重新建立 | 適合 | 可用,但管理成本較高 |
| 未提交變更需跨日保留 | 需自行同步 | 適合 |
| 背景資料庫與開發伺服器 | 可做,但要處理暫停與重連 | 適合 |
| 不可信程式碼 | 優先選擇 | 必須額外隔離 |
| Xcode、Keychain、Safari | 不適合當作一般替代品 | 需要真實 Mac |
| 產物回傳 | 必須由平台明確負責 | 必須由平台明確負責 |
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)
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)
我們會將任務拆成兩段:
- 在 E2B 執行不可信預處理、靜態檢查、格式化、依賴掃描或一般測試。
- 只有通過檢查的 Commit、Patch 或產物,才交給受控 Mac 執行 Xcode 建置、簽名、Safari 驗證或 Keychain 相關動作。
這種分工不能被描述成自動安全。若沙箱可以連到網路、推送 Git、發布套件或呼叫外部 API,這些仍是真實副作用。社群建立的 E2B MCP 方案也特別提醒:沙箱雖然與本機隔離,但網路請求、Git 推送與套件發布仍然會發生。這類案例只能作為待驗證參考,不能取代團隊自己的權限測試。(github.com)
平台團隊:控制面放持久環境,執行面採雙軌
平台團隊通常不需要在 E2B 與持久 Mac 之間二選一。更穩妥的做法,是把「控制面」與「執行面」拆開。
持久環境保存:
- Harness 設定與版本。
- 任務佇列、任務 ID 與重試記錄。
- 審計日誌與人工接管入口。
- 儲存庫來源、Commit、分支與交付規則。
- 哪些任務可進沙箱、哪些任務必須進 Mac 的政策。
E2B 承接:
- 不可信程式碼的初步執行。
- 一次性測試與資料轉換。
- 可由固定輸入重建的建置前檢查。
- 失敗後可直接丟棄的中間工作區。
第二張表不比較「哪個更安全」,而是比較每個交付責任由誰承擔。隔離本身不會自動阻止提示注入,也不會自動防止資料外洩;工具權限、網路出口、輸入來源與人工核准仍要由平台設計。
| 交付環節 | 建議負責面 | 驗收條件 |
|---|---|---|
| 檔案同步 | 控制面 | 記錄來源 Commit、檔案雜湊與排除清單 |
| 任務識別 | 持久環境 | 每次沙箱執行都有唯一任務 ID |
| 產物回傳 | 執行面產生、控制面收件 | 報告、Patch、日誌與任務 ID 可對上 |
| 憑據注入 | 控制面政策 | 預設不注入生產密鑰,只給短期最小權限 |
| 失敗接管 | 平台負責 | 可連回工作區,或能由輸入重建 |
| 外部副作用 | 明確審批層 | Git 推送、發布、資料寫入需分開授權 |
E2B 文件顯示,環境變數可以在建立沙箱、執行程式碼或執行命令時注入;但命令層的環境變數不是私密儲存機制。(e2b.dev) 因此,不能因為變數名稱叫 SECRET,就推定模型、程式碼或其他工具無法讀取它。
安全敏感團隊:先分憑據,再分環境
高風險程式碼執行和長期工作區怎麼分開?我們建議使用「輸入風險 × 外部副作用」矩陣,而不是只用一個 sandbox=true 開關。
高風險輸入包括陌生儲存庫、使用者上傳檔案、未審核插件、外部網頁內容與模型自行產生的命令。這些任務可放入 E2B,但必須同時限制:
- 不自動取得生產資料庫憑據。
- 不直接取得雲端管理權杖。
- 不允許任意外部寫入。
- 不將完整工作區與所有內部設定一併掛載。
- 不把沙箱輸出的指令原樣轉交持久 Mac 執行。
- 不把通過測試誤當成已完成安全審查。
持久環境同樣不是天然可信。若它保存了固定儲存庫、登入狀態、工作區密鑰與長期進程,就必須設定審批、分支隔離、人工確認與工作區清理規則。長期保留狀態,只是方便除錯與交付;它同時也增加了憑據殘留和跨任務污染的風險。
第二步:先做最小驗收,再擴大雙軌
我們建議平台團隊依以下順序落地:
第一步:列出任務契約。
為每個 Agent 任務記錄輸入來源、預期命令、輸出檔案、是否需要網路、是否會修改遠端系統,以及是否需要人工接管。
第二步:建立可重建包。
固定儲存庫 Commit、套件鎖定檔、測試資料、環境變數名稱與啟動命令。不要只保存一段自然語言提示。
第三步:在 E2B 做丟棄測試。
建立一次沙箱,執行任務,回傳報告與產物,再刪除沙箱。驗證沒有依賴本機檔案、隱藏會話或未記錄的背景進程。
第四步:測試暫停與恢復。
若任務需要較長時間,確認 pause/resume 後檔案、進程、任務 ID 與外部連線的實際狀態。不要只檢查目錄是否仍然存在。
第五步:測試憑據邊界。
用假的金鑰與測試端點驗證工具能看見什麼、能寫入什麼,以及提示注入後是否能誘導 Agent 呼叫不該使用的工具。
第六步:在真實 Mac 驗證專屬流程。
將 Xcode 建置、簽名、Safari、Keychain 和需要圖形介面的流程,放到受控 Mac 逐項核驗。這些兼容結論不能由沙箱文件推定。
第七步:設定接管規則。
E2B 任務失敗時,平台要能根據任務 ID 取得日誌與產物;Mac 任務失敗時,則要保留工作區、版本與人工接管入口。
第八步:先只放一小類任務。
優先選擇可重建、無生產憑據、無外部寫入的一次性任務。完成最小驗收後,再增加私有依賴或長時間背景服務。
團隊選擇表:單軌還是雙軌?
最後可用下表作為環境路由規則。只要「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 上完成的執行面。