8 月 13 日,DeepSeek 和 V4 Pro 正式版同一天开源了一个项目:DeepSeek Harness,简称 dsh。12 小时 50k star,两天约 95k。star 数说明热度,但不说明它是什么、值不值得看。这篇文章把三个问题讲清楚:dsh 是什么,能做什么,和过去的 harness 比新在哪。
一、dsh 是什么
一句话:DeepSeek 官方开源的插件化 Agent 运行时框架 ,MIT 协议,TypeScript 编写,可以理解为"开源、可插拔、可深度定制的 Claude Code"。它能读写文件、执行命令、搜网页、调度子 Agent------这些能力 Claude Code 都有,区别在于 dsh 把这些能力全部做成了插件。
它的核心理念写在门口:Everything is a Plugin(一切皆插件)。模型是插件、工具是插件、会话是插件、沙箱是插件、权限审批是插件------连 Agent 的主循环本身都是插件。官方原话很直白:"不存在需要打补丁的特权内核:扩展 dsh 的方式是把插件挂到其他插件旁边。"
几个基本盘:
| 项 | 内容 |
|---|---|
| 发布 | 2026-08-13,与 V4 Pro 同日 |
| 版本 | 0.1.0-rc.x,官方明确警告会有破坏性变更 |
| 协议 | MIT,可商用 |
| 语言 | TypeScript(全 ESM)+ Python SDK,pnpm monorepo 60+ 包、约 20 万行 |
| 底座 | Cordis 插件元框架(北大与 DeepSeek 合著论文,源自 Koishi 生态) |
先泼半盆冷水:rc 版别拿来上生产。官方自己都说 API 会 breaking。现在看它,看的是设计。
二、核心设计:三个关键词
1. 可逆插件(Cordis 底座)
dsh 不用常规的"插件 = 一个带约定的 npm 包"模式,而是建立在 Cordis 上:插件向共享上下文贡献服务、类型化事件、可逆副作用 ,彼此通过 ctx.llm、ctx.tools 这类服务键引用,不 import 具体实现。
最关键的性质是注册即副作用,卸载自动撤销------插件被卸载后,运行时不留任何残余。传统框架里你换个插件,旧插件留下的半截状态、监听器、注册项全得自己打扫;Cordis 把这件事做成了机制保证。
2. Seam 三段式
每个可替换能力被拆成三个角色:
Service Definition(定义协议)→ Provider(提供实现)→ Consumer(消费使用)
这不是新鲜的依赖注入,但用在 Agent 运行时上效果很实在。实测过的两个例子:
- 本机 llama.cpp 和云端 DeepSeek API 走同一条配置路径,模型选择器一点即切换,零适配代码。Ollama、vLLM 等任何 OpenAI 兼容端点都能挂。
- 把
ctx.fs指到 E2B 远程沙箱,Bash、PTY、LSP 整组能力一起搬家------换一个 Provider,等于迁移一整套执行环境。
3. 事件溯源会话日志
设计铁律:"模型可见即已记录"------凡是抵达模型请求的内容,必须能从会话日志重建,运行时用不变量断言强制执行。append-only 事件流是唯一真相源,fork、恢复、回放、遥测、UI 状态全部从它派生。
这一条是 dsh 和多数框架拉开差距的地方,下文细说。
另外还有一套 Profile / Bundle / Patch 配置叠加体系:运行中的 dsh 是一棵多层配置叠出来的插件树,Patch 可以按 id 定位替换任意条目,越晚叠加的层权力越大------团队不改源码就能覆盖行为。
三、能做什么
四种运行模式
| 模式 | 定位 | 说明 |
|---|---|---|
| Standard | 通用编码 | 文件、shell、搜索、规划、子 Agent、工作流全开 |
| PTC(Code) | 代码组合 | 模型直接写 TypeScript 调 SDK,一次调度多轮工具调用 |
| Minimal | 跑分环境 | 只有 bash + str_replace_editor 两个工具,系统提示词一句话 |
| Creator(cordis) | 自指入口 | Agent 运行时里检查插件树、动态挂卸临时插件,默认不开 |
Minimal 模式值得单独说:V4 Pro 模型卡上的 Terminal Bench 87.9,就是在这个模式下跑出来的。这意味着模型跑分第一次从"黑箱数字"变成"开源权重 + 开源评测环境"的组合------理论上人人可复现。对做评测、选型的人来说,这是基础设施级的好消息。
Creator 模式是最激进的一个:Agent 干活干到一半,发现缺个工具,自己挂一个插件上去,用完自己卸载,重启即消失。官方对它的信任等级设定等同 shell 访问,默认关闭------激进但克制。
内置能力
- 工具 24 族:read/write/edit、glob/grep(内置 ripgrep)、bash/pwsh、持久 PTY、LSP、后台任务、web_search(deepseek/exa/perplexity 三个 Provider)、todo、目标管理等
- 子 Agent 六种 Provider :进程内 spawn、从父历史 fork、ACP 协议、Codex app-server 、Claude Code(官方 Agent SDK)、dsh SDK------也就是说 dsh 的 Agent 可以把 Claude Code 和 Codex 当子 Agent 调度,多智能体编排退化成"选一个 Provider"
- 沙箱三档:Linux Landlock / Windows ACL / E2B 远程
- 四种接入方式 :Web UI(
npx @deepseek-ai/dsh web)、headless CLI、ACP 协议服务器、Python SDK(内置运行时二进制,适合批量评测脚本) - 兼容 Claude Code / Codex 的 hooks 协议
安全护栏(第三方实测验证过的,不是 PPT)
- fail-closed:没有沙箱后端时,Bash 直接拒绝执行,错误信息会精确告诉你原因和出路
- 审批必须给理由:模型请求权限升级必须写 justification,不写直接被拒
- 三档权限:Read Only / Workspace Write / Full access,切 Full 要过风险确认
- 防循环:连续重复调用同一工具后系统自动注入提醒(实测对弱模型约束力一般,12B 模型烧了 25 步才被人工救回------护栏不能替代模型能力)
四、和过去的 harness 比,新在哪
先明确"harness"指什么:包裹 LLM 的运行时脚手架------工具调用循环、上下文管理、会话持久化、权限控制这套东西。大家这几年多少都用过几代:LangChain 的 AgentExecutor、pydantic-ai、各种自研循环,以及 Claude Code / Codex 这类成品。
dsh 的改进可以分成两档:两个质变,三个显著,一个倒退。
质变一:可逆插件化------不只是"能换",是"换回来不留痕"
LangChain 里模型和工具是参数,但主循环、会话、沙箱是焊死的;换工具就是把对象换掉,旧工具留下的状态没人管。LangChain 接口 0.1→0.2→1.0 三次破坏性变更,很多使用者的迁移痛苦都来自"组件表面是可换的,接缝处其实是焊死的"。
dsh 把接缝本身做成了显式契约(seam 三段式),并且卸载插件自动撤销全部副作用。Creator 模式更进一步:Agent 改装自己,且改装保证可逆。此前没有任何主流 harness 做到这一点。
质变二:事件溯源是状态模型,不是外挂观测
传统 harness 的会话状态是内存里的 messages 列表或数据库 blob;tracing(如 LangSmith)本质是旁路记录------主状态崩了,旁路日志只能帮你验尸。
dsh 反过来:append-only 事件日志就是会话状态本身。断了从日志恢复,跑挂了逐帧回放,谁审批的、为什么批、模型当时看到什么上下文,全部可查。这是从"可观测"到"可重放"的差别------类比数据库从"打日志排查问题"进化到 event sourcing。对调试 Agent 行为、审计、复现评测,这是杀手级能力。
三个显著改进
- 护栏体系化:fail-closed 沙箱、带理由审批、循环检测内置。pydantic-ai 在这点上几乎裸奔,LangChain 靠你自己拼回调------dsh 省的是自己写安全代码的那几周
- 评测即模式:Minimal 模式让"官方跑分复现环境"和"生产运行时"是同一个内核。以前 eval 代码(包括 DeepSeek 自己的评测仓库)都是单独一套,跑分环境和真实环境永远有差距
- 跨 harness 编排:把 Claude Code / Codex 当 Provider 调,官方支持。以前要在自己的编排里调 Claude Code,得自己包一层 CLI 进程管理
一个倒退:生态成熟度
rc 版本、API 会 breaking、文档还在补、Windows 原生支持有限(沙箱走 ACL,社区一致建议 WSL2)、生态和社区都还小。这是新生框架的必然代价,不丢人,但要认。
对比一览
| 维度 | 传统 harness | dsh |
|---|---|---|
| 组件可替换性 | 主循环/会话/沙箱硬编码,接口常 breaking | 全部插件化,卸载即撤销副作用 |
| 状态模型 | 内存/DB blob,tracing 外挂 | 事件日志 = 唯一真相源,可回放 |
| 安全护栏 | 自己拼 | fail-closed 沙箱 + 带理由审批,内置 |
| 评测能力 | 另建 eval 代码 | Minimal 模式 = 官方跑分环境 |
| 编排 | 自己编排多 Agent | Claude Code / Codex 当 Provider 调 |
| 接口契约 | 隐式约定 | seam 三段式显式契约 |
| 生态成熟度 | 庞大、生产验证多 | rc、生态新、Windows 弱 |
五、什么场景该关注它
说三类实际用法:
- 模型评测/选型:Minimal 模式 + Python SDK,挂不同模型跑同一任务矩阵,事件日志全程可回放。这是当下最实用的价值------任何需要给项目挑模型的人都能直接受益
- 做"代客执行"型产品:如果你的产品是用户丢一个目标进来、步骤没法预先枚举的那种(比如自动修复 App 审核被拒),dsh 这类运行时可以直接当内核,省掉自己写工具调用、会话管理、安全护栏的几个月
- 学架构:可逆插件、事件溯源、显式契约这三个思想,哪怕不用 dsh 也值得吸收进自己的设计。做过插件系统的项目对照 Cordis 的"注册即副作用、卸载自动撤销"看,会有明显体感
反过来,固定流程的管道别上 Agent 运行时。每天定时跑、步骤一个不差、要确定性结果的任务,每步过一次 LLM 决策意味着多付 token、多延迟、还引入随机性。确定性管道用确定性代码,LLM 只在需要"理解/判断/生成"的环节点状嵌入------这是另一个话题,此处按下不表。
六、结语
dsh 的爆火不全是技术原因------DeepSeek 的品牌势能 + V4 Pro 同日发布的流量都在加持。剥掉热度看本体:它把 Agent 运行时从"一个产品"变成了"一套可组合的协议",用可逆插件和事件溯源回答了"harness 本身该怎么造"这个问题。
至于要不要用:rc 阶段,学思想,等 1.0 再上生产。这个框架最值得追的不是 star 曲线,而是它定义的方向------当 Agent 运行时快速商品化之后,真正值钱的会是运行时之上沉淀的东西。