Do more, faster. Parallel Claude Code sessions.
Run multiple Claude sessions on the same codebase—each in its own git branch. When Claude offers different approaches, fork the session and try them all in parallel. Switch freely. Merge the winner.
- Claude Code CLI installed and authenticated
- Git
- GitHub CLI (
gh) for PR creation (optional)
Run plural --check-prereqs to verify all required tools are installed and configured correctly.
brew tap zhubert/tap
brew install plural# Run directly without installing
nix run github:zhubert/plural
# Install to your profile
nix profile install github:zhubert/plural
# Or add to devbox
devbox add github:zhubert/plural
devbox global add github:zhubert/pluralSee CONTRIBUTING.md for build instructions.
plural- Press
ato add a git repository - Press
nto create a new session - Press
TaborEnterto focus the chat - Type your message and press
Enter - When Claude requests permission:
y(allow),n(deny), ora(always allow)
Press ? at any time to see all available keyboard shortcuts for your current context.
When you create a session, Plural:
- Creates a new git branch (
plural-<uuid>or your custom name) - Sets up a worktree in
.plural-worktrees/<uuid>(sibling to your repo) - Starts a persistent Claude Code process in that worktree
This isolation means:
- Claude can edit files freely without affecting your main branch
- Multiple sessions can work on the same repo simultaneously
- You control when changes get merged
When you're ready to use your session's changes:
- Select the session
- Press
mto open the merge modal - Choose:
- Merge to main: Directly merges into your default branch
- Create PR: Pushes and creates a GitHub PR (requires
gh)
Uncommitted changes are auto-committed before merge/PR. If there are merge conflicts, Claude can help resolve them.
When Claude presents multiple approaches (e.g., "Option 1: Use Redis" vs "Option 2: Use PostgreSQL"), you can explore them all in parallel:
- Select a session where Claude has offered options
- Press
Ctrl+Pto open the options explorer - Select which options to explore (use
Spaceto toggle,ato select all) - Press
Enterto fork the session
Plural creates child sessions for each selected option, automatically continuing the conversation with that choice. Child sessions appear indented under their parent in the sidebar.
Options are detected from:
- Markdown headings like
## Option 1:or## Option A: - Numbered lists with option patterns
Import issues directly from your GitHub repository and let Claude work on them automatically:
- Press
ifrom the sidebar - If no session is selected, choose a repository from the picker
- Browse open issues with
↑/↓and toggle selection withSpace - Press
Enterto create sessions for selected issues
Each issue becomes a new session with:
- Branch named
issue-{number}(e.g.,issue-42) - Full issue context (title, body, labels) sent to Claude
- Claude automatically begins working on the fix
When you create a PR from an issue session, "Fixes #{number}" is automatically added to the PR description, which closes the issue when merged.
With many sessions, use / to search:
- Press
/in the sidebar - Type to filter by branch name, session name, or repo
- Use
↑/↓to navigate results - Press
Enterto select,Escto cancel
Give sessions meaningful names:
- Select a session in the sidebar
- Press
rto open the rename modal - Enter the new name and press
Enter
The git branch is also renamed to match (with the configured branch prefix applied).
Review uncommitted changes before merging:
- Select a session in the sidebar
- Press
vto view changes - Navigate between files with
←/→orh/l - Scroll the diff with
↑/↓,j/k, orPgUp/PgDn - Press
Escorqto close
The navigation bar shows the current file's status (M=modified, A=added, D=deleted), filename, and position in the file list.
Work directly in a session's worktree:
- Select a session in the sidebar
- Press
Ctrl+Eto open a new terminal window - The terminal opens at the session's worktree directory
Useful for running tests, checking git status, or manual edits alongside Claude's work.
Share screenshots and diagrams with Claude:
- Copy an image to your clipboard (e.g.,
Cmd+Shift+4on macOS) - Focus the chat input
- Press
Ctrl+Vto attach - You'll see
[Image attached: XXkb] - Add a message and press
Enter
Supports PNG, JPEG, GIF, and WebP (max 3.75MB).
Search within conversation history:
- Press
Ctrl+/when the chat panel is focused - Type to search messages
- Use
↑/↓to navigate matches - Press
Enterto close
Press t to choose from:
- Dark Purple (default)
- Nord
- Dracula
- Gruvbox Dark
- Tokyo Night
- Catppuccin Mocha
- Science Fiction
- Light
Press , to open the Settings modal:
- Branch prefix: Set a default prefix for auto-generated branch names (e.g.,
yourname/creates branches likeyourname/plural-abc123) - Desktop notifications: Toggle notifications when Claude finishes while Plural is in the background
Notification platform notes:
- macOS: Works out of the box. For better notifications, install
terminal-notifier(brew install terminal-notifier) - Linux: Requires a notification daemon (most desktop environments have one) or
notify-send - Windows 10+: Works out of the box
Extend Claude's capabilities with MCP servers:
- Press
sfrom the sidebar - Add servers globally or per-repository
- Configure name, command, and arguments
Example: Add a GitHub MCP server globally, or a database server for a specific project.
Plural provides its own slash commands (Claude CLI's built-in commands don't work in stream-json mode):
/cost- Show token usage and estimated cost for the current session/help- Show available Plural slash commands/mcp- Open MCP servers configuration modal/plugins- Open plugin directories configuration modal
Other slash commands are passed through to Claude CLI.
Data stored in ~/.plural/:
config.json- Repos, sessions, tools, MCP servers, themesessions/<id>.json- Conversation history
plural # Start the application
plural --check-prereqs # Verify required tools
plural --clear # Remove all sessions
plural --prune # Clean up orphaned worktrees
plural --debug # Enable debug logging# Workaround for nix profile upgrade limitation
devbox global rm github:zhubert/plural
devbox global add github:zhubert/pluralOr use Homebrew which handles upgrades correctly.
See the GitHub Releases page for version history and release notes.
MIT License - see LICENSE for details.
