DeepSeek Harness Hub
← 返回列表

视频证据智能体oxbshw/watch-skill

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
需源码安装

把视频音频屏幕活动转成可检索带时间戳的证据

暂不能直接安装(需源码编译或环境不满足):仓库缺少 package.json,无法用 dsh 插件安装命令安装。 · 最近上游提交 2026/9/15 · 已提供中文文档

给 AI 智能体装上眼睛、耳朵和可验证的结果。Watch Skill 将视频、音频和屏幕活动转化为可搜索、带时间戳的证据,并通过确定性契约而非模型意见来证明工作成果。DeepWatch 是构建于 DeepSeek Harness 之上的智能体工作空间。Python + npm、MCP、CLI、REST、Web。

综合分
67.4
GitHub 分
67.4
用户评分
★ Stars
376
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add oxbshw/watch-skill
仓库缺少 package.json,无法用 dsh 插件安装命令安装,改用 GitHub 源安装
🟢实装验证通过· 2026/9/16
由 dsh-plugin-verify(GitHub Actions)在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/15(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包watch-skill(未发布到 npm,仅可源码安装)
Node 引擎未声明 engines.node
dsh CLI 依赖未声明 dsh 版本约束
入口文件缺少入口声明

仓库缺少 package.json,无法用 dsh 插件安装命令安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/16 16:51:14

用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

Watch Skill · DeepWatch

赋予 AI 智能体眼睛、耳朵和可验证的结果。

Watch Skill 将视频、音频和屏幕活动转化为可搜索的、
带时间戳的证据,并以确定性的契约而非模型的意见来回答
那真的有效吗?。通过 MCP 将其添加到
你已经在使用的智能体中。

DeepWatch 是一个现成的智能体工作区,构建在官方 DeepSeek
Harness 之上,并已内置 Watch Skill,其中工具调用会留下
你可以打开的回执,结果可以由产生它的智能体之外的
其他东西来检查。

Python · PyPI

watch-skill on PyPI
PyPI downloads
Python versions

Node · npm

@deepwatch/cli
@deepwatch/dsh-bundle
npm downloads
Node
DeepWatch release

门禁与目录

CI
Workspace
Install
Agent Skills
MCP
License

安装 ·
使用 ·
循环 ·
软件包 ·
架构 ·
文档 ·
社区

两种能力,各自独立运作

感知。 视频、音频和屏幕活动会转化为帧、转录文本和 OCR 文本,每一项都带有绝对时间戳。对某个来源建立一次索引,只要保留它,就可以一直查询;每个答案都会引用一个你可以打开的时刻。

验证。 一份冻结的契约——文件摘要、JSON 值、SQL 结果、HTTP 响应、DOM 状态——由单独的进程进行评估。判定结果为 VERIFIED、FAILED、UNVERIFIED 或 INCONCLUSIVE,而且它并非来自语言模型。

两者各自都有用,这种拆分是有意为之。

Watch Skill — 引擎

对一段录制内容建立一次索引,只要保留它,就可以一直向它提问。答案会引用你可以打开的时间戳。验证契约会检查文件摘要、JSON 值、SQL 结果、HTTP 响应和 DOM 状态,并报告 passed、failed、unverified* 或 inconclusive——四种答案,因为其中三种并不等同于“否”。

任何智能体都可以使用它:MCP、CLI 或 REST API。

DeepWatch — 工作区

构建在官方
DeepSeek Harness 之上,并集成了 Watch
Skill,只需一条命令即可安装。你会得到一个能看、能证明的智能体,无需自己接线。

每次工具调用都会留下一张回执,说明它触碰了什么。工具声明的每条路径都会对照同一个工作区边界进行检查,因此工具无法悄悄写到边界之外。结果带有你可以打开的 Core 判定,并且 Library 会在重启后保留它们。

在浏览器中运行。Compare 会将同一契约的两次运行并排显示,并展示它们的判定在哪里出现分歧。

Watch Skill 负责看和证明。DeepWatch 是它内置其中的工作区。

从这里开始

三条入口路径。选择描述你情况的那一行。

| 你拥有 | 你想要 | 前往 |
| --- | --- | --- |
| 已经有一个智能体(Claude Code、Cursor、Codex、任何 MCP 客户端) | 给它眼睛、耳朵和验证能力 | Watch Skill |
| 什么都还没有 | 整个工作区,包括智能体 | DeepWatch |
| 你已经在运行的 DeepSeek Harness | 把 Watch 加到其中,保留你的设置 | @deepwatch/dsh-bundle |

1. 将 Watch Skill 添加到你已经在使用的智能体

pip install 'watch-skill[standard]'   # 帧、检索和 MCP 服务器
watch-skill doctor                    # 检查,并尽可能修复
watch-skill watch
watch-skill ask  "what changed at 3:12?"

认真对待那个 extra。 只运行 pip install watch-skill 会给你
CLI、验证器和 Bridge,但它无法提取帧:watch 会在第一个视频上停在
perceive.missing_dependency。[standard] 是帧、检索和 MCP;添加 [ocr] 以读取屏幕上的文字,当源没有字幕时添加 [whisper] 进行本地转录,添加 [loop] 用于浏览器,或者选择
[all]。watch-skill doctor 会为任何缺失项给出确切的命令。

把它接入任何 MCP 客户端——[standard] 包含服务器:

watch-skill serve              # stdio MCP 服务器,39 个工具

或者一次性将技能安装到 25+ 个代理中:

npx skills add oxbshw/watch-skill -g

[](docs/agents/claude-code.md)
[](docs/agents/cursor.md)
[](docs/agents/codex-cli.md)
[](docs/agents/github-copilot-cli.md)
[](docs/agents/gemini-cli.md)
[](docs/agents/cline.md)
[](docs/agents/zed.md)
[](docs/agents/windsurf.md)
[](docs/agents/opencode.md)
[](docs/agents/vscode.md)

每个受支持的客户端,以及每个客户端的验证程度 →

2. 整个工作区

先决条件。 Node ^22.19 || >=24,这是 CLI 的 engines 所声明的。Python 3.11、3.12 或 3.13——CI 运行的版本和分类器列出的版本——并且仅当你想要感知和验证引擎时才需要。DeepWatch 在没有它的情况下也能启动,并报告每个 Watch 能力为不可用,直到它存在。

1. 看见并证明的引擎(可选,但它是重点)
pip install 'watch-skill[standard,ocr]'

2. 工作区
npm install -g @deepwatch/cli
deepwatch doctor                     # 存在什么、缺少什么、如何修复
deepwatch setup                      # 构建运行时;显示下载内容并先询问

3. 一个用于工作的工作区目录
mkdir my-project
deepwatch web --workspace ./my-project

deepwatch web 会打印一个本地 URL 并在那里打开工作区。这是你看到的第一个东西:

两个数字,而不是一个分数,因为“已安装”和“已证明”是不同的事实,单一的百分比会模糊二者的区别。Ready now 统计的是已通过运行时门禁的项目。Needs setup 统计的是尚未配置或尚未测试的项目——已保存绝不呈现为已测试。你可以在没有提供商的情况下打开工作区:Library、索引和 Watch 工具都可以在本地运行。

无需全局安装,通过 npx 使用同一个包:

npx --yes @deepwatch/cli setup
mkdir my-project
npx --yes @deepwatch/cli web --workspace ./my-project

npx 是运行 @deepwatch/cli 的一种方式,而不是另一个不同的包——npm 上没有未加作用域的 deepwatch。

setup 会下载什么。 固定版本的 DeepSeek Harness、其确切所需的同级依赖,以及本发布版本对应的 DeepWatch 包,下载到你的 DeepWatch 主目录下的一个运行时中。它会打印注册表、版本和目的地,然后停下来等待你的同意;--yes 表示事先同意,--offline 则直接拒绝。除了你自己安装的 CLI 之外,不会全局安装任何东西。--artifacts  会从经过验证的本地 tarball 中获取 DeepWatch 包,这些 tarball 由本产品自行进行哈希校验,而不是从注册表获取,这正是检出构建所需要的。这并不会使安装变为离线:在该模式下,固定版本的 Harness 及其生成的同级依赖闭包同样会从 npm 获取,而 setup 打印的计划会在获取任何内容之前说明这一点。

启动并不需要模型提供商。 工作区可以启动,Library 可以工作,Watch 工具在没有提供商的情况下也能响应。你需要提供商是为了智能体——聊天、工具使用,以及 THE LOOP 的评审步骤。

连接模型,并证明连接

在工作区本身中按此顺序执行四个步骤。最后一步才是关键。

| 在应用中 | 作用 |
| --- | --- |
| Settings → Models → Add provider | 指定一个提供商并填入密钥,或者将该字段留空并从启动环境中读取一个。 |
| Settings → Role Bindings → Choose a model | 将特定的提供商和模型绑定到一个角色——Chat 或 Visual perception。 |
| Run provider test | 向该确切绑定发送一个真实请求,并报告返回的内容。 |
| Ready | 只有到这时,工作区才会向它发送任何内容。 |

已保存并不等于已测试。 一个背后没有成功提供方测试的绑定会被阻止,并且该轮对话会明确说明:“……已绑定,但没有提供方测试证明它可用,因此目前不能向它发送任何内容。” 主机重启后请重新运行测试——绑定会保留,但证明不会。

能力是按角色分配的,而不是按提供方分配的。未分配任何内容的角色会如实说明,并且绝不会悄悄回退到另一个角色的模型,这就是为什么上面三个中有两个显示为未配置,而不是继承 Chat 的配置。

值得运行的第一个任务

打开一个工作区目录,并要求执行一些涉及磁盘的操作:

创建 notes/totals.json,包含数字 12、30 和 18,然后读回它并告诉我总和。

你会得到一个答案,并在其下方看到每次工具调用对应的一行,列出每次调用所触及的确切工作区相对路径。这就是本 README 中其他所有内容所构建的基础形态。

依赖就绪并不等同于你已经使用过的能力。 deepwatch doctor 报告的是已安装且可访问的内容——Node、Harness、配置文件、Watch Core、ffmpeg。它并不声称这些能力已在你的机器上实际运行过,工作区自身的就绪面板统计的也是同一件事。一行绿色表示各个组件都已就位;运行上面的任务才能告诉你这些组件能否协同工作。

3. 接入你已经在运行的 DeepSeek Harness

cd
dsh plugin --profile  add @deepwatch/dsh-bundle
dsh --profile

不存在 web 子命令。 dsh web 是 dsh --profile web 的别名,因此 dsh --profile  web 会启动你的配置文件,然后把 web 作为参数交给应用——这不是你的本意,而且它也不会说明这一点。Harness 自己在 dsh --help 下会打印这一点:dsh --profile web — 启动 web 配置文件(等同于:dsh web)。在 --profile 之后只命名一次你的配置文件,不要传递其他内容。

在两个命令中命名同一个配置文件。 dsh plugin add 会写入你指定的配置文件;安装到一个配置文件却启动另一个,会让你面对一个没有 watch_ 工具、也没有任何错误解释的 agent。

从你的项目目录启动它。 回执日志会写入 Host 启动时所在的工作目录下,所以请先 cd 到那里——否则 Library 会索引一个你并未在其中工作的目录,并报告 empty。

要在启动配置文件之前检查它实际组合了什么:

dsh --profile  --dump-config | grep watch-

兼容的 Harness。 此版本是针对
@deepseek-ai/dsh@0.1.1-rc.2,确切地说——它是一个固定的 peer,而不是一个范围,因此在不同 Harness 上的 profile 是一种没人测试过的组合。dsh --version 会告诉你当前用的是哪个。

这就是安装。该包声明了 dsh.bundle.patch,因此 DSH 会将它协调进 profile 的层栈中,并在其自身的补丁之后应用该补丁。另外还声明了四个更窄的变体——media、browser、memory、document——供只需要一种能力而非全部能力的 profile 使用。

添加引擎——带上 extras,因为 bundle 的媒体能力就是引擎的能力:

pip install 'watch-skill[standard,ocr]'

[standard] 是帧、检索和 MCP;[ocr] 读取屏幕上的文本。裸 pip install watch-skill 安装的是一个无法提取帧的 Core,Bridge 会连接到它,并在第一个视频上报告 perceive.missing_dependency。Bridge 会自行在 PATH 上找到可执行文件。

完整指南:@deepwatch/dsh-bundle。

要求。 与此处其他所有内容相同:Node ^22.19 || >=24,以及引擎所需的 Python 3.11、3.12 或 3.13。支持 Windows、macOS 和 Linux。

哪个包适合你

此仓库通过两个注册表发布二十一个包,其中只有三个是人们会特意安装的。

| 包 | 注册表 | 在以下情况下安装它 |
| --- | --- | --- |
| watch-skill | PyPI | 你想要感知、证据、检索和验证——通过 CLI、MCP 或 REST。这就是引擎。 |
| @deepwatch/cli | npm | 你想要整个工作区。提供 deepwatch 命令,它会配置并启动其他所有内容。 |
| @deepwatch/dsh-bundle | npm | 你已经在运行 DeepSeek Harness,并想将 Watch 添加到你控制的 profile 中。 |

@deepwatch/ 下的其他所有内容都是插件或内部依赖——bundle 所组合的 Harness 行(dsh-tools、dsh-library、dsh-live、dsh-memory、dsh-workspace 等)以及它们共享的包(dsh-contracts、dsh-sdk、dsh-core-bridge)。它们被发布是为了让 bundle 能够解析,以及让某个组合能够选择其中一行而非全部。直接安装其中一个是用于将单个部分嵌入你控制的组合中;它不是进入产品的途径。

npx @deepwatch/cli 是一种运行* @deepwatch/cli 的方式,而不是一个不同的包,并且 npm 上没有未加作用域的 deepwatch。

包地图 展示了这二十个包如何组合,每个包自己的 README 都说明了它的用途和所需条件。

THE LOOP:观察、行动、验证

感知只是其中一半。THE LOOP 是 agent 在试图修复某样东西时对感知所做的事情。

pip install 'watch-skill[standard,loop]' && playwright install chromium

watch-skill loop start http://localhost:3000/checkout \
"the total updates when quantity changes, and no NaN appears"

1. 观察 — 一个真实浏览器将页面录制为视频;帧被提取
并进行 OCR,每一帧都带有绝对时间戳。
2. 批评 — 一个视觉模型被询问该捕获是否满足你写下的
标准。它会报告问题以及每个问题被看到时的时间戳。
3. 修复 — 你修改代码。
4. 验证 — watch-skill loop iterate 重新捕获并与
上一次运行进行差异比对,因此“已修复”意味着原本错误的东西消失了。

批评步骤需要一个具备视觉能力的模型。如果没有,捕获、帧、
OCR 和验证仍然可以工作,并且批评会说明它无法判断,而不是
猜测。参见 THE LOOP。

纠正会成为经验

当一个答案错误时,你纠正它。Watch Skill 会对纠正进行分类,
将其作为一条经验存储在本地存储中,在错误类别属于机械性错误时
带着已应用的经验重新提问,并统计这节省了多少。

经验在多次运行之间持续存在,并留在你的机器上。没有任何东西会
自行学习——纠正需要由你给出——并且不会上传任何内容。
经验与节省。

DeepWatch 工作区

以上所有内容都是引擎,任何智能体都可以使用它。DeepWatch 构建在
官方 DeepSeek Harness 之上,并已组合进 Watch Skill,因此你在那里
运行的智能体会生成凭据和判定,而无需你进行任何接线。

本节的其余部分是一个端到端的任务。一个结账页面收取了错误的
金额,而你只有它的一段屏幕录制。

把录制交给引擎 · 询问它金额在哪里出错 · 修复
代码 · 从智能体外部证明修复 · 明天再回来看记录。
下面的每个数字和判定都来自产生本节的这次运行,基于 Watch Skill 1.4.3
和 DeepWatch 0.1.3。

1 · 把录制交给引擎

四秒钟的某人更改数量的过程。没有输入任何关于它哪里
有问题的内容。

watch-skill watch ./checkout-bug.webm --index

帧带着绝对时间戳输出,屏幕上的文本也随之输出:

Selection: 4 kept from 8 candidates (4 near-duplicates dropped)
t=00:00   2 × $10.00   Subtotal $20.00   Tax (10%) $2.00   Total $20.00
t=00:01   5 × $10.00   Subtotal $50.00   Tax (10%) $5.00   Total $50.00
t=00:02   3 × $10.00   Subtotal $30.00   Tax (10%) $3.00   Total $30.00

这个 bug 现在可以读出来了:税被计算、显示,却被排除在总额之外。
它是可读的,因为那些帧被保留了下来——在一个其他方面完全相同的布局中,三个变化的数值在帧采样器看来就像是重复的,因此脚本化的捕获会记录下它行动的时刻,而引擎会将这些时刻固定下来。

2 · 询问它发生在哪里

watch-skill ask  "what was the total when the quantity was three?"

答案会引用它所依据的时间戳,并且该帧已保存在磁盘上。当录像没有显示答案时,它就会如实说明:一个无法回答的问题并不是猜测的提示。

3 · 修复应用程序

现在智能体有了着手点。它阅读证据,在 cart.js 中找到 orderTotal,并发现它计算出的税额从未到达返回值。

它接触的每个文件都会留下一张收据,注明路径,而工具声明的每个路径都会依据同一个工作区边界进行解析。在该边界之外的写入会被拒绝并且被记录下来:文件未被改动,日志中会增加一张标记为 scope:outside_workspace / state:cancelled 的收据,注明该次尝试。这两部分都很重要——一个静默拒绝的边界会让你无从得知它是否曾被测试过。

以下是它实际留下的内容,来自生成本节的那次运行。日志中写入了十四行,它们折叠为十二张收据,因为其中两张被写入了两次——一次是工具返回时,另一次是 Core 的裁决到达时。这里的四行 todo_write 和 glob 被省略了;以下是接触了某些内容的八行:

| 收据 | 裁决 |
| --- | --- |
| watch_list_sources | — |
| watch_ask_source | — |
| read — checkout/cart.js | — |
| read — checkout/index.html | — |
| watch_moment | — |
| edit — checkout/cart.js | VERIFIED |
| watch_verify | INCONCLUSIVE |
| pwsh | — |

模型被告知一位顾客被收取了错误的金额,并且存在一段录像。它没有被告知缺陷是什么,工作区中也没有任何东西指明它。它列出了源文件,询问了录像,从中提取了一个时刻,读取了两个文件,修改了一行,并运行了自己的验证——结果返回 INCONCLUSIVE,因为它编写的检查无法被评估。该答案按原样报告,而不是四舍五入为通过。

4 · 从智能体外部证明修复

合约在修复之前就已冻结,并且位于智能体可写入目录之外。Watch Core 在单独的进程中评估它,并返回一个并非由智能体撰写的裁决——VERIFIED、FAILED、UNVERIFIED 或 INCONCLUSIVE。

上述运行的合约为 c98bd4ae3d13864869ae02be46cdba48fb97f790ec50feead6e30d17ccc007b0,其摘要在智能体启动之前就已取得。修复之前,Core 对全部三项检查返回 fail——期望 22,得到 20、期望 33,得到 30,以及从渲染页面中读出的 #total text = '$20.00'。之后,针对同一份未更改的合约,三项全部通过,页面渲染为 $22.00。

上图拍摄自另一个任务——从这里开始中的 totals.json 任务——因为它展示的正是 VERIFIED 卡片的样子。它不是结账修复的截图;那次修复的证据是上文提到的合约和回执。

合约的 SHA-256 显示在屏幕上,因此你可以确认它是同一份合约。

判定结果就是答案,而四种结果各自含义不同。以上述合约为例进行测量:针对修复后的工作区,结果为 VERIFIED;指向一个不包含这些文件的目录时,检查仍会运行并报告为假,因此结果为 FAILED;以散文形式写出、背后没有可执行检查的期望是 UNVERIFIED——诚实,但不算通过;而完全无法评估的检查会返回 INCONCLUSIVE,该检查自身的状态保持为 null,而不是被归入假。如果没有可供测量的工作区,Core 会直接拒绝该请求(verify.workspace_unresolved),而不是猜测一个目录。

5 · 明天再回来

重启一切——终止进程,再重新启动。两条记录都会回来,而它们是两个不同的存储,值得区分开来。

Watch Core 的源索引位于 Watch 数据目录中。无论是否有任何内容打开,它都在那里,watch-skill list 读取它时无需涉及任何工作区。Library 的回执索引是 Host 自己的:日志写在工作区下的 .watch/receipts 中,Library 在 Refresh 时从该文件重建其索引。它是派生数据,可以安全丢弃。

这就是 Library 跟随工作区的原因。从你正在工作的目录运行应用;在别处启动的 Host 会在别处写日志,而重启后报告 empty 的 Library 通常是指向了错误的目录,而不是数据丢失。

以上述运行为例进行测量:写入了十四条回执,进程被终止,重启后全部十四条重新打开——相同的记录 ID、相同的最后修订版本,而 Core 已裁定的那两条仍然带有各自的判定,修复为 VERIFIED,无法运行的检查为 INCONCLUSIVE。

Compare 将失败的运行和通过的运行并排显示,并展示它们的判定在哪里出现分歧。比较描述的是差异;它本身从不发布判定。

这里的每张图片都是运行中构建的实拍照片,而且它们并非都来自同一个构建——声称它们来自同一个构建会是本页最容易做出的虚假声明。入门截图来自当前图库,是针对 Watch Skill 1.4.3 和 DeepWatch 0.1.4 重新拍摄的,其前方的确定性浏览器场景通过了 42 项中的 42 项;当截图与其所针对的引擎不一致时,一道关卡会拒绝该组截图。设置和结果卡片截图来自 1.4.3 / 0.1.4 候选版本,保留它们是因为本次发布没有改变每张截图所展示的界面。

截图页面 列出了每张图片背后的构建,并包含横跨三种视口的完整 57 张截图图库。

这里“本地优先”的确切含义。 你的源、回执、判定和记忆都存储在你的机器上,Library 搜索也在那里运行。这并不意味着什么都不使用网络:setup 会从 npm 下载运行时,一些 Watch 扩展在首次运行时会获取模型,而你配置的托管模型提供商会收到你发送给它的内容。保持本地的部分是记录以及对其进行的检索。

采集是与上述任何一项都分开的同意。工作区可以录制的每个源都会连同其所需的权限以及该权限是否已被请求一起列出——而且在你使用它之前,不会请求任何权限:

持有提供商密钥并不允许媒体离开本机,而云引擎即使网络开放也需要其自身的同意。这是有意设置的两个独立开关。

人们用它做什么

| | |
| --- | --- |
| 向视频提问 | 对一段录像建立一次索引,然后针对它提问。答案会引用你可以打开的时间戳。01-watch-and-ask |
| 证明智能体的工作 | Core 运行的确定性契约——文件摘要、JSON 值、SQL、HTTP、DOM。14-browser-verification |
| 通过观察来修复 UI | 捕获、评审、修复、重新验证。04-ui-loop |
| 跨所有内容搜索 | 对你观看过的每个源建立一个索引。03-cross-video-search |
| 离线工作 | 本地 whisper 和 OCR,无需提供商,任何数据都不离开本机。15-private-offline-workflow |
| 实时观看 | 一个流或浏览器会话,有界且带游标。18-live-watch |

每一个都是可直接运行的目录,其前置条件和预期输出就写在旁边。

全部 20 个示例,按其所教授的内容分类

| | |
| --- | --- |
| 学习核心 | 01 观看并提问 · 02 聚焦时刻 · 03 跨视频搜索 |
| 用智能体构建 | 06 MCP 与 REST · 09 框架适配器 · 15 私有离线工作流 |
| 理解与组织 | 05 多语言阿拉伯语 · 10 结构化提取 · 11 批处理模式 · 12 库记忆 · 16 可分享查看器 |
| 验证与改进 | 04 UI 循环 · 07 经验与统计 · 08 循环类型 · 13 自我改进 · 14 浏览器验证 · 17 新鲜度与离线 · 20 观察者循环 |
| 实时观看 | 18 实时观看 · 19 实时浏览器 |

这就是全部 20 个示例;索引在 examples/。

各部分如何协同工作

flowchart LR
subgraph W["DeepWatch workspace"]
H["DeepSeek Harnessagent, tools, UI"]
P["Watch pluginstools · library · live · memory"]
H  P
end
P |"Bridge (stdio)"| C["Watch CorePython engine"]
C --> E[("Evidence storeframes · transcripts · index")]
C --> V["Verifierisolated subprocess"]
V --> R[("Verification recordscontract · checks · verdict")]
P --> J[("Receipt journalone per tool call")]
A["Any other agentMCP · CLI · REST"]  C

Watch Core 是唯一做出裁决的组件。 Host 可以注意到、关联、冻结契约并提问——但它不能决定答案。这就是
ADR-002,如果有任何位于
packages/ 下的东西开始产生裁决,构建门禁就会失败。

回执记录工具调用做了什么;裁决记录 Core 检查了什么。
它们由不同的进程写入,Library 将它们显示为不同的
列,因为一个成功运行了命令的智能体和一个
做了正确事情的智能体并不是同一种断言。

更多:架构 ·
验证 ·
39 个工具。

什么可用,以及它需要什么

| 能力 | 开箱即用 | 需要 |
| --- | --- | --- |
| 启动应用、浏览、阅读诊断信息 | ✅ | 无需任何东西 |
| 验证契约、遏制、回执 | ✅ | 无需任何东西 |
| 视频帧和场景 | 配合 [standard] | ffmpeg ≥ 5.1 —— watch-skill doctor 会安装它 |
| 读取屏幕上的文字 | 配合 [ocr] | 首次使用时下载模型(约 80 MB) |
| 语音转文字 | 配合 [whisper] | 首次使用时下载模型;当来源带有字幕时优先使用字幕 |
| 与智能体聊天 | — | 由你添加并绑定的提供商 |
| 视觉场景描述 | — | 一个能看图像的模型 |
| 浏览器捕获 / THE LOOP | 配合 [loop] | playwright install chromium |
| 记忆 | 关闭 | 在设置中启用;存储为明文,且已明确说明 |
| 桌面应用 | 未分发 —— 不存在安装程序 | 运行 deepwatch web |

DeepWatch 在未配置任何提供商的情况下即可启动并保持可用:验证、遏制、资料库和本地感知全部在本地运行。需要提供商的是智能体——聊天、工具使用,以及 THE LOOP 的评审步骤。

能力有三种到达方式,它们不可互换。 本地依赖(ffmpeg、yt-dlp、JS 运行时)在你的机器上运行,watch-skill doctor 会获取并修复它。下载的模型(OCR 权重、whisper)同样在你的机器上运行,是一次性的大体积下载,你的文件不会有任何内容离开它。托管提供商——智能体的模型,以及你绑定的任何视觉模型——是别人的服务,有其延迟、价格和条款,并且它会看到你发送给它的内容。你自己运行的 OpenAI 兼容服务器(Ollama、vLLM、LM Studio、llama.cpp)是托管路线指向你自己的硬件:数据留在本地,而某个给定模型是否支持工具调用或图像,是该模型自身的属性,DeepWatch 会如实报告,而不是绕过它。

在你添加提供商之前,不会有任何内容到达提供商;而持有提供商凭据并不等于获得上传一帧画面或一份转录文本的许可——那是另一项单独的同意。

什么会自我修复。 watch-skill doctor 修复的是依赖:它下载 yt-dlp 并保持其最新,引导 JS 运行时,安装 OCR 语言数据,并在可行处获取 ffmpeg,同时报告每一次修复。这是这里唯一会在未被要求的情况下自行行动的东西。本版本没有自动任务恢复、没有自主学习,也没有静态加密。已知限制 是完整清单。

实测,而非断言

对比一个领先的视频理解 API,相同文件,相同评分器:

| | Watch Skill | 基线 |
| --- | --- | --- |
| 书面分析有据性 | 89.7% | 27.9% |
| 每 100 词引用数 | 13.23 | 0.12 |
| 真实素材上的帧交付率 | 96.9% | 31.2% |
| 提示起始在半秒内 | 100% | 25% |
方法与测试夹具:benchmarks/video_backends/。
与其他方案的权衡:comparison。

文档

| | |
| --- | --- |
| 快速上手 | 安装、首次观看、首次 agent 连接 |
| 安装与升级 | 两个产品、可选附加组件、兼容性策略 |
| 配置 | 设置、提供方、存储位置 |
| 工具参考 | 全部 39 个 MCP 工具及其 REST/CLI 对应项 |
| 验证 | 契约、十四种检查类型、保证级别 |
| 架构 | 边界、数据流、扩展点 |
| Agent 矩阵 | 各客户端的设置以及每个客户端的验证程度 |
| 故障排查 | 依赖修复与常见运行时错误 |
| 成本 | 哪些功能免费运行,提供方对哪些功能收费 |
| 已知限制 | 此版本不具备的功能 |

DeepWatch:workspace README ·
设置 ·
二十个包 ·
发布 ·
平台支持

三个工具数量,因为它们回答的是不同的问题:来自 watch-skill serve 的 39 个 MCP 工具,DeepWatch 内添加到 agent 的 22 个 watch_* 工具,该 agent 总共被提供的 47 个工具。

社区与生态

由其他人撰写的报道,以及承载该项目的目录。
按每一项实际包含的内容来描述——一篇报道是某个人尝试这个东西并反馈回来,这与背书不是一回事,而且这些内容都没有说明有多少人在使用它。

教程与报道

| | |
| --- | --- |
| Watch Skill 使用教程:让 Codex 看懂视频和录屏 | 将 Watch Skill 接入 Codex CLI 的分步讲解:安装、MCP 配置以及第一个视频。中文。 |
| Watch Skill: AI video analysis and video correction | 设置与操作指南,附有其自己的实操用例和故障排查章节。英文。 |

视频

| | |
| --- | --- |
| 演示,第一部分 · 第二部分 | 在 Bilibili 上的屏幕录制演示,涵盖安装和首次分析。中文。 |

目录

| | |
| --- | --- |
| Skills.sh | 列出十个 agent 技能,并通过一条命令将它们安装到受支持的客户端中。 |
| SkillsMP | 第二个技能目录,收录同一组技能。 |
| MCP 注册表 | io.github.oxbshw/watch-skill 服务器条目,供按名称解析 MCP 服务器的客户端使用。 |

完整合集按教程、视频、集成和目录列表分类整理:docs/ecosystem.md。如果你撰写或录制了相关内容,欢迎提交拉取请求将其添加进去。

贡献

欢迎提交 issue 和拉取请求。CONTRIBUTING.md 提供了二十分钟上手指南:需要安装什么、运行哪个检查关卡,以及提交信息的格式。安全策略:SECURITY.md。设计决策及其理由:DECISIONS.md 和 ROADMAP.md。

基于 DeepSeek Harness 构建 · 由 Watch Skill 驱动

DeepWatch 和 Watch Skill 是独立项目,与 DeepSeek 无关联,也未获得其认可。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群