目录
1. 定义
2. 背景与问题
2.1 它要解决的根问题
2.2 为什么现在出现
3. 核心原理
3.1 核心
3.2 插件
3.3 核心 + 插件 → dsh 怎么转起来
4. 整体架构
5. 价值与定位
差异化定位
6. 总结
仓库:https://github.com/deepseek-ai/deepseek-harness
主页:https://deepseek.com/harness
文档:https://deepseek-harness.github.io/deepseek-harness/guide/quickstart
口号:" Everything is a Plugin"
1. 定义
DeepSeek Harness(dsh)是 DeepSeek 出品的 开源智能体外壳(agent harness)
全部能力(模型、工具、技能、会话、沙箱、存储、循环、调度、UI)都按 Cordis 插件装配、可插可换;Cordis 内核只管加载/卸载/依赖、不承载任何具体能力,因此无需改源码即可在配置层选、换或扩展任一能力
它对标 Claude Code / opencode / Cursor / Aider,但走 把外壳做成插件平台 而非 写一个 Agent 程序 的路线
2. 背景与问题
2.1 它要解决的根问题
裸 LLM 没有手眼——不能碰文件、跑代码、上网、记跨轮上下文
要让它干活,需一层宿主替它:给工具、跑循环、做可视化、守安全边界,这层叫 harness
过去各 Agent(IDE 内置的、CLI 形态的)大多为单体或半扩展架构:能力耦合在主程序里,能加插件但未到 配置层可换任一能力 的程度,难复用、难企业定制
dsh 用 一切皆插件 把 harness 变成可组合运行时

2.2 为什么现在出现
Cordis 范式成熟:Cordis(github.com/cordiverse/cordis)提出 时空可组合性 范式,天生适合 一切皆插件 + 作用域隔离 的 Agent 形态,DeepSeek 直接把它当内核
生态闭环需要:DeepSeek 有 V4/R1 等强模型,缺一个 能 npx 一行起跑的官方外壳 把模型势能转化为开发者日活
多端同源需求:同一套能力要喂给终端开发者(TUI)、普通用户/演示(Web)、数据/AI 脚本(Python),逼出 host/client 彻底解耦
行业缺一个开源插件平台型 Agent:Claude Code 闭源、opencode/Aider 偏单体

