Orchestrate multiple AI coding assistants in parallel
A native macOS application that lets you run 1-12 Claude Code (or other AI CLI) sessions simultaneously, each in its own isolated git worktree.
β Star us on GitHub β your support motivates us a lot! ππ
- π― Why Maestro?
- β¨ Features
- ποΈ Architecture
- π¦ Installation
- π Usage
- βοΈ Configuration
- π§ Troubleshooting
- π€ Contributing
- π License
- π Acknowledgments
The Problem: AI coding assistants work on one task at a time. While Claude works on Feature A, you wait. Then you start Feature B. Then you wait again. Context switching is expensive, and your development velocity is bottlenecked by serial execution.
The Solution: Run multiple AI sessions in parallel. Each session gets its own:
- Terminal instance with full shell environment
- Git worktree for complete code isolation
- Assigned branch for focused work
- Port allocation for web development
| Principle | Description |
|---|---|
| Parallel Development | Launch 1-12 AI sessions simultaneously. Work on feature branches, bug fixes, and refactoring all at once. |
| True Isolation | Each session operates in its own git worktree. No merge conflicts, no stepping on each other's changes. |
| AI-Native Workflow | Built specifically for Claude Code, Gemini CLI, OpenAI Codex, and other AI coding assistants. |
- Dynamic grid layout (1x1 to 3x4) that adapts to your session count
- Real-time status indicators: idle, working, waiting for input, done, error
- Per-session mode selection (Claude Code, Gemini CLI, OpenAI Codex, Plain Terminal)
- Automatic worktree creation at
~/.claude-maestro/worktrees/ - Each session works on its own branch without conflicts
- Worktrees are pruned on session close
- Visual branch assignment in the sidebar
- Built-in MCP server for agent status reporting
- AI sessions report their state (idle, working, needs input, finished, error)
- Real-time status updates displayed in the session grid
- Uses the
maestro_statustool for state communication
- GitKraken-style commit visualization
- Branch relationship view with colored rails
- Commit detail panel with diffs
- See which sessions are working on which branches
- Save session configurations (modes, branches, count)
- Quickly load common workflows
- Persist across app restarts
- Custom action buttons per session
- "Run App", "Commit & Push", and custom prompts
- Execute commands via AI assistant
- Claude Code - Anthropic's Claude in the terminal
- Gemini CLI - Google's Gemini AI
- OpenAI Codex - OpenAI's coding assistant
- Plain Terminal - Standard shell without AI
- Browse and install plugins from marketplace sources
- Plugin types: Skills, Commands, and MCP servers
- Per-session plugin configuration
- Automatic symlink management for commands and skills
- Extend Maestro's capabilities with community plugins
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Claude Maestro (Swift/SwiftUI) β
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Session 1 β β Session 2 β β Session 3 β ... β
β β Claude Code β β Gemini CLI β β Terminal β β
β β feature/auth β β fix/bug-123 β β main β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
β β β β β
β ββββββββΌββββββββββββββββββΌββββββββββββββββββΌββββββββ β
β β WorktreeManager β β
β β ~/.claude-maestro/worktrees/{repo}/{branch} β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β MCP Protocol (stdio)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MaestroMCPServer (Swift) β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β StatusManager ββ
β β maestro_status tool - agents report their current state ββ
β β (idle, working, needs_input, finished, error) ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Component | Technology |
|---|---|
| Desktop App | Swift 5.9, SwiftUI, AppKit |
| Terminal Emulator | SwiftTerm |
| MCP Server | Swift MCP SDK (agent status reporting) |
| Git Operations | Native git CLI |
- macOS 13 (Ventura) or later
- Xcode 15 or later
- Claude Code CLI (
npm install -g @anthropic-ai/claude-code)
-
Clone the repository:
git clone https://github.com/its-maestro-baby/maestro.git cd maestro -
Open in Xcode:
open claude-maestro.xcodeproj
-
Build and run (βR)
The Swift MCP server (MaestroMCPServer/) is built automatically as part of the Xcode build process.
- Configure MCP (optional):
Edit
cp .mcp.json.example .mcp.json
.mcp.jsonand update thecommandpath to point to your built MaestroMCPServer binary (typically found at~/Library/Application Support/Claude Maestro/MaestroMCPServerafter first run).
# Claude Code (recommended)
npm install -g @anthropic-ai/claude-code
# Gemini CLI
npm install -g @google/gemini-cli
# OpenAI Codex
npm install -g @openai/codex- Launch Claude Maestro
- Select a project directory (ideally a git repository)
- Configure sessions in the sidebar:
- Set the number of terminals (1-12)
- Choose AI mode for each session
- Assign branches to sessions
- Click "Launch" to start all sessions
- Each session opens in its own worktree with the AI ready to work
- Add sessions: Click the floating
+button - Close sessions: Click the
Γon the session header - Change mode: Use the mode dropdown in the session header
- Assign branch: Select from the branch dropdown
When you assign a branch to a session:
- Maestro creates a worktree at
~/.claude-maestro/worktrees/{repo-hash}/{branch} - The session's terminal opens in that worktree
- All file changes are isolated to that worktree
- Worktrees are cleaned up when sessions close
Save your session configurations:
- Configure sessions as desired
- Click "Save Preset" in the sidebar
- Name your preset (e.g., "Feature Development", "Bug Triage")
- Load presets from the dropdown to restore configurations
Each session can have quick action buttons:
- Run App - Tells the AI to run the application
- Commit & Push - Tells the AI to commit and push changes
- Custom - Configure your own prompts
Session configurations (modes, branches, count) are automatically persisted to UserDefaults and restored on app launch.
For troubleshooting git operations, you can enable debug logging:
# Enable debug logging
defaults write com.maestro.claude-maestro debug-git-logging -bool true
# Disable debug logging
defaults write com.maestro.claude-maestro debug-git-logging -bool falseWhen enabled, git command logs are written to ~/maestro-debug.log.
The Claude CLI must be installed globally and in your PATH:
npm install -g @anthropic-ai/claude-code
which claude # Should show the pathIf worktrees get into a bad state:
# List all worktrees
git worktree list
# Remove a specific worktree
git worktree remove /path/to/worktree --force
# Prune stale worktree entries
git worktree prune- Fork and clone the repository
- Open
claude-maestro.xcodeprojin Xcode - Make your changes
- Test thoroughly with multiple sessions
claude-maestro/
βββ claude-maestro/ # Swift/SwiftUI macOS app
β βββ ContentView.swift # Main view and session management
β βββ TerminalView.swift # SwiftTerm integration
β βββ WorktreeManager.swift # Git worktree management
β βββ GitManager.swift # Git operations
β βββ GitTreeView.swift # Commit graph visualization
β βββ ...
βββ MaestroMCPServer/ # Swift MCP server
β βββ Sources/
β β βββ MaestroMCPServer/ # MCP tool implementations
β βββ Package.swift
βββ README.md
- Follow Apple's Swift API Design Guidelines
MIT License - see LICENSE for details.
- SwiftTerm - Terminal emulator for Swift
- Model Context Protocol - MCP SDK
- Claude Code - AI coding assistant
Built with Love by Jack
