前言¶
用 DeepSeek Harness(DSH)跑 Agent 时,常会卡在「需要你点一下」:工具审批、沙箱升级、Agent 用 ask_user_question 等你回答,或 macOS 弹出麦克风、屏幕录制等 TCC 权限框。窗口在后台、戴着耳机切到别的应用,很容易错过,任务就停在那里。
自己盯着界面不是长久办法。社区维护者 kongbaiming5 的 dsh-approval-alert(目录包名 dsh-approval-alert,侧边栏显示「授权提醒」)在上述场景用 macOS 系统提示音按节奏重复提醒,并在 DSH 侧边栏「插件」里提供总开关和中文配置表单。插件分类为客户端,当前 GitHub 星标为 1;许可证 MIT,包版本 0.2.0(以仓库 package.json 为准)。
下面介绍它覆盖什么、怎么装、怎么配,以及验证与注意点。事实以 GitHub README 为准;社区目录页:SkillHub 插件页。
这是什么¶
dsh-approval-alert 是一个 DeepSeek Harness 插件:当 DSH 卡在「需要你授权」时,用 macOS 自带系统提示音提醒你。不替代审批或答题流程,只在等待你操作时发声(可选首次系统通知);你允许、拒绝或答完后立即停止。
维护者:kongbaiming5。仓库:https://github.com/kongbaiming5/dsh-approval-alert。
覆盖范围¶
| 来源 | 例子 |
|---|---|
| DSH 工具审批 | 沙箱升级、危险命令、写工作区外文件 |
| DSH Agent 提问 | ask_user_question、计划审阅 exit_plan_mode |
| macOS 系统权限弹窗 | 麦克风、摄像头、屏幕录制、辅助功能、自动化、文件与文件夹、完全磁盘访问 |
macOS 权限弹窗只处理 TCC identity 为 com.deepseek.dsh / DeepSeek Harness 的请求,其他 App 的权限弹窗不会触发。
核心功能¶
提醒节奏¶
第一次在需要授权的瞬间立即响,之后按固定间隔重复:
| 第几次 | 距上一次 |
|---|---|
| 第 1 次 | 立即(0 秒) |
| 第 2 次 | 25 秒后 |
| 第 3 次 | 20 秒后 |
| 第 4 次 | 15 秒后 |
| 第 5 次 | 10 秒后 |
| 第 6 次及以后 | 每次 5 秒后 |
每次提醒默认双响(间隔 0.38 秒),可在表单里调「每次响几声」。你点允许/拒绝、回答问题,或系统弹窗返回结果后,立即停止。多个请求共用一条节奏,全部处理完才停。macOS 权限弹窗另有 systemPromptTimeoutMs 安全上限(默认 10 分钟),防止日志漏掉结果时无限响。
侧边栏与配置¶
安装并启用 bundle 后:
- 打开侧边栏 插件;
- 在 已安装插件 里找到卡片 「授权提醒」(包名
dsh-approval-alert); - 卡片右侧开关控制整个 bundle;点进卡片,里面的
approval-alert行也有自己的开关; - 点行标题/配置按钮,打开 中文配置表单,保存后立即生效。
插件在 DSH 的 设置 → 内置插件 → 插件列表 里也会显示为 approval-alert,但那只是只读的运行状态;日常配置请用侧边栏「插件」里的表单。
配置项(默认值见下表)通过 DSH 插件配置机制写入 profile patch,无需手改 YAML;高级用户仍可编辑 $DSH_HOME/profiles/<profile>/cordis.patch.yml 里的 approval-alert 覆盖。
| 配置 | 默认 | 说明 |
|---|---|---|
| 启用授权提醒 | 开 | 总开关;关闭后所有来源都不响 |
| 提示音 | Glass |
macOS 系统音效名,或绝对音频路径 |
| 音量倍率 | 1 |
afplay -v 倍率;1 = 跟随当前系统输出音量 |
| 每次响几声 | 2 |
每次提醒双响;1–4 |
| 同时弹一条系统通知 | 开 | 首次提醒时弹通知 |
| DSH 工具审批 | 开 | 审批请求 |
| Agent 提问 / 计划审阅 | 开 | ask_user_question、exit_plan_mode |
| macOS 系统权限弹窗 | 开 | DSH 触发的 TCC 弹窗 |
| 系统弹窗安全上限 | 600000 |
毫秒;0 表示不自动停止 |
| 通知语言 | zh |
中文 / English |
| 诊断日志文件 | 空 | 例如 /tmp/dsh-approval-alert.log |
配置字段均为 volatile,表单保存后 Host 直接读取新值,不需要重启插件。
工作原理(简述)¶
- DSH 审批 / 提问:在
approval/request和user-questions/request两个 Cordis waterfall 上注册前置监听器;开始提醒后调用next(),不改变原来的审批/回答链路。 - macOS TCC 弹窗:后台运行一条只过滤
com.apple.TCC的log stream。匹配到AUTHREQ_PROMPTING+com.deepseek.dsh就开始提醒;匹配到对应的AUTHREQ_RESULT就停止。日志流退出时会自动重启。 - 无网络、无凭据:只调用
afplay、log,通知回退时用osascript。
首次提醒时会尝试弹一条系统通知。通知优先使用 Electron 原生通知;当前 desktop Host 是纯 Node 进程时,会退化为 osascript display notification,通知来源可能显示为「脚本编辑器 / Script Editor」。不需要通知可在表单里关掉,声音不受影响。
安装与启用¶
环境要求¶
- macOS 13 或更新版本(README 写明在 macOS 26 / Apple Silicon 上实测)。
- 带 profile 插件机制的 DeepSeek Harness(在
0.2.1-rc.2上实测)。 - Node.js 20+ 仅用于跑测试;DSH 运行时自带 Node。
一键安装(从 GitHub 克隆)¶
README 给出的安装方式为克隆仓库后执行安装脚本:
git clone https://github.com/kongbaiming5/dsh-approval-alert.git
cd dsh-approval-alert
./scripts/install.sh desktop
脚本会:
- 找到
dshCLI($DSH_BIN、PATH或 macOS App 包内路径); - 把当前目录作为本地包加入
$DSH_HOME/profiles/<profile>/package.json; - 把
dsh-approval-alert加入dsh.profile.bundles,让侧边栏「插件」识别它; - 如果检测到旧的「手动 insert」条目,会提示你删除,避免重复挂载。
如果 DSH 正在运行,bundle 列表变更通常需要重启一次 App;重启后即可在侧边栏「插件」看到「授权提醒」。
通过插件页安装¶
侧边栏 插件 → 添加插件 → 安装第三方插件,填入本仓库的本地绝对路径,安装完成后启用 bundle。配置表单同样会出现在「授权提醒」的详情页。
安装脚本只修改选定的 DSH profile,不改 App 包和系统设置。插件以当前 DSH 进程权限运行;安装前请自行查看源码与 MIT 许可证,确认接受其行为(含 TCC 日志监听、本地 afplay 等)。
典型用法与验证¶
声音链路¶
在配置表单里确认「启用授权提醒」为开,保存;触发一个 DSH 审批或系统权限弹窗。第一次应立即响,之后按 25/20/15/10/5 秒节奏重复。
macOS 权限弹窗(麦克风)¶
下列命令用于验证 DSH 麦克风弹窗与提醒联动(会重置 DSH 的麦克风授权状态,不影响其他 App):
tccutil reset Microphone com.deepseek.dsh
ffmpeg -f avfoundation -i ":0" -t 0.5 -y /tmp/dsh-mic-test.wav
系统弹出「DeepSeek Harness 想访问麦克风」的同时,插件应立即响第一声;点允许/拒绝后停止。
DSH 工具审批¶
把会话权限策略切到 ask,让 Agent 申请更宽的沙箱权限。提示出现时立即响,点允许/拒绝后停止。
若完全没声音,可先手动测系统音效:afplay /System/Library/Sounds/Glass.aiff,并检查系统音量、静音,以及表单里「启用授权提醒」和对应来源开关。
适用场景与注意¶
适合谁:主要在 macOS 上用 DSH 桌面端、且经常离开主窗口或长时间 unattended 跑 Agent 的开发者。不适合非 macOS 环境(插件依赖 afplay 与 TCC 日志流)。
安全与隐私(README 说明):不发起网络请求,不读取凭据,不做遥测。TCC watcher 只读 com.apple.TCC 的 prompt/result 行,并过滤为 DSH 的 bundle identity。诊断日志只写本地事件名、服务名、PID 和计时;不调试时留空。
排查速查:插件页没有卡片时,确认 dsh.profile.bundles 包含 dsh-approval-alert 并重启 App;macOS 弹窗不触发时,可用 log show --last 1m --predicate 'subsystem == "com.apple.TCC"' 查看是否有 AUTHREQ_PROMPTING 和 com.deepseek.dsh,或打开诊断日志查看 tcc prompt。
DeepSeek Harness 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-approval-alert 把 DSH 审批、Agent 提问和 DSH 触发的 macOS 权限弹窗统一成可配置的声音提醒,并在侧边栏用中文表单管理开关与节奏。需要查阅详情或提 Issue,见仓库 https://github.com/kongbaiming5/dsh-approval-alert;目录索引见 https://www.skillhub.cn/plugins/kongbaiming5/dsh-approval-alert。