How to Build Custom Skill Bundles for claude.ai Web with Claude Video

Package the skills/watch/ directory into a .skill archive using build-skill.sh and upload it to Settings → Capabilities → Skills in the claude.ai web interface to enable the /watch command for video analysis.

Claude Video is an open-source Agent Skill from the bradautomates/claude-video repository that adds video understanding capabilities to Claude. The skill is self-contained within the skills/watch/ directory and can be packaged into a portable .skill bundle for deployment across any Claude host, including the claude.ai web platform.

Understanding the Claude Video Skill Architecture

The skill follows a canonical contract pattern where SKILL.md resides at the root of skills/watch/ and references scripts relative to its own directory. This self-contained structure means the entire watch/ folder—including the contract file and the scripts/ runtime—can be archived and distributed as a single unit.

Key components include:

Pre-Flight Dependency Checks

Before building custom skill bundles, verify your environment meets the runtime requirements. The scripts/setup.py script performs a --check routine that validates three critical dependencies.

Run the verification:

python skills/watch/scripts/setup.py --check

This confirms ffmpeg is installed for video processing, yt-dlp is available for caption extraction, and a Whisper API key is configured for transcription fallback.

Building the Skill Archive

The build-skill.sh script creates a distributable dist/watch.skill file containing exactly the contents of the skills/watch/ directory. The script enforces two critical constraints: the archive must contain fewer than 200 files (Claude's limit) and must include exactly one SKILL.md file.

Build process:

  1. Ensure your working tree is clean (the script aborts on uncommitted changes)
  2. Execute the build script from the repository root
  3. Verify the output in dist/watch.skill

# Verify clean working tree

git status  # Should show "nothing to commit, working tree clean"

# Build the skill bundle

bash skills/watch/scripts/build-skill.sh

# Expected output:

# built dist/watch.skill (152 files, 1.3M)

# upload via the claude.ai skill UI

Deploying to the claude.ai Web Interface

Upload the generated bundle through the claude.ai web UI to activate the /watch command.

  1. Navigate to SettingsCapabilitiesSkills
  2. Click the + button to add a new skill
  3. Drag dist/watch.skill into the upload dialog
  4. Confirm "Code execution and file creation" is enabled
  5. The /watch slash command becomes immediately available

Running Video Analysis Commands

Once installed, invoke the skill using natural language commands:

/watch https://youtu.be/dQw4w9WgXcQ what happens at the 30-second mark?

The watch.py entry point automatically retrieves native captions via yt-dlp or falls back to Whisper, extracts frames based on the configured --detail mode, and streams both frames and transcript to Claude for context-aware analysis.

Configuration options in ~/.config/watch/.env control default behaviors, including API keys and extraction modes.

Summary

  • Self-contained packaging: The skills/watch/ directory includes everything needed (SKILL.md + scripts/) for portable deployment across Claude hosts
  • Build validation: build-skill.sh enforces the 200-file limit and generates dist/watch.skill
  • Dependency verification: setup.py --check ensures ffmpeg, yt-dlp, and Whisper credentials are available before runtime
  • Web deployment: Upload the .skill archive to claude.ai Settings → Capabilities → Skills to enable /watch functionality

Frequently Asked Questions

What is the file limit for Claude skill bundles?

Claude enforces a strict 200-file limit per skill bundle. The build-skill.sh script automatically validates this constraint during packaging, ensuring dist/watch.skill contains fewer than 200 files before generation completes.

Can I modify the frame extraction settings in my custom bundle?

Yes. Edit scripts/config.py to change default detail modes or create a ~/.config/watch/.env file with user-specific overrides. Rebuild the bundle using build-skill.sh after modifying any scripts to propagate changes to the web interface.

Why does the build script require a clean git working tree?

The build-skill.sh script aborts if uncommitted changes are detected to ensure reproducible builds. This guarantees that the .skill archive reflects the exact state of the repository HEAD, preventing partial or untested code from being packaged and deployed.

Where does the skill store API keys and configuration?

The scripts/config.py module loads secrets from ~/.config/watch/.env on the local machine during development. For the claude.ai web interface, configure API keys through the skill's environment variables in the Settings panel after uploading the bundle.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →