用 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

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

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

小夜