跳到主内容

dsh-computer-use

26Star3Fork2Issue1Watching

让 DeepSeek Harness Agent 在 macOS 上通过辅助功能读写并控制其他桌面应用,全程不动系统光标、不改变前台。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
TypeScript
License
MIT
分支
main
accessibilityagent-skillsagent-toolsappkitcomputer-usedeepseekdeepseek-harnessdesktop-automation

安装

命令web profile
$ dsh plugin --profile web add @anionex/dsh-computer-use

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 Anionex/dsh-computer-use:先查看仓库 https://github.com/Anionex/dsh-computer-use 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

让 DeepSeek Harness Agent 像一个会看屏幕的本地用户一样,操作 macOS 上的其他桌面 App:先读取无障碍 (Accessibility) 元素树,再点击、输入、滚动或拖拽,全程不抢前台、不动你真正的鼠标光标。

核心能力

  • 列出当前可见 macOS App 并显示进程 ID、Bundle ID、是否最前
  • 抓取目标 App 的无障碍元素树和当前状态,附带可选截图
  • 通过无障碍语义(按角色、值、可执行动作)发起点击、设值、键入、按键、滚动、拖拽
  • 对截图中的视觉问题,自动把产物交给 vision-tools Skill 处理(OCR、定位、裁剪)
  • 按 App 维度授予"只读"或"可控制"权限,高风险动作需一次性确认令牌
  • 在 Web 客户端提供一个 /computer-use/settings 页面,展示健康度、权限状态和应用授权

技术实现

  • 语言: TypeScript(宿主插件)+ Swift(原生辅助进程)+ 一段 JSON 配置
  • 关键依赖: @deepseek-ai/cordis、@deepseek-ai/dsh-tools、@deepseek-ai/schemastery、zod
  • 架构模式: Cordis Service 启动 macOS Provider → 初始化阶段通过 installComputerUseConsumer 注册 computer-use Skill 和一个 computer_use_activate 引导工具;Agent 在会话里调用该工具加载 Skill 后,再由 exposure.ts 把 11 个 computer_* 工具按 Agent 粒度暴露给模型
  • 入口文件: src/index.ts(导出 ComputerUseBundle),native/macos/manifest.json(固化原生 Helper 的 SHA-256、架构、最低 macOS 版本)

适用场景

需要让 Agent 操作一个没有专用连接器、没有 CLI、也没有 API 的 macOS 原生 App 时使用,例如填一份只能在桌面 App 里打开的表单、从一段 GUI 流程里抓数据、或在 Safari 之外的 App 里完成一个浏览器自动化也做不了的步骤。浏览器任务请用浏览器自动化能力,API/CLI 能解决的请用 API/CLI。

前置依赖与兼容性

依赖最低版本说明
DeepSeek Harness0.1.0-rc.6全部 DSH peerDependencies 均要求 ^0.1.0-rc.6;@deepseek-ai/dsh-host-webserver 标为可选
Node.js^22.19.0 或 >=24.0.0仅在本地构建本仓库源码时需要;通过 dsh 插件管理器安装预编译产物则不强制
macOS14.0+原生 Helper 是 ad-hoc 签名的 universal 二进制(arm64 + x86_64),native/macos/manifest.json 锁定了 SHA-256
macOS 辅助功能用户手动授权读取无障碍树和点击等动作必需,在「系统设置 → 隐私与安全性 → 辅助功能」里勾选
macOS 屏幕录制用户手动授权仅在请求 computer_observe 截图时才需要
第三方视觉能力dsh-vision-toolkit(可选)当截图里需要 OCR、视觉定位或像素分析时,应加载 vision-tools Skill,本插件会把截图 Artifact 路径交给它

安装方式

dsh plugin --profile web add github:Anionex/dsh-computer-use

该命令只对 Web Profile 生效;Headless Profile 需把末尾的 web 改成 headless 单独再装一次。npm 上的官方包名是 @anionex/dsh-computer-use,按本市场收录的命令形式通过 GitHub 源安装。

配置项

配置类型说明默认值
observationTtlMs整数 0 或 1000~86400000一次观察结果的有效期;0 表示不过期0
confirmationTtlMs整数 1000~900000一次性敏感动作确认令牌的有效期(毫秒)300000
actionTimeoutMs整数 1000~120000单个原生动作的最长等待时间(毫秒)15000
settleMs整数 0~10000动作完成后等待界面稳定多久(毫秒)250
maxSettleMs整数 100~60000动作完成后最长等待多久(毫秒)5000
maxNodes整数 10~5000单次观察返回的无障碍节点上限500
maxDepth整数 1~64单次观察遍历无障碍树的最大层级14
maxTextBytes整数 1024~1048576树文本最大字节数64000
maxScreenshotBytes整数 1024~268435456截图产物最大字节数33554432 (32 MiB)
artifactRoot字符串截图产物目录,必须是工作区下的相对路径,不能出现 ...dsh-computer-use/artifacts
helper.path字符串自定义外部 Helper 可执行文件路径,留空使用默认 Helper未设置
helper.allowSourceBuild布尔当仓库内置 Helper 缺失时,是否允许临时源码构建false
interaction.focusPolicy字符串是否允许把目标 App 切到前台:preserve(默认,不抢前台)或 activatepreserve
interaction.keyboardPolicy字符串键盘输入前是否先把目标 App 拉到前台:preserve 或 activatepreserve(Bundle 默认 activate,由 cordis.patch.yml 覆盖)
interaction.pointerInputPolicy字符串是否允许针对目标进程投递鼠标/滚动/拖拽:targeted(允许)或 deny(禁止)targeted
interaction.cursorVisualization字符串Agent 自带小光标是否可见:visible(显示)或 hidden(隐藏)visible
interaction.cursorMotionMs整数 0~2000Agent 小光标从一个点到下一个点的动画时长(毫秒)180
interaction.cursorAutoHideMs整数 0~30000Agent 小光标多久不动后自动隐藏;0 表示一直显示0
allowAllApps布尔是否一次性给所有运行中的 App 授予只读和控制权;启用后会忽略 grants 列表false
grants数组按精确 Bundle ID 授予只读或控制权,control 隐含 read;不支持通配符[]

