前言¶
有些桌面操作很难写成提示词。文件选择器、菜单、弹窗、拖拽、跨多个 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_create 按 Anthropic 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-demo。requestPermissions 为 true 时,缺失权限会弹出系统授权对话框。第一次调用 orr_permissions_check 或 orr_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.changedmouse.clickmouse.dragkeyboard.text_inputkeyboard.submitselection.changed- App / 窗口归属、UI target、选中的文件或文本
- Accessibility tree 或 diff 上下文
技能正文要求:不要从 AXGroup、AXScrollArea 这类泛化 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.yaml 的 allowBuilds。目录页也提醒:插件以当前 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.json 的 0.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_start 的 requestPermissions: true。
2. 开始录制,然后停下来演示¶
用户准备好之后再开始。CLI 示例(录制器文档):
node bin/orr.js record start --name send-file-demo --out runs --request-permissions
在 Harness 里,等价动作是 orr_record_start,name 填 send-file-demo。开始后智能体应停止当前回合,请用户在 Mac 上演示。文档给的例子是:
- 打开一个桌面聊天 App。
- 选择联系人或群聊。
- 附加一个本地文件。
- 确认上传。
- 发送一条补充消息。
演示期间不要让智能体继续调工具。
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_stop、orr_session_validate、orr_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