DeepSeek Harness

1. Use of DeepSeek Harness

1.1 Install and Start

Download Source Code:

1
git clone https://github.com/deepseek-ai/deepseek-harness.git

Check node and npm

1
2
node --version
npm --version

Enable corepack:

1
2
3
4
corepack enable
corepack --version
corepack prepare pnpm@11.7.0 --activate
pnpm --version

Install DeepSeek Harness

1
2
3
4
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

1.2 Quick Start

1
cd /e/Agent/deepseek-harness && pnpm dsh web

1.3 Update DeepSeek Harness

Update:

1
2
3
4
5
6
7
8
9
10
cd /e/Agent/deepseek-harness

git checkout master
git branch -f stable master
git pull --ff-only

pnpm install --frozen-lockfile
# pnpm run clean, if build process has problems
pnpm run build
pnpm dsh web

If the update has bug, rollback version:

1
2
3
4
5
6
7
8
9
cd /e/Agent/deepseek-harness

cp -r ~/.dsh/profiles ~/.dsh.bak-profiles-$(date +%Y%m%d-%H%M)

git checkout stable
pnpm install --frozen-lockfile
pnpm run clean
pnpm run build
pnpm dsh web

2. Research on DeepSeek Harness

2.1 Anthropic Computer Use vs DeepSeek Harness cua

口径说明 - Anthropic 列依据公开文档的 computer 工具 action 集合;computer_20241022、computer_20250124、computer_20251124 等版本间有增删,以官方文档为准。 - DSH 列依据 packages/experimental/cua/src/protocol.ts 的 Request 联合(cua 工具的方法清单)。 - Rows 标记:✅ 有 | ⚠️ 有但语义不同 | ❌ 无 | — 不适用。

2.1.1 工具形态

维度 Anthropic Computer Use DSH cua
工具数量 1 个 client tool(computer) 1 个工具(cua)
区分方式 action 枚举 method 枚举
参数结构 {action, coordinate?, text?, ...} {method, params}
执行方 由调用方(客户端)实现并回填结果 由 provider 插件 + 原生 helper 实现
平台 跨平台(取决于客户端实现) 仅 macOS(实验性,Windows 开发中)
版本演化 通过工具类型版本号 通过 provider 包与 protocol.ts

2.1.2 操作 / 动作对照

Ability Anthropic action DSH method 对齐 说明
环境能力探测 ❌ getCapabilities DSH 多 返回权限、sessionLocked、支持的方法列表
列出运行中应用 ❌ listApps DSH 多 返回 {pid,name,bundleId}
搜索已安装应用 ❌ findApps(query) DSH 多 按名称 / Bundle ID / 路径,返回运行状态
选定应用 ❌ getApp(selector) DSH 多 名称 / Bundle ID / PID / 路径;触发应用授权
激活应用 ❌ activate() DSH 多 前台化;结果只表示已派发
取消最小化 / 隐藏 ❌ show() DSH 多 不激活、不切 Space;报告 foregroundChanged
列出窗口 ❌ listWindows DSH 多 返回 windowId、标题、bounds、是否在当前 Space
读无障碍树 ❌ getState DSH 多 返回 AX 文本 + 元素索引 + snapshotId
截图 screenshot screenshot ✅ DSH 必须指定 appHandle + windowId
区域放大 zoom ❌ Anthropic 多 DSH 无放大镜能力
读取光标坐标 cursor_position ❌ Anthropic 多 DSH 拿不到当前指针位置
移动鼠标 mouse_move hover ⚠️ DSH 优先走 AX 悬停,必要时才移动系统光标,且要求前台
左键单击 left_click click ✅ DSH 默认左键
右键单击 right_click click({mouseButton:'right'}) ✅ DSH 右键仅支持单击
中键单击 middle_click click({mouseButton:'middle'}) ✅ DSH 中键仅支持单击
双击 double_click click({clickCount:2}) ✅ 仅左键支持双击
三击 triple_click ❌ Anthropic 多 DSH clickCount 仅 1 或 2
按下鼠标 left_mouse_down ❌ Anthropic 多 不能拆分按下 / 抬起
抬起鼠标 left_mouse_up ❌ Anthropic 多 同上
拖拽 left_click_drag drag ✅ DSH 支持左右中键与修饰键
输入文本 type typeText ✅ DSH 走 Unicode 键事件,不走剪贴板
按键 key pressKey ✅ DSH 修饰键用数组,键名含 KP_0…KP_9、KP_Enter
长按按键 hold_key ❌ Anthropic 多 DSH 无「按住 N 秒」
滚动 scroll scroll ✅ DSH 以「行」为单位,范围 -10..10
等待 wait ❌ Anthropic 多 DSH 无显式等待方法
元素级点击 ❌ click({snapshotId, elementIndex}) DSH 多 优先使用 AX 动作,不依赖像素坐标
直接设值 ❌ setValue(elementIndex, value) DSH 多 面向可写控件
选中文本 ❌ selectText(elementIndex, text, …) DSH 多 支持前缀 / 后缀消歧、光标放置
执行 AX 动作 ❌ performSecondaryAction(elementIndex, action) DSH 多 执行无障碍接口暴露的任意动作
粘贴 ❌ paste(text, {format:'text'\|'html'}) DSH 多 走应用「粘贴」菜单,并恢复剪贴板
提交 ❌ ❌ — 两者都不内置提交动作

