plugins/v1tamins/skills/v1-prove-work/SKILL.md
Use when generating visual proof-of-work GIFs for PRs, recording browser demos of completed features, or creating animated artifacts of UI changes. Triggers on "prove work", "record demo", "GIF for PR", "visual proof", "proof of work", "/v1-prove-work".
npx skillsauth add v1-io/v1tamins v1-prove-workInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate an animated GIF showing the result of work done during a session and embed it in a GitHub PR.
Typical invocations:
/v1-prove-work http://localhost:3000/settings --pr 42v1-prove-work from the skills menu or use $v1-prove-work http://localhost:3000/settings --pr 42This records a browser interaction with localhost:3000/settings, converts the recording to a GIF, uploads it to GitHub, and embeds it in PR #42's ## Demo section.
Without arguments, the skill infers the URL from the git diff and auto-detects the PR:
/v1-prove-work
In Codex, the slash examples below map directly to $v1-prove-work ....
Typical invocations:
Claude Code: /v1-prove-work [url] [--pr NUMBER] [--no-upload]
Codex: invoke v1-prove-work from the skills menu or use $v1-prove-work [url] [--pr NUMBER] [--no-upload]
url -- Override the target URL (default: inferred from context)
--pr NUMBER -- PR number to embed the GIF into (default: auto-detected)
--no-upload -- Save GIF locally without uploading to GitHub
Run these checks before proceeding. Stop and report if any fail.
# Check Python playwright
python3 -c "import playwright" 2>/dev/null || pip install playwright
# Check playwright browsers
python3 -c "from playwright.sync_api import sync_playwright; p=sync_playwright().start(); p.chromium.launch(headless=True).close(); p.stop()" 2>/dev/null || python3 -m playwright install chromium
# Check pyav and pillow (auto-installed by video_to_gif.py on first run)
python3 -c "import av; from PIL import Image" 2>/dev/null || echo "Dependencies will be auto-installed on first conversion."
# Check gifsicle (optional but recommended)
which gifsicle >/dev/null 2>&1 || echo "WARNING: gifsicle not found. Install with: brew install gifsicle"
Determine what to demonstrate. Read the recent git diff to identify changed files:
git diff --name-only HEAD~1..HEAD 2>/dev/null || git diff --name-only --cached
Decision tree:
.tsx, .jsx, .vue, .html, .css, templates) -> Infer the route/page affected, construct localhost URL.py, .rb, .go, API routes with no views) -> Tell the user: "This change has no visual component. Skipping proof-of-work." and exitWhen inferring the URL, look for:
Default base URL: http://localhost:3000 (override if project uses a different port).
Verify the URL is reachable before recording:
curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/ROUTE
If the server is not running (connection refused), tell the user:
"Dev server is not running on localhost:3000. Start it and run the
v1-prove-workskill again."
Write a Python Playwright script to /tmp/prove-work/interact.py that demonstrates the feature.
Read references/recording-patterns.md for the script template, interaction patterns, and timing guidelines. Use the template from that file as the starting point -- fill in the interaction section based on context analysis.
mkdir -p /tmp/prove-work
# Clean old recordings
rm -f /tmp/prove-work/*.webm /tmp/prove-work/*.gif
# Run the interaction script
python3 /tmp/prove-work/interact.py
If the script fails, read the error output. Common issues:
wait_for_load_state timeout or check if the server is respondingRun the conversion script:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
for dir in \
"$REPO_ROOT/plugins/v1tamins/skills/v1-prove-work" \
"${CLAUDE_PLUGIN_ROOT:-}" \
"$HOME/.codex/skills/v1-prove-work" \
"$HOME/.claude/skills/v1-prove-work"; do
[ -n "$dir" ] && [ -f "$dir/scripts/video_to_gif.py" ] && SKILL_DIR="$dir" && break
done
if [ -z "${SKILL_DIR:-}" ]; then
echo "ERROR: Could not find scripts/video_to_gif.py" >&2
exit 1
fi
python3 "$SKILL_DIR/scripts/video_to_gif.py" \
--input /tmp/prove-work/ \
--output /tmp/prove-work/demo.gif \
--max-size-mb 10
The script:
If --no-upload was specified: Report the local path and stop.
Auto-detect PR number (if not provided):
gh pr view --json number --jq .number 2>/dev/null
If a PR exists, upload and embed:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
for dir in \
"$REPO_ROOT/plugins/v1tamins/skills/v1-prove-work" \
"${CLAUDE_PLUGIN_ROOT:-}" \
"$HOME/.codex/skills/v1-prove-work" \
"$HOME/.claude/skills/v1-prove-work"; do
[ -n "$dir" ] && [ -f "$dir/scripts/video_to_gif.py" ] && SKILL_DIR="$dir" && break
done
if [ -z "${SKILL_DIR:-}" ]; then
echo "ERROR: Could not find scripts/video_to_gif.py" >&2
exit 1
fi
python3 "$SKILL_DIR/scripts/video_to_gif.py" \
--input /tmp/prove-work/ \
--output /tmp/prove-work/demo.gif \
--max-size-mb 10 \
--upload \
--pr PR_NUMBER
If no PR exists, save locally and report:
GIF saved to: /tmp/prove-work/demo.gif
No open PR found for this branch. Run the `v1-prove-work` skill again with `--pr NUMBER` after creating a PR, or use `--no-upload` to keep the GIF local.
After completion, report:
Proof of work recorded!
GIF: /tmp/prove-work/demo.gif (X.X MB)
URL: https://github.com/owner/repo/releases/download/media-assets/demo-pr42-20260224-143022.gif
PR: #42 -- ## Demo section updated
Recorded: [brief description of what was demonstrated]
Example 1: New settings page
Input: /v1-prove-work
Diff: app/pages/settings.tsx, app/api/settings.ts
Output:
Proof of work recorded!
GIF: /tmp/prove-work/demo.gif (1.8 MB)
URL: https://github.com/acme/app/releases/download/media-assets/demo-pr12-20260224-091500.gif
PR: #12 -- ## Demo section updated
Recorded: Navigated to /settings, filled display name, clicked Save, showed success toast
Example 2: Explicit URL with PR number
Input: /v1-prove-work http://localhost:5173/dashboard --pr 27
Output:
Proof of work recorded!
GIF: /tmp/prove-work/demo.gif (2.4 MB)
URL: https://github.com/acme/app/releases/download/media-assets/demo-pr27-20260224-143000.gif
PR: #27 -- ## Demo section updated
Recorded: Navigated to /dashboard, scrolled through widgets, toggled dark mode
Example 3: Backend-only change
Input: /v1-prove-work
Diff: app/services/billing.py, tests/test_billing.py
Output: This change has no visual component. Skipping proof-of-work.
Example 4: Local only
Input: /v1-prove-work --no-upload
Output:
GIF saved to: /tmp/prove-work/demo.gif (1.1 MB)
| Error | Action |
|---|---|
| Dev server not running | Report the error, suggest starting the server |
| Playwright not installed | Auto-install via pip + playwright install chromium |
| No .webm produced | Check interact.py output, report the error |
| GIF exceeds 10MB after all reductions | Report the size, suggest a shorter recording |
| gh CLI not authenticated | Report the error, suggest gh auth login |
| No visual changes detected | Tell the user, exit cleanly |
tools
Use when planning or synthesizing user tests for prototypes, mockups, clickable demos, product concepts, design flows, landing pages, or early product specs. Triggers on "test this prototype", "prototype testing", "user test plan", "validate this product idea", "test with users".
development
Use when creating a polished self-contained HTML page would help the user understand, compare, review, present, tune, or interact with information better than Markdown. Triggers on "make an HTML page", "HTML artifact", "nice HTML", "visual report", "interactive explainer", "one-page dashboard", "shareable page".
data-ai
Use when turning a textbook, PDF, blog post, article, paper, course, notes, transcript, or other source material into suggested agent skills or skill improvements. Triggers on "what skills could come from this", "extract skills from", "turn this into skills", "skill ideas from this source".
development
Run an extremely strict maintainability review for abstraction quality, giant files, and spaghetti-condition growth. Use for large prs, new features/architectures, a deep code quality audit, or especially harsh maintainability review.