DeepSeek Harness深度拆解:"一切皆插件"的Agent底座,为什么它不想做下一个Codex

DeepSeek Harness深度拆解:从Cordis插件系统到Profile组合机制,解析这个29小时破9万星的Agent运行时框架为什么选择了一条和Codex、Claude Code完全不同的路。

8月13日,DeepSeek开源了一个叫Harness的项目。29小时GitHub破9万星,5天破15万,截至今天已超16.7万星、1.7万fork。这是GitHub史上涨星最快的项目之一。

但我更关心的不是星数,而是它的定位——它不想做下一个Codex,也不想做下一个Claude Code。它想做的,是Agent的运行时底座。

核心公式只有一句话:Model + Harness = Agent

DeepSeek Harness是什么

DeepSeek Harness(简称dsh)是一个开源的Agent运行时框架,MIT协议,TypeScript编写,目前是v0.1开发者预览版(最新rc.8)。

安装只需要一行:

1
npx @deepseek-ai/dsh web

它会在http://127.0.0.1:3080启动Web UI,配置好模型API Key就能直接用。

和Codex、Claude Code不同,Harness不是一个"编程助手"——它是一个Agent运行时。你把模型丢进去,加上需要的插件,就得到一个Agent。编程只是它能做的事情之一。

这个区分很重要:Codex和Claude Code是工具,Harness是平台。

“一切皆插件"架构拆解

Harness的底层是一个叫Cordis的插件框架,这个名字来自DeepSeek内部代号,其设计有配套论文《A Programming Paradigm for Spatiotemporal Composability》。

Cordis的核心理念极其简洁:

没有特权内核需要打补丁——你通过在其他插件旁边挂载一个插件来扩展dsh,注册是可逆的效果(effect),当插件卸载时会自动回滚。

具体来说,Cordis基于五个核心概念运转:

概念含义
插件(Plugin)实现Service的对象,通过apply(ctx)挂载到上下文
上下文(Context)服务仓库,服务通过ctx.<key>注册(如ctx.toolsctx.llm
依赖注入(inject)声明式依赖等待,无需手动编排启动顺序
事件系统支持emit/waterfall/parallel/serial四种分发模式
可逆效果(effect)所有注册都是可逆的,卸载时自动回滚

在Harness中,所有Agent能力都是插件——模型适配器、工具注册、会话日志、沙箱、存储、Agent循环本身,全部是插件。看它的包结构就能理解这个粒度:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
packages/
  core/         session, system-prompt, tools, agent, agent-loop
  llm/          模型能力:Service + DeepSeek/多模型providers
  shell/        bash能力:Service + local/pwsh providers
  fs/           文件系统能力 + 策略
  sandbox/      沙箱隔离
  skill/        技能注册 + 目录加载
  web/          搜索/抓取能力
  subagent/     子Agent能力:委托 + 编排
  workflow/     工作流能力
  ...

每个包都是一个能力声明(Service Definition)+ 能力实现(Provider)+ 能力消费(Consumer)的三件套。换一个Provider,整个能力就变了——比如把本地文件系统Provider换成远程沙箱Provider,bash、PTY、LSP全部跟着迁移,无需改动任何消费端代码。

这就是"一切皆插件"的真正含义:不是"支持插件”,而是"只有插件"

Profile:组合的艺术

理解了Cordis,就理解了Harness的运行方式。一个运行中的dsh实例,本质上是一棵在启动时从有序层组合而成的插件树。

这棵插件树通过Profile来描述:

概念定义
Profile命名的组合方案,列出要堆叠的bundles,保存在Harness home中
BundleCordis配置行和代码的分发格式,作为组合的一层
Patch用户级覆盖层,通过cordis.patch.yml修改任何已有配置行

Harness内置了两个Profile模板:web(浏览器应用)和headless(无服务器一次性运行)。

组合顺序很明确:先按顺序叠加每个bundle的patch → Profile的cordis.patch.yml → home级cordis.patch.yml--patch覆盖层。

你可以用以下命令查看你的机器实际启动的插件树:

1
dsh --profile web --dump-config

它输出的每一行配置都可以被你的patch替换。没有任何一行是不能改的。

对比:三种哲学,三条路

现在我们可以把当前主流的Agent编程工具放在一起比较了:

维度Codex (OpenAI)Claude Code (Anthropic)DeepSeek Harness
架构封闭单体紧耦合扩展全插件化
模型绑定仅OpenAI仅Anthropic多模型(OpenAI、Anthropic、Google、DeepSeek等)
扩展方式配置有限Hooks/Commands完整插件系统
定位编程工具编程工具Agent运行时
沙箱内置容器内置权限控制Provider可选(E2B、本地、自定义)
会话管理云端托管本地文件可插拔存储Provider
开源协议Apache 2.0部分开源MIT

三者的本质区别:Codex和Claude Code是"帮你写代码的工具",Harness是"让你搭建Agent的平台"。

Codex的优势在于OpenAI的模型质量和沙箱安全;Claude Code的优势在于Anthropic的代码理解和紧密集成。但它们的扩展性都有天花板——你无法把Codex的模型换成Claude,也无法给Claude Code加一个完全不同的工具系统。

Harness可以。因为模型是插件,工具是插件,沙箱是插件,甚至Agent循环本身都是插件。

Cordis事件系统:Agent的神经系统

Harness的事件系统是理解其架构的关键。它定义了三种事件域:

事件域用途特点
Session事件持久化事实,写入日志可重放、可恢复
Agent事件(agent/*拦截运行中的Agentinbox、step、request、validation
Capability事件挂载策略和适配器fs/*tools/*telemetry/*

一次Agent执行的流程是这样的:

1
2
3
4
5
6
7
8
9
turn/start
  → claim输入 + 排队消息
  → 组装prompt sections + tool schemas
  → agent/pre-step(可改写或拒绝)
    → step/start
    → assistant/message → tool/call → tool/result
    → step/end
  → agent/turn-stopping
turn/end

关键设计原则:模型可见的必须可记录。 任何到达模型请求的内容都必须能从日志中重建——这是为什么新的模型可见输入需要新的session事件。这个runtime不变量保证了会话的可重放性和可fork性。

对开发者意味着什么

Harness对开发者的价值不在于"又多了一个编程工具",而在于它走了一条不同的路:

从"用模型"到"搭Agent"。

以前你想做一个Agent,需要从零搭建:模型接入、工具注册、会话管理、沙箱隔离、循环调度,每个都是独立工程。现在你只需要:选一个模型Provider插件 + 挂上需要的工具插件 + 配置Profile = Agent完成。

Harness内置的核心包覆盖了Agent开发的几乎所有基础设施:

能力作用
会话管理core/session追加式事件日志 + 内存存储
提示词组装core/system-prompt模板化prompt sections + tool schemas
工具注册core/tools作用域工具注册 + 守卫执行管线
Agent循环core/agent-loop默认驱动实现
子Agentpackages/subagent委托、编排、协作
文件系统packages/fs能力声明 + 策略
Shell执行packages/shellbash能力 + local/pwsh providers
LSPpackages/lsp语言服务器能力

这意味着开发者可以专注于"我的Agent需要什么独特能力",而不是"怎么让Agent跑起来"。

实操建议

什么人适合现在关注Harness?

  • Agent框架开发者:想理解下一代Agent架构的设计思路
  • 插件/扩展系统设计者:Cordis的"可逆效果"模式值得学习
  • 多模型用户:需要在不同模型间切换而不重写代码

现阶段的局限:

  • 还是v0.1开发者预览版,官方明确说"会有破坏兼容性的变更"
  • 文档还在完善中,架构文档质量不错但用户指南偏薄
  • 生态虽然已有8600+个dsh-plugin标签仓库,但成熟度远不及Claude Code的Hooks生态
  • Python SDK在开发中,目前TypeScript为主

建议: 如果你是Agent开发者或深度技术用户,现在就值得clone下来研究架构。如果你只是想找一个编程助手,现阶段Codex或Claude Code仍然是更成熟的选择。

Harness的价值不在于今天能用它做什么,而在于它对Agent基础设施该怎么搭,给出了自己的答案。


作者:varkm 数据来源:GitHub API实时查询(2026-08-20),DeepSeek Harness官方文档