阅读时间 17 分钟

DeepSeek Harness 开源解读:一切皆插件的 Agent 运行底座

DeepSeek Harness 开源解读:一切皆插件的 Agent 运行底座

2026 年 8 月 13 日晚,DeepSeek 在公布 API 调价后不久,正式发布并开源了 DeepSeek Harness(以下简称 dsh)开发者预览版 v0.1。DeepSeek Harness 是 DeepSeek 官方开发的开源 agent harness(智能体框架,负责把大模型接入文件系统、终端、网页等真实环境并驱动其持续工作),其核心设计被定义为:Everything is a plugin(一切皆插件)。模型、工具、技能、会话、存储、沙箱、调度、UI,所有 Agent 能力都由插件组合而成,可自由替换、灵活重组。项目以 MIT 协议开源,仓库地址为 github.com/deepseek-ai/deepseek-harness

需要注意的是,这不是一个全新的 DeepSeek 模型,也不是单纯的 API 客户端。官方把 Agent 拆成两个部分:模型是灵魂,harness 负责让模型理解环境、使用工具、在真实场景里持续工作。dsh 是这套“除模型之外的全部”的开源实现,也是 DeepSeek 从模型层向 Agent 运行时层延伸的第一块正式拼图。

DeepSeek Harness Web UI 初始界面,左侧为会话与工作区,右侧为对话输入区,预览版

一天 6.6 万星

GitHub API 数据(2026-08-14 早):deepseek-ai/deepseek-harness 仓库创建于 8 月 13 日,发布 24 小时左右即收获约 4.6 万星,次日早晨已超过 6.6 万星、5,596 forks,是近期增长最快的开源项目之一。npm 包 @deepseek-ai/dsh 最新版本为 0.1.0-rc.6,拆分为 20 多个 @deepseek-ai/dsh-* 子包。

项目背景可以追溯到 2026 年 5 月。彼时 DeepSeek 资深研究员陈德里公开招人,称要对标 Anthropic 的 Claude Code 做 “DeepSeek Code Harness”;团队负责人崔添翼随后发文,说团队新成立、人员紧缺,“每天都在面试”。此次开源前,项目已铺垫数月,8 月初部分媒体获得内测资格并提前体验。

与 dsh 同天发布的还有 DeepSeek V4 Pro 正式版,dsh 默认深度适配 V4 Pro 和 V4-Flash 模型。官方明确表示,当前处于开发者预览阶段,核心插件与接口会快速迭代,未来将出现破坏兼容性的变更。

一切皆插件:Cordis 微内核

dsh 最醒目的设计主张是“一切皆插件”,而且是字面意义上的全部。项目建立在 Cordis 微内核之上,运行中的 dsh 本质上是一个 Cordis Context。

Cordis 是 cordiverse/cordis 项目(2022 年创建,GitHub 实测 2,337 星),自称 “Meta-Framework of Spatiotemporal Composability”(时空可组合性元框架),设计思想源自论文《A Programming Paradigm for Spatiotemporal Composability》(一种面向时空可组合性的编程范式,见 cordiverse/paper)。Cordis 的思路是:插件向共享上下文贡献服务、类型化事件和可逆的副作用。新能力通过挂载插件加入,插件卸载时,自己注册的服务和副作用一并撤销。

这套设计带来两个直接结果:

可观测。 每一步状态都能被追踪和还原。

可回放。 多 Agent 协作可以像录像一样回放、调试。

官方架构文档明确写道:“不存在需要打补丁的特权内核”。扩展 dsh 的方式是把插件挂载到其他插件旁边,各项注册都是副作用,会在插件卸载时撤销。换模型就替换模型适配器,加工具就注册到统一的工具系统,换本地执行为远程沙箱就替换文件系统、进程和终端提供方,调整 Agent 行为可以替换整个 Agent Loop,不需要重写产品。

核心包:没有“大 Agent 类”

dsh 的仓库规模很大,包含超过 230 个 workspace 成员,代码分布在 packages/、apps/、examples/、python/、native/、vendor/、website/ 等区域。文件系统、终端、子进程、PTY、语言服务器、网页访问、技能、子智能体、工作流、计划模式、会话持久化、设置、凭据、遥测,几乎每一项能力都有自己的包。