2.1.3 坐标模型

维度 Anthropic Computer Use DSH cua
坐标单位 屏幕像素(按显示分辨率换算) 最新截图内的像素
相对坐标 ❌ ✅ relative:true,0–1000 千分比
缩放换算 调用方负责 Host 负责(含附件与模型请求尺寸)
窗口变化 通常不检测 WINDOW_CHANGED:尺寸变化后拒绝旧坐标
未截图就点像素 由客户端自行判断 SCREENSHOT_REQUIRED
元素定位 仅坐标 坐标或 elementIndex 两种

2.1.4 截图返回与图片处理

维度 Anthropic Computer Use DSH cua
返回形态 tool_result 内联 image block(base64) 内容块中放 ImageAttachmentRef 引用
是否落盘 客户端自行决定 存附件库 objects/<sha256>
是否重新编码 不处理(原样) 解码、摆正、统一 sRGB、按 2048×2048 预算缩小、转 JPEG/WebP
按模型投影 ❌ ✅ 每次请求按路由尺寸重编码(带缓存)
每轮请求成本 图片随历史每次内联发送 日志只存引用,按需生成字节
去重 ❌ ✅ 内容寻址,同图一份
自动清理 — ❌ 附件不自动删除
图片进入模型 直接 base64 同一套 readImageRequest 投影后 base64 或 Files file_id

2.1.5 架构与安全

维度 Anthropic Computer Use DSH cua
执行位置 客户端进程 / 沙箱 / 虚拟机 DSH 进程 + 原生 helper 共享服务
工具注册 API 请求里声明 tool ctx.tools.register 注册插件
人工确认 文档要求调用方自行加确认 User Questions 授权闸门(任务级 / 持久授权)
权限模型 由运行环境决定 macOS 辅助功能 + 屏幕录制
并发 无统一约定 每 Agent 独立连接,桌面操作全局串行
失败语义 文本错误 结构化错误码:STALE_APP、STALE_SNAPSHOT、WINDOW_CHANGED、PERMISSION_DENIED、FOREGROUND_REQUIRED、SESSION_LOCKED 等
会话记录 调用方自行记录 tool/call / tool/result 事件,可重放
可靠性 不保证 取消需等原生确认;不确定输入不自动重试

2.1.6 浏览器场景

维度 Anthropic DSH
官方浏览器工具 有独立 Browser use tool(action 集合以官方文档为准) 无内建,靠 provider 包
MCP 浏览器服务器 Playwright / Puppeteer 等 browser-use-playwright-mcp、browser-use-chrome-devtools-mcp
原生浏览器自动化 无 browser-use-stagehand-native(stagehand_act、stagehand_extract、stagehand_navigate、stagehand_observe、stagehand_screenshot、stagehand_tabs)
页面观察 截图 / DOM(取决于实现) browser_snapshot(AX 文本树)/ stagehand_observe(结构化)
图像输出出口 截图类 action 仅 *_screenshot / stagehand_screenshot
与桌面操作关系 浏览器是计算机操作的一个特例 两个独立能力缝:browserUse 与 computerUse

2.1.7 缺口与超出汇总

类别 Anthropic 独有 DSH 独有
交互精细度 zoom、cursor_position、wait、hold_key、triple_click、left_mouse_down/up —
应用 / 窗口管理 — listApps、findApps、getApp、activate、show、listWindows
结构语义 — getState、setValue、selectText、performSecondaryAction、元素级 click
输入方式 — paste(text / html)
图片治理 — 附件库、归一化、按路由投影、内容寻址去重
可观测性 — tool/result 事件、结构化错误码、坐标失效检测

2.1.8 Conclusion

Anthropic 把复杂度放在 action 枚举上,图像通道收敛到 screenshot / zoom,图片以内联 base64 随请求走; DSH 的形状相同(一个工具 + 方法枚举),但把「看」扩展到应用/窗口/无障碍树三级,并把图片从「内联字节」改成「库中引用 + 按路由投影」。 能力缺口集中在精细交互(zoom、wait、hold_key 等),能力超出集中在结构化操作与图片生命周期管理。

2.1.9 关于Screenshot和read_image的处理区别

Anthropic:

每次把把图片处理完, 然后把图加载进context

DSH:

图片处理完, 生成一个索引, 图再加载进context

虽然, 最后都要把完整图片加载进context, DSH有如下优势:

  1. Anthropic要做降采样? 没看懂; DSH 强制走归一化 + 按路由编码,默认就小

  2. 在会话日志中, DSH不用只用给索引, 不用给完整图

  3. (缺点) 迁移: A的session可以直接迁移. DSH要带着attachment文件一起

本文链接:https://wangyier.top/deepseek-harness/

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 The Great Library!