CCManager is a TUI application for managing multiple Claude Code sessions across Git worktrees.
Screencast.From.2025-06-10.00-46-05.mp4
- Run multiple Claude Code sessions in parallel across different Git worktrees
- Switch between sessions seamlessly
- Visual status indicators for session states (busy, waiting, idle)
- Create, merge, and delete worktrees from within the app
- Configurable keyboard shortcuts
- Status change hooks for automation and notifications
Both tools solve the same problem - managing multiple Claude Code sessions - but take different approaches.
If you love tmux-based workflows, stick with Claude Squad! It's a great tool that leverages tmux's power for session management.
CCManager is for developers who want:
CCManager is completely self-contained. No need to install or configure tmux - it works out of the box. Perfect if you don't use tmux or want to keep your tmux setup separate from Claude Code management.
CCManager shows the actual state of each Claude Code session directly in the menu:
- Waiting: Claude is asking for user input
- Busy: Claude is processing
- Idle: Ready for new tasks
Claude Squad doesn't show session states in its menu, making it hard to know which sessions need attention. While Claude Squad offers an AutoYes feature, this bypasses Claude Code's built-in security confirmations - not recommended for safe operation.
Following Claude Code's philosophy, CCManager keeps things minimal and intuitive. The interface is so simple you'll understand it in seconds - no manual needed.
$ npm install
$ npm run build
$ npm start$ npx ccmanagerCCManager supports command-line options to directly open specific worktrees:
# Open a specific worktree by path
$ npx ccmanager --worktree /path/to/worktree
$ npx ccmanager -w ../feature-branch
# Create a new branch and worktree
$ npx ccmanager --branch feature/new-feature
$ npx ccmanager -b hotfix/critical
# Create new branch from specific base branch
$ npx ccmanager --branch feature/auth --from-branch develop
$ npx ccmanager -b hotfix/security -f main
# Open existing worktree (if branch already exists)
$ npx ccmanager --worktree /path/to/existing/worktreeCCManager automatically creates and uses ~/.ccmanager/worktrees as the default directory for new worktrees. When creating a new worktree:
- Leave path empty: Uses
~/.ccmanager/worktrees/{sanitized-branch-name} - Specify custom path: Uses your custom path
- Override default location: Set
CCMANAGER_DEFAULT_WORKTREE_DIRenvironment variable
You can pass additional arguments to Claude Code sessions by setting the CCMANAGER_CLAUDE_ARGS environment variable:
# Start Claude Code with specific arguments for all sessions
export CCMANAGER_CLAUDE_ARGS="--resume"
npx ccmanager
# Or set it inline
CCMANAGER_CLAUDE_ARGS="--resume" npx ccmanagerThe arguments are applied to all Claude Code sessions started by CCManager.
Override the default worktree directory location:
# Use a custom default directory
export CCMANAGER_DEFAULT_WORKTREE_DIR="~/dev/worktrees"
npx ccmanager
# Or set it inline
CCMANAGER_DEFAULT_WORKTREE_DIR="~/dev/worktrees" npx ccmanagerWhen this variable is set:
- New worktrees created with empty paths will use this directory
- The UI will show this as the default location
- The directory will be created automatically if it doesn't exist
If not set, defaults to ~/.ccmanager/worktrees.
- Ctrl+E: Return to menu from active session
- Escape: Cancel/Go back in dialogs
You can customize keyboard shortcuts in two ways:
- Through the UI: Select "Configuration" β "Configure Shortcuts" from the main menu
- Configuration file: Edit
~/.config/ccmanager/config.json(or legacy~/.config/ccmanager/shortcuts.json)
Example configuration:
// config.json (new format)
{
"shortcuts": {
"returnToMenu": {
"ctrl": true,
"key": "r"
},
"cancel": {
"key": "escape"
}
}
}
// shortcuts.json (legacy format, still supported)
{
"returnToMenu": {
"ctrl": true,
"key": "r"
},
"cancel": {
"key": "escape"
}
}Note: Shortcuts from shortcuts.json will be automatically migrated to config.json on first use.
- Shortcuts must use a modifier key (Ctrl) except for special keys like Escape
- The following key combinations are reserved and cannot be used:
- Ctrl+C
- Ctrl+D
- Ctrl+[ (equivalent to Escape)
CCManager can execute custom commands when Claude Code session status changes. This enables powerful automation workflows like desktop notifications, logging, or integration with other tools.
Status hooks allow you to:
- Get notified when Claude needs your input
- Track time spent in different states
- Trigger automations based on session activity
- Integrate with notification systems like noti
For detailed setup instructions, see docs/state-hooks.md.
# Install dependencies
npm install
# Run in development mode
npm run dev
# Build
npm run build
# Run tests
npm test
# Run linter
npm run lint
# Run type checker
npm run typecheck