dsh-computer-use:为 DSH Agent 提供前台安全的 macOS 原生控制能力

前言

在 DeepSeek Harness(DSH)里让 Agent 操作本机应用,常见做法是走全局鼠标键盘注入或脚本桥接。这类路径容易带来两个问题:一是动作与当前 UI 状态脱节,模型基于过期界面信息重放点击;二是输入事件进入全局 HID 流,可能移动系统光标、抢占前台,打断用户正在进行的操作。

dsh-computer-use 是 Anionex 维护的 DSH 插件,定位为 macOS 上的原生动作层。它以 Accessibility 观测为先,把每个动作绑定到未过期的 observation,并通过进程/窗口定向的路由把 fallback 输入投递给目标应用,而不是全局桌面。目前仅支持 macOS 14 及以上版本。

这是什么

@anionex/dsh-computer-use 是发布在 npm 上的 DSH Bundle,GitHub 仓库为 Anionex/dsh-computer-use。插件分类为 admin-security,当前版本 v0.1.0,采用 MIT 许可证。

它解决的核心问题是:在 DSH Session 中,让 Agent 能够观察 macOS 应用的 Accessibility 树、对指定进程/窗口执行语义化或 fallback 输入,并在每次动作后返回新鲜状态;同时通过作用域权限、过期状态拒绝和前台安全输入策略,降低误操作与干扰用户的风险。

核心功能

下面介绍插件在 README 中明确列出的能力。

先观察再动作

computer_observe 返回有界的 Accessibility 树、带 index 的元素、准确的 app/process/window 元数据、权限状态,以及可选的截图 Artifact。每个元素带有 observation-local index 和 opaque targetHandle,后续动作必须引用未过期的 observationId

前台安全的输入路由

默认策略有意避免干扰用户当前工作:

  • 不移动系统光标;helper 中没有 cursor warp 路径。
  • click、scroll、drag 的 fallback 走 pid/window 定向的 SkyLight 路由,不进入全局 HID 事件流。
  • 语义化 Accessibility、keyboardPolicy: preserve 与目标进程指针输入不激活应用;Bundle 默认的 keyboardPolicy: activate 仅在键盘 fallback 前把目标应用带到前台。
  • click、scroll、drag 使用独立的 Agent 软件光标(点击穿透、不激活应用),系统真实光标保持不变。

优先语义输入,fallback 投递给目标

动作优先使用 AXPress、可编辑 value、selected-text 赋值和元素声明的 Accessibility action;仅在必要时才走指针或键盘 fallback。键盘输入发给选定 pid;指针输入携带窗口本地坐标,发给选定 pid 和 CGWindowID

作用域权限与敏感动作确认

read/control lease 按 Agent、Session、turn 和准确 bundle id 分离。没有配置 grant 时,DSH 会请求 approval:read approval 在 Session 内有效,control approval 只在当前 turn 有效。高影响动作需要一次性 confirmation。

模型 Tool 按需暴露

Bundle 初始只贡献 computer_use_activate。在当前 Agent 加载 Computer Use Skill 后,才暴露 computer_list_appscomputer_observecomputer_clickcomputer_set_valuecomputer_type_textcomputer_press_keycomputer_scrollcomputer_dragcomputer_perform_actioncomputer_waitcomputer_confirm 等执行 Tool。

安装与启用

前置条件

  1. macOS 14 或更新版本。
  2. 已安装 Web 或 Headless Profile、并挂载 Skill Tool 的 DeepSeek Harness。
  3. macOS Accessibility 权限(观察和原生动作必需)。
  4. 仅当请求截图时需要 macOS Screen Recording 权限。

已发布的包名为 @anionex/dsh-computer-use。旧名 @dsh-external/dsh-computer-use 从未发布到 npm,不可安装;安装前请先更新旧的 profile 或 manifest 引用。

安装命令

下面是从 README 给出的官方安装方式,分别添加到 web 与 headless profile:

dsh plugin --profile web add @anionex/dsh-computer-use
dsh plugin --profile headless add @anionex/dsh-computer-use

安装后可用以下命令确认配置已写入:

dsh --profile web --dump-config | grep computer-use
dsh --profile headless --dump-config | grep computer-use

修改已安装插件后,需要重启正在运行的 dsh web host,再创建一个新 Session,让 host 重新载入 Bundle 与 Skill catalog。

加载 Skill

在新 Session 中输入:

/computer-use

典型用法

加载 Skill 后,可以让 Agent 按「先观察、再动作、返回新鲜状态」的流程操作本机应用。README 给出的示例如下:

使用 Computer Use 检查正在运行的 DSH Computer Use Fixture,启用 deterministic option,并根据动作后返回的新状态报告结果。优先使用 Accessibility 元素,不要复用旧 observation。

仓库自带的 AppKit fixture 用于验证前台安全策略:发布测试通过 open -g 以后台模式启动 fixture,再经与 Agent 相同的协议完成 observe → click → 新鲜 observation 的流程,并检查 activationnot-requestedpointerRoutingtarget-process

典型工作流可概括为:

  1. computer_list_apps 列出有界用户应用及权限诊断。
  2. computer_observe 获取目标应用的 Accessibility 树与 observationId
  3. 基于元素 index 或 targetHandle 调用 computer_clickcomputer_set_value 等 Tool。
  4. 动作 settle 后返回完整或差分 observation,供下一步决策。

适用场景与注意

适合谁

  • 需要在 DSH Agent 中操作 macOS 原生应用(无专用 API/CLI 插件时)的开发者。
  • 希望 Agent 在后台操作其他应用、同时尽量不干扰用户当前前台工作的场景。
  • 需要 stale-state 拒绝、按应用 lease 和敏感动作确认等安全控制的 admin-security 类工作流。

不取代什么

README 明确划定了范围:dsh-computer-use 是原生动作层,不会取代更窄的接口:

  • 浏览器任务应继续使用 browser automation 和 DOM/CDP 状态。
  • 有 API、CLI 或专用应用插件时仍应优先使用。
  • OCR 与视觉理解应交给独立安装的 dsh-vision-toolkit,通过 vision-tools Skill 处理截图 Artifact。

安装前须知

插件以当前 DSH 进程权限运行,需要 Accessibility 权限,截图时还需要 Screen Recording 权限。安装前应阅读 GitHub 仓库 源码与 MIT 许可证,确认交互策略和权限模型符合你的安全要求。Helper executable 是 DSH 内部传输实现,应通过已注册 Tool 使用,以保留应用 lease、敏感动作 confirmation 与宿主策略检查。

目前仅支持 macOS;Linux 或 Windows 环境无法使用此插件。

结尾

dsh-computer-use 把 macOS Accessibility 观测、过期状态拒绝、作用域权限和前台安全输入路由组合成 DSH 的原生动作层,适合需要在本机 GUI 上可靠、可控地执行 Agent 操作的场景。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