DeepSeek Harness(dsh)本质是一个插件化 Agent 运行时框架,将模型适配器、工具注册、会话、沙箱、遥测、界面乃至默认 Agent 循环全部抽象为插件,开发者可按需替换任意模块,而非只能使用成品,适合构建符合自身工作流的定制化编程 Agent。
DeepSeek Harness 已经在 GitHub 上获得了超过 170,000 颗星,一个随之而来的标签几乎可以预见:Claude Code 杀手。
我理解这种比较。它是开源的,采用 MIT 许可证,支持多个模型提供商,还能运行编码 Agent 工作流。如果你只看表面,它似乎只是日益拥挤的终端编码 Agent 列表中的又一个 entry。
但这不是有趣的部分。
DeepSeek Harness,或者叫 dsh,实际上是在尝试让 AI Agent 周围的 machinery 变得可替换。模型适配器是一个插件。工具注册表是一个插件。会话、沙箱、遥测、接口,甚至默认的 Agent 循环都是插件。
这使得 DSH 不太像 Claude Code 的免费复制品,而更像是一套用于构建你真正想要的编码 Agent——或者研究 Agent、或者内部自动化 Agent——的套件。
Agent harness 是围绕模型运行时的基础设施:上下文、工具、状态、权限、执行,以及连接它们的循环。
DeepSeek Harness 将一个插件系统应用到了这个运行时的几乎每一个部分。
它给开发者提供了比典型成品编码 Agent 更多的架构控制权,但也带来了更多的设置和维护工作。
当你想要一个完善的产品时,Claude Code 和 Codex 仍然是更合适的选择。如果你想要一个开放的、provider 无锁的编码 Agent,OpenCode 是更接近的比较对象。
DSH 目前是开发者预览版,所以应该把它当作一个可以探索的平台,而不是可以未经评估就直接采用的基础设施。
语言模型无法自行编辑代码库、运行测试、搜索文档,或者请你批准某个 shell 命令。
它需要一个运行时来决定:
这个运行时就是 harness。
这就是为什么同一个模型在两个不同的编码工具中可能表现出截然不同的体验。模型质量很重要,但系统提示词、上下文策略、工具模式、权限边界和恢复行为同样重要。
模型提供推理能力。Harness 决定如何将推理转化为行动。
很多开发者工具都有插件。DeepSeek Harness 走得更远——它让运行时本身变得可组合。
DSH 构建在 Cordis 之上,Cordis 是一个框架,插件通过它向共享上下文提供服务、类型化事件和可逆效果。根据官方架构指南,不存在任何必须在你想要改变产品时必须打补丁的特权核心。
相反,一个正在运行的 DSH 实例是作为一棵插件树组装起来的。
底层提供了模型适配器、工具、持久化、沙箱、审批、凭证和遥测等功能。一个 profile 随后添加特定环境所需的组件。DSH 目前附带了 web 和 headless 两种 profile 模板。
实际结果是,你可以替换某一方面的能力而不必重建围绕它的一切。
例如,一个团队可以:
默认循环不是隐藏的魔法。它是另一个注册的服务。
这是 DSH 最让我感兴趣的部分。它将 Agent 行为视为可以被检查和替换的基础设施,而不仅仅是可以在边缘处做些配置。
想象你的内部编码 Agent 最初在开发者的笔记本电脑上启动。后来,安全策略要求每个 shell 命令都在隔离的远程环境中运行。
在很多 Agent 实现中,文件系统访问、子进程执行、终端状态和工具定义已经紧密耦合。迁移执行意味着要重写好几层,然后还要检查每一个假设了本地机器的地方。
DSH 在 provider 和 consumer 之间定义了能力边界。它的文件系统和子进程 provider 可以共享一个执行环境,因此替换后端可以一起迁移 Bash、PTY 和语言服务器操作。
这并不是让迁移自动完成。你仍然需要实现并保护 provider。但这给这个变更提供了一个定义的架构边界,这比通过生产 bug 来发现边界要好得多。
这些项目有重叠,但它们针对不同的工作场景做了优化。
说 DSH 是 Claude Code 的替代品并没有错,但这掩盖了权衡关系。
Claude Code 给你的是一个整合好的产品。DSH 给你的是架构控制权。前者帮你减少决策;后者暴露决策。
Codex 也是同样的道理。Codex CLI 是开源的,所以这不是简单的“开源对闭源”的比较。区别在于 DSH 让更多周边运行时——包括循环——成为可替换组合模型的一部分。
OpenCode 可能是最接近的实际比较,但即使如此,侧重点也不同。OpenCode 主要是一个灵活的编码 Agent。而 DSH 在你想要重塑或嵌入 Agent 本身时会很有用。
DSH 适合以下场景:
如果你主要是为了每天获得编写和审查代码的帮助,DSH 可能会比你需要的更多的基础设施。Claude Code、Codex 或 OpenCode 能让你更快地进入高效工作流。
一个有用的经验法则:
当你想要委托编码工作时,选择一个编码 Agent。当你想控制委托如何工作时,选择一个 Agent harness。
你仍然需要模型、计算资源、存储、沙箱、监控,以及足够了解系统以便维护它的人。如果 Agent 需要使用当前外部信息工作,你还需要一种可靠的方式来搜索和读取网页而不丢失来源元数据。
这正是模块化方法有用的地方。搜索、页面读取、执行和编排不必捆绑到一个 Agent 产品中。
例如,一个 Agent 可以使用搜索服务来检索当前的、有来源支持的信息,使用读取器将页面或文档转换为模型可用的内容,使用沙箱来隔离代码执行。只要接口保持稳定,这些能力可以独立演进。
在 Cloudsway,这就是我们工作的层次:Search 和 Reader 提供实时网络信息和结构化内容,而 Scalebox 提供隔离的执行环境。DSH 为将这些能力接入自定义 Agent 而不把它们永久地固定在一个整体循环中提供了一个有趣的基础。
仓库明确说明了当前状态:DeepSeek Harness 是一个开发者预览版,应该预期会有破坏兼容性的变更。
这应该影响你的评估方式。
在将 DSH 用于真实工作流之前,我想要:
安全这一点尤其重要。Agent 可能会读取代码库、网页、文档、Issue 或可复用指令,其中包含其他人编写的内容。如果同一个 Agent 能够执行命令或访问凭证,提示词注入就变成了一个执行边界问题——而不仅仅是一个提示词问题。
模块化给了你实施控制的地方。但它不会替你执行这些控制。
安装了 Node.js 之后,启动 Web profile 最快的方式是:
npx @deepseek-ai/dsh web
默认情况下,DSH 在 http://127.0.0.1:3080 启动本地 Web UI。
如果你想查看源码:
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web
仓库发展很快,所以在依赖其他地方复制的设置说明之前,请查看官方 README。
关于 profile、bundle、provider 和 Web UI 的更详细教程,我们还发布了 DeepSeek Harness 架构和快速入门指南。
DeepSeek Harness 大概不会让付费编码 Agent 过时。用它来对标 Claude Code 是错误的基准。
它更有趣的贡献是让 harness 层变得可见。它鼓励开发者将模型访问、上下文、工具、状态、权限、执行和编排视为独立的设计决策。
对大多数人来说,一个成品编码 Agent 仍然是实际的选择。对于正在构建自己的 Agent 基础设施的团队来说,DSH 值得研究——即使他们永远不会在生产环境中使用它。
问题不是 DSH 能否模仿 Claude Code。问题是开发者是否想要足够的控制权来构建一种不同类型的 Agent。
如果你尝试过 DSH,你会首先替换运行时的哪个部分:模型、工具层、沙箱,还是 Agent 循环?