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 | node --version |
Enable corepack:
1 | corepack enable |
Install DeepSeek Harness
1 | cd deepseek-harness |

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
10cd /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 | cd /e/Agent/deepseek-harness |
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有如下优势:
Anthropic要做降采样? 没看懂; DSH 强制走归一化 + 按路由编码,默认就小
在会话日志中, DSH不用只用给索引, 不用给完整图
(缺点) 迁移: A的session可以直接迁移. DSH要带着attachment文件一起