2026年8月13日,DeepSeek 正式发布了他们的首款 Agent 类产品,DeepSeek Harness(DSH),并且是以一个开源的姿态展示了了自己的产品,截至今天,已经斩获了125k start。

GitHub:github.com/deepseek-ai...
安装
DSH没有选择开发客户端,而是选择了Web形态。
用户在使用方式上有两种选择:
npm 启动
如果你不关心源码或者不需要按照自己的需求进行改造,那么直接使用npx即可。 先确保本地有一个最新的LTS 版本的Node.js
然后运行
bash
npx @deepseek-ai/dsh web
等待一段时间之后,在本地就启动了一个web服务,默认的地址是 http://127.0.0.1:3080
源码安装
如果你想深扒源码或者想自定一定义DSH,可以选择源码启动。
将源码在下载到本地之后,确保你安装了pnpm,DSH 采用了 pnpm 进行包管理
npm install pnpm -g
然后在项目目录下运行:
arduino
pnpm install
pnpm run build
pnpm dsh web
同样在本地启动一个Web服务。
上手 DeepSeek Harness

启动之后,和DeepSeek一贯的风格一样,Web页面非常简单,第一次进入时,会让你输入DeepSeek的Api Key。

和市面上多数产品一样,左侧是工作区和会话的交互界面,可以在此管理工作区和会话。

页面中间是输入框,这里可以有几个可以设置的选项。
- Agent模式
DSH提供了几种预设的Agent模式,他们有各自的特点和使用场景
| 模式 | 界面名称 | 本质 | 场景 |
|---|---|---|---|
standard |
标准模式 | 功能完整的编码 Agent | 日常写代码、调试、重构、探索 |
code |
PTC 模式 | 标准模式全部能力 + Code Mode(代码化工具呈现) | 批量修改、脚本化多步操作、省延迟 |
minimal |
极简模式 | 固定提示词 + 双工具的极简 Agent | 简单单点任务、省钱、行为要可预期 |
cordis |
创造模式 | 标准模式全部能力 + 自我修改运行时的能力 | 写新 preset、试插件、改 harness 自身 |
- 权限模式

这里可以设置 Read Only(只读模式)、Workspace Write(工作区可写)、Full acess(全部授权) 三种。 通常使用 Workspace Write即可。
| 模式 | 能写哪 | 需要审批吗 | 典型用途 |
|---|---|---|---|
| Read Only | 哪里都不能写 | 是(ask) | 审查、只读分析、只探索不改动 |
| Workspace Write(默认) | 仅工作区 + 平台临时区 | 是(ask) | 日常编码:改自己的项目,碰不到工作区外 |
| Full access | 无限制 | 否(never,需批准的操作直接拒绝) | 信任的完整控制场景,如自动化流水线 |
- 模型和推理等级

这里可以选择模型和推理等级
知道了以上这些,就可以开始我们的对话了。
进阶 DeepSeek Harness
在我们进行了一个对话之后,我们会在页面上发现一个新奇的东西:轨迹
轨迹

以上是我进行一个对话之后出现的内容,这个页面像一个函数调用图,它把 agent 的整个活动过程渲染成一张按轮次(Turn)组织的事件记录表------即"幕后发生了什么"的完整流水账。
它解决的核心问题是:对话视图只展示"人类视角的聊天记录",而轨迹展示的是模型视角的完整执行痕迹:
整体布局是:顶部工具栏(吸顶)→ Overview 时间线(固定)→ 主记录表(虚拟滚动)→ 选中记录时右侧弹出事件检查器。
工具栏

四个控件,从左到右:
| 控件 | 功能 |
|---|---|
| Duration(带时钟图标,toggle 按钮) | 切换时间线色块的两种宽度模式:等宽 (每一条记录按顺序占一样宽,看"发生了什么")vs 实际耗时(按记录真实耗时画宽度,看"哪个最慢")。悬停提示是 "Use actual duration / Use equal-width operations" |
| Turns(⊟/⊞) | 一键折叠/展开所有轮次(turn):折叠后每个 Turn 只剩一行摘要 |
| Calls(⊟/⊞) | 一键折叠/展开所有工具调用:把每个 Assistant 记录下的 Tool/Subtool 行收进摘要("N tools") |
| 搜索框 | 在当前已加载的记录窗口内搜索,命中记录在时间线和表格里高亮 |
Overview 时间线

这是活动时间总览,从左到右按时间投影每条记录。
三条线(lane)的划分 (timeline.ts 第 46-50 行 laneFor):
| 线 | 放什么记录 | 颜色语义 |
|---|---|---|
| Input(最上面) | SYSTEM / USER / CONTEXT(系统提示词、用户消息、注入的上下文) | 输入侧 |
| Model(中间) | ASSISTANT / COMPACTED(模型回复、压缩检查点) | 模型生成 |
| Tools(最下面) | TOOL / SUBTOOL(工具调用与嵌套子工具) | 工具执行 |
每条色块的含义:
- 宽度 = 耗时(Duration 开时)或等宽(Duration 关时);
- Assistant 色块 内部还区分两段颜色:TTFT (首 token 延迟,前段)和 Decoding (解码耗时,后段)------悬停 500ms 显示精确提示,例如
ASSISTANT 10:00:00.123 → 10:00:01.665 Total 1,542 ms · TTFT 368 ms · Decoding 1,174 ms; - 错误记录有红色标记;轮次边界画竖线分隔;搜索命中的记录带匹配标记。
主记录表

