Communitygithub.com

josueh04/product-video-skills

Pin a product's source code (read-only exports in sources/ plus sources.lock), confirm that the pinned commit is what runs in production, and map every screen of a video brief to its route, components, i18n strings and state, written to the video's SOURCES.md. Use it whenever a video needs to know where a screen lives in the code, when sources/ is missing or stale, before ui-spec-from-code or product-truth start on a video, after the product's frontend changed ("what changed", "which videos are affected", "refresh the sources", "is this checkout current", "which commit is in prod"), and when there is no code and you need an inventory of the no-code references (recordings, recovered captures, docs) a screen can be rebuilt from.

Was ist product-video-skills?

product-video-skills is a Claude Code agent skill that pin a product's source code (read-only exports in sources/ plus sources.lock), confirm that the pinned commit is what runs in production, and map every screen of a video brief to its route, components, i18n strings and state, written to the video's SOURCES.md. Use it whenever a video needs to know where a screen lives in the code, when sources/ is missing or stale, before ui-spec-from-code or product-truth start on a video, after the product's frontend changed ("what changed", "which videos are affected", "refresh the sources", "is this checkout current", "which commit is in prod"), and when there is no code and you need an inventory of the no-code references (recordings, recovered captures, docs) a screen can be rebuilt from.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/josueh04/product-video-skills/tree/HEAD/skills/source-recon

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Source recon

Every pixel and every sentence of a video is checked against code later, so the code has to be the right code. In the production these skills come from, the main frontend checkout was about two months behind production while the current code sat in another worktree that nobody looked at for three days. Three versions of one video were rebuilt from the old code before anyone noticed. This skill exists so that never happens again: pin the sources first, prove they are production, then map screens to files.

Work read-only. You read code; you never edit, check out, fetch into, or create worktrees in the user's repositories. Their working tree can hold uncommitted work, and a checkout or a fetch changes state they did not ask you to change.

1. Pin the sources

PVS_HOME="$(cd "$(cd "${CLAUDE_SKILL_DIR}" && pwd -P)/../.." && pwd)"
"$PVS_HOME/bin/pvs-py" "$PVS_HOME/skills/source-recon/scripts/fetch_sources.py" <product_dir>

It reads sources: from product.yaml and, per role:

  • url: shallow-clones the branch into sources/.git-cache/<role>.git and exports it.
  • path: to a git repo: git archive of the newer of <branch> and origin/<branch>. It warns when the local branch is behind or has diverged, when origin refs were fetched more than a week ago, and when another worktree of the same repo is newer than the export.
  • path: that is not a git repo: copied and pinned by a hash of its files ("pinned": false, so citations to it can go stale without warning; prefer a git source).

Exports land in sources/<role>/, read-only, and sources.lock records the commit. A locked role that is missing on disk (a fresh clone of the product repo) is restored at its locked commit, so citations keep pointing at the same lines. Read every note: line it prints and act on it before going on: each one is a way the export may not be production.

Citations everywhere downstream use <role>/<path>:<line>@<short sha>, where the path is relative to the repo root (so sources/<role>/<path> exists) and the sha is the locked one.

2. Prove it is production

A branch name is not proof. Production is whatever the deploy pipeline last built. Before mapping any screen, establish which commit is live, in this order of strength:

  1. A release record: a release tag, a deploy log, a "last deployed sha" file in a deploy repo.
  2. The deploy pipeline config: which branch it builds from, and its build arguments (environment variables baked into the build can change branding or hide features).
  3. The newest branch the team confirms is deployed, checked against git worktree list, branch dates and merge-base.

Read references/freshness.md for the exact commands and the traps (stale remote refs, feature flags, build arguments that change what renders). If you cannot confirm the production commit, say so at the top of SOURCES.md ("production commit unconfirmed") and ask the user one closed question with a recommended answer, for example: "Export origin/develop (newest, contains main) as production? Recommended: yes, it is what the deploy workflow builds."

When the user confirms a different branch, change branch: in product.yaml and run fetch_sources.py <product_dir> --refresh --role <role> (if videos already cite this source, run changed_since.py first, section 6).

3. Map each screen

Take the screens and states from the video's BRIEF.md (chapters) and COVERAGE.md. Launch one read-only Explore subagent per screen, or per small group of screens that share components, in parallel. Give each the prompt in references/recon-prompt.md, pointed at sources/<role>/ (the pinned export, never the user's checkout) so every line number it returns matches the lock.

Each subagent returns, with citations: the route, the page and child components (template, logic, style files), the i18n keys and their exact strings in the video's language, the state that decides what renders (defaults, flags, feature gates, empty states, permission checks), the icon sets and assets in use, and anything that looks unreleased, gated or restricted.

Then check the copy against production yourself: spot-check two or three strings per screen against any reference you have (a recording, a recovered capture, the docs). A string that differs means the export is not production or the screen is behind a flag; resolve it before writing SOURCES.md.

4. Write SOURCES.md

One file per video, at videos/<video>/SOURCES.md:

