Canopy - Parallel, sandboxed Claude Code sessions on native macOS

byβ€’
Canopy runs parallel Claude Code sessions as tabs in one native macOS window β€” each in its own git worktree, each its own Claude. Close the app and every session resumes with its conversation intact. One-click "Merge & Finish" handles the merge-and-cleanup dance, a split shell pane lets you run git without interrupting Claude, and an Activity dashboard shows where your tokens actually went. Native SwiftUI, no Electron. macOS 14+, AGPL-3.0. Built by someone who uses it daily.

Add a comment

Replies

Best
Maker
πŸ“Œ
Hi everyone πŸ‘‹ I'm Julien. I built Canopy because I use Claude Code every single day, and two problems kept getting in my way: avoiding parallel task collisions and being comfortable letting an agent run commands on its own. Canopy solves both with isolation at two levels. Each task runs in its own git worktree β€” its own branch, its own directory β€” so parallel Claude sessions never step on each other's files. And each session can run in a sandboxed container, either Docker or Apple's native Container framework, so Claude runs in a contained runtime rather than running loose on your machine. Worktree isolation for your code, container isolation for peace of mind. On top of that, it's all one native macOS window β€” each session a tab, Cmd+1–9 to jump between them. Close the app and every session resumes with its conversation intact, no session IDs to hunt down. A few other things that came out of my own daily annoyances: β†’ Merge & Finish β€” replaces the five-command merge-and-cleanup dance with two clicks β†’ Split shell pane β€” run git or tail a log without interrupting Claude β†’ Activity dashboard β€” finally see where your tokens actually went Native SwiftUI, no Electron, no bundled Node β€” it launches fast and behaves like a Mac app. Free and open source under AGPL-3.0. Fair warning: it's macOS-only and built specifically around Claude Code β€” not a general worktree manager. It's young, so it's been battle-tested mostly against my own workflow. Bug reports and feedback are genuinely welcome β€” that's a big part of why I'm sharing it here.

the hard part of parallel claude code sessions is clobbering each other's git state and working dir. if each session gets a genuinely isolated checkout, that's the whole ballgame β€” the rest is ui.

Β that's the ballgame indeed. On UI: every feature earned its place, and saves you 10-30 seconds. It makes a difference at the end of each day :)

Congrats on the launch. The worktree + container split is the part that feels most useful: code isolation and runtime isolation are different problems.

One edge case I’d love to understand: when two Claude sessions touch shared project surfaces like package manifests, migrations, env examples, or generated types, does Merge & Finish detect cross-worktree conflicts before merging, or is the workflow still β€œmerge one, then resolve manually”? That conflict boundary is where parallel agents usually stop feeling parallel.

,Β great minds think alike, this was on my to-do list. I will accelerate!

Git worktree isolation for parallel sessions is such an obvious idea once you see it, but I've never seen anyone actually build it cleanly like this. The sandboxed container part is what sells me though β€” letting Claude run commands on its own feels a lot safer when it's contained. Another Windows user wishing this existed for me too.

Β Thank you. Here's your incentive to move to Macs πŸ˜‰

Canopy 1.1 is out. 🌳

If you run a fleet of Claude Code agents in parallel β€” one per git worktree β€” you eventually hit the silent killer: two branches quietly touch the same migration, lockfile, or generated type. Everything merges clean… until the second merge blows up against a target that already moved. Now, you have to untangle the mess: blood pressure up, velocity down.

1.1 adds a cross-worktree conflict pre-flight for Merge & Finish. Before you merge, Canopy shows how your branch collides with every other in-flight worktree. Real textual conflicts (computed with git merge-tree,
Β without touching your working tree) and "shared-surface" overlaps that merge clean but break at runtime (two 0007_*.sql migrations, anyone?).

New ⚠ badge on each worktree row: red = will conflict, orange = watch. This is advisory only: it never blocks the merge, it just kills the surprise.

Parallel agents are easy to start and hard to land. This is about landing them with your eyes open πŸ˜‰

 ➑️ brew install --cask juliensimon/canopy/canopy
 ➑️ Notarized DMG at