Bundle 启动时通过 cordis.patch.yml 把 focusPolicy 设为 preserve、keyboardPolicy 设为 activate,与上面裸 Schema 的默认值不一致;如需修改,请在 Settings 里覆盖。

常见问题

Q: 我装好了,但是在 Agent 里看不到 computer_click 等工具,怎么办?

A: 安装后默认只有 computer_use_activate 一个引导工具。让 Agent 在当前会话里执行 /computer-use 加载 Skill,或者直接调用 computer_use_activate,加载完成后 11 个执行类 computer_* 工具才会出现在工具列表里。重启 dsh web 主机并新建一个 Session 也是常见原因。

Q: 截图里看到的内容比较模糊,我想让 Agent 读图,怎么办?

A: 这个插件本身不做 OCR。computer_observe 返回截图时,会同时把 Artifact 路径交给当前 Agent;Agent 应当加载 vision-tools Skill,再把这段路径传给 vision_glance、vision_ground、vision_detect、vision_crop、vision_long_screenshot_ocr。请不要让它去用 tesseract、screencapture 或临时 Swift 脚本替代。

Q: 为什么 Agent 操作完之后,我的"最前面 App"被换了?

A: 默认策略下,语义无障碍动作和带目标进程的指针输入都不会抢前台。如果你看到前台被切走了,多半是 focusPolicy: activate 或 keyboardPolicy: activate 被打开,或者目标 App 自己的副作用引起的。把策略改回 preserve 即可恢复默认行为。

Q: 某些 App 明明没禁用辅助功能,但 Agent 还是失败,怎么办?

A: 这是设计上的"失败关闭"。custom canvas、游戏、走自定义输入处理的 App、以及未来 macOS 版本都可能拒绝通过 SkyLight 投递的指针或键盘事件。能用语义无障碍(按角色、值、advertised actions)解决就尽量用语义;坐标点击是兜底,不是首选。

Q: 我能给某个 App 开"只读"但不开"控制"权限吗?

A: 可以。在 Web Settings 的「Application access」里加一条精确的 Bundle ID 授权,把 read 勾上、control 不勾即可。control: true 会自动包含 read,反过来不会。

Q: 删除插件之后,截图和授权记录会一起没吗?

A: 不会。dsh plugin remove 只注销 Skill、工具、进程级观察和确认令牌;截图文件(在 artifactRoot 下)和 computer_use_state 侧车文件会保留,需要你手动清理。

上手难度

进阶 — 需要先在 macOS 系统设置里授予辅助功能/屏幕录制权限,再在 Web Settings 里按 Bundle ID 配置应用授权;同时要理解"观察 → 锁定目标 → 输入"的协议才能写出稳定的 Agent 工作流,普通用户首次使用会有一段适应期。

已知问题与限制

  • 仅支持 macOS;Windows UI Automation 和 Linux 提供者尚未实现
  • 状态处于早期 0.1.0,模型面(Skill 文案、工具签名)和提供者行为在稳定版之前可能变化
  • 指针投递依赖动态解析的 SkyLight SPI;若该 SPI 在当前 macOS 上不可用,回退到坐标点击时会失败关闭,而不会切换到全局鼠标
  • 点击坐标必须落在目标 App 的某个可见窗口里;Helper 会自动解析点击点下最顶层的匹配窗口,但最小化、隐藏或无窗口的目标会被拒绝
  • 自定义画布、游戏、加固输入面、未来 macOS 版本可能拒绝目标进程级别的指针或键盘事件;推荐尽可能走语义无障碍
  • focusPolicy: activate 和 keyboardPolicy: activate 是为兼容性预留的破坏性策略,仅在操作员明确要求时使用
  • 插件只捕获"按需"的观察,不维护实时桌面流;如果需要持续画面,请使用屏幕录制或专门的视觉方案
  • 浏览器任务请继续用浏览器自动化能力,因为 DOM/CDP 状态更窄、更准确
  • DSH danger-full-access 内置授权策略是 approval/policy: never,会让未授权的 App 在弹窗前就被策略阻断;这种情况下插件会报 COMPUTER_PERMISSION_REQUIRED,并不视为用户拒绝

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/Anionex/dsh-computer-use)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录