DeepSeek Harness Hub
← 返回列表

云端沙箱执行NeevCloudAI/dsh-neev-sandbox

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

把文件、命令与终端迁到 gVisor 隔离沙箱运行

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/19 · 已提供中文文档

让 DeepSeek Harness 在 gVisor 隔离的云沙箱中运行——文件、Bash、PTY 和 LSP 全部从你的机器上移走。即插即用插件,无需分叉,可选持久化。

综合分
27.9
GitHub 分
27.9
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add NeevCloudAI/dsh-neev-sandbox
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-fs@deepseek-ai/dsh-sandbox@deepseek-ai/dsh-sandbox-policy@deepseek-ai/dsh-session@deepseek-ai/dsh-subprocess@deepseek-ai/dsh-terminal@deepseek-ai/dsh-terminal-bash@deepseek-ai/dsh-timeout@deepseek-ai/schemastery
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

@neevcloud/dsh-sandbox

为你的 DeepSeek Harness agent 在每次运行时提供一个干净、一次性的 Linux 盒子。
这个 bundle 将 Harness 的执行世界——文件、Bash、PTY 和 LSP——迁移到一个短生命周期的、gVisor 隔离的 NeevSandbox 中。
agent 写入的文件和运行的命令共享同一个 sandbox,你的机器上什么都不运行,而且无需 fork:把这个 bundle 放进任何 dsh 安装中,原有工具就能继续工作,只不过现在是在远程执行。

npm install --global @deepseek-ai/dsh
dsh plugin --profile headless add @neevcloud/dsh-sandbox
NEEV_API_KEY=... NEEV_ORG_ID=... NEEV_PROJECT_ID=... \
dsh --profile headless "clone my repo, run the tests, and summarize the failures"

你的 agent 的 pwd、id、它写入的文件、它启动的服务器——全都位于 sandbox 中,而不是你的笔记本电脑上。

为什么

DeepSeek Harness 建立在能力接缝(capability seams)之上:可替换的接口,由 provider 实现,由工具消费。Harness 的 Bash、终端和 LSP 工具将每一个执行世界操作都委托给同一个接缝——ctx.subprocess。
替换这一个 provider,它们就会一起迁移,无需对工具本身做任何改动。这就是这里的全部思路:一个小 bundle,你的 agent 的执行世界就变成了一个远程 sandbox。

遵循 Harness 的 capability-seam
模型,并通过标准的 dsh plugin bundle 机制安装——无需修改 Harness 源码,无需检出 monorepo。

工作原理

三个 Cordis 服务,打包为一个 bundle:

| 入口点 | 注册 | 角色 |
|---|---|---|
| @neevcloud/dsh-sandbox/runtime | ctx.neev | 拥有一个 sandbox:创建 → 就绪 → 退出时删除 |
| @neevcloud/dsh-sandbox/subprocess | ctx.subprocess | 在该 sandbox 中运行进程和 PTY |
| @neevcloud/dsh-sandbox/filesystem | ctx.fs | 在该 sandbox 中读取、写入、编辑和列出文件 |

随附的 cordis.patch.yml 将它们接入:它会禁用本地 subprocess
provider,插入两行 Neev,并将感知沙箱的 Bash 执行器设置为
直接透传。dsh plugin add 会为你应用它。

用例

- 在机器之外运行不受信任或 AI 生成的代码 —— 爆炸半径是一个一次性的
gVisor 沙箱,运行结束后即被删除。
- 每个任务一个全新盒子。 每次 dsh 运行都会获得自己干净的 Linux
环境;没有残留状态,没有“在我笔记本上能跑”。
- 并行展开多个 agent,每个都隔离在自己的沙箱中,彼此不会
干扰对方的文件或进程。
- 可复现、类 CI 的执行,与宿主机上安装了什么无关。
- 长时间运行或交互式工作 —— 开发服务器、REPL 和 TUI 在沙箱内
通过真实 PTY 运行。

安装

npm install --global @deepseek-ai/dsh
dsh plugin --profile headless add @neevcloud/dsh-sandbox

在宿主环境中设置你的 Neev 凭据(切勿提交它们):

export NEEV_API_KEY=...      # your Neev API key
export NEEV_ORG_ID=...       # organization id
export NEEV_PROJECT_ID=...   # project id

初次使用 NeevCloud?按照 Agentic Studio 快速入门中的
Retrieve organization and project IDs
创建 API key 并找到你的 organization 和 project id。

然后运行一个任务:

dsh --profile headless "use Bash to run 'cat /etc/os-release' and 'id -un', and report the output"

一次成功的运行会报告沙箱的操作系统和用户 —— 而不是你宿主机的 —— 并在
两个生命周期边界处打印沙箱 id:

NeevSandbox created:
NeevSandbox terminated:

随时用 dsh --profile headless --dump-config 验证接线:subprocess 行被
禁用,而 neev-runtime / neev-subprocess 行被插入。

