flutter-skill
End-to-end testing of running Flutter, mobile, desktop and web apps driven through MCP tools
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
Opens the app, which asks before it adds the server.
claude mcp add watch-skill -- uvx --from 'watch-skill[standard]' watch-skill serve{
"mcpServers": {
"watch-skill": {
"command": "uvx",
"args": [
"--from",
"watch-skill[standard]",
"watch-skill",
"serve"
]
}
}
}{
"mcpServers": {
"watch-skill": {
"command": "uvx",
"args": [
"--from",
"watch-skill[standard]",
"watch-skill",
"serve"
]
}
}
}{
"servers": {
"watch-skill": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"watch-skill[standard]",
"watch-skill",
"serve"
]
}
}
}[mcp_servers.watch-skill]
command = "uvx"
args = ["--from", "watch-skill[standard]", "watch-skill", "serve"]gemini mcp add --scope user watch-skill uvx -- --from 'watch-skill[standard]' watch-skill serveWATCHSKILL_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. |
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.
| Runtime | Python 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.
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.
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.
watch_videoget_statuscancel_jobask_videoreport_mistakestatsget_momentsearch_videoslist_videoscaptureloop_startloop_iterateloop_statusloop_video_genloop_gameloop_monitorgenerate_viewerwatch_batchextract_chaptersextract_bug_reportanalyze_hooklibrary_synthesizelibrary_overviewcheck_sourceexecution_planverify_contractget_evidencestart_live_watchobserve_liveask_livealigned_evidencefused_timelineget_live_statusstop_live_watchcapture_capabilitiesdoctorwatch_workspaceworkspace_snapshotworkspace_delta