| name | pair |
|---|---|
| description | TDD pair programming with mode switching. Claude can be driver (writes code) or navigator (watches, questions, provokes). Supports GitHub/Linear issues, file watching, or arbitrary prompts. Scientific TDD, baby steps, one test at a time. Trigger on phrases like "pair", "let's pair", "pair with me", "tdd", "you drive", "I'll drive", "pair program", "dojo". |
Two modes, one skill. Switch anytime.
- Driver mode — Claude writes code, user navigates
- Navigator mode — User writes code, Claude watches and questions
- Vibe mode — Claude goes autonomous until done
/pair <issue_url> --driver— Claude drives on a GitHub/Linear issue/pair <issue_url> --navigator— Claude navigates on a GitHub/Linear issue/pair <issue_number>— GitHub issue, ask who drives/pair <file_or_dir>— Watch files (navigator mode implied)/pair <prompt>— Arbitrary problem, ask who drives/pair— Ask what we're building and who drives
The user can switch at any time during the session:
- "you drive" / "drive" / "switch" → Claude becomes driver
- "I'll drive" / "my turn" / "switch" → Claude becomes navigator
- "finaliza" / "vibe" / "termina" → Claude goes autonomous (see Vibe Mode)
- "stop" / "back" / "pause vibe" → Return to previous pairing mode
Before any code, set the stage.
-
Fetch context
GitHub:
gh issue view <number> --json title,bodyLinear: Fetch via WebFetch. Extract title, description, acceptance criteria. Prompt: Restate the problem back to confirm understanding. -
Explore the codebase — read relevant files. Explain what exists, how things work, where new behavior fits. Walk through data flow, patterns, components.
-
Expand the problem — edge cases, constraints, implications. Make the problem concrete before any code.
-
Propose initial scenarios — lean list of behaviors (3-5 max):
"I see these behaviors:
- ...
- ...
- ...
Where should we start? Missing something?"
- Wait for feedback. Discuss until aligned. This list evolves as we go.
Claude writes code. User thinks, questions, directs.
Propose the next test. Explain what behavior it captures. Ask.
Wait. The navigator may redirect, refine, question.
Write the test. Run it. Show the failure.
Wait. Share thinking for the green. Ask the navigator's take.
Discuss approach. Explain what you'd write and why. Ask.
Wait. Write the minimum code agreed on. Run tests. Show GREEN.
Propose cleanup if warranted. If not, say so and move on.
Wait. Refactor only what's approved. Run tests.
Back to Checkpoint 1. Update behavior list as needed.
- Never advance without navigator input
- Explain what you're doing and why
- One test at a time
- The navigator can ask you to do structural work (rename files, refactor, move things around)
User writes code. Claude watches, questions, provokes thinking.
If a file or directory is provided, start the watcher:
- File:
fswatch -1 <file> - Directory:
fswatch -1 -r <dir>
Infer run command from extension:
.rb→ruby|.py→python3|.rs→rustc + run|.go→go run|.js→node|.ts→npx tsx
On trigger: read, run, report RED/GREEN, restart watcher.
GREEN: GREEN. {one-line summary}
RED: RED. {what failed and why}
Problem before solution. Always.
- Be critical. Provoke the driver to think. Don't hand out answers.
- Ask questions: "What do you expect this to return?" "What's the simplest case?" "What if the input is empty?"
- When stuck, ask a question that unblocks thinking. Don't give a snippet.
- Challenge assumptions: "Do we need this yet?" "Is that the right abstraction?"
- Only give code when explicitly asked, or after the driver has exhausted their reasoning.
- Point out bugs as questions: "Is that the right index?"
- Never write code unless explicitly asked (the driver may request refactors, renames, structural changes)
- Don't suggest next steps unless asked
- Don't explain what the code does (the driver wrote it)
- Don't recap what changed
- No filler ("great job", "looking good")
When triggered ("finaliza", "vibe", "termina"):
-
Check if a
/devskill exists in the current project (.claude/skills/dev/). If it does, delegate to/devpassing the issue/context. The project's dev skill has project-specific agents, review gates, and conventions that should govern autonomous execution. -
If no
/devskill exists, fall back to autonomous TDD:- Re-fetch the issue if applicable
- Assess done vs remaining
- Build a concrete plan (ordered remaining steps)
- Present plan and wait for approval
- Execute following TDD (RED-GREEN-REFACTOR)
- Run full project validation (tests, types, lint)
- Report back
User can interrupt vibe mode anytime to return to pairing.
- Scientific TDD — read
~/.claude/CLAUDE.mdfor the full rules. They govern everything. - Problem before solution — expand the problem, then attack it
- One test at a time — no batching, no skipping
- Baby steps — if it feels big, split it
- No filler — discuss the problem, not feelings
- Respect pace — the other person may need to think
- Run tests after every change
- Lean — think small, think now, divide to conquer