按轮次组织的事件账本 ,每条记录一行:索引 | 事件类型标签 | 内容预览。
轮次分组 :每个 Turn 有吸顶的轮次头 Turn N,右侧带 Input / Output / Think / Time 列标签;轮次之间用粗分割线隔开,轮次内部用紧凑的行内标记标示 Step。
记录类型(TrajectoryTable.tsx 第 38-46 行),每条有对应图标:
| 标签 | 含义 |
|---|---|
SYSTEM |
系统提示词(含初始提示词、提示词/工具更新,可查看 Diff) |
USER |
用户消息(Turn 1 USER) |
CONTEXT |
注入的上下文 |
ASSISTANT |
模型回复,编号为 Request #N ASSISTANT,可展开其下的工具调用 |
TOOL / SUBTOOL |
工具调用,内容预览格式 bash {"command": ...} → 输出摘要;嵌套调用缩进显示 |
COMPACTED |
压缩检查点 |
Event details 检查器

记录表右侧的局部检查器,随记录类型切换标签页:
- 普通记录 :
Summary / Payload / Result / Schema / Timing------输入输出原始内容、JSON schema、耗时明细; - 请求记录 (Request #N):
Summary / Options / Usage / Timing------token 用量(Input / cache read / cache write / Output / Reasoning,含累计)、请求配置(模型、provider、重试参数)、耗时与状态(含错误); - 系统提示词记录 :
Diff / System Prompt / Tools------提示词前后变化对比、完整提示词、当时挂载的工具 schema。
总结
轨迹功能是DSH具有亮点的一个设计,他为黑盒的对话,提供了可以拆解分析的工具,对话是"说了什么",轨迹是"到底怎么干的" ------每一步请求、每个工具调用、花了多少 token、耗时多久,全部可见。典型使用场景有:
- 排查"模型为什么这么做" :看某个工具调用前后的上下文、输入输出原始数据;
- 性能/成本审计:查看每条请求的 token 用量、TTFT、解码耗时,找慢请求、浪费的调用;
- 调试多轮流程:确认轮次/步骤边界、压缩发生的位置、子工具(如 run_code 下的嵌套调用)的执行顺序;
- 验证沙箱/审批效果:看被拒绝、被中断的工具记录(轨迹中这些冻结记录仍可见)。
插件
插件是DSH非常重要的核心,在DSH的官网甚至写出了 Everything is a plugin 如何理解这个插件呢,先从用户界面上看

在设置中,可以看到插件的配置,在里面就能看到一些端倪了,终端、Agent循环、网页搜索都是DSH核心的功能,但是他们在DSH中都是插件。
平时说"插件",比如浏览器插件、IDE 插件,意思是:有一个主程序,插件是装上去的附加件。主程序是主体,插件是配角。DSH 不是这个意思。DSH 的意思是反过来的:
这个软件没有"主程序"。整个软件就是一堆积木搭起来的,连"地基"都是积木。
假设 DSH 是一套乐高:
- 模型(DeepSeek、Claude......)是一块积木;
- 文件读写工具是一块积木;
- 网页搜索是一块积木;
- 终端是一块积木;
- 沙箱(权限限制)是一块积木;
- 连"让 Agent 思考的主循环"也是一块积木;
- 连你现在看着的这个网页界面,每一块都是积木;
- 甚至"设置页里能改插件配置"这个功能本身,也是一块积木。
没有任何一块是"原装的、动不了的" 。你看到的一切,都是同一规格的积木拼出来的。所以:
- 想换模型?拔掉一块,插上另一块。
- 想换搜索服务商?拔掉那块,插新的。
- 想让 Agent 思考方式不同?把"主循环"那块积木换掉。
- 想加新功能?没有"改内核"这回事,只有"再插一块积木"。
乐高积木能拼在一起,是因为每块积木的凸起和凹槽规格完全一致。DSH 的积木也有统一规格(叫 Cordis),每块积木都要遵守四件事:
- 报出自己的名字 :每个积木说自己提供什么服务,比如"我管工具"(
ctx.tools)、"我管模型"(ctx.llm)。别人不直接找它要代码,只按名字找它要服务------所以换一块积木,别人不用改。 - 声明自己需要什么:积木装之前先说自己要依赖哪些服务,装的时候系统自动排队,谁等谁,不用人手工排序。
- 用"广播"通信:积木之间靠事件说话------"模型要发请求了""工具被调用了",谁关心谁听。想拦截、想观察,就监听某个广播,而不是改别人的代码。
- 拔下来就干净 :每块积木装上去时登记的所有东西(工具、提示词、监听),拔下来时自动全部注销,不留垃圾。这就是为什么可以热插拔、可以放心改。
因此,之前所说的创造功能 ,就能轻松地让用户自己利用DSH来升级优化DSH,可以说DSH是一个可以自己升级的Harness
总结
以上就是从用户界面分析的DeepSeek Harness,之后也会继续深入分析DSH