昨晚DeepSeek把Harness开源了。GitHub一天5万star,评论区全在喊"Claude Code杀手"。
我第一时间装上跑了一遍。结论先放这:它不是Claude Code的替代品,它是一个完全不同的东西。差距不是"谁更强",而是"压根不在同一个赛道"。

30秒装完,但有坑
装它只需要一行命令:
bash
npx @deepseek-ai/dsh web
等一两分钟下载完,终端会输出一个地址:http://127.0.0.1:3080/。打开浏览器就能用。
但第一个坑来了------Web版默认把Skills功能关了,不报错,你根本不知道它没生效。 需要手动patch才能开启:
bash
cat > ~/enable-skills.yml <<'EOF'
- id: skill-filesystem
disabled: false
- id: tool-skill
disabled: false
- id: skill-badge
disabled: false
EOF
npx @deepseek-ai/dsh web --patch ~/enable-skills.yml
启动前还要确认3080端口没被占用:
bash
lsof -nP -iTCP:3080 -sTCP:LISTEN
有输出说明上一个dsh实例还在跑,kill掉再启动。
对比Claude Code的安装:npm install -g @anthropic-ai/claude-code,然后直接在终端里敲claude就能用。不需要浏览器,不需要patch配置文件,不需要检查端口。
第一个差距:Claude Code是终端原生的,DSH是BS架构的Web UI。 这不是技术优劣的问题,是设计哲学的根本分歧。
四种模式,其实是四套插件组合
DSH内置四种预设模式:
| 模式 | 定位 | 加载的插件集 |
|---|---|---|
| 标准模式 | 完整编程助手 | Shell + 文件编辑 + 搜索 + UI全家桶 |
| PTC模式 | 程序化工具调用 | TypeScript组合多步操作 |
| 极简模式 | 仅Shell+文件编辑 | 适合模型基准测试 |
| 创造模式 | 动态加载插件 | 可创作全新模式 |
PTC模式是最有意思的一个。它让你用TypeScript来编排工具调用:
typescript
// PTC模式下的多步操作编排
const result = await dsh.compose([
tools.file.read('src/components/Dashboard.tsx'),
tools.analyze.dependencies(),
tools.refactor.extract({
target: 'useChartData',
type: 'custom-hook'
}),
tools.file.write('src/hooks/useChartData.ts')
]);
这段代码及其子调用会经过完整的安全流水线------Hook、审批、权限检查、沙箱、超时控制,不能绕过任何一层。
Claude Code没有这个概念。它的工具调用是模型自主决定的,开发者无法用代码预编排一条确定性的执行路径。
这是第二个差距:DSH给了开发者"确定性编排"的能力,Claude Code给了模型"自主决策"的自由。
核心架构:一切皆插件
DSH的设计哲学用一句话总结:Model + Harness = Agent。
什么是Harness?它决定了:
- 模型能看到什么(上下文管理)
- 可以调用哪些工具(工具注册)
- 如何组织上下文(会话策略)
- 遇到错误怎么重试(容错逻辑)
- 什么时候判断任务完成(终止条件)
同一个模型放进不同的Harness,最终表现可能天差地别。
DSH把这个理念推到了极致------连Agent Loop本身都是插件,可以替换。
vbnet
┌─────────────────────────────────────────┐
│ DeepSeek Harness │
├─────────────────────────────────────────┤
│ Cordis 微内核(只管插件加载/卸载/依赖) │
├─────────────────────────────────────────┤
│ 插件层(全部可替换): │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ Model │ │ Tools │ │ Skills │ │
│ └────────┘ └────────┘ └────────┘ │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │Session │ │Sandbox │ │Storage │ │
│ └────────┘ └────────┘ └────────┘ │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ Loop │ │Schedule│ │ UI │ │
│ └────────┘ └────────┘ └────────┘ │
└─────────────────────────────────────────┘
对比Claude Code:模型固定(Claude)、工具固定(Bash/Read/Write/Edit等)、Loop不可替换、UI就是终端。你能扩展的只有MCP Server和Skills。
第三个差距:DSH的可替换边界从"工具层"下沉到了"整个运行时",Claude Code的可替换边界止步于"工具和技能"。
工具调用流水线:这个设计确实精妙
DSH的工具调用不是简单的"模型说调就调"。每次调用会经过一条完整的流水线:
markdown
请求 → Hook → 审批 → 权限检查 → 沙箱 → 超时控制
↓
UI渲染 ← 记录 ← 结果改写 ← 执行 ←──────────┘
开发者可以在任何环节插入自己的插件,不需要修改工具本身,也不需要改Agent Loop。
举个前端场景:你想让所有文件写入操作都先经过ESLint检查:
typescript
// 注册一个文件写入的前置Hook插件
export default class EslintGuardPlugin {
static inject = ['tools'];
constructor(ctx) {
ctx.before('tool/file-write', async (event) => {
const { path, content } = event.params;
if (path.endsWith('.ts') || path.endsWith('.tsx')) {
const result = await eslint.lintText(content, { filePath: path });
if (result[0].errorCount > 0) {
event.prevent();
return { blocked: true, errors: result[0].messages };
}
}
});
}
}
Claude Code要实现同样的效果?写一条Hook规则在settings.json里,能做到"拦截",但粒度远不如这个------你没法拿到工具调用的参数做条件判断,更没法改写结果。
Model Agnostic:不锁模型
DSH默认支持DeepSeek自家模型,但可以切换到近40家模型商的接口。配置方式:
yaml
# $DSH_HOME/settings.yaml
providers:
- name: anthropic
kind: openai-compatible
base_url: https://api.anthropic.com/v1
model: claude-sonnet-4-20250514
api_key_env: ANTHROPIC_API_KEY
- name: openai
kind: openai
base_url: https://api.openai.com/v1
model: gpt-4o
api_key_env: OPENAI_API_KEY
也就是说,你可以用Claude的模型跑在DSH的Harness里。这个组合有没有比原生Claude Code更好?理论上不会------因为Claude Code的Harness是为Claude模型专门优化的(比如system prompt、context管理策略)。但它给了你一个"对照实验"的环境。
Claude Code则完全锁定Claude模型,没有切换选项。这不是缺点------专用系统的上限永远高于通用系统的上限。 Claude Code针对Claude模型做了大量Harness层的优化,这些优化在通用框架里做不到。
实际体验:写一个React组件
我让DSH的标准模式(默认DeepSeek V4-Pro)写一个带虚拟滚动的表格组件:
DSH的执行过程:
- 读取项目结构 → 分析依赖
- 生成组件代码
- 写入文件
- (没有自动运行类型检查)
- (没有自动验证渲染结果)
同样的任务用Claude Code:
- 读取项目结构 → 分析依赖 → 读取现有组件风格
- 生成组件代码
- 写入文件
- 自动运行
tsc --noEmit检查类型 - 发现类型错误 → 自动修复 → 再次检查
- 启动dev server → 验证渲染
差距在哪?Claude Code有一个成熟的"自我纠错循环"------写完代码会自动验证,出错会自动修。 DSH目前的Agent Loop还没有这么深度的自我验证机制,更多是"你让我做什么我就做什么"。
这是v0.1 developer preview的现实。DSH团队自己也说了:当前仍有大量细节需要打磨。
真正的对比维度
不是"谁代码写得好",而是定位完全不同:
| 维度 | DeepSeek Harness | Claude Code |
|---|---|---|
| 定位 | 可组装的Agent运行时底座 | 成熟的AI编程助手 |
| 目标用户 | Harness开发者/框架作者 | 想用AI写代码的程序员 |
| 模型 | 40+家可切换 | 锁定Claude |
| 可替换范围 | 整个运行时(含Loop/UI/Session) | 工具层(MCP/Skills) |
| Agent Loop | 插件,可替换 | 内置,深度优化 |
| 安装门槛 | Node.js + npx + 端口配置 | npm install + 一个命令 |
| UI形态 | Web UI(3080端口) | 终端原生 |
| 成熟度 | v0.1 developer preview | 生产级,日活百万+ |
| 自我纠错 | 基础 | 深度(类型检查+运行验证) |
| 开源协议 | MIT | 闭源 |
我的判断
短期(6个月内):Claude Code仍然是日常编程的最优解。 没有哪个v0.1的框架能在开箱体验上打过一个打磨了一年多的成熟产品。如果你明天要交项目,用Claude Code。
中长期(1-2年):DSH的架构设计可能改变游戏规则。 "一切皆插件"的底座一旦生态成型(Cordis已有4000+社区插件的积累),会出现Claude Code做不到的玩法------比如针对你们团队的代码规范训练一个专属的Agent Loop插件,比如把代码审查、部署、监控串成一条完全自定义的流水线。
最值得关注的信号: DSH发布的同时,DeepSeek把V4-Pro模型的价格从8/17开始上调(输出峰值27元/百万tokens)。这意味着DeepSeek要用Harness的免费开源生态来反哺模型的付费收入------和OpenAI用ChatGPT免费版拉用户、Codex收钱的逻辑一模一样。
如果你是普通前端开发者: 今天不用急着换。但装一个玩一下,理解"Harness"这个概念------Model + Harness = Agent。这个公式比任何具体工具都重要,因为它决定了未来你会怎么选择和组合AI编程工具。
快速上手速查表
| 步骤 | 命令/操作 |
|---|---|
| 前置要求 | Node.js v18+ |
| 快速启动 | npx @deepseek-ai/dsh web |
| 全局安装 | npm install -g @deepseek-ai/dsh |
| 源码安装 | git clone → pnpm install → pnpm run build → pnpm dsh web |
| 访问地址 | http://127.0.0.1:3080/ |
| 首次配置 | 填入DeepSeek API Key |
| 开启Skills | 创建patch yaml → --patch参数启动 |
| 切换模型 | 设置页面 或 $DSH_HOME/settings.yaml |
| 切换模式 | Web UI顶部下拉选择 |
| 查看插件 | 设置 → 插件管理 → 启用/禁用 |
| Python SDK | pip install deepseek-harness-sdk(内置运行时,无需Node.js) |
你装了吗?你觉得DSH的"一切皆插件"是真正的架构创新,还是过度设计?评论区说说你的判断。