429f3143e5
Move the skill into skills/watch/ so SKILL.md and its scripts/ runtime are
siblings inside one folder. `npx skills add` (Codex/Cursor/Copilot/agents) now
copies a working skill as a unit; previously it grabbed the root SKILL.md alone
and left scripts/ behind, so the skill was dead on arrival on every non-Claude
host. Mirrors the layout last30days-skill adopted for the same reason.
- skills/watch/{SKILL.md,scripts/}: self-contained skill folder
- SKILL.md: resolve a harness-agnostic $SKILL_DIR (the dir it was Read from)
instead of the Claude-Code-only ${CLAUDE_SKILL_DIR}; guard + 19 call sites
- drop commands/watch.md: /watch derives from frontmatter (name + user-invocable)
- .codex-plugin/plugin.json: full manifest with "skills": "./skills/" + interface
- add .agents/plugins/marketplace.json, AGENTS.md, CLAUDE.md, .skillignore
- build-skill.sh: archive the skills/watch subtree (one SKILL.md, no zip -d)
- fix paths in tests, hooks hint, .gitattributes, release.yml
- relocate dev-sync.sh to repo root and fix REPO_ROOT
- README: content-ideas structure, npx skills install, star history
Verified: 37/37 tests pass; npx skills add bundles the full scripts/ runtime;
manifests valid; versions synced at 0.1.3.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.6 KiB
3.6 KiB
claude-video / watch skill
Agent Skills package that gives an agent a video input. Installable across Claude Code (most common host), Codex, Cursor, GitHub Copilot, and 50+ other Agent Skills hosts. Pure-stdlib Python that orchestrates yt-dlp + ffmpeg and an optional Whisper API.
Structure
skills/watch/SKILL.md— canonical skill contract the model reads when/watchfires. Source of truth for behavior across every host.skills/watch/scripts/watch.py— entry point; orchestrates download → frames → transcript.skills/watch/scripts/{download,frames,transcribe,whisper,setup,config}.py— yt-dlp wrapper, ffmpeg frame extraction + auto-fps, caption/Whisper transcription, preflight/installer, shared config.skills/watch/scripts/build-skill.sh— buildsdist/watch.skillfor claude.ai upload (dev-only).hooks/— Claude Code SessionStart setup-status hook (Claude Code only)..claude-plugin/—plugin.json+marketplace.json(Claude Code plugin + local marketplace)..codex-plugin/plugin.json— Codex/agents manifest;"skills": "./skills/"points the Agent Skills CLI at the self-contained skill folder..agents/plugins/marketplace.json— agents marketplace listing pointing at the repo-root plugin.CLAUDE.md→@AGENTS.md— generic-agent entry point.tests/— pytest suite (ffmpeg-synthesized clips; no network).
Orientation
- The product is the slash-command-invoked skill (
/watch <url-or-path> [question]), not a CLI.scripts/watch.pyis implementation. Features must work across every harness the skill installs into, not just Claude Code. - The skill is one self-contained folder:
skills/watch/. SKILL.md andscripts/are siblings inside it. This is what letsnpx skills addcopy a working skill as a unit — do NOT move SKILL.md orscripts/back to the repo root, or non-Claude installers will copy SKILL.md without the scripts. - Path resolution is harness-agnostic. SKILL.md resolves
SKILL_DIRas the directory of the SKILL.md the model just Read, then runs${SKILL_DIR}/scripts/.... Do NOT reintroduce${CLAUDE_SKILL_DIR}(Claude-Code-only) — it is unset on Codex/Cursor/agents and breaks every script call there. - No
commands/wrapper./watchis derived from SKILL.md frontmatter (name: watch+user-invocable: true). A separate command file creates a duplicate slash command.
Install surfaces
| Surface | Install |
|---|---|
| Claude Code | /plugin marketplace add bradautomates/claude-video then /plugin install watch@claude-video |
| Codex / Cursor / Copilot / +50 | npx skills add bradautomates/claude-video -g |
| claude.ai (web) | upload dist/watch.skill (built by skills/watch/scripts/build-skill.sh) |
Commands
# Tests (stdlib + pytest; ffmpeg required for frame tests)
.venv/bin/pytest -q # or: python3 -m pytest -q
# Build the claude.ai upload bundle (archives skills/watch/ as the bundle root)
bash skills/watch/scripts/build-skill.sh # → dist/watch.skill
# Dev: mirror the working tree into the installed Claude Code plugin cache
./dev-sync.sh # --dry-run to preview
Rules
- Keep the version in sync across
skills/watch/SKILL.md(frontmatter),.claude-plugin/plugin.json, and.codex-plugin/plugin.jsonwhen cutting a release. - Releasing: tag
vX.Y.Zand push the tag;.github/workflows/release.ymlbuildsdist/watch.skilland attaches it to the GitHub release. - Never commit real API keys or
.envcontents; keys live in~/.config/watch/.env(mode0600) at runtime.