git-paw
Parallel AI Worktrees — orchestrate multiple AI coding CLI sessions across git worktrees from a single terminal using tmux.
Demo
$ git paw
🐾 git-paw — Parallel AI Worktrees
? Select mode:
> Same CLI for all branches
Different CLI per branch
? Select branches (space to toggle, enter to confirm):
> [x] feat/auth
[x] feat/api
[ ] fix/typo
[ ] main
? Select AI CLI:
> claude
codex
gemini
✔ Creating worktrees...
../myproject-feat-auth/
../myproject-feat-api/
✔ Launching tmux session: paw-myproject
Pane 1: feat/auth → claude
Pane 2: feat/api → claude
Attaching to tmux session...
What It Does
git-paw lets you run multiple AI coding assistants in parallel, each in its own git worktree and tmux pane. Pick your branches, pick your AI CLI(s), and git-paw handles the rest — creating worktrees, launching a tmux session, and wiring everything together. Stop and resume sessions at will; your worktrees and uncommitted work are preserved.
Features
- Parallel AI sessions — run Claude, Codex, Gemini, or any AI CLI across multiple branches simultaneously
- Git worktree isolation — each branch gets its own working directory, no stashing or switching needed
- Smart session management — reattach to active sessions, auto-recover after crashes or reboots
- Interactive or scripted — fuzzy branch picker and CLI selector, or pass
--cliand--branchesflags - Per-branch CLI assignment — use Claude on one branch and Gemini on another in the same session
- Presets — save branch + CLI combos in config for one-command launches
- Custom CLI support — register any AI CLI with
git paw add-cli - Session persistence — state saved to disk, survives tmux crashes and system reboots
- Dry run — preview the session plan before executing with
--dry-run - Mouse-friendly tmux — click to switch panes, drag borders to resize, scroll with mouse wheel
Platform Support
| Platform | Status | Notes |
|---|---|---|
| macOS (ARM) | Supported | Primary development platform |
| macOS (x86) | Supported | |
| Linux (x86_64) | Supported | |
| Linux (ARM64) | Supported | |
| Windows | WSL only | tmux is a Unix tool — use Windows Subsystem for Linux |
Why no native Windows? git-paw relies on tmux for terminal multiplexing, which is not available natively on Windows. WSL provides a full Linux environment where git-paw works perfectly.
Quick Start: Same CLI
Use the same AI CLI across all branches:
# Interactive — pick branches and CLI from prompts
# Non-interactive — specify everything upfront
This creates:
- A worktree for each branch (
../yourproject-feat-auth/,../yourproject-feat-api/) - A tmux session with one pane per branch, each running
claude
Quick Start: Per-Branch CLI
Use different AI CLIs on different branches:
# Interactive mode — select "Different CLI per branch"
# → Pick branches: feat/auth, feat/api
# → Pick CLI for feat/auth: claude
# → Pick CLI for feat/api: gemini
Result: a tmux session where feat/auth runs Claude and feat/api runs Gemini, side by side.
Installation
From crates.io
Homebrew
Shell installer
|
Windows (WSL)
Install WSL, then use any of the Linux installation methods above inside your WSL environment:
# Inside WSL
Prerequisites
git paw vs git-paw
Once installed to your PATH, git-paw works as a git subcommand:
You can also call the binary directly — useful during development or if it's not on PATH:
All examples below use git paw, but git-paw works identically.
Usage
start — Launch or reattach
# Interactive launch
# Specify CLI and branches
# Use a preset from config
# Preview without executing
Smart behavior:
- Active session exists → reattaches
- Stopped/crashed session → auto-recovers (reuses worktrees, relaunches CLIs)
- No session → full interactive launch
stop — Pause session
Kills the tmux session but preserves worktrees and state. Run git paw start later to pick up where you left off.
purge — Remove everything
# With confirmation prompt
# Skip confirmation
Removes the tmux session, all worktrees, and session state.
status — Check session state
Shows session name, branches, CLIs, and status (active/stopped/no session).
list-clis — Show available CLIs
Lists auto-detected and custom AI CLIs with their source.
add-cli — Register a custom CLI
# With absolute path
# With display name
remove-cli — Unregister a custom CLI
Only custom CLIs can be removed — auto-detected CLIs cannot.
Configuration
Per-repo config (.git-paw/config.toml)
= "claude"
= true
[]
= ["feat/api", "fix/db"]
= "claude"
Global config (~/.config/git-paw/config.toml)
= "claude"
= true
[]
= "/usr/local/bin/my-agent"
= "My Agent"
[]
= "ollama-code"
= "Local LLM"
[]
= ["feat/api", "fix/db"]
= "claude"
Per-repo config overrides global config for overlapping fields.
Supported AI CLIs
| CLI | Binary | Link |
|---|---|---|
| Claude Code | claude |
claude.ai |
| OpenAI Codex | codex |
github.com/openai/codex |
| Google Gemini CLI | gemini |
github.com/google-gemini/gemini-cli |
| Aider | aider |
aider.chat |
| Vibe | vibe |
docs.mistral.ai/capabilities/vibe |
| Qwen | qwen |
github.com/QwenLM/qwen-agent |
| Amp | amp |
amp.dev |
Don't see your CLI? Register it:
How It Works
git paw start
│
├─ 1. Validate git repo
├─ 2. Load config (global + repo)
├─ 3. Detect AI CLIs on PATH + custom
├─ 4. Interactive selection (or use flags)
├─ 5. Create git worktrees
│ ../project-feat-auth/
│ ../project-feat-api/
├─ 6. Create tmux session (paw-project)
│ ┌─────────────────┬─────────────────┐
│ │ feat/auth │ feat/api │
│ │ → claude │ → claude │
│ │ │ │
│ └─────────────────┴─────────────────┘
├─ 7. Save session state to disk
└─ 8. Attach to tmux session
git paw stop → kills tmux, keeps worktrees + state
git paw start → auto-recovers from saved state
git paw purge → removes everything
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
License
MIT — Copyright 2026 bearicorn