# Sources: <video>

Locked: frontend main@1a2b3c4 (2026-01-12), backend main@5d6e7f8 (2026-01-10)
Production: confirmed by <release tag v4.2.0 | deploy workflow builds main | team confirmation>

| screen | route | components | citation |
|---|---|---|---|
| Board, empty | /board | BoardPage > TaskList > EmptyState | frontend/src/pages/board/BoardPage.tsx:14@1a2b3c4 |

## Board, empty
- Strings: `board.empty.title` "Nothing planned yet" (frontend/src/i18n/en.json:88@1a2b3c4)
- State: renders when `tasks.length === 0` (frontend/src/pages/board/TaskList.tsx:41@1a2b3c4)
- Icons: lucide `calendar-plus` (frontend/src/pages/board/EmptyState.tsx:9@1a2b3c4)
- Flags or gates: none found
- Not found: <anything the brief needs that the code does not have>

## No-code references
<what exists for each screen without code, see section 5>

A screen with no citation does not go in the video. List it under "Not found" and tell the user; inventing a screen is the one mistake reviewers do not forgive, because it shows a product that does not exist.

5. List the no-code references

For screens the code cannot show (third-party UI, runtime output, a backend not in the repos, or no frontend code at all), list what is available, in this order of preference: analyzed screen recordings in references/, captures recoverable from past session transcripts, a local instance of the app built like production, public docs and screenshots. Do not capture anything yourself here; that is ui-reference-capture. Never plan on the reviewer's personal browser.

6. When the code changes

"$PVS_HOME/bin/pvs-py" "$PVS_HOME/skills/source-recon/scripts/changed_since.py" <product_dir> [--offline]

It diffs each locked commit against the current branch head and lists every video (and kit file) whose SOURCES.md, TRUTH.md, specs or video/src/ cite a changed file, marking citations whose exact lines changed. It moves nothing. Run it before any --refresh: it compares the lock with the head, and a refresh makes them equal, so afterwards the list of what changed is gone (the script then prints a hint instead). Show the user that list, then, if they want the new code, run fetch_sources.py --refresh, rerun ui-spec-from-code for the affected screens and product-truth for the affected lines. Videos that cite nothing changed are left alone.

Rules and why

  • Read the export, cite the lock. Line numbers from a different checkout silently point at the wrong code after the next refresh.
  • Never print secrets you find in code. Frontends often hold keys and tokens. Report the file and line only, and treat it as a security finding for the user.
  • Unreleased, gated or restricted features are facts too. Mark them in SOURCES.md (gate: <flag>, restricted: <who sees it>). product-truth decides whether the video can show them, usually with the reviewer's sign-off.
  • Real data stays out. Fixtures and seed files in a repo can hold real customer names. Cite their structure, never their values.

Individual skills in this repo

This repo contains 14 individual skills — each has its own dedicated page.

josueh04/product-video-skills

