昨晚 DeepSeek 把 Harness 开源了。GitHub 一天 5 万 star,评论区全在喊"Claude Code 杀手"。
我第一时间装上跑了一遍。结论先放这:它不是 Claude Code 的替代品,它是一个完全不同的东西。差距不是"谁更强",而是"压根不在同一个赛道"。
装它只需要一行命令:
npx @deepseek-ai/dsh web
等一两分钟下载完,终端会输出一个地址:http://127.0.0.1:3080/。打开浏览器就能用。
但第一个坑来了——Web 版默认把 Skills 功能关了,不报错,你根本不知道它没生效。 需要手动 patch 才能开启:
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 端口没被占用:
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 来编排工具调用:
// 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 本身都是插件,可以替换。
┌─────────────────────────────────────────┐ │ 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 的工具调用不是简单的"模型说调就调"。每次调用会经过一条完整的流水线:
请求 → Hook → 审批 → 权限检查 → 沙箱 → 超时控制 ↓ UI 渲染 ← 记录 ← 结果改写 ← 执行 ←──────────┘
开发者可以在任何环节插入自己的插件,不需要修改工具本身,也不需要改 Agent Loop。
举个前端场景:你想让所有文件写入操作都先经过 ESLint 检查:
// 注册一个文件写入的前置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里,能做到"拦截",但粒度远不如这个——你没法拿到工具调用的参数做条件判断,更没法改写结果。
DSH 默认支持 DeepSeek 自家模型,但可以切换到近 40 家模型商的接口。配置方式:
# $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 层的优化,这些优化在通用框架里做不到。
我让 DSH 的标准模式(默认 DeepSeek V4-Pro)写一个带虚拟滚动的表格组件:
DSH 的执行过程:
同样的任务用 Claude Code:
tsc --noEmit检查类型
差距在哪?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 的"一切皆插件"是真正的架构创新,还是过度设计?评论区说说你的判断。