本地开发安装

git clone https://github.com/NeevCloudAI/dsh-neev-sandbox && cd dsh-neev-sandbox
npm install && npm run build
dsh plugin --profile headless add .

配置

runtime 模块接受以下 Cordis 配置字段(均为可选):

| 字段 | 默认值 | 含义 |
|---|---|---|
| orgId | NEEV_ORG_ID | Organization id |
| projectId | NEEV_PROJECT_ID | Project id |
| templateId | sb-ubuntu-26-04-minimal | 服务器用于预配的沙箱模板 |
| image | — | 显式 OCI 镜像;优先于 templateId |
| cwd | 自动发现 | 绝对工作目录;省略时通过 pwd 发现 |
| persist | — | 一个稳定的沙箱名称。设置后,沙箱会在多次运行间复用(按名称重新连接),并在退出时暂停而非删除,因此其文件得以保留。省略则采用默认的完全临时行为。 |
| idleTimeoutMs | — | 在此空闲时长后自动暂停沙箱以节省成本,并在下一次操作时惰性恢复。省略则永不自动暂停。 |
API 密钥仅从 NEEV_API_KEY 读取——它从来不是配置字段,
因此密钥永远不会出现在已提交的配置文件补丁中,也永远不会
被转发到沙箱中。

覆盖你配置文件的 cordis.patch.yml 中的某一行(补丁会替换整个
配置,因此请重新声明你所需的内容):

- id: neev-runtime
name: '@neevcloud/dsh-sandbox/runtime'
config:
templateId: sb-ubuntu-26-04-minimal

范围与限制

- 文件版本是派生自元数据的。 SDK 不暴露原生版本
令牌,因此守护 writeText/editText 的新鲜度令牌是
文件 mtime、大小和模式的哈希。守护机制有效;在版本检查与写入之间
存在一个很小的非原子窗口。
- 写入通过临时文件 + 重命名实现原子性,并且在此版本中路径解析
不进行符号链接规范化(realpath)。
- 交互式 stdin 通过终端(PTY)流动;普通受管
进程仅接收启动时的 stdin。
- 环境: 仅转发你显式指定的条目;形似凭据
以及 NEEV_* 的名称始终会被剥离,并且沙箱保留其自身的
基础环境(基础镜像变量无法通过 spawn 环境取消设置)。
- PTY 工作目录和环境 遵循沙箱默认值。

资源

- 创建你的第一个沙箱(Agentic Studio,JS SDK) — 获取 API 密钥以及你的组织/项目 ID
- 沙箱运行时 API 参考 — 此捆绑包所基于的沙箱 API
- AI Agent API 参考 — 代理平台 API
- @neevcloud/sdk — 提供程序所使用的 JavaScript SDK
- DeepSeek Harness 能力接缝 — 此插件所接入的 ctx.subprocess / ctx.fs 模型

常见问题

它会改变我的 Harness 工具吗? 不会。原装的 Bash、终端和 LSP
工具不受影响——该插件只替换它们所委托的提供程序
(ctx.subprocess 和 ctx.fs),因此所有内容会一次性迁移。

沙箱是如何隔离的? 每个沙箱都是一个 gVisor(runsc)环境
——一个中介系统调用的用户空间内核,提供类似容器的易用性,
同时具有比共享内核容器更强的边界。

文件和 Bash 会共享状态吗? 会。它们运行在同一个沙箱中,因此代理
使用其文件工具写入的文件对 Bash 可见,反之亦然。

我的 API 密钥会到达沙箱吗? 不会。NEEV_API_KEY 仅由
SDK 在主机侧读取;它永远不会被传入沙箱,并且形似凭据的
环境名称会从转发给进程的任何内容中剥离。

沙箱是持久的吗? 默认情况下,它在启动时创建并在
退出时删除。将 persist 设置为一个稳定的名称,沙箱便会在多次运行之间重新连接
(退出时暂停,下次运行时恢复)且文件保持完整;将
idleTimeoutMs 设置为在空闲时自动暂停以节省成本。

它使用哪个模型? DeepSeek Harness 配置的任何模型提供商;该插件只提供执行环境,而不提供模型。

开发

npm install
npm run check      # lint · typecheck · test · build
npm pack

实时测试会运行真实的沙箱,并且除非设置了 NEEV_API_KEY(以及 NEEV_ORG_ID / NEEV_PROJECT_ID),否则会自动跳过。两个 Loader 入口点都默认导出其服务类。

若想在不使用 dsh 或模型的情况下自包含地体验这些提供商,请运行
examples/quickstart.mjs —— 它在沙箱中运行一条命令,使用 ctx.fs 写入一个文件,并通过 Bash 将其读回:

npm install && npm run build
NEEV_API_KEY=... NEEV_ORG_ID=... NEEV_PROJECT_ID=... node examples/quickstart.mjs

许可证

Apache 2.0 —— 参见 LICENSE。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群