Skip to main content
ClaudeWave
Skill128 estrellas del repoactualizado 1mo ago

pair-programmer

AI pair programming with real-time screen and audio context. Use when the user wants to record their screen, start/stop recording, or get context from what they're doing.

Instalar en Claude Code
Copiar
git clone --depth 1 https://github.com/video-db/pair-programmer /tmp/pair-programmer && cp -r /tmp/pair-programmer/skills/pair-programmer ~/.claude/skills/pair-programmer
Después abre una sesión nueva de Claude Code; el skill carga automáticamente.

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

1. User runs `/pair-programmer setup` to install dependencies and set `VIDEO_DB_API_KEY` environment variable
2. User runs `/pair-programmer record` to start recording
3. A picker UI appears to select screen and audio sources
4. Recording starts and events are logged to `/tmp/videodb_pp_events.jsonl`
5. User can stop recording from the tray icon (🔴 PP → Stop Recording)

## Output Files

| Path | Content |
|------|---------|
| `/tmp/videodb_pp_pid` | Process ID of the recorder |
| `/tmp/videodb_pp_events.jsonl` | All WebSocket events (JSONL format) |
| `/tmp/videodb_pp_info.json` | Current session info (session_id, rtstream_ids) |

## Event File Format

Events are written as JSONL (one JSON object per line):

```json
{"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 |
|----------|----------|-------------|
| `VIDEO_DB_API_KEY` | Yes | VideoDB API key |
| `VIDEO_DB_BASE_URL` | No | API endpoint (default: https://api.videodb.io) |

## Reading Context

Events are in `/tmp/videodb_pp_events.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:

```bash
grep '"channel":"visual_index"' /tmp/videodb_pp_events.jsonl | tail -10
```

**Keyword search** — grep across all channels:

```bash
grep -i 'keyword' /tmp/videodb_pp_events.jsonl
```

**Time-window filter** — filter events from the last N minutes:
1. Get current epoch: `$(date +%s)`
2. Compute cutoff: `epoch - N*60`
3. Filter lines where the `unix_ts` JSON field exceeds the cutoff
4. Pipe through `grep` to 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`:

```bash
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.