DeepSeek 最近放了个大招:把自家的 agent 框架 DeepSeek Harness 开源了。仓库 8 月 13 号才建,到现在 4 天出头,已经 145k star、14.8k fork,是今年 AI 圈势头最猛的开源项目之一。
我花了大半天把它翻了个底朝天,还实际跑了一次任务,这篇就来把它讲清楚:它到底是什么,跟 Claude Code 这类东西有什么区别,“一切皆插件”这句话到底有多认真。
它是什么
DeepSeek Harness(命令行叫 dsh)是一个 agent harness。这个词国内还不算流行,简单说就是”agent 的运行环境”:模型适配、工具调用、文件系统访问、终端执行、沙箱、会话记忆、子代理、审批流程,这些东西它全部帮你装好,你只需要给它一个任务。
它跟 Claude Code、Codex CLI 那些产品定位不太一样。那些是开箱即用的编程 agent,而 dsh 更像一个框架:你可以直接用,也可以把里面任何一块换掉重写。MIT 协议,TypeScript 写的,monorepo 里分了几十个包。
官方明说了现在是”开发者预览”阶段,0.1.0-rc 版本,未来会有破坏性变更。所以别拿它当生产依赖,但值得花时间研究。
“一切皆插件”不是口号
很多框架说自己支持插件,但 dsh 是另一回事:连模型适配器、工具注册表、会话日志、agent 主循环本身都是插件。整个产品就是一棵插件树,没有特权内核,你扩展它的方式就是往树旁边挂一个插件,卸载时所有注册自动撤销。
这个设计不是拍脑袋想出来的。底层框架叫 Cordis,配套一篇论文《A Programming Paradigm for Spatiotemporal Composability》(https://github.com/cordiverse/paper ),把”组件加进来、撤出去、换配置”这件事给形式化了:时间维度保证组件移除时副作用能完整撤销,空间维度保证依赖关系由运行时响应式地管理。论文本身我之前专门写过一篇解读,叫装插件容易,卸插件难 ,这里就不重复了。有意思的是,论文里提到的”自演化 agent harness”未来方向,DeepSeek 自己先动手做了。
拆几个关键机制
插件树和 profile。运行中的 dsh 是一棵由配置层叠出来的插件树。web 和 headless 是官方提供的两个模板 profile。你可以随时执行 dsh --profile web --dump-config 看自己机器实际启动的整棵配置树,任何一行都能被你的 patch 覆盖。模型、工具、权限策略、沙箱,全是配置项,改配置就是在改架构。
事件系统分三个域。会话事件是持久事实,写进日志、可回放;agent 事件(agent/*)是运行中的拦截点,可以在模型请求前改写、拒绝;能力事件(fs/*、tools/* 这类)用来挂策略和适配器。想拦截一次模型请求、一个工具调用或者整个 turn,都有对应的事件可用。
会话日志是唯一真相。dsh 有个硬性不变式:模型能看到的任何东西,都必须能从会话日志里重建出来。所以日志不是调试用的边角料,而是整个上下文的源头,fork 会话、恢复、导出、遥测全都从这一条流派生。
能力接缝(capability seam)。这是架构里最有意思的部分:每个可替换能力分三个角色——服务定义、服务提供者、消费者。比如文件系统和子进程共用同一个”执行世界”,你把提供者换成远程沙箱,Bash、PTY、LSP 这些消费方跟着一起换,不用改任何业务代码。
子代理全家桶。ctx.subagents 一个接口,背后有进程内子代理、ACP 协议、真实的 Codex 和 Claude Code(走官方 SDK)、还有 dsh 自己的 SDK。同一个接口接完全不同的执行引擎,这是接缝设计的直接收益。
此外还有 MCP client(把外部 MCP server 的工具注册进来)、skills 系统(可复用的 agent 指令目录)、workflow(模型自己写编排脚本跑子代理)、plan mode、持久化目标、上下文压缩、E2B 沙箱、本地进程沙箱。功能上该有的都有了。
上手
体验门槛低得离谱,装个 Node.js 就行:
npx @deepseek-ai/dsh web
起来之后浏览器打开 http://127.0.0.1:3080 ,在设置里填 DeepSeek API key,选个工作目录,就能开始跟 agent 对话了。模型配置支持 DeepSeek 官方和任意 OpenAI 兼容端点。
不想开浏览器的话有 headless 模式,一条命令跑完一个任务就退出:
npx @deepseek-ai/dsh --profile headless "帮我看看这个仓库,总结一下主要包"
还有 Python SDK:pip install deepseek-harness-sdk,自带打包好的运行时,不需要装 Node.js,官方文档给了完整示例,几行代码就能在自己的程序里驱动一个 agent。
实测
我在一台 Linux 机器上真跑了一次 headless,任务是修一个故意放错的 bug:math.py 里 add 函数写成了 return a - b,main.py 调用它并打印结果,要求修完验证输出 5。
agent 的表现有点超出预期。它先修了 math.py,然后跑 main.py 发现还有两个坑:main.py 根本没 import add;就算补上 from math import add,Python 标准库自带的 math 模块会遮蔽同目录的本地文件,import 直接失败。最后它改用 importlib.util 按文件路径加载,跑通并确认输出是 5。整个过程自动完成,中间没人干预。
一个真实的坑:这台机器 npm 默认走腾讯云镜像,第一次装依赖卡了五分钟没动静,换成官方源 https://registry.npmjs.org 之后几分钟就装好了。国内网络环境跑它的话,记得先检查 npm registry。
几个值得说的观察
第一,这仓库本身就是 agent 开发的。仓库里有 AGENTS.md、CLAUDE.md、.agents/notes(agent 写的设计决策记录),文档里甚至直接写”建议使用 agent 探索代码库”。创建 4 天就合了 2600 多个 PR,这个速度靠纯人手不现实。最狠的是有个 demo:agent 跑起来之后可以检查、修改自己的运行时插件——自我修改是一等公民。
第二,插件生态刚起步。官方给插件仓库定了 dsh-plugin 话题方便被发现,但还没有成熟的市场或索引,插件主要靠 GitHub 上搜。想入局的话,现在写插件算是抢位置的好时机。
第三,别被 star 数带偏。145k star 里大部分是围观群众(包括我)。项目还在 rc 阶段,文档一天一个样。想拿它做生产工具,建议再等等;想研究 agent 框架怎么设计,现在就是最好的时候。
说实话,我最欣赏的不是它的功能列表,而是”每个部分都可替换、每次替换都有清晰的接缝”这个工程态度。Agent 框架这个赛道现在卷得飞起,大部分项目靠功能堆砌,dsh 是少数先把底层想清楚再动手的。能不能跑出来,看生态了。