🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

视觉桌面操作 OrderG-X/dsh-mac-computer-use

DeepSeek Harnessv1.5.1
OrderG-X1 天前有提交已提供中文文档扫描:含敏感能力

给 DSH 的 Mac 桌面操作能力computer use。视觉优先,不依赖无障碍树。

37.5/100
综合分
8
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-mac-computer-use
npm 源 · dsh-mac-computer-use 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · vision
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功(非静态推断);本次验证针对插件 v1.5.4,当前版本为 v1.5.1
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过

安装清单取自 plugin/package.json

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-mac-computer-use @ 1.5.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 04:15:57

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令发起外部网络请求
查看扫描证据(共 15 处,展示前 15 条)
  • 执行外部命令固定命令
    index.js:47
    const FIFO = (() => { try { return path.join(execFileSync('/usr/bin/getconf', ['DARWIN_USER_TEMP_DIR'], { encoding: 'utf8' }).trim(), 'dsh-cursor.fifo
  • 执行外部命令固定命令
    index.js:67
    execFile('/usr/bin/pgrep', ['-U', String(process.getuid()), '-f', 'dsh-cursor-overlay'], (err) => resolve(!err))
  • 执行外部命令来自配置/变量
    index.js:88
    const child = spawn(OVERLAY, ['--fifo', FIFO], { detached: true, stdio: 'ignore' })
  • 执行外部命令来自配置/变量
    index.js:172
    execFile(cmd, args, { timeout: timeoutMs }, (err, out) => (err ? reject(err) : resolve(String(out))))
  • 执行外部命令来自配置/变量
    index.js:205
    const child = spawn(bin, args, { stdio: ['ignore', 'pipe', 'pipe'] })
  • 执行外部命令固定命令
    index.js:436
    execFileSync('/usr/bin/sips', ['--resampleWidth', String(maxWidth), file, '--out', file], { stdio: 'ignore' })
  • 发起网络请求
    client.js:175
    const res = await fetch(ROUTE, action
  • 执行外部命令固定命令
    setup.js:78
    try { execFileSync('/usr/bin/pgrep', MINE, { stdio: 'ignore' }); running = true } catch {}
  • 执行外部命令固定命令
    setup.js:83
    try { execFileSync('/usr/bin/pkill', MINE, { stdio: 'ignore' }) } catch { }
  • 执行外部命令固定命令
    setup.js:102
    execFile('/usr/bin/osascript', ['-l', 'JavaScript', '-e', PERM_JXA], { timeout: 5000 }, (err, out) => {
  • 执行外部命令来自配置/变量
    panel.js:30
    execFile(bin, ['winlist'], { timeout: 5000 }, (err, out) => {
  • 执行外部命令来自配置/变量
    panel.js:39
    execFile(bin, ['features'], { timeout: 5000 }, (err, out) => {
  • 执行外部命令固定命令
    panel.js:118
    execFileSync('/usr/bin/pbcopy', [], { input: INSTALL_CMD })
  • 执行外部命令固定命令
    panel.js:122
    execFileSync('/usr/bin/pbcopy', [], { input: UPDATE_CMD })
  • 执行外部命令固定命令
    panel.js:128
    execFileSync('/usr/bin/open', [url], { stdio: 'ignore' })
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • OCR文本定位
  • 元素索引标记
  • 点击输入桌面操作

面向 macOS 上 DSH 的视觉优先桌面操作:OCR 文本定位、set-of-mark 元素索引,还有 Codex 风格带弹簧动画的光标。不依赖无障碍树。

v1.5.12026-10-26
· 点完回报窗口变化时,Chrome 左下角一闪而过的网址条(没标题的小条)不再被说成「Chrome 弹出了窗口」。没标题但够大的窗口照样报。 The window-change note after a click no longer reports Chrome's brief status bubble (a small untitled strip) as a new popup. 更新:dsh plugin add
v1.5.02026-10-25
· 点击、输入、按键、拖拽之后,顺带回报窗口变化:「新开了窗口「存储」」「标题变了」「窗口不见了」「别的应用弹出了窗口」或「窗口没变化」。模型不用每次再截图确认点上没有。 · 只看窗口清单,不靠辅助功能权限,每次多花不到半秒。 After a click, typing, key press or drag, the tool result now says what changed in the windows (new window, title change, window gone, another app popped up, or nothing). 更新:dsh plugin add
v1.4.02026-10-25
· 安装包里自带编好的命令行引擎和光标浮层(Apple 芯片和 Intel 都能用,macOS 11 起)。不用再 clone 仓库、装 Xcode、跑 install.sh。 · 第一次用只要在系统设置里给 DeepSeek Harness 开「屏幕录制」和「辅助功能」,设置卡里有按钮直达。 · 以前用 install.sh 装过的也不用管:插件会改用自带的这份。想继续用自己编的,设环境变量 DSH_CU_BIN。 Works out of the box: the package now ships prebuilt universal binaries (Apple silicon and Intel, macOS 11+), so there is nothing to clone or compile. 更新:dsh plugin add 是同一个包,留给旧链接用。)
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
给 DSH 的 Mac 桌面操作能力(computer use)。视觉优先,不依赖无障碍树。 一句话:DeepSeek Harness(DSH)插件,让模型看着屏幕操作你的 Mac:列窗口、截图、OCR 找字、点击、打字、按键、滚动、拖拽、打开应用。 什么时候用:「看看我屏幕上有什么」「帮我在这个 App 里点一下」,以及没有命令行、只能用鼠标操作的 Mac 软件。 安装:DSH「插件」页 →「添加插件」,填 dsh-mac-computer-use(npm 包,连不上 npm 会自动换国内镜像),重启 DSH。安装包自带编好的程序(Apple 芯片和 Intel 都能用,macOS 11 起),不用编译。仅 macOS。
展开完整文档(README 剩余 1 节)
给 DSH 的 Mac 桌面操作能力(computer use)。视觉优先,不依赖无障碍树。

一句话:DeepSeek Harness(DSH)插件,让模型看着屏幕操作你的 Mac:列窗口、截图、OCR 找字、点击、打字、按键、滚动、拖拽、打开应用。

什么时候用:「看看我屏幕上有什么」「帮我在这个 App 里点一下」,以及没有命令行、只能用鼠标操作的 Mac 软件。

安装:DSH「插件」页 →「添加插件」,填 dsh-mac-computer-use(npm 包,连不上 npm 会自动换国内镜像),重启 DSH。安装包自带编好的程序(Apple 芯片和 Intel 都能用,macOS 11 起),不用编译。仅 macOS。

English: a DeepSeek Harness (DSH) plugin for computer use on macOS. The model sees the screen and controls the Mac through 11 desktop_ tools: window list, screenshots, OCR text search, click, type, keys, scroll, drag and app launch. Install: on the DSH Plugins page, click Add plugin and enter dsh-mac-computer-use (an npm package), then restart DSH. The package ships prebuilt universal binaries (Apple silicon and Intel, macOS 11+), so there is nothing to compile.

以前叫 dsh-cu,2026-10-18 改名。旧地址会自动跳到这里;底层的命令行引擎仍叫 dsh-cu。
和别人家的 dsh-computer-use 不是一个东西:那个靠无障碍树(cua-driver),这个靠截图。

光标动效

桌面光标:实心蓝箭头 + 带显示器图标的「DSH」名牌,干活时名牌写上正在做什么。跟 dsh-chrome-bridge 的浏览器光标是同一套样式,那边是半透明的、名牌带地球图标。*

11 个 desktop_ 工具 + 一个自包含的 Swift 命令行 + 一个看得见的桌面光标。

desktop_windows desktop_observe desktop_screenshot desktop_find_text
desktop_click desktop_type desktop_key desktop_apps
desktop_launch desktop_scroll desktop_drag

为什么又造一个

DSH 上已有的 computer use 插件(dsh-computer-use、dsh-mac-cua 等)大多依赖 macOS 无障碍树(AX)。
我们实测过:锁屏时 AX 对所有应用都返回 0 个 AXWindow,解锁后立刻恢复正常 —— 这是 macOS 的行为,不是驱动的 bug(详细记录)。另外第三方二进制在某些环境下拿不到 AXWindow。

Codex 那种 computer use 走的是视觉路线:截图 → 模型看 → 按坐标操作。这条路不碰 AX,所以在 AX 不灵的环境下照样能用。这个仓库就是那条路,外加:

| OCR 找文字 | 用 macOS 自带的 Vision 框架,本地跑。desktop_click(text="登录") 直接按文字点 |
| 元素编号 | desktop_observe 把可点元素在截图上编号,模型说"点第 7 个"就行 |
| 做完说一声变了什么 | 点击、输入、按键、拖拽之后顺带回报窗口变化(新开了「存储」窗口、标题变了、窗口关了),模型不用每次再截图确认 |
| 看得见的光标 | 屏幕上有个蓝色光标跟着操作走,名牌写着「点击 发送」这类动作;跟浏览器插件的光标一套样式 |
| 空闲自退 | 光标浮层 60 秒没动静自己走,不留常驻进程 |
| 单文件 Swift | 零依赖,好审计 |

安装

在 DSH 的插件页点「添加插件」,填包名 dsh-mac-computer-use,然后重启 DSH。这是 npm 包:按包名装时,DSH 连不上 npm 官方源会自动改用国内镜像(npmmirror),不经过 GitHub。也可以填发布包地址 https://github.com/OrderG-X/dsh-mac-computer-use/releases/latest/download/dsh-mac-computer-use.tgz,那样要能连上 GitHub。

更新:在「插件」页把它卸载,再按上面添加一次。新版发布后大约一天按包名才装得到(DSH 装插件用的 pnpm 默认不装刚发布的版本),急的话填发布包地址。

安装包里自带编好的命令行引擎和光标浮层(Apple 芯片和 Intel 都能用,macOS 11 起),不用 clone 仓库、不用装 Xcode。第一次用要在系统设置里给 DeepSeek Harness 开屏幕录制和辅助功能权限,设置页里有按钮直达。

装好后插件页里叫「Mac 桌面操作」。点进去是设置页:能不能用、看得到几个窗口,命令行引擎、屏幕录制权限、辅助功能权限、光标浮层逐项打勾,缺哪个就给哪个的按钮(打开系统设置);还有「屏幕上显示操作光标」开关。

自己从源码编译(改了 Swift 代码时才需要):

git clone https://github.com/OrderG-X/dsh-mac-computer-use.git
cd dsh-mac-computer-use
./install.sh

需要 Xcode Command Line Tools(xcode-select --install),装到 ~/.dsh/bin/。插件优先用自带的程序,要用自己编的,设环境变量 DSH_CU_BIN=~/.dsh/bin/dsh-cu(光标浮层是 DSH_CU_OVERLAY)。发版时的编译脚本是 tools/build-bin.mjs。

用起来是什么样

你:帮我看看屏幕上有什么 → desktop_windows 拿到窗口列表和坐标 → desktop_screenshot 模型看到图

你:点那个「登录」按钮 → desktop_click(text="登录") OCR 找到它 → 发事件过去(不动你的鼠标)回报「之后:新开了窗口「欢迎」」

你:把计算器的 7+8 算一下 → desktop_observe 截图 + 元素编号 → desktop_click(index=5) 点第 5 个("7") → desktop_screenshot 再截一次确认

推荐工作流是 observe → click(index) —— 模型看图上的编号,比算坐标可靠得多。

底层

DSH 工具 (desktop_) ↓ spawn
dsh-cu (Swift 单文件)
├── winlist CGWindowListCopyWindowInfo ← 窗口坐标,零权限 ├── observe AX 枚举可点元素 + 截图标注编号 ├── shot screencapture -l 窗口号 ← 截窗口本身,被挡住也行 ├── find Vision 框架 OCR ← 找文字 → 可点坐标 ├── clickat CGEvent postToPid ← 不移动真实鼠标、不抢前台 ├── type/key CGEvent ← 支持中文 ├── scroll/drag CGEvent └── launch NSWorkspace(后台启动,不抢前台)

后台点击能落进窗口,靠的是两处细节:鼠标事件里填上目标窗口号和窗口内坐标(不填的话 AppKit 和 Electron 都会把事件丢掉);目标是后台的 Chromium / Electron 窗口(比如 DSH 自己)时,按下那一下带上 ⌘,页面才肯接,松开和 click 本身不带,页面看到的就是普通点击。

截某个应用的窗口时,按窗口号截它本身(screencapture -l):被别的窗口挡住、在后台都截得到,看到的就是要点的那个窗口;截不到再退回按屏幕区域截。截图、给元素编号、按文字找都是这样(感谢 @Golden-Pigeon 的 PR)。

后台打字同理:先用辅助功能把目标窗口设成它自己的主窗口(不激活应用、不抢前台),按键才有去处;Chromium / Electron 在后台一个按键只收一个字,所以对它们逐字发。后台应用收不到全选、复制、粘贴这类走菜单的 ⌘ 快捷键。

命令行也能单独用:

dsh-cu winlist # 列窗口 dsh-cu tree <pid> # AX 树(解锁状态下可用) dsh-cu observe <pid> # 截图 + 编号 dsh-cu find "登录" # OCR 找文字 → 坐标 dsh-cu clickat <pid> <x> <y> # 点(默认不动真实鼠标) dsh-cu type <pid> "你好" # 输入 dsh-cu selftest # 全链路自检(见 tools/selftest.sh)

光标

cursor/cursor-overlay.swift 是桌面光标浮层(装到 ~/.dsh/bin/dsh-cursor-overlay):NSPanel,不抢前台、点击穿透、永远置顶,闲 60 秒自己退出。

跟 dsh-chrome-bridge 的浏览器光标是一套样式,一眼分得清是在哪边干活:

| | 桌面(这个仓库) | 浏览器(dsh-chrome-bridge) |
| 箭头 | 同一个形状,实心蓝 | 同一个形状,半透明淡蓝 |
| 名牌 | 显示器图标 + DSH | 地球图标 + DSH |
| 干活时 | 名牌展开成「DSH · 点击 发送」 | 名牌展开成「DSH · 点击 登录」 |

动效走克制路线,两边一样:
- 同一个弹簧、同一套算法:沿轻微的弧线滑过去,顺着速度方向轻轻拉长(最多 7%)、略侧倾,名牌晚半拍跟上;冲过头最多两三像素再落回
- 点击时以箭头尖端为支点缩一下再弹回(瞄准点纹丝不动),一圈淡波纹
- 拖拽时按住(缩一点 + 尖端一圈光晕)跟着走;滚动时右上角亮一下方向
- 闲 6 秒变淡、名牌收起,不挡视线;系统开了「减少动态效果」就不做动画

浮层指令(往 $(getconf DARWIN_USER_TEMP_DIR)dsh-cursor.fifo 写一行,每个账号各自一个):show x y / move x y / click [n] / down / up / scroll ±1 / label 文字 / hide / ping。

已知限制

- 锁屏时:截图只有壁纸、窗口不渲染、AX 读不到窗口 —— 这是 macOS 的行为,不是工具的问题
- 最小化的窗口、在别的桌面空间(Space)里的窗口:看不到也操作不了,先把它放回当前桌面
- desktop_click 默认投递给目标进程(postToPid)。个别应用不响应投递事件,加 global: true 走系统事件兜底(会移动真实鼠标)
- 桌面点击驱动不了 Chrome —— Chrome 不理会投递的合成事件。操作浏览器请用 CDP 类工具(比如 dsh-chrome-bridge)
- 需要屏幕录制权限(screencapture 用)和辅助功能权限(点击、输入、按键、滚动、拖拽用;没开时系统会静默丢掉这些事件,所以工具会直接报错,不会假装成功)

Field notes

docs/locked-session-and-ax.md —— 锁屏会让 AX 全废这件事,以及为什么它看起来跟驱动 bug 一模一样。这个坑花了一整天才确认。

反馈

遇到问题或想要新功能,提一个 issue。报问题时写上 DSH 版本和插件版本,修起来最快。

License

MIT。tools/dsh-cu.swift 是自包含单文件,想改直接改。

关于光标形状

光标是代码画的(cursor/cursor-overlay.swift 里的 arrowPath),圆角经典箭头 + 蓝色渐变,跟浏览器那边用同一条路径 —— 不包含任何第三方素材文件。
预览分享卡片长什么样 ↓OrderG-X/dsh-mac-computer-use
分享 · DeepSeek Harness Hub
OrderG-X/dsh-mac-computer-use

给 DSH 的 Mac 桌面操作能力computer use。视觉优先,不依赖无障碍树。

回到顶部