Canopy is a native macOS app positioned as a "cockpit" for parallel Claude Code sessions. The core problem it solves is this: Claude Code excels at focusing on one thing in a single directory, but real engineering work often requires pushing multiple tasks forward at once (fixing bugs, refactoring, writing tests, reviewing code, etc.), while git and Claude by default only support single-threaded operation. Canopy uses git worktree to let multiple Claude Code sessions run in parallel and manages them all in one window.
Main capabilities
Parallel sessions and single-window management: Each tab is an independent worktree running its own Claude Code instance. You can switch with Cmd+1 through Cmd+9, drag to reorder, and sort by name, project, creation date, or directory. Activity dots show which sessions are working and which are blocked and waiting for user input (a permission prompt turns the dot amber, and the status bar shows "1 needs input"). The status bar also shows Claude runtime information for the current session, such as model, reasoning effort, and context read amount.
Automatic session recovery: After closing and reopening Canopy, all sessions are restored and automatically resume their Claude conversations. Canopy assigns an ID to each new session via --session-id <uuid>, and subsequent launches resume that conversation, so a tab is bound to its own conversation from the start and cannot be hijacked by a manually run claude in the same directory.
Activity dashboard: Parses the JSONL files under ~/.claude/projects/ to display total historical tokens (input and output), usage over the last 12 weeks, number of sessions, busiest day, share by model family (Opus, Fable, Sonnet, Haiku), and a 12-week hourly heatmap.
Command palette: Cmd+K opens a fuzzy search palette that can search sessions (by name, project, branch, terminal output), projects, and quick actions (new session, new worktree session, settings).
In-terminal find: Cmd+F performs incremental search in the session terminal output, highlights matches, jumps to the next match with Enter, jumps to the previous with Shift+Enter, and closes with Esc.
Show transcript: Right-click a session and choose Show Transcript… to view the full conversation in a clean, scrollable, read-only way. Read at runtimeStructured JSONL logs render user/assistant turns with markdown formatting support, tool calls compressed into single-line summaries, support for live updates and an auto-follow toggle, and Cmd+Shift+C to copy formatted markdown.
Split-pane terminal: Cmd+Shift+D toggles an auxiliary shell panel below the Claude terminal, scoped to the same worktree, so you can run git status, check test output, or tail logs without interrupting Claude.
Sandbox isolation: You can select a sandbox backend globally, per project, or per session in settings, four in total: Off, Claude sandbox (Bash only, based on macOS Seatbelt, no installation required, but only restricts Bash, reads are controlled by a deny list, ~/.ssh and ~/.aws/credentials are still readable), Docker Sandbox (sbx, runs a micro VM via sbx run, older versions do not support session resumption, requires Docker Desktop and sbx), Apple container (runs a lightweight VM via Apple's open-source container runtime, restricts the entire Claude process, supports session resumption, requires macOS 26+ and Apple silicon, requires installing container and running container system start on each launch). The two VM backends bind-mount the worktree (worktree sessions also mount the main repository), and anything not mounted is inaccessible.
Merge and finish: Right-click a session and select Merge & Finish to complete the merge and cleanup through two-phase confirmation. The first phase selects the target branch, confirms the commit count, and previews conflicts; the second phase selects whether to clean up the worktree directory, the feature branch, both, or neither. Cross-worktree preflight shows conflicts between the current branch and other worktree branches (real text conflicts, computed with git merge-tree) and shared surfaces (such as package manifests, lock files, migrations, generated types, and other high-risk files), as hints only that do not block the merge.
Project view: Click a project in the sidebar to view all worktrees, branches, status, conflict warning badges, and one-click buttons to open, merge, or delete. "Open All" can restore all inactive worktrees and their previous Claude sessions at once. Project viewalso lists all open pull requests for the repository via gh pr list.
Git awareness: Polls git and gh every 10 seconds, and the status bar shows modified files with added/deleted line counts, the number of commits ahead of upstream, and more.
How to use
Installing via Homebrew is recommended; you can also download the latest .dmg from Releases, open it, and drag it into Applications to launch. The app is signed and notarized and opens normally. The fastest way to get started: press Cmd+T, point to any git repository, and start prompting. If you need to run multiple worktrees in parallel, follow these steps: use Cmd+Shift+P to add a project (configure files to copy such as .env, symlink paths such as node_modules, and install commands such as npm install); use Cmd+Shift+T to create a worktree session (select the base branch and name the feature branch), and Canopy will create the worktree, copy the config, run the install, and start Claude Code; press Cmd+Shift+T again to create parallel tasks; when done, right-click and select Merge & Finish to merge and clean up.
Use cases and limitations
Suitable for developers who need to advance multiple branches or tasks at the same time, especially users who heavily use Claude Code for production work. Limitations include: macOS 14+ only; some sandbox backends have additional system requirements (such as Apple container requiring macOS 26+ and Apple silicon); older versions of Docker Sandbox do not support session resumption; Claude sandbox only restricts Bash and reads are controlled by a deny list; cross-worktree preflight is advisory only and does not block merges. Commercial use requires attention to the AGPL-3.0 license, and a commercial license can be obtained.