Extract, once per product, everything every video of it reuses and write it to kit/ and product.yaml (design tokens, font subsets as woff2, icon subsets as SVG from the product's own icon packages, logos in light, dark and app-tile variants from the repo, a fictional cast proposed once for veto and then frozen, the canonical-names map, pronunciations, banned terms and the read-only tool list). Use it when a product is set up or its kit is missing or incomplete, when a video needs an icon, font or logo that is not in kit/ yet, when someone asks for demo names, fake customers, phone numbers or emails, when a brand word is mispronounced or an old product name shows up, and when checking that demo data is fictional.

josueh04/product-video-skills

Interview the user about a product, then create products/<slug>/ with its own git history, a filled product.yaml and linked skills, fetch its sources and build its kit. Run only when the user types /product-new.

josueh04/product-video-skills

Back every sentence of a video's narration (audio/lines.tsv) and every screen it shows with a citation into the pinned source code (role/path:line@sha) or a docs URL, mark what is visible in the UI versus backend-only, flag restricted or unreleased features, and cut or rewrite anything unbacked; writes the video's TRUTH.md and checks it with truth_check.py. Use it whenever a script or narration is drafted or edited, before voice is generated, before a build, when someone asks "can we say this?", "is this true?", "does the product really do X?", when a reviewer asks for a feature or a claim the product may not support, and when a source document (pitch deck, PRD, marketing page) makes claims the video wants to repeat.

josueh04/product-video-skills

Check a rendered product video before anyone else sees it: worker-pattern flicker, black frames, loudness and true peak, clipping, clicks at clip edges, overlapping narration, speech to text against the script, banned terms and legacy names, camera zoom, contact sheets, frame strips at transitions and parity against the approved version; then write qa/REPORT.json, the only thing deliver.py accepts. Use it after every HyperFrames render, whenever someone asks "is the render clean", "QA this", "check the video", "check the audio", "why does it flicker", "there is a click", "compare v3 with v2", "did the approved part change", or before showing, sending, uploading or delivering any MP4, even when the request does not say QA. Also use it to triage a defect a reviewer reported in a render.

josueh04/product-video-skills

Write a product video's narration and turn it into voice clips with word timings, pronunciation fixes, sound effects and even loudness. The script becomes a table of moments and then audio/lines.tsv (one clip per sentence, with role and speed columns); tts.py voices it with ElevenLabs or the free macOS say voice, maps brand respellings back to the on-screen spelling, normalizes every clip and writes audio/timings.json for the composer; make_sfx.py builds typing tracks from real keystrokes and places recorded click and pop sounds. Use it whenever a video needs a script, narration, voice-over, lines.tsv, timings.json, TTS, a new take, a voice or casting choice, a pronunciation fix ("it says the name wrong"), a changed sentence, a tone note ("too hype", "sounds cut off"), audio levels, a click at the end of a clip, typing or click sounds, or when the build stage asks for the voice. Also use it for silent loops, which still need a moment table and SFX.

josueh04/product-video-skills

The animation rules that keep HyperFrames' parallel render workers from dropping, flashing or flickering elements, plus a static lint (lint_motion.py) that finds the violations in a video's template before it costs a render. Use it whenever you write or edit GSAP tweens, timelines, cursors, camera moves, typing, scrolls or pop-ups in a HyperFrames composition or a video's src/template.tpl, whenever a render shows flicker, stutter, an element that vanishes on some frames, a title that flashes, or a "WORKER PATTERN" line from scan_render.py or qa.py, and whenever the preview looks right but the MP4 does not. Also use it to review someone else's timeline code before rendering.

josueh04/product-video-skills

Compose a narrated product demo in HyperFrames: the stage (the product UI rebuilt at its real viewport and scaled to 1080p, camera, rack focus with veil, chapter titles, cursor and clicks, typing, streaming text, pop-ups, toasts, scrolls, end screen and lockup) and the build.py that anchors every beat to a word of the narration. Use it whenever you write or edit a video's video/build.py, src/template.tpl or src/app.css, place a beat on a word, add a chapter, a click, a pop-up or a push-in, frame a screen, build the end screen or lockup, snapshot setup beats, or render a draft or delivery MP4 of a product video in this workbench. Also use it when someone says "the cursor is off", "too zoomed in", "too fast", "it feels chaotic", "the title flashes", "sync the UI to the voice", or asks for a walkthrough, demo or pitch video of a UI.

josueh04/product-video-skills

Gather pixel references for UI that the code cannot show, or to check a rebuild against the real thing, using frames and timed OCR text from screen recordings, captures recovered from past Claude Code session transcripts, a local instance of the app built like production, and web research for third-party apps, plus side-by-side parity images and contact sheets. Use it whenever someone hands over a screen recording (.mov or .mp4) of the product, when a screen has no usable source code (a stale checkout, another company's UI such as a sign-in page, calendar or CRM, runtime output from a backend not in the repos), when asked "what does it really look like", "match the recording", "how long does that animation take in the app", "compare our render to the real app", or when screenshots from an earlier session might already exist. Never uses the reviewer's personal browser.

josueh04/product-video-skills

Turn a product's real frontend code into 1:1 rebuild specs for a video, one read-only subagent per screen, each returning static HTML, CSS with every variable resolved to its literal value and cited (role/path:line@sha), every state, transitions with exact durations and easings, icons from the code's own icon sets, and the exact i18n strings; plus resolve_tokens.py to write the product's design tokens to kit/tokens.css. Use it whenever a screen of the product has to appear in a video, when writing or fixing video/src/app.css or the template markup, when someone asks for exact sizes, colors, fonts, paddings, animations or icons of a screen, when a rebuilt screen "looks off" next to the real app, and when the design tokens or theme of a product need extracting. Framework adapters cover Angular with PrimeNG (proven), React, Vue, Tailwind and plain HTML (unproven).

josueh04/product-video-skills

Say where this session stands in the Product Video Skills workbench (setup state, which product and video the current folder belongs to, the stage of every video) and the exact next command to type. Also answers "how do I..." questions about the workbench from its docs.

josueh04/product-video-skills

Coordinate the build of one or more signed videos of the current product with subagents (source recon, product truth, UI specs, voice, one builder per video), re-run QA itself, then deliver. A light coordinator that never builds itself. Run only when the user types /video-build.

josueh04/product-video-skills

Start a new video of the current product - create videos/<video>/, write BRIEF.md, the feature coverage matrix (COVERAGE.md) and the claims sheet (CLAIMS.md), propose chapters, then stop for the reviewer's sign-off. Never builds. Run only when the user types /video-new.

josueh04/product-video-skills

Turn a batch of reviewer feedback on the product's videos into one table per video, fix every video that got notes in parallel (one subagent each) while keeping approved parts, re-run QA and parity, bump versions and deliver. Run only when the user types /video-review.

josueh04/product-video-skills

Check this machine and install the pinned video toolchain of the Product Video Skills workbench (HyperFrames CLI, its rendering Chrome and its agent skills from the same release, the Python environment, the speech model for QA), then run the self-check. Safe to run again. `/video-setup check` only reports.

Verwandte Skills