前言¶
在 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 为准。