---
name: pair
description: Launch a pair programming agent to watch your work and catch issues
triggers:
- /pair
- pair program with me
- start pair programming
- launch pair programmer
---
# Pair Programming Skill
Launch a pair programming session where a second AI agent watches your work and provides real-time feedback on bugs, security issues, and missed edge cases.
## Commands
- `/pair` or `/pair start` - Start with default backend (opus)
- `/pair opus` - Start with Claude Opus as pair (Task tool)
- `/pair codex` - Start with Codex as pair (background CLI)
- `/pair stop` - End the current session
- `/pair status` - Check if pairing is active
## Starting a Session
When the user invokes `/pair`:
### Step 1: Generate Session ID
```bash
SESSION_ID=$(openssl rand -hex 4)
echo "Session ID: $SESSION_ID"
```
### Step 2: Start the Bridge Server
```bash
SESSION_ID="$SESSION_ID" pair-bridge start
```
Verify it started:
```bash
SESSION_ID="$SESSION_ID" pair-bridge status
```
### Step 3: Spawn the Pair Agent
**Determine the backend** from the command (default is `opus`):
- `/pair` or `/pair opus` → Use Task tool
- `/pair codex` → Use Bash background process
#### For Opus (default): Use Task Tool
Spawn the pair agent using the Task tool with these parameters:
- `subagent_type`: "general-purpose"
- `model`: "opus"
- `run_in_background`: true
- `prompt`: The pair programmer prompt below
**Pair Programmer Prompt for Task Tool:**
```
You are a pair programmer watching another Claude agent work. Your job is to catch bugs, security issues, and missed edge cases.
## Connection
Session ID: {SESSION_ID}
Socket: /tmp/claude-pair-{SESSION_ID}.sock
## Your Loop
Run this continuously:
1. Wait for activity:
```bash
SESSION_ID="{SESSION_ID}" pair-bridge wait $LAST_SEEN
```
This blocks until the main agent does something. Start with LAST_SEEN=0.
2. Parse the JSON response - it contains tool calls with:
- tool: Which tool was used (Edit, Bash, Read, etc.)
- input: The tool's parameters
- output_summary: First 2KB of output
- sequence: Incrementing ID (use as next LAST_SEEN)
3. Analyze for issues:
- Bugs or logic errors
- Security vulnerabilities
- Missed edge cases
- Breaking API changes
- Missing test updates
4. If you spot an issue, emit feedback:
```bash
SESSION_ID="{SESSION_ID}" pair-bridge emit feedback '{"severity":"high","message":"Description","context":{"file":"path.ts","line":42}}'
```
5. Update LAST_SEEN and loop back to step 1.
## Severity Levels
- high: Stop and fix now (security, data loss, breaking changes)
- medium: Fix soon (missing error handling, test gaps)
- low: Consider later (minor style issues)
## Guidelines
- Stay quiet on routine operations
- Quality over quantity - one good catch beats ten nitpicks
- Ask questions if intent is unclear
- Focus on what the main agent might miss
Begin watching now.
```
#### For Codex: Use Bash Background Process
Spawn Codex as a background process:
```bash
codex --quiet "You are a pair programmer. Session: {SESSION_ID}. Run: while true; do ACTIVITY=\$(SESSION_ID={SESSION_ID} pair-bridge wait \$LAST_SEEN); # analyze and emit feedback; done" &
CODEX_PID=$!
echo "Codex pair agent started with PID: $CODEX_PID"
```
Store the PID for later cleanup.
### Step 4: Confirm to User
Tell the user:
- Session ID
- Which backend is running
- That their pair will provide feedback as they work
## Stopping a Session
When the user says `/pair stop`:
1. Stop the bridge server:
```bash
SESSION_ID="$SESSION_ID" pair-bridge stop
```
2. If using Codex, kill the background process:
```bash
kill $CODEX_PID 2>/dev/null
```
3. Summarize the session (activity count, feedback given)
## Checking Status
When the user says `/pair status`:
```bash
SESSION_ID="$SESSION_ID" pair-bridge status
```
Report:
- Whether pairing is active
- Session uptime
- Activity count
- Pending feedback count
## How Feedback Appears
The hooks handle feedback injection automatically:
- `pair-emit-activity.sh` (PostToolUse): Sends your tool calls to the bridge
- `pair-check-feedback.sh` (PreToolUse): Shows pair feedback before your next action
When the pair spots an issue, you'll see:
```
PAIR PROGRAMMER FEEDBACK:
This SQL query concatenates user input - use parameterized queries
Location: src/db/queries.ts:45
SEVERITY: HIGH - Address before continuing
```
## Example Session
```
User: /pair
Agent: Starting pair programming session...
Session ID: a1b2c3d4
Bridge: /tmp/claude-pair-a1b2c3d4.sock
Backend: opus (Task tool)
[Spawns background Task with pair programmer prompt]
Pair programming active! I'll work on your task while my pair watches for issues.
User: Refactor the auth module to use JWT
Agent: [Reads files, makes edits...]
PAIR PROGRAMMER FEEDBACK:
You removed the rate limiting check - this protected against brute force attacks.
Location: src/auth/login.ts:45
SEVERITY: HIGH - Address before continuing
Agent: Good catch from my pair! Let me restore that rate limiting...
User: /pair stop
Agent: Ending pair programming session...
Duration: 12 minutes
Tool calls observed: 34
Feedback provided: 2 (1 high, 1 medium)
Session ended.
```