dsh-plugin-macos: 21 Local Tools to Let the DSH Agent Handle macOS Operations

前言

DSH 的智能体已经能跑 bash,但让它“在 Mac 上发个通知”“截个屏”“切回深色模式”“读一下 Safari 当前这个标签页”,过去要么手写 AppleScript,要么照旧用一堆 shell 拼出来的命令。智能体能写代码,却没摸到 Mac。

下面介绍的 wu04186767/dsh-plugin-macos 就是用来补这一层的:它把 21 个日常 Mac 操作打包成带类型、面向模型的工具,全部在本地通过 child_process 和 osascript 执行,零运行时依赖。

这是什么

一句话:DSH 插件,把 macOS 原生操作暴露成 21 个模型可调用的工具,分类属于「工作流」。

  • 维护者:wu04186767
  • 许可证:MIT
  • 版本:package.json 中为 0.1.0,README 标注兼容性为 DeepSeek Harness 0.2.x
  • 平台要求:macOS 13 或更新,README 说明在 macOS 27.2(Apple silicon)上开发与测试
  • 依赖:无,纯 ESM,dependencies 为 0,无构建步骤

它解决的问题很具体:智能体原有的 bash 能力够不到原生 macOS 操作(通知、截屏、Spotlight、Safari 自动化这类),而每次临时手写 AppleScript 既慢又容易出错。这个插件把这些事提前做成了带 JSON schema 的工具。

核心功能

README 对设计意图说得比较明确:覆盖面要“广但无聊”,覆盖日常 Mac 琐事而不是单一技巧;所有命令都用 argv 数组而非 shell 字符串,避免页面文本、文件名这类输入注入 shell 语法;不做破坏性操作。

21 个工具按 README 的分法是三组。

系统读取

工具 做什么
macos_info 系统版本、芯片、主机名、运行时长、电池来源、磁盘、内存,只读
macos_network 主机名、主网卡、IPv4、当前 Wi-Fi SSID,只读
macos_processes 按 CPU 或内存排序的进程列表,只读
macos_spotlight 用 Spotlight(mdfind)搜文件,只读
macos_finder_path 前置 Finder 窗口的 POSIX 路径,只读
macos_frontmost_app 最前台应用的名称,只读
macos_screenshot 截屏或截取区域为 PNG 并返回路径,需要 Screen Recording 权限

日常操作

工具 做什么
macos_notify 原生通知横幅,可带提示音
macos_say 用系统语音读出文本
macos_clipboard_read 读取剪贴板文本,只读
macos_clipboard_write 覆盖剪贴板文本
macos_volume 读取或设置输出音量 0–100
macos_dark_mode 读取或切换深色模式
macos_keep_awake 用 caffeinate 保持唤醒,或停止、查看状态
macos_shortcuts 列出快捷指令,或按名称执行
macos_open 打开 URL、文件、目录或应用
macos_applescript 执行 AppleScript 或 JXA 片段并返回 stdout,能力最强

Safari

工具 做什么
safari_tabs 列出所有 Safari 窗口和标签页及当前活动标签
safari_open 在新标签或当前标签打开 URL
safari_page_text 读取前置页面的可见文本
safari_javascript 在前置标签执行 JavaScript 并返回结果,需一项 Safari 设置

README 特别强调这套 Safari 工具驱动的是本机真实登录的 Safari,没有扩展、没有云端浏览器、没有 API key。

安装与启用

前置要求:macOS 13+、DeepSeek Harness 0.2.x、dsh 自带的 Node 运行时。

从 GitHub 安装(README 推荐方式):

dsh plugin --profile web add github:wu04186767/dsh-plugin-macos

如果你跑的是 DeepSeek Harness 桌面端,改用:

dsh plugin --profile desktop add github:wu04186767/dsh-plugin-macos

安装后重启应用(命令行场景则是重新运行 dsh --profile web),插件才会被加载。

开发者想从源码加载,README 给的命令是:

git clone https://github.com/wu04186767/dsh-plugin-macos.git
dsh plugin --profile web add ./dsh-plugin-macos

验证是否生效:

dsh --profile web --dump-config | grep dsh-plugin-macos

配置里应能看到该插件行,Web UI 的 Settings → Plugins 下也会出现它。

权限与验证

部分工具首次调用会触发 macOS 的一次性授权弹窗,需要给承载 dsh 的应用(DeepSeek Harness,或从终端启动时的终端)授权:

权限 涉及工具 授权位置
Automation → Safari safari_* 系统设置 → 隐私与安全性 → 自动化
Automation → System Events macos_dark_mode、macos_frontmost_app 同上
Automation → Finder macos_finder_path 同上
Screen Recording macos_screenshot 系统设置 → 隐私与安全性 → 屏幕录制
Safari 开发者设置 safari_javascript Safari → 设置 → 开发者 → Allow JavaScript from Apple Events

想一次性确认当前哪些权限可用,可以在 checkout 目录里跑:

node scripts/doctor.mjs

它会逐个触发依赖权限的工具并显示 macOS 当前放行了哪些。插件声明自身不做网络请求、不存遥测。

典型用法

README 给出的示例提示词可以直接复现:

  • “构建结束时通知我,并大声说完成。”——对应 macos_notify + macos_say
  • “读取我现在看的 Safari 标签并总结。”——safari_page_text 或 safari_tabs
  • “启动 keep-awake,跑完 40 分钟测试,再停掉。”——macos_keep_awake
  • “截屏并告诉我看到了什么。”(需要带视觉能力的模型)——macos_screenshot
  • “在 Mac 上搜 Q3-report.pdf 并给我路径。”——macos_spotlight
  • “切到深色模式,音量设为 20。”——macos_dark_mode + macos_volume
  • “运行我的快捷指令 Start Focus。”——macos_shortcuts

适用场景与注意

适合在 macOS 上常驻 DSH、希望智能体能直接操作本机(通知、剪贴板、Safari、快捷指令)的人,尤其是不想反复手写 AppleScript 的场景。

需要注意几点:

  • 这些工具以当前 dsh 进程的权限在 Mac 上操作,跟内置 bash 工具同级。批准工具调用前,先看一眼智能体实际要调用什么。
  • macos_clipboard_read 可能读取到此前复制过的密码或 token。
  • macos_applescript 属于任意本地自动化,能驱动的几乎是任何 Mac 应用,按能力上限来管理。
  • 插件没有提供删除、关机、提权类的工具。
  • Stars:目录页与仓库当前信息显示星标为 0,社区规模还小;插件包属于开发者预览,API 可能在版本间变化。安装前建议通读源码与 MIT 许可证,确认没有超出你预期的 macOS 权限。
  • 这个插件来自社区目录 SkillHub,目录站是独立站点,与 DeepSeek 无官方从属关系。

结语

dsh-plugin-macos 的价值不在单一技巧,而在把 21 个 Mac 日常操作做成类型化的本地工具,零依赖、无构建、无云端依赖,Safari 部分直接复用本机登录会话。如果你的智能体任务经常落在 Mac 本机操作上,值得装一个试。

  • 目录页:https://www.skillhub.cn/plugins/wu04186767/dsh-plugin-macos
  • GitHub:https://github.com/wu04186767/dsh-plugin-macos
羽毛球分组比赛记分
小程序二维码

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

Xiaoye