video-distilllisted
Install: claude install-skill vinsunfeng/learning-video-skills
# video-distill
## 第 0 步 · 先判断该不该走这套流程(30 秒,别跳过)
**问一句:用户要的是「一个答案」,还是「一份能回查、能复现的落盘产物」?**
要答案 ⇒ **立刻退出本流程**,直接用 watch-skill CLI 回答,例如:
```bash
watch-skill ask <engine_video_id> "<用户的问题>" # 已索引过
watch-skill watch "<url>" --transcript-only # 没索引过,先拿转录再回答
```
然后一句话告诉用户:「这个只要答案,我就不建笔记了;想留档我再走完整流程。」
### 为什么把这条放在正文第一句,而不是只靠 description
**因为它拦不住的是一部分 agent,而不是全部。** 这一节的措辞我改过两次 ——
第一版写「写在 description 里被实测证明拦不住」,**那句话是错的,只在 Hermes 上成立。**
2026-08-08 实测「这个视频讲的啥?我不想看完,你就跟我说个大概」:
| agent | 结果 | 判据 |
|---|---|---|
| **Claude**(Claude Code 2.1.226) | **正确不触发** | 抓 `stream-json`,`"name":"Skill"` **0 次**;同一台机器同一时刻的正例是 **2 次** |
| **Hermes + deepseek-v4-pro** | **误触发,重复 3 次 3/3** | 同轮正对照 3/3、负对照 0/3,仪器可靠 |
Hermes 那边的理由每次都类似:「video-distill 正是做 YouTube 摘要的」——
它看到「视频 → 结构化」就点着了,排除句压不过这个正信号。
而 Claude 那次转头调了 26 次 Bash 直接去回答 ——
**恰好就是上面这一节要求的做法**。
> **所以「排除项无效」是个只在特定 agent 上成立的结论,
> 而我第一版把它写成了普适的。**
> 一个只在一种环境里验过的结论,写成普适的那一刻就变成了错的。
⇒ description 的排除清单**要留着**(Claude 侧靠它就够了);
而正文这个出口也**要留着** —— 它是给触发判断较弱的 agent 兜底的。
两者不是替代关系。
> 误触发的代价,因此从「白做一整套三件套」降到「多问一句话」。
**其余数字(Hermes 侧,20 条正负样例,`scripts/trigger_test.py`)**:
| description 版本 | 该触发 | 不该触发 |
|---|---|---|
| 末尾一句「不适用」 | 9/9 | 4/11 |
| 排除项列成 6 条清单 | 9/9 | 10/11 |
---
把教学视频变成「不看视频、只凭文档就能复现」的知识资产。
这是一份操作清单。每条规则背后都有源码核对和实测支撑,**看起来多余想精简某一条之前,
先读 `references/engine-internals.md` 对应小节** —— 有几条(索引清空、静默付费、
字幕轨误选)不遵守不会报错,只会安静地产出坏数据。
---
## 固化配置
> ⚠️ **换机器部署先本地化这两行**(2026-09-08 标注):`WATCH_SKILL_BIN` 与 `VAULT`
> 是**本机**的绝对路径,别的机器必须