
Canopy
Parallel, sandboxed Claude Code sessions on native macOS
61 followers
Parallel, sandboxed Claude Code sessions on native macOS
61 followers
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.











Canopy
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.
Canopy
@studentzuo, great minds think alike, this was on my to-do list. I will accelerate!
Canopy
@studentzuo implemented in 1.1 : https://github.com/juliensimon/canopy/releases/tag/v1.1.0
Canopy
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 https://github.com/juliensimon/canopy/releases/tag/v1.1.0
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.
Canopy
@qifengzheng 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 :)
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.
Canopy
@josedamian Thank you. Here's your incentive to move to Macs 😉