dsh-plugin-microvm:爲 DSH 智能體提供可 fork 的一次性 microVM 沙箱

前言

在 DeepSeek Harness(DSH)裏讓智能體跑不可信代碼、裝依賴或並行試幾種修復時,若直接用本機自帶的 bash 與文件工具,風險會落在當前用戶環境上。社區裏也有在容器或遠程機器裏隔離的做法,但需要自己接 API、管生命週期,和 DSH 的工具面也不一定能對齊。

下面介紹維護者 yingmsky 發佈的 dsh-plugin-microvm(分類 admin-security):通過任意 E2B 兼容 API(E2B 雲、自建 E2B 或 AgentENV),在 Firecracker 級別的 microVM 裏爲智能體提供創建、執行、讀寫文件、fork 與銷燬沙箱的能力,且插件本身無運行時依賴,純 ESM,從 GitHub 安裝即可,無需構建步驟或 allowBuilds 權限。

這是什麼

dsh-plugin-microvm 向 DSH 智能體註冊 七個工具,在 disposable microVM 沙箱中跑命令、改文件,並支持把運行中的沙箱按內存與磁盤克隆成多份,便於並行探索。適用場景包括:智能體需要嘗試不可信代碼、安裝包,或在互不干擾的副本里同時驗證多種修復,而不動你的本機。

核心功能

七個工具及作用如下(均返回 DSH output.schema 規定的類型化結果;在 PTC 模式下可直接 await tools.microvm_exec({...}) 得到 { exitCode, stdout, stderr, timedOut, … };microvm_exec 會以終端卡片形式渲染):

工具 作用
microvm_create 從模板啓動沙箱,返回 sandboxId
microvm_exec 執行 bash -l -c <command> 並等待;返回退出碼與 stdout/stderr(過長時保留頭尾);超時則殺進程
microvm_read_file 讀取文本文件(有大小上限)
microvm_write_file 寫入文本文件,可創建父目錄
microvm_fork 克隆運行中的沙箱(內存 + 磁盤)爲 N 份
microvm_destroy 立即銷燬沙箱
microvm_list 列出本會話內仍存活的沙箱及標籤、fork lineage

實現上不依賴 E2B SDK,直接用 fetch 對接控制面與 envd;協議細節對齊 E2B JS SDK 與 e2b-dev/E2B 中的 spec/envd/*.proto。

安裝與啓用

先做插件安裝,再配置 E2B(或自建)憑據,最後啓動 Web 界面。官方安裝命令如下:

dsh plugin --profile web add github:yingmsky/dsh-plugin-microvm
export E2B_API_KEY=e2b_...        # or set apiKey in config
dsh web

若生產或長期依賴某次提交,可 pin 到具體 SHA:

github:yingmsky/dsh-plugin-microvm#<sha>

默認配置面向 E2B 雲。在 profile 的 cordis.patch.yml 中覆蓋時,patch 會替換整行 config,因此需要改配置時請寫全你要保留的鍵,例如:

- id: microvm
  config:
    template: base
    sandboxTimeoutSec: 600
    maxSandboxesPerAgent: 4

自建 AgentENV 時示例(文檔註明 AgentENV 尚無鑑權,宜保持在 localhost;且需顯式設置 autoPause,否則 AgentENV 默認 true 會導致空閒沙箱被暫停而非在 TTL 時銷燬):

- id: microvm
  config:
    apiKey: unused
    apiUrl: http://127.0.0.1:8000
    envdUrl: http://127.0.0.1:8000
    template: <your template>

常用配置項默認值見倉庫 README 表格(如 template 默認 base、sandboxTimeoutSec 600、maxSandboxesPerAgent 4、enableFork true 等);apiKey 默認讀環境變量 $E2B_API_KEY,以 X-API-Key 發送。

典型用法

README 中給出一組可復現的交互思路:先建沙箱,在沙箱裏 clone 與裝依賴,再 fork 出多份並行改代碼、跑測試。

you> clone the repo, install deps, then try 3 different fixes for the failing test in parallel

agent  microvm_create        → sb_a1 (template base)
agent  microvm_exec   sb_a1  git clone … && pip install -e .        [exit 0]
agent  microvm_fork   sb_a1  count=3 → sb_b1 sb_b2 sb_b3            (memory + disk cloned)
agent  microvm_exec   sb_b1  apply fix A && pytest -x               [exit 1]
agent  microvm_exec   sb_b2  apply fix B && pytest -x               [exit 0]  ✓
…

經過上面的步驟,失敗分支留在 fork 副本里,本機工作區不必被智能體反覆改寫。

生命週期與安全邊界

插件在設計上強調「有界、可清理、不替你做本地權限隔離」:

  1. Scoped ids:模型只能操作本插件實例創建的沙箱 id;猜中同賬號下其他 id 也會被拒絕。
  2. No leaks:沙箱有服務端 TTL,使用會刷新;智能體 dispose(agent/disposed)或插件卸載/熱重載時會銷燬。
  3. Bounded:單智能體沙箱數量上限、fork 次數上限、單命令超時與硬頂、stdout/stderr 與讀文件大小上限。
  4. No orphan processes:命令超時或取消時通過 envd 發 SIGKILL,而非僅斷開連接。
  5. Tools, not confinement:插件只增加沙箱工具,不會把 DSH 內置的 bash/文件工具搬進 VM;若不希望智能體同時在本地執行命令,仍需使用 DSH 的 permission preset。

適用場景與注意

適合誰:已在用或計劃用 DSH 0.2.x,且能訪問 E2B 雲、自建 E2B 或 AgentENV,希望智能體在 microVM 裏裝包、跑測試、並行 fork 試方案的團隊或個人。

使用前請知悉:

  • 插件隨 當前 DSH 進程 加載運行;安裝前請自行審閱 GitHub 源碼 與 MIT 許可證。
  • 項目狀態爲 v0.1:README 寫明 CI 在 mock E2B(envd 真實跑 bash)與真實 @deepseek-ai/dsh 上驗證過工具定義與 schema;尚未在 live E2B 或 AgentENV 上完整跑通,歡迎反饋;自建 AgentENV 的 envdUrl 路由可能需要按部署方式調整。
  • 社區目錄 SkillHub 與 DeepSeek / 幻方無官方從屬關係;DSH 生態理念是「一切皆插件」,本文介紹的是社區維護的 admin-security 類插件之一。

結尾

dsh-plugin-microvm 把 E2B 兼容控制面與 envd 封裝成七個類型化工具,讓 DSH 智能體在一次性 microVM 裏執行、改文件並 fork 並行實驗,同時用 scoped id、TTL 與數量上限控制暴露面。需要細節、完整配置表與開發/測試命令時,以倉庫 README 爲準。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