DeepSeek Harness开源第一天我就上手了——和Claude Code的差距比想象中大
DeepSeek Harness弿ºç¬¬ä¸å¤©æå°±ä¸æäºââåClaude Codeçå·®è·æ¯æ³è±¡ä¸å¤§
kyriewen 2026-08-14 0 é 读4å鿍æDeepSeekæHarness弿ºäºãGitHubä¸å¤©5ä¸starï¼è¯è®ºåºå ¨å¨å"Claude Codeææ"ã
æç¬¬ä¸æ¶é´è£ ä¸è·äºä¸éãç»è®ºå æ¾è¿ï¼å®ä¸æ¯Claude Codeçæ¿ä»£åï¼å®æ¯ä¸ä¸ªå®å ¨ä¸åçä¸è¥¿ãå·®è·ä¸æ¯"è°æ´å¼º"ï¼èæ¯"åæ ¹ä¸å¨åä¸ä¸ªèµé"ã
30ç§è£ å®ï¼ä½æå
è£ å®åªéè¦ä¸è¡å½ä»¤ï¼
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éï¼è½åå°"æ¦æª"ï¼ä½ç²åº¦è¿ä¸å¦è¿ä¸ªââä½ æ²¡æ³æ¿å°å·¥å
·è°ç¨çåæ°åæ¡ä»¶å¤æï¼æ´æ²¡æ³æ¹åç»æã
Model Agnosticï¼ä¸é模å
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å±çä¼åï¼è¿äºä¼åå¨éç¨æ¡æ¶éåä¸å°ã
å®é ä½éªï¼åä¸ä¸ª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ç"ä¸åçæä»¶"æ¯çæ£çæ¶æåæ°ï¼è¿æ¯è¿åº¦è®¾è®¡ï¼è¯è®ºåºè¯´è¯´ä½ ç夿ã
Aitishiku.com