3. 核心原理
dsh 的原理 = 核心 + 插件
核心是不干活的底座(容器与契约),插件是干活的业务能力;两者组合成一棵插件树,跑出 Agent 循环,全程记进会话日志
3.1 核心
核心 = Cordis 运行时 + ctx 契约面 + 事件词汇 + 会话日志不变量
-
Cordis 运行时(vendor/cordis/):只管插件的加载/卸载/依赖与可逆副作用,自己不干活——像主板,提供插槽与规则,干活的是插上去的卡
-
ctx 契约面:一组固定公开的服务槽(ctx.llm / ctx.tools / ctx.sessions / ctx.agents / ctx.agentLoop …),插件把服务挂到指定槽、用时按 key 取,不互 import 代码——换槽上的 provider 不影响别人,这就是 可插可换 的落点
-
事件词汇:一套约定的事件频道名(session/event、agent/*、tools/*、llm/* …),插件靠 emit/监听通信、不直接互调——想给工具调用加审批,就监听 tools/* 在调用前拦
-
会话日志不变量:铁律 模型可见即已记录 ——会话日志只追加,凡抵达模型请求的输入(系统提示词/思维链/工具调用结果/子 Agent/上下文注入)都能从日志重建;新增模型可见输入须扩展 SessionEventMap,回放/分叉/审计都从这一份来
-
无特权内核:扩展 = 往别的插件旁边挂、注册随卸载撤销,连 Agent loop 都是可换的 默认驱动器
3.2 插件
模型、工具、技能、会话、沙箱、存储、循环、调度、UI——所有 Agent 能力都是插件
插件往核心上做两件事:
-
填 provider:把某能力的实现挂到对应 ctx 槽(模型适配器挂 ctx.llm、文件系统挂 ctx.fs、沙箱挂 ctx.sandbox…)
-
挂监听:订阅事件频道,加策略/拦截(审批、限流、记录)
能力以 seam(三角色)组织:定义接口 / 提供方实现 / 消费方使用(通常是面向模型的工具);换一个 provider 改全局——把 fs+进程 provider 指向远程沙箱,Bash/PTY/LSP 一并搬走
3.3 核心 + 插件 → dsh 怎么转起来
-
装配成插件树:Profile + Bundle + Patch 在配置层叠加(dsh –profile web –dump-config 可看);dsh-base 是开箱默认层、本身也是插件可 patch 替换
-
跑出 Agent 循环(turn/step):领输入 → 装配提示词(系统提示 + 工具 schema + 历史)→ 调模型流式 → 模型发工具调用 → 执行工具(带审批/沙箱)→ 结果回灌会话 → 不欠工作就结束轮次,循环本身也是可换的 默认驱动器
-
全程记进会话日志:模型看到的都落日志,回放/分叉/审计共享同一份。
4. 整体架构

dsh 自上而下 5 层
-
L1 交互入口层:TUI / Web UI / Python SDK / ACP 编辑器——进入 dsh 的入口
-
L2 客户端表现层:把事件流渲染成界面,经通信契约连宿主
-
L3 宿主运行时层:Agent 循环、提示词装配、工具调度、会话日志(模型上下文唯一事实源)
-
L4 能力插件层(一切皆插件):模型/工具/技能/沙箱/存储/循环/调度/UI 全是可插可换插件
-
L5 插件内核层 Cordis:只管加载/卸载/依赖,不干活
-
类型自动生成:TS 类型→工具参数定义+各端清单,CI 校验不漂移
-
安全沙箱:Landlock + sandbox + E2B 多级隔离,包裹工具执行
串联:L1 进 → L2 渲染 → 契约到 L3 跑循环 → 调 L4 插件 → 挂 L5 Cordis;类型自动生成保定义一致、安全沙箱一保执行隔离
5. 价值与定位
技术价值:把 harness 从 定制代码 升级为 可组合运行时 ;typert 从 Zod 自动扇出(模型 JSON Schema + 跨端 catalog + RPC 描述符)+ CI gate 锁不漂移(仍手写 Zod,差在扇出+锁漂移,单工具是 overkill);host/client + ACP/MCP 给出 Agent 复用范本
目标用户:开发者(TUI)、普通/演示(Web)、Python/AI 工程师、插件作者、FDE、定制 Agent 的企业
差异化定位
| 维度 | dsh | Claude Code | Codex |
| 形态 | 平台/外壳(开箱跑) | 闭源 Agent | CLI Agent |
| 语言 | TypeScript | — | Rust |
| 内核 | Cordis 一切皆插件 | 单体+MCP | 单体+MCP |
| 多端 | TUI+Web+Python | TUI+IDE | TUI |
| 可组合 | 配置层换任一项 | 弱 | 插件(MCP) |
| 工具契约 | Zod 自动扇出 + CI gate | 手写 | 手写 |
| 协议 | ACP+MCP | MCP | MCP |
| 沙箱 | Landlock+E2B+worker | 弱 | 内置沙箱 |
| 许可 | MIT | 闭源 | Apache-2.0 |
6. 总结
dsh 的本质:一个插件平台——核心(Cordis)只管装载、不干活,所有能力(模型/工具/沙箱/会话/循环/UI…)都是可插可换的插件,配置层就能选、换、扩展任一项
它真正的不同不在功能多,而在范式:别的 Agent 是一个程序,dsh 是一个可组合运行时——换模型、换沙箱、加工具都不改源码,全在配置层完成
这套"核心 + 插件 + 类型契约"的设计,把 Agent 外壳做成了能被复用、被扩展、被企业定制的工程底座






