Watch Skill

Turns videos, screen recordings and live sessions into searchable, timestamped evidence

By Sayed Allam (individual) Python Local · stdio MediaTestingBrowser automation

44 popularity score ★ 558 ↓ 2.1k/mo

Connect your client

Local (PyPI)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add watch-skill -- uvx --from 'watch-skill[standard]' watch-skill serve
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "watch-skill": {
      "command": "uvx",
      "args": [
        "--from",
        "watch-skill[standard]",
        "watch-skill",
        "serve"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "watch-skill": {
      "command": "uvx",
      "args": [
        "--from",
        "watch-skill[standard]",
        "watch-skill",
        "serve"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "watch-skill": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "--from",
        "watch-skill[standard]",
        "watch-skill",
        "serve"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.watch-skill]
command = "uvx"
args = ["--from", "watch-skill[standard]", "watch-skill", "serve"]
Gemini CLITerminal
gemini mcp add --scope user watch-skill uvx -- --from 'watch-skill[standard]' watch-skill serve

Settings 8

WATCHSKILL_ANTHROPIC_API_KEY Optional: Key for the default vision provider; other providers use WATCHSKILL_OPENAI_API_KEY, WATCHSKILL_GEMINI_API_KEY, WATCHSKILL_OPENROUTER_API_KEY and similar.
WATCHSKILL_DATA_DIR Optional: Where the index, cache, loops and managed binaries live; ~/.watch-skill by default.
WATCHSKILL_OFFLINE Optional: Make no outbound network calls at all.
WATCHSKILL_COST_POLICY Optional: cheapest (default), quality_first or offline_only.
WATCHSKILL_COST_CEILING_RUN_USD Optional: Spending cap for one run; 5.0 by default.
WATCHSKILL_CLOUD_STT_ENABLED Optional: Allow sending extracted audio to a cloud speech service; off by default.
WATCHSKILL_OLLAMA_BASE_URL Optional: Local Ollama address; http://127.0.0.1:11434 by default.
WATCHSKILL_RESPONSE_FRAME_CAP Optional: Most images per tool response; 12 by default.

What it does

Watch Skill is a local Python server that gives an assistant a way to take in video. It downloads a source (any site yt-dlp handles, a direct media or HLS/DASH link, or a local file), keeps scene-aware frames, reads on-screen text, transcribes speech from captions or local Whisper, and stores it all in an index on your machine. Follow-up questions, moment lookups and searches across every video watched so far are then answered from that index without processing the video again.

It goes further than playback analysis. It can record new footage of a web page, the desktop or a named window; watch a live page or stream and answer questions about what just happened; and run a capture, critique, fix, re-capture cycle on a UI, a game or a generated video. A separate verify_contract tool decides whether an agent run worked using fixed checks (a file exists, a JSON value, an HTTP response, a command's exit code) rather than a model's opinion, and keeps a hash-bound evidence record.

From config.py at v1.4.3: everything lives under ~/.watch-skill unless WATCHSKILL_DATA_DIR says otherwise, the download cache is capped at 20 GB by default with least-recently-used eviction, a tool response carries at most 12 images by default (WATCHSKILL_RESPONSE_FRAME_CAP), and cloud vision spending is capped by default at $1 per call and $5 per run. The default vision provider is Anthropic. The same package also offers a CLI and a REST API, and a separate DeepWatch workspace is built on top of it.

What it needs

RuntimePython 3.11+

Python 3.11, 3.12 or 3.13 and uv for the uvx command. ffmpeg and yt-dlp: `watch-skill doctor` (or the doctor tool) downloads them. On-screen text reading needs the [ocr] extra, local transcription the [whisper] extra, and browser capture and the loop tools the [loop] extra plus `playwright install chromium`. Answers and loop critiques that need a vision model need a provider API key (Anthropic by default) or a local Ollama. Windows, macOS and Linux.

Limits

The documented command installs only the [standard] extra: frames, retrieval and MCP. Without [ocr] it cannot read on-screen text, and a bare install without [standard] cannot extract a frame at all. Without a vision-capable model the loop's critique reports that it cannot judge; capture, frames, OCR and verification still work. Sending audio to a cloud speech service is off unless WATCHSKILL_CLOUD_STT_ENABLED is set, and cloud scene descriptions are not turned on just because a key is set. With WATCHSKILL_OFFLINE set it makes no network calls, so remote URLs fail unless already cached. Screen, window and camera capture depend on the machine; capture_capabilities reports what works.

Who it suits

Suits developers who want an assistant to work from videos, tutorials, meeting recordings or bug screen recordings, or to check its own UI changes against a recording. Video stays on your machine; frames go to a cloud model only when you set a provider key and the mode allows it. It is a heavy install with optional extras and outside binaries, and some tools run commands and record the screen, so it is a poor fit if you only need a transcript of a single video or want a server with no write or command access.

Tools 39

watch_video
Download and analyze a new video or file, then index its frames, text and transcript
get_status
Check a background watch job
cancel_job
Stop a background job
ask_video
Answer a follow-up question about an indexed video
report_mistake
Record a correction to a wrong answer as a local lesson
stats
Show the token savings meter
get_moment
Return frames, transcript and OCR around one timestamp
search_videos
Keyword and semantic search across all indexed videos
list_videos
List what is already indexed
capture
Record a web page, the desktop or a window, or adopt a video file, and index it
loop_start
Start a capture and critique loop against pass criteria
loop_iterate
Re-capture after a fix and compare with the last iteration
loop_status
Show a loop's saved state and scores
loop_video_gen
Run a video generator command in a loop until the output meets criteria
loop_game
Loop over a running game or simulation to catch visual faults
loop_monitor
Watch a folder or live target until a described condition appears
generate_viewer
Write a self-contained HTML page for an analyzed video
watch_batch
Index a playlist, channel, folder or list of videos in one call
extract_chapters
Split a watched video into titled, timed chapters
extract_bug_report
Find where an error appears in a screen recording
analyze_hook
Score a video's opening seconds as a hook
library_synthesize
Answer a question from several videos at once
library_overview
Summarize what the video library holds
check_source
Check whether an indexed video still matches its source
execution_plan
Show what a run would send to providers and its maximum cost
verify_contract
Run fixed checks to decide whether an agent run succeeded
get_evidence
Read back a verification run's evidence and attestation
start_live_watch
Start watching a page, stream or file as it plays
observe_live
Read new events from a live session since a cursor
ask_live
Ask what is happening, or happened, in a live session
aligned_evidence
Show what every stream saw around one moment of a live session
fused_timeline
Give a joined timeline of what was seen, read and heard
get_live_status
Report a live session's health, or list sessions
stop_live_watch
Stop a live session and optionally index it
capture_capabilities
Report what this machine can record
doctor
Check dependencies and install missing ffmpeg or yt-dlp
watch_workspace
Open the visual live workspace view
workspace_snapshot
Return the workspace state as JSON
workspace_delta
Return workspace events after a cursor

Similar servers