SKILL.md
VideoDB Pair Programmer
AI pair programming with real-time screen and audio context. Record your screen and audio, with AI-powered indexing that logs visual and audio events in real-time.
Commands
When user asks for a command, read the corresponding file for instructions:
| Command | Description | Reference |
|---|---|---|
/pair-programmer record |
Start screen/audio recording | See [commands/record.md](commands/record.md) |
/pair-programmer stop |
Stop the running recording | See [commands/stop.md](commands/stop.md) |
/pair-programmer search |
Search recording context (screen, mic, audio) | See [commands/search.md](commands/search.md) |
/pair-programmer act |
Act on a spoken instruction from the mic | See [commands/act.md](commands/act.md) |
/pair-programmer what-happened |
Summarize recent activity | See [commands/what-happened.md](commands/what-happened.md) |
/pair-programmer setup |
Install deps and configure API key | See [commands/setup.md](commands/setup.md) |
/pair-programmer config |
Change indexing and other settings | See [commands/config.md](commands/config.md) |
How It Works
- User runs
/pair-programmer setupto install dependencies and setVIDEODBAPI_KEYenvironment variable - User runs
/pair-programmer recordto start recording - A picker UI appears to select screen and audio sources
- Recording starts and events are logged to
/tmp/videodbppevents.jsonl - User can stop recording from the tray icon (🔴 PP → Stop Recording)
Output Files
| Path | Content |
|---|---|
/tmp/videodbpppid |
Process ID of the recorder |
/tmp/videodbppevents.jsonl |
All WebSocket events (JSONL format) |
/tmp/videodbppinfo.json |
Current session info (sessionid, rtstreamids) |
Event File Format
Events are written as JSONL (one JSON object per line):
{"ts": "2026-03-05T10:15:30.123Z", "unix_ts": 1709374530.12, "channel": "visual_index", "data": {"text": "User is viewing VS Code with auth.ts open"}}
{"ts": "2026-03-05T10:15:31.456Z", "unix_ts": 1709374531.45, "channel": "transcript", "data": {"text": "Let me check the login flow", "is_final": true}}
Environment Variables
The recorder reads these from environment variables:
| Variable | Required | Description |
|---|---|---|
VIDEODBAPI_KEY |
Yes | VideoDB API key |
VIDEODBBASE_URL |
No | API endpoint (default: https://api.videodb.io) |
Reading Context
Events are in /tmp/videodbppevents.jsonl. Use CLI tools to filter — never read the whole file.
| Channel | Content | Density |
|---|---|---|
visual_index |
Screen descriptions | Dense (~1 every 2s) |
transcript |
Mic speech | Sparse (sentences) |
audio_index |
System audio summaries | Sparse (sentences) |
Channel filter — use grep to filter by channel, pipe to tail for recent events:
grep '"channel":"visual_index"' /tmp/videodb_pp_events.jsonl | tail -10
Keyword search — grep across all channels:
grep -i 'keyword' /tmp/videodb_pp_events.jsonl
Time-window filter — filter events from the last N minutes:
- Get current epoch:
$(date +%s) - Compute cutoff:
epoch - N*60 - Filter lines where the
unix_tsJSON field exceeds the cutoff - Pipe through
grepto narrow by channel
Generate the appropriate filtering command (grep, awk, python3, jq) based on complexity.
For semantic search across indexed content, use search-rtstream.js:
node search-rtstream.js --query="your query" --cwd=<PROJECT_ROOT>
<PROJECT_ROOT>is the absolute path to the user's project directory. This is NOT the skill directory — resolve it before running the command.
See [commands/search.md](commands/search.md) for the full search strategy and CLI patterns.