用 dsh-record-replay 把 macOS 桌面演示变成 DeepSeek Harness 技能

前言

有些桌面操作很难写成提示词。文件选择器、菜单、弹窗、拖拽、跨多个 App 的切换,再加上个人工作区布局和团队内部习惯,写成长篇 runbook 既费时,也容易漏步骤。对 Computer Use 类智能体来说,用户演示一遍,往往比口头描述更清楚。

DeepSeek Harness(dsh)是 DeepSeek AI 开源的智能体运行时,架构口号是「一切皆插件」。社区里有人把「演示一次、学会一个工作流」做成了插件:dsh-record-replay。它不自己画桌面,也不直接替你点鼠标,而是把另一套 macOS 录制器 Open Record/Replay 接到 Harness 里,让智能体先录证据,再交给技能创建流程。

本文按插件目录页、GitHub 仓库 README / 源码,以及 Open Record/Replay 文档核对后整理:它是什么、装完能调用哪些工具、怎么配置本地录制器,以及使用时要注意的权限和隐私边界。社区插件目录 deepseek-harness-plugin.com 是独立站点,与 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。

这是什么

dsh-record-replay 是一款 DeepSeek Harness 插件,分类在目录页的「开发与运行时」。维护者是 GitHub 用户 humblebanana,仓库地址为 humblebanana/dsh-record-replay,许可证 MIT,主要语言 TypeScript。仓库 package.json 当前版本是 0.2.0(2026-08-13 发布)。截至本文核实,GitHub 显示 8 颗星;社区目录页仍写 7 颗星,星标以仓库为准。

它解决的问题可以概括成一句话:把用户在 Mac 上的真实桌面操作录成结构化证据,再打包成智能体可以学习的技能输入。

插件本身是一层适配,不是完整录制器。真正干活的是同一维护者的 open-record-replay:Swift 写的 macOS 原生后端,外加 bin/orr.js CLI。插件通过 Harness 的 subprocess 服务调用这份 CLI,并注册:

  • 一份运行时技能:open-record-replay
  • 一组面向模型的 orr_* 工具

仓库 README 开头仍写「六个面向模型的工具」,对应 0.1.0 的录制 / 校验 / 打包链路。0.2.0 又加了内置回退工具 orr_skill_create,源码 src/tools.ts 实际注册 7 个工具。下文按源码与 CHANGELOG 说明。

Open Record/Replay 自己标注为 alpha。当前稳定公开路径是:macOS 原生录制、CLI、session.json / events.jsonl、录制质量校验、Skill 输入包、交给宿主智能体创建最终技能。截图不是当前核心录制链路的一部分。

核心功能

从演示到技能

官方 README 把主链路写成:

用户演示工作流
  -> orr_record_start            (生成 session.json + events.jsonl)
  -> orr_record_stop             (收尾)
  -> orr_session_validate        (按官方契约校验录制质量)
  -> orr_session_events          (读取用户实际做了什么)
  -> orr_skill_prepare           (打包 skill 输入目录)
  -> 宿主 skill creator

技能正文 open-record-replay 还规定:录制开始后,智能体必须结束当前回合,等用户演示完再说;不要轮询、不要一边录一边继续干活。用户明确取消录制时,不要继续创建技能。

最终技能优先交给宿主自带的 Skill Creator。没有宿主创建器时,再用 orr_skill_createAnthropic skills spec 生成并安装 SKILL.md。不要停在一份摘要或 Markdown 操作说明上,除非用户只要这个。

面向模型的工具

工具 对应 CLI 作用
orr_permissions_check permissions check 录制前检查 Accessibility / Input Monitoring
orr_record_start record start 开始捕获用户演示
orr_record_stop record stop 用户说演示结束后再收尾
orr_session_events session events 读取 events.jsonl,按 limit 截断
orr_session_validate session validate-recording 按录制契约校验质量
orr_skill_prepare skill prepare 打成宿主 Skill Creator 可用的输入目录
orr_skill_create (插件内置) 0.2.0 回退:从录制生成并安装技能

orr_record_start 的默认录制名是 screen-activity,可传入短名称,例如 send-file-demorequestPermissions 为 true 时,缺失权限会弹出系统授权对话框。第一次调用 orr_permissions_checkorr_record_start 可能要几分钟,因为会编译 Swift 录制器。

orr_session_events 默认返回前 50 条事件,上限 500。完整证据在工作区的 events.jsonl 里,需要时直接读文件。

