Files
claude-video/AGENTS.md
T
bradautomates 429f3143e5 Restructure as a self-contained Agent Skills package (fix Codex install)
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>
2026-06-29 22:12:54 +10:00

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 /watch fires. 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 — builds dist/watch.skill for 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.py is 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 and scripts/ are siblings inside it. This is what lets npx skills add copy a working skill as a unit — do NOT move SKILL.md or scripts/ 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_DIR as 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. /watch is 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.json when cutting a release.
  • Releasing: tag vX.Y.Z and push the tag; .github/workflows/release.yml builds dist/watch.skill and attaches it to the GitHub release.
  • Never commit real API keys or .env contents; keys live in ~/.config/watch/.env (mode 0600) at runtime.