官方架构文档把核心职责拆到不同包,没有一个大而全的 Agent 类包办所有事情:

职责 ctx 键
core/session 仅追加的 SessionEvent 日志和内存存储 ctx.sessions
core/system-prompt 提示词片段与工具 schema 的组装 ctx.systemPrompt
core/tools 作用域化的工具注册表和带把关的执行流水线 ctx.tools
core/agent Agent 接口、活跃 agent 注册表和 agent/* 事件 ctx.agents
core/agent-loop 实现该接口的默认驱动器 ctx.agentLoop
core/scope 按 agent 划分作用域的注册原语 库,无 ctx 键
llm/llm 消息与流式词汇表,以及适配器 seam ctx.llm

模型是模型,工具是工具,循环是循环,需要时再把它们拼起来。这种结构体现了一种边界意识:谁拥有接口,谁负责实现,谁把能力呈现给模型,尽量不混在一起。

Profile 与 Bundle:运行配置也能组合

运行中的 dsh 是一棵插件树,由启动时按序叠加的各层组合而成。

profile 是一套命名好的运行组合,存放在 Harness home 中。它列出自己叠放的组合包(bundle),存放自己安装的树外插件,并保存用户自己的 cordis.patch.yml。官方交付了两个模板:web(启动 Web UI)和 headless(一次性运行,不带服务器)。

bundle 是可以分发的插件组合。启动时,Harness 会从空配置开始,依次叠加 profile 指定的 bundle,再应用 profile、用户目录和命令行上的 patch。各层按此顺序应用:先按 profile 列出的顺序应用每个组合包,然后是 profile 的 cordis.patch.yml,然后是 home 级的那份,最后是任意 --patch overlay。

想查看实际启动的配置树,运行:

dsh --profile web --dump-config

这条命令打印出的任何条目,都可以由自己的 patch 替换。部署差异尽量放进配置组合,而不是变成一堆分支代码。

Turn 与 Step:一轮任务的完整生命周期

官方把一次工作拆成 turn 和 step 两个层级。一个 turn 是一轮完整任务,里面可以有多个 step;一个 step 对应一次模型请求,以及这次请求触发的工具调用。

简化后的事件流如下:

turn/start → claim → agent/pre-step → 组装提示词和工具 schema
→ agent/request → llm/stream → assistant/message → tool/call
→ tools/pre-execute → tools/execute → tools/post-execute
→ tool/result → step/end → turn/end

这些事件是给插件提供的具体接入点,模型请求前可以改写或拒绝输入;请求发出时可以拦截;工具执行前后可以加入审批、超时、监控和策略检查。

输入通过同一个 inbox 到达驱动器,有些消息会立即唤醒它;注入的上下文会留在 inbox 中,直到另一条消息将其唤醒。agent/pre-step 决定模型看到什么,监听器可以改写已领取的消息,也可以直接拒绝;首次领取被拒绝或被改写为空时,仍会关闭一个不含步骤的持久轮次,日志会记录这次尝试。

工具也不是“拿到函数名就调用”,它会经过前置策略、不可逆的安全守卫、实际执行、后置处理、内容整理和结果通知。允许或拒绝、超时、重试、指标统计、附加上下文,都可以从流水线的不同位置接入。工具可以声明某类参数下的调用是并发安全的,调度器便会让连续的只读任务并行;一旦碰到修改状态或无法确定安全性的调用,就把它当作屏障,等待前面的任务结束后独占执行。

会话日志:模型可见即已记录

dsh 另一项核心设计是会话日志(Session Log)。项目规定,凡是模型看见的内容,都必须能够从日志中重建,并由一项运行时不变量断言这一点。因此,新增一项模型可见输入就需要新增一个会话事件:扩展 SessionEventMap 并从日志渲染。

用户消息、运行环境上下文、模型请求信息、流式输出、工具调用和结果、压缩事件、权限切换、取消原因,都会以事件形式进入追加式会话流。deriveMessages() 从日志中投影出模型历史,原始 assistant/chunk 事件则保证回放和 UI 保真。fork、恢复、transcript(文本记录)、遥测和持久化都派生自该事件流。

这项原则解决的是 Agent 系统里一个棘手问题:当任务出错时,我们能不能知道模型当时到底看到了什么?如果系统只保存最终聊天文本,许多关键因素会丢失。也许模型请求前刚注入了工作区状态,也许工具结果被裁剪过,也许系统自动切换了模型路由,也许用户在流式输出中途改变了方向。dsh 在请求边界保存足以重建消息的记录,原始流式 chunk 也保留,以便界面和回放维持一致。

会话持久化本身仍然是插件,项目提供 JSONL 和 SQLite 后端,查询能力可以优先访问实时会话,也可以通过 SQLite 全文检索历史记录。Resume 会沿用原会话继续工作,Fork 则从一个确定的历史边界派生新会话。

能力 seam:换后端不换产品

dsh 把可替换能力称为 seam(接缝)。一个 seam 通常有三层:声明接口的 Service Definition、实现它的 Service Provider,以及使用它的 Consumer(通常是面向模型的工具)。

以 Bash 为例,接口定义“执行命令”是什么,本地实现负责真正创建进程,而面向模型的工具包负责把这项能力变成模型可理解的 schema 和结果。文件系统与进程提供方共享同一个执行世界,因此把它们指向远程沙箱,也就把 Bash、PTY 和 LSP 一并搬了过去,无需为每个工具写远程分支。subagent 提供方在同一个接口之后也千差万别,从新建一个子 agent,到把一个轮次委派给另一个产品。

这种设计让替换一个提供方就能改变整个产品的行为,本地 Shell 换成远程容器、云端沙箱或企业执行平台,理论上只需替换实现层,不必重写模型工具和 Agent Loop。

四种运行模式

dsh 的 Web UI 提供四种 Agent 预设模式。它们是基于同一套 Harness 宿主,为当前会话装配不同的工具、提示词和运行时能力:

DeepSeek Harness 四种 Agent 运行模式下拉菜单:标准模式、PTC 模式、极简模式、创造模式
模式 内容
标准模式 功能最完整的通用编码 Agent:文件编辑、Shell、文件与网页检索、Skills、计划、目标、子 Agent 和工作流
Code 模式 保留标准模式全部能力,同时通过 Code Mode SDK 向模型呈现工具。模型可以编写一段 TypeScript 程序,在一次 run_code 中组合多步操作,减少反复往返的开销
极简模式 只提供持久 Bash 与 str_replace_editor 两项工具,较小的工具集合减少选择和上下文负担,适合路径明确的编码任务
创造模式 在标准模式之上加入 Cordis 运行时检查、临时插件实验和 Agent preset 创作指导。Agent 可以检查甚至改装自己的运行时

创造模式是“一切皆插件”最极致的表达。选择这一预设后,Agent 可以检查当前运行时的插件树,并动态挂载或卸载临时插件,在任务完成后卸载。自指 Cordis 工具不会进入标准、Code 或极简模式,作为明确的高级入口提供,官方定位为面向高级用户的高信任模式。

快速上手

前置条件只有 Node.js(≥ 18)。运行:

npx @deepseek-ai/dsh web

该命令会启动 Web UI,默认监听 http://127.0.0.1:3080。也可以在 Web UI 的 Settings → Models 里填入 DeepSeek API key 并保存,模型路由立即生效,无需重启服务。然后选择工作区(workspace),即可开始会话。dsh 进程以调用目录为默认文件系统位置,新 Web UI 需要手动添加工作区。

从源码运行:

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

自动化方面,项目提供 ACP 服务和 JSON-RPC 入口。Python SDK 驱动随附的 JSON-RPC 运行时,让 Python 应用可以启动会话、发送任务、接收通知,而不必直接嵌入 Node 内核。仓库还包含 Code Mode、自指 Cordis、MCP 记忆服务等示例。

安全设计:失败关闭

编程智能体一旦获得文件系统和 Shell 权限,就能修改代码、安装依赖、启动进程,甚至触碰工作区之外的主机环境。dsh 把安全问题当作基础架构问题处理:

  • 默认采用 workspace-write 模式,将命令执行和文件修改限制在当前工作区及允许的临时目录中,并配合 ask 审批策略处理需要扩大权限的操作
  • danger-full-access 模式存在,但必须由部署方明确选择
  • 工具调用经过前置策略、单调安全守卫、执行包装和后置处理。被守卫拒绝的操作不能被后续插件重新放行
  • 文件系统、Bash 和子进程共享同一套沙箱策略,避免出现“命令受限制,但文件工具可以绕过去”的割裂边界
  • 采用失败关闭原则,系统无法确认隔离机制真正生效时拒绝执行,不静默退化为无保护运行

权限切换、审批请求、工具参数、执行结果和取消原因都会进入 Session Log,为事后审计和问题复现保留依据。

插件生态:发布当天自发成型

GitHub topics 实测:600 多个公开仓库带 dsh-plugin 话题。第三方开发者中心 dsh.so 索引了 490 多个已验证插件。代表性项目:

插件 星数 说明
dsh-web-ui 586 Web UI 的插件与皮肤合集:任务看板、git 图、右侧面板、宠物、token 统计
dsh-cc-tui 169 Claude Code 风格的全屏终端 TUI,面向偏好 CLI 的用户
dsh-vision-toolkit 169 让纯文本模型做视觉任务:带意图的图片问答、长截图 OCR、UI 还原
awesome-deepseek-harness 162 插件、MCP、编排的精选清单
oh-dsh 70 一站式社区发行版,统一 TUI、桌面端、Web UI 三种形态

插件星数来自 dsh.so 与社区文章,发布时间集中在开源后 24 小时内。一个插件生态在项目发布当天自发成型,是“开放插件范式”在 Agent 领域的一次快速验证。

与同类工具的对比

工具 定位 扩展方式 协议
DeepSeek Harness 通用 Agent 底座 一切皆插件(Cordis) MIT 开源
Claude Code 终端 AI 编程助手 闭源内置 闭源
Codex CLI 终端编码 Agent 多 Agent 编排 闭源
OpenCode 开源终端编码 Agent 社区驱动 开源

dsh 的差异化在于官方开源加插件范式。Claude Code 和 Codex 都是闭源产品,能力边界由厂商定义;dsh 以 MIT 协议把能力边界交给社区,这是闭源产品难以复制的护城河。

局限与风险

开发者预览阶段。 官方明示未来会出现破坏兼容性的变更,核心插件与接口仍在快速演进,不适合在生产环境锁版本。

学习成本高。 Cordis 插件树、profile/bundle、事件流、seam 等概念有门槛,对初学者不友好。官方文档建议直接用 agent 探索代码库来理解架构。

配置有陷阱。 配置补丁替换的是目标插件的整个 config,不是深度合并。如果只写一个新字段,原有的 API Key、基础地址或其他参数可能会一起消失。

生态早期。 插件虽多但质量参差,多数是 UI 和工具类,深度能力插件还在生长。

技术栈。 项目以 Node.js/TypeScript 为主,与 Python 为主的 AI 社区有隔阂。Python SDK 通过 JSON-RPC 驱动,属于外围接入,不是一等公民。

笔者观点

dsh 的开源意味着 DeepSeek 不再满足于只提供可被调用的模型,开始争夺模型之上的开发者入口。AI 编程是大模型商业化落地最靠前的领域之一。据 Research and Markets 数据,2025 年全球 AI 编程相关工具市场规模约 295.7 亿美元(约合人民币 2,011 亿元),预计 2030 年攀升至 646.8 亿美元(约合人民币 4,398 亿元),年复合增长率约 17.1%。

技术层面,会话日志“模型可见即已记录”的原则解决了 Agent 调试和审计中最痛的问题:任务失败后重试、执行到一半恢复、把会话 fork 出去继续跑,系统首先得回答一个问题,刚才模型到底看到了什么。Cordis 的可观测、可回放能力如果能在多 Agent 协作中真正落地,会推动整个行业的调试标准。

官方在发布页也明确表达:“DeepSeek Harness 仍在开发者预览阶段,核心插件和 API 将继续演进。我们期待与全球开发者一起,用可复用、可组合的开源基础设施探索智能的边界。”

对开发者来说,现在的价值在于研究架构、写插件、跑工作流。执行命令 npx @deepseek-ai/dsh web 即可开始体验;想开发插件,可以从 Cordis 和官方架构文档读起。这个项目后面最值得关注的,是“一切皆插件”最终能把 Agent 拆到多细,又能重新组合出多少种运行方式。

参考来源