orr_skill_create 的用法是两步:先不传 draft,根据证据生成符合规范的骨架(kebab-case 名称、description 前置元数据、渐进披露正文,以及 evals/evals.json 占位);智能体重写描述、步骤、验收和隐私说明后,再把完整 SKILL.md 作为 draft 传回去,校验通过后安装到 ~/.agents/skills/<name>/。有宿主原生 Skill Creator 时不要走这条回退路径。

录制证据

Open Record/Replay 把一次演示写成会话产物。录制目录默认相对工作区:

runs/sessions/<session-id>/
├── session.json
├── events.jsonl
├── orr_session.json
└── recording_manifest.json

orr_skill_prepare 再打成技能输入包:

skill-inputs/<session-id>/
├── README.md
├── events.jsonl
└── session.json

session.json 记录录制边界、时间和事件路径。events.jsonl 是判断用户到底做了什么的 source of truth。文档列出的事件类型包括:

  • window.changed
  • mouse.click
  • mouse.drag
  • keyboard.text_input
  • keyboard.submit
  • selection.changed
  • App / 窗口归属、UI target、选中的文件或文本
  • Accessibility tree 或 diff 上下文

技能正文要求:不要从 AXGroupAXScrollArea 这类泛化 target,或低置信度动作簇去推断未支持的操作。关键动作或目的地含糊时,应回问用户。

Open Record/Replay README 给出的可录场景包括:在桌面聊天 App 里发文件或图片、创建文档并分享链接、打开网页搜索并播放指定媒体、在浏览器和桌面 App 之间切换、复现没有稳定 API 的 UI 流程。这些是录制器文档中的能力说明,不是第三方使用反馈。

安装与启用

环境要求

插件 README 列出的前置条件:

  • macOS。原生录制器是 Swift,需要 Xcode Command Line Tools。
  • Node.js >= 22.19(Harness 运行时;录制器仓库本身写的是 Node.js 18+,装这个插件时按 Harness 要求即可)。
  • 已安装 DeepSeek Harness。
  • 一份 open-record-replay 本地检出,插件会调用其中的 bin/orr.js

录制器还要求 macOS 的 Accessibility 和 Input Monitoring 权限。核心录制路径不需要 Screen Recording。

DeepSeek Harness 可用官方仓库说明的方式启动,例如:

npx @deepseek-ai/dsh web

默认 Web UI 在 http://127.0.0.1:3080。Harness 目前是 developer preview,官方 README 写明会有破坏性变更。

目录页安装命令

社区目录页给出的安装命令以页面原文为准,在 DeepSeek Harness 终端运行:

dsh plugin add github:humblebanana/dsh-record-replay

需要可复现安装时,目录页的写法是固定 commit 哈希:

dsh plugin add github:humblebanana/dsh-record-replay#commit

#commit 换成实际提交哈希。从 GitHub 安装的插件可能在安装时执行构建脚本;pnpm 10 起默认拒绝 git 依赖的 prepare,第一次 add 失败时,按 dsh 提示把包名写入 profile 的 pnpm-workspace.yamlallowBuilds。目录页也提醒:插件以当前 dsh 进程的权限运行,安装前应检查源码和许可证。

本地打包安装

仓库 README 另外给了一套打 tarball 再装进 web profile 的步骤,适合本地改代码或避免直接跑 git 依赖:

git clone https://github.com/humblebanana/dsh-record-replay.git
cd dsh-record-replay
pnpm install
pnpm build
pnpm pack
dsh plugin --profile web add ./dsh-record-replay-0.2.0.tgz

README 示例里的文件名仍写 dsh-record-replay-0.1.0.tgz,与当前 package.json0.2.0 不一致。pnpm pack 按 version 字段生成包名,以实际产出为准。

dsh plugin add 会把包写入 profile 的 package.json(dependencies 和 dsh.profile.bundles),并由 harness 维护 profiles/node_modules 回退。

指向录制器检出

只装插件不够。随包的 cordis.patch.yml 只挂了一行中性配置,必须在 profile 的 cordis.patch.yml 里覆盖整行,指向本机的 open-record-replay 目录。README 示例:

- id: record-replay
  config:
    repoRoot: '/absolute/path/to/open-record-replay'
    runsOut: 'runs'
    skillInputsOut: 'skill-inputs'

配置项含义如下:

默认 含义
cliPath 环境变量 ORR_CLI_PATH 显式指定 bin/orr.js,优先于 repoRoot
repoRoot 环境变量 ORR_REPO_ROOT open-record-replay 检出目录,CLI 为该目录下的 bin/orr.js
runsOut runs 工作区相对的录制目录
skillInputsOut skill-inputs 工作区相对的 skill 输入包目录

