What it does
File a peepshow run as a GitHub issue against any repo you have push access to. Frames are uploaded as attachments and linked inline, labels and assignees are configurable, and the description is filled from video metadata.
When to reach for it
- OSS bug reports: video drops in, issue auto-filed with reproducible frames
- Docs pipeline: every processed tutorial creates a tracking issue until published
- Run as part of a release workflow to open post-mortem issues with video evidence
Install
npm i -g peepshowUse it
peepshow ./repro.mov --sink github-issues \
--sink-arg repo=myorg/myrepo \
--sink-arg label=bugMake it automatic
Register the sink once — every run fires it afterward. Scope by --when so it only runs for matching videos.
peepshow sinks add github-issues
peepshow sinks add github-issues --when extension=mp4,mov
peepshow sinks add github-issues --when path=/Volumes/Work/Configuration
PEEPSHOW_GITHUB_TOKENPAT or fine-grained token with `issues: write`. requiredPEEPSHOW_GITHUB_REPODefault `owner/name`. Overridable per call.
Use with an LLM agent
Every peepshow sink reads its config from env vars and receives a single JSON payload on stdin. An LLM agent (Claude Code, Cursor, Windsurf, Gemini, Codex) can drive the GitHub Issues sink automatically when three things are true:
- the env vars below are exported in the agent's shell (or a project
.envit can load), - the
peepshowCLI is onPATH— install withnpm i -g peepshow, - a peepshow auto-sink is registered for the run (optional but recommended — makes invocation zero-argument).
1. Set the environment
# Add to ~/.zshrc, ~/.bashrc, or a project .env the agent can load
export PEEPSHOW_GITHUB_TOKEN="..."2. Register as an auto-sink
peepshow sinks add github-issues
peepshow sinks add github-issues --when extension=mp4,mov3. Example LLM session
You → drop a
.movinto Claude Code.Claude → auto-invokes
/peepshow:slides ./clip.mov. peepshow extracts frames + audio, theGitHub Issuessink forwards the run to a new issue with the frames attached. Claude replies with a summary and a link to the created record.
Transcript appears in the issue body, giving triage a copy-paste-able record of what was said.
Write your own
A sink is any executable that reads the --emit json payload on stdin. Shell, Node, Python, Go — the spec's in docs/PLUGINS.md. Register persistent ones with peepshow sinks add-cmd 'your-command'.