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 为准。

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

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

Xiaoye