CLI 以会话工作区为工作目录运行,录制产物会落在智能体文件系统工具能读到的位置。profile 的 patch 文件会热加载,运行中的 GUI 不必重启;如果当前不是 live profile,需要重启 Harness。

录制器本身可以先单独装好:

git clone https://github.com/humblebanana/open-record-replay.git
cd open-record-replay
npm install
npm run check

典型用法

下面流程来自插件技能正文和 Open Record/Replay 的 Quick Demo,可以按原样走一遍。假设插件已装好,repoRoot 已指向本地检出。

1. 先查权限

让智能体调用 orr_permissions_check,或在录制器仓库里直接跑:

node bin/orr.js permissions check

缺权限时:

node bin/orr.js permissions request

对应工具参数是 orr_record_startrequestPermissions: true

2. 开始录制,然后停下来演示

用户准备好之后再开始。CLI 示例(录制器文档):

node bin/orr.js record start --name send-file-demo --out runs --request-permissions

在 Harness 里,等价动作是 orr_record_startnamesend-file-demo。开始后智能体应停止当前回合,请用户在 Mac 上演示。文档给的例子是:

  1. 打开一个桌面聊天 App。
  2. 选择联系人或群聊。
  3. 附加一个本地文件。
  4. 确认上传。
  5. 发送一条补充消息。

演示期间不要让智能体继续调工具。

3. 停止、校验、读证据

用户说演示完成后:

node bin/orr.js record stop latest
node bin/orr.js session validate-recording latest
node bin/orr.js session events latest

对应工具依次是 orr_record_stoporr_session_validateorr_session_events。会话 id 可用 latest 表示最近一次录制。

4. 打包或创建技能

交给宿主 Skill Creator 时:

node bin/orr.js skill prepare latest --runs runs --out skill-inputs

也就是 orr_skill_prepare。把返回的目录交给宿主创建流程。

没有宿主创建器时,按技能正文调用 orr_skill_create:第一次不传 draft 生成骨架,改完后再带 draft 安装。生成的技能遵循 Anthropic skills spec:kebab-case name、说明触发时机与用途的 description、渐进披露正文、可选的 evals/evals.json

适用场景与注意事项

适合在这些条件下使用:

  • 工作环境是 macOS,已经在跑 DeepSeek Harness。
  • 要教智能体的是桌面 UI 流程,而不是一条干净的 API。
  • 你愿意先演示一遍,并接受录制文件落在本地工作区。

不适合、或至少不要预期它能做到的事情:

  • Windows / Linux。录制后端是 macOS Swift。
  • 把插件当成「替你操作电脑」。控制桌面是另一类插件(目录里另有 dsh-computer-use 等),本插件的公开路径是录制、校验、打包技能输入。
  • 依赖截图复盘。当前核心证据是事件流,不是屏幕录像。
  • 把 Open Record/Replay 的 alpha 范围当成稳定产品承诺。文档写明更丰富的适配器和可选视觉证据不在当前稳定公开路径里。

使用前还要处理几件具体的事。

权限与进程权限。 录制需要 Accessibility 和 Input Monitoring。插件以当前 dsh 进程权限运行,安装时可能执行代码。安装前读仓库源码和 MIT 许可证;不信任的来源不要 dsh plugin add

隐私。 插件 SECURITY.md 和录制器隐私文档都写明:默认不上传录制;events.jsonl 仍可能包含窗口标题、URL、键入文本、选中文本、文件名、本地路径、App 与网页里的 Accessibility tree 文本。分享或提交给模型摘要前应先检查。不要公开含密钥、私有文档、客户数据、内部 URL 或个人信息的原始录制。技能正文要求:密码、OTP、API token、财务或身份号码、私密个人 / 医疗 / 法律 / 客户数据、私有本地路径和文档名,不得写进摘要或生成的技能,改用占位符。

证据解读。 校验失败就不要强行做技能。事件含糊时问用户,而不是补全没录到的步骤。

配置遗漏。 只执行目录页那条 dsh plugin add、不设置 repoRoot / cliPath,插件找不到 bin/orr.js,工具调用会失败。

小结

dsh-record-replay 把 Open Record/Replay 接到 DeepSeek Harness:用户演示一次 macOS 工作流,智能体用 orr_* 工具录事件、做校验、打技能包,再交给宿主 Skill Creator(或 0.2.0 的 orr_skill_create 回退)。它解决的是「这类操作写不清、演示一遍更清楚」,不是通用桌面自动化。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-record-replay/

插件仓库:https://github.com/humblebanana/dsh-record-replay

录制器仓库:https://github.com/humblebanana/open-record-replay

DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness

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

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

小夜