前言¶
在 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 沙箱中跑命令、改文件,並支持把運行中的沙箱按內存與磁盤克隆成多份,便於並行探索。適用場景包括:智能體需要嘗試不可信代碼、安裝包,或在互不干擾的副本里同時驗證多種修復,而不動你的本機。
- 倉庫:https://github.com/yingmsky/dsh-plugin-microvm
- 社區目錄頁:https://www.skillhub.cn/plugins/yingmsky/dsh-plugin-microvm
- 許可證:MIT;當前 package 版本 0.1.0,面向 DSH 0.2.x(開發者預覽,可能有破壞性變更);
engines要求 Node >=22、DSH >=0.2.1-0 <0.3.0。
核心功能¶
七個工具及作用如下(均返回 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 副本里,本機工作區不必被智能體反覆改寫。
生命週期與安全邊界¶
插件在設計上強調「有界、可清理、不替你做本地權限隔離」:
- Scoped ids:模型只能操作本插件實例創建的沙箱 id;猜中同賬號下其他 id 也會被拒絕。
- No leaks:沙箱有服務端 TTL,使用會刷新;智能體 dispose(
agent/disposed)或插件卸載/熱重載時會銷燬。 - Bounded:單智能體沙箱數量上限、fork 次數上限、單命令超時與硬頂、stdout/stderr 與讀文件大小上限。
- No orphan processes:命令超時或取消時通過 envd 發
SIGKILL,而非僅斷開連接。 - 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 爲準。