asking-with-evidence
The user asks a question about a video that was already watched or indexed — "what did they say about X", "what error code…
Watch any video (URL, stream, or local path) via Watch Skill. Downloads, extracts scene-aware deduped frames, OCRs them, transcribes (captions first, then local Whisper — offline by default), indexes everything, and hands the result to the agent. Follow-up questions are answered
$ npx -y skills add oxbshw/watch-skill --skill watch --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/watchContext preview
The summary Claude sees to decide when to auto-load this skill.
Watch any video (URL, stream, or local path) via Watch Skill. Downloads, extracts scene-aware deduped frames, OCRs them, transcribes (captions first, then local Whisper — offline by default), indexes everything, and hands the result to the agent. Follow-up questions are answered
name: watch version: "1.4.3" description: Watch any video (URL, stream, or local path) via Watch Skill. Downloads, extracts scene-aware deduped frames, OCRs them, transcribes (captions first, then local Whisper — offline by default), indexes everything, and hands the result to the agent. Follow-up questions are answered from the persistent index without re-processing. argument-hint: "<video-url-or-path> [question]" allowed-tools: Bash, Read, AskUserQuestion license: MIT user-invocable: true
You don't have a video input; this skill gives you one. It is a thin wrapper around the `watch-skill` CLI — all logic lives in the engine, so this skill works identically on every harness (Claude Code, Codex, Cursor, ...).
This is a drop-in upgrade of the classic claude-video `/watch` skill: same invocation shape, plus a persistent index (`ask` answers follow-ups without re-processing), OCR on frames, scene-aware sampling with perceptual dedup, local Whisper (offline by default, no API key needed), and THE LOOP (capture -> critique -> fix -> re-capture) for iterating on your own output.
watch-skill doctor --json
auto-bootstraps ffmpeg and yt-dlp into a managed bin dir on Windows/macOS/ Linux; re-run once after it reports fixes. Only involve the user when a check still fails after remediation.
`uv tool install watch-skill`), then re-run the doctor.
No API key is required for acquisition, transcription, OCR, indexing, or search: transcription falls back to local faster-whisper. Visual synthesis and verification can use the user's existing Anthropic, OpenAI, Gemini, or OpenRouter key, or an optional local Ollama model. The agent and provider are independent; see the `configuring-vision` skill. Cloud STT is opt-in (`--cloud-stt`) and only ever uploads extracted mono audio — the video file never leaves the machine.
Parse the user input into source + optional question, then:
watch-skill watch "<source>" [--start T --end T] [--max-frames N] [--transcript-only]
(`--duration 60` bounds live streams), and local files all work.
sampling of that window — use for "what happens at 2:30?" questions and for any video over ~10 minutes when the user cares about one section.
("look here", "as you can see") that visual selection may miss.
captions exist).
hard cap 100, max 2 fps).
The report prints an `Indexed: video_id ...` line, frames with `t=MM:SS` timestamps, OCR text, and the transcript.
Read every frame path the report lists, in a single message (parallel Read calls), so you see them together in chronological order.
Answer from frames + OCR + transcript, citing timestamps. No question → summarize structure, key moments, notable visuals, spoken content.
The video is already indexed. For any follow-up question in this or a LATER session:
watch-skill ask <video_id> "<question>" # self-healing answer + evidence watch-skill search "<phrase>" # across every video ever watched
`ask` (v0.6) answers text-first with timestamped evidence, a confidence score, and a `~N tokens saved` line. It escalates on its own when unsure (dense re-sampling, zoom-crop re-OCR) and states plainly when the video does not clearly show the answer — trust that refusal; do NOT invent an answer past it. Frame paths are listed only when the engine wants you to look yourself (or pass `--frames`); Read them then. Never re-run `watch` for a follow-up on an already-indexed video.
If the user corrects one of your video answers, report it so the system learns (locally):
watch-skill lessons add <video_id> "<question>" "<your wrong answer>" "<the correction>"
When the user asks you to fix UI/visual output and verify the fix:
watch-skill loop start "<url-or-screen:-or-file>" "<pass criteria>" [--script '<json steps>'] # ... you apply the suggested fixes ... watch-skill loop iterate <loop_id>
The critique returns structured issues with timestamps and suggested fixes. YOU change the code; the loop only observes. On pass it renders a before/after MP4+GIF proof. `watch-skill capture "<target>"` records without critiquing.
audio may go to a cloud STT API, and only with explicit `--cloud-stt`.
Give AI agents eyes, ears, and verifiable results. Watch Skill turns video, audio and screen activity into searchable, timestamped evidence, and answers did that actually work? with a deterministic contract rather than a model's opinion.
The user asks a question about a video that was already watched or indexed — "what did they say about X", "what error code…
The user wants to connect an LLM or vision provider, already has an API key, asks "can I use OpenAI/Anthropic/Gemini/OpenRouter",…
The user wants structure pulled out of a watched video — "make chapters for this video", "where does the bug appear in this…
The user corrected an answer about a video — "no, it actually says X", "that's the wrong timestamp", "you misread the error code"…
A Watch Skill command failed, video download broke, ffmpeg or yt-dlp is missing, a provider returned an error, local vision…
The user wants to share or hand off what was found in a video — "send this analysis to my team", "make a page I can share",…