DeepSeek Harness开源第一天我就上手了——和Claude Code的差距比想象中大

昨晚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的执行过程:

  1. 读取项目结构 → 分析依赖
  2. 生成组件代码
  3. 写入文件
  4. (没有自动运行类型检查)
  5. (没有自动验证渲染结果)

同样的任务用Claude Code:

  1. 读取项目结构 → 分析依赖 → 读取现有组件风格
  2. 生成组件代码
  3. 写入文件
  4. 自动运行tsc --noEmit检查类型
  5. 发现类型错误 → 自动修复 → 再次检查
  6. 启动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 clonepnpm installpnpm run buildpnpm 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的"一切皆插件"是真正的架构创新,还是过度设计?评论区说说你的判断。

相关推荐
捡田螺的小男孩1 小时前
什么是 Skill?手把手带你写一个简单有用的 Skill!
前端·后端·程序员
IT_陈寒1 小时前
Redis集群这个坑,差点让我通宵
前端·人工智能·后端
90后的晨仔1 小时前
uni-app 路由跳转与页面导航 —— 终极详解(对标 iOS / Android / 鸿蒙三端原生)
前端
302wanger1 小时前
聊天记录翻到烦,我让 DeepSeek Harness给自己写了个插件
deepseek
Heo2 小时前
大厂前端调试不能只会debugger
前端·javascript·面试
用户2181697049302 小时前
Flutter (十七) 网络请求
前端
cidy_982 小时前
React 19 + Vite 企业级前端项目:从零搭建到规范交付
前端
特立独行的猫A2 小时前
DeepSeek Harness(dsh)插件开发实战:从零实现一个会话导出插件
deepseek
用户921080262862 小时前
如何把一张图片做成自定义复杂 UI 图标
前端