惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Latest
Security Latest
C
Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
G
GRAHAM CLULEY
A
Arctic Wolf
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
PCI Perspectives
PCI Perspectives
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
L
LINUX DO - 最新话题
aimingoo的专栏
aimingoo的专栏
N
News and Events Feed by Topic
W
WeLiveSecurity
O
OpenAI News
NISL@THU
NISL@THU
F
Full Disclosure
Blog — PlanetScale
Blog — PlanetScale
The Hacker News
The Hacker News
D
Docker
Recorded Future
Recorded Future
A
About on SuperTechFans
P
Proofpoint News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园_首页
Scott Helme
Scott Helme
Jina AI
Jina AI
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
U
Unit 42
Spread Privacy
Spread Privacy
Y
Y Combinator Blog
B
Blog
H
Help Net Security
Project Zero
Project Zero
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Threatpost
Google Online Security Blog
Google Online Security Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 聂微东
F
Fortinet All Blogs
L
Lohrmann on Cybersecurity
Know Your Adversary
Know Your Adversary
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events

Show HN

Show HN: I think I by accident created something beautiful about LLM [video] Release v1.3.0 — AI-Powered Migration Explanation & Migrations Folder Support · migradiff/migra Show HN: HumanForScale – See how big things are DropLock Show HN: Ego lite – why our browser agent writes JavaScript not CLI commands Extend AI · sound like you, everywhere SnapState — Your workspace, perfected. Helios. Is plug-in solar worth it? GitHub - riddleling/docOCR: macOS CLI and HTTP OCR tool for converting document images to Markdown. Geostakes — Stake. Guess. Win. Show HN: AI-org – org-mode powered by AI GitHub - PepperDev/totpgate: Lightweight SPA TOTP port knocking daemon GitHub - ppnpm/clinlang: Shorthand writing for doctors. Write shortly and later convert into structured case documentations. cartographer-skill/skills/cartographer/SKILL.md at main · spinchange/cartographer-skill GitHub - schildep/verified-polygon-intersection: Formally verified polygon intersection FreeCal — calendars for your organisation Show HN: Self Publish Studio Owl VIP Email Alerts | Gmail Notifications for Specific Senders 1 Million Pixels Show HN: [Geo-Cast] hear what other people are saying ClawChat GitHub - migradiff/migra: The actively maintained fork of migra — PostgreSQL schema diff and migration script generator. vibebnb · bring back Airbnb's vibe filters GitHub - jmaczan/tiny-vllm: Build your own high performance LLM inference engine in C++ and CUDA - a smaller version of vLLM Reposeek - Find the repo to build on GitHub - hunvreus/heypi: Chat agents for your team, with approvals and sandboxed tools. Slack, Discord, Telegram, webhooks. Show HN: Heirlooms – pass your legacy to family after stop breathing Show HN: I launched a micro-gig marketplace and used it to buy my own GTM plan Show HN: AionOS – self-healing microkernel in Zig (boots on real hardware) GitHub - njbrake/dotpi: My ds4 + pi configuration for success Sverklo - Repo Memory for Coding Agents GAIA Atlas - Local Stellar Map GitHub - joshduffy/claude-handoff-guard: Hook-enforced ownership for AI coding session handoffs Prezlo — The AI Visibility Platform for Professionals GitHub - kenm47/nvEnvy: Fast, keyboard-driven note-taking app for macOS — a modern rebuild of nvALT in Swift/SwiftUI. vibewarz — bot-vs-bot arena Inkfeed TV Explorer — 10,000 Free TV Channels Oort — The prompt stack solo devs ship with GitHub - Bella3202019/promptloop: Claude Code for prompt eval Stefan Le Noach Show HN: A smarter CSS selector generator Phoenix Code - Free Open Source Code Editor | Successor to Brackets Korean OEM/ODM Manufacturer Sourcing Platform | OEMKorea GitHub - OWASP/www-project-agent-memory-guard: OWASP Foundation web repository GitHub - fynyky/elemental: Simple reactive front-end library HolaClaw: run OpenClaw securely in Mac Semiconductor Review GitHub - vaddisrinivas/tab-council: Chrome MV3 extension that turns AI tabs into a structured model council Stillis - The Social Stock Market OpenHive — Agents working together Repolog — SEO, Performance, Security & AI Readiness audits Integuru - Generate fast, reliable APIs for any platform JobTrue — Your home base for the job search. LocalizeASO - ASO Localization for App Store Screenshots and Metadata RFC Reader — search & read IETF RFCs Kotlin Stdlib API Search — Autocomplete & Doc Reference KeptWell — Your family's medical binder, replaced. Cliparr | Self-hosted video clipper for Plex, Jellyfin, and local files. GitHub - glebmish/claude-code-replay: Replay Claude Code session logs to reconstruct lost project files, commit by commit. One Tile GitHub - aavilagallego/TheFoundry: The Foundry is a User Friendly - Enterprise Ready Multi-Agent System (MAS) bootstrapping framework. Monitoring | Firecrawl EverFree — Free, GitHub-backed notes Show HN: Orbital Package System (Ops) Free Furigana Converter: Kanji to Hiragana | EZFurigana How I built Ensemble · Brutal Cut Claude Code Costs ~50% Without Quality Loss | Headroom GitHub - stateflow-dev/adaptive-runtime: Adaptive Runtime Layer for Stateful AI Systems Show HN: Artwork in the style of Mark Rothko GitHub - fayazara/Screendrop: A native macOS menu bar app for taking screenshots, recording the screen, annotating captures, and sharing them when needed. It is built for a fast local workflow: capture something, preview it immediately, mark it up, save it, copy it, or upload it from the same floating preview. deepface.dev GitHub - gitricko/hermes-webtop: An agent that grows with you Sensonym - Forget Flashcards, Learn Languages by Doing Steam 上的 Code: Terraform GitHub - Thinklanceai/agentkeeper: Crash-resistant cognitive continuity for AI agents — checkpoint/restore, cross-model state reconstruction, semantic recall, and compression. Your agent survives crashes, restarts, and model switches. Tap — The browser with no tabs. Blinken · Bring back the blink GitHub - remontsuri/EV-QA-Framework: ML-powered QA framework for EV battery systems — telemetry validation, anomaly detection, SOH prediction, CAN bus (2.0B + J1939) emulation, DBC parser, Prometheus metrics, Grafana dashboard Show HN: Sixbpm – a free thing that slows your breathing down MapZap — 300 Local Business Leads in 60 Seconds Alphaset - Organic data, expert-grown Show HN: OSSentinel.live – AI-powered open source security monitoring Show HN: Claude Code AskUserQuestion which works for subagents/teams/workflows GitHub - SharkUI/SharkBay: SharkBay is a local-first macOS workbench for software projects. It helps you keep a set of local repositories visible, open project-scoped terminals and browser tabs, inspect Git state, and coordinate agent work through local Markdown task records. GitHub - doiito/gliding_horse: Gliding Horse is a multi-agent orchestration framework built in Rust that supports PDCA scheduling and knowledge graph-based agents, with comprehensive Chinese documentation, and is suitable for building enterprise-level AI agent systems. GitHub - 0xJaksun/lithium-core: Storage engine for AI agents to navigate, store, and retrieve structured data. PostgreSQL ltree, built-in versioning, scoped queries. GitHub - GiorgosXou/MLPico: Static-allocation MLP inference in ANSI C using 2-slot circular buffer with fixed stride indexing. An easy to use, minimal MLP alternative to GiorgosXou/NeuralNetworks enhanced with PROGMEM, int-quantization etc. GitHub - skorotkiewicz/acp-p2p: A P2P (POC) of the ACP for decentralized agent communication GitHub - yeet-src/airtop: htop for the airwaves — a live 802.11 (Wi-Fi) RF dashboard in your terminal GitHub - tamarillo-ai/theta-spec: harness agnostic configuration standard Show HN: DRD – Git for distributed consensus failures" GitHub - Heidar-An/Mira: Search for files semantically - no exact filenames required. GitHub - djadmin/fort: macOS CLI: endpoint security audit + SOC 2 readiness reports GitHub - exlee/rik: rik - limited agent edition Pieces | The pre-information market GitHub - jmilinovich/grove: Open-source MCP server over a git-backed Obsidian vault. Single-user, self-host. Six tools, hybrid search, provenance/blame, auto-link discovery. GitHub - Astralchemist/rig: Local-first semantic knowledge graph with magnetic-pull retrieval GitHub - sediman-agent/OpenSkynet: Your 24/7 Terminator CSP Radar
GitHub - juliensimon/canopy: Ship faster with parallel Claude Code sessions — one native macOS window, git worktrees, sandboxes, auto-resume, merge & finish, token dashboard.
julsimon · 2026-06-15 · via Show HN

Canopy

Parallel Claude Code sessions with git worktrees — a native macOS app.

One window. Parallel branches. Parallel Claudes. Zero context switching.

Latest release Downloads Build codecov Stars Issues Last commit

macOS 14+ Swift 6 License: AGPL-3.0

⬇ Download Canopy for macOS

Universal binary · Apple Silicon + Intel · Notarized · macOS 14+


demo.mp4


Why I built this

I've been using Canopy every day for months on my own projects. I'm sharing it now because it has earned its place on my dock, and I think it might earn a place on yours too.

Here's the honest pitch: Claude Code is a superpower. Canopy feels like wearing all five Infinity Stones.

When you use Claude Code seriously — not just for experiments, but for real production work — you hit a wall the tool wasn't designed to push through. Claude is brilliant at focusing on one thing in one directory. But real engineering work doesn't come one thing at a time. A bug report lands while you're refactoring. A teammate asks you to review a change while you're writing tests. The roadmap demands you keep shipping while you investigate a flaky test. You need to work on three things at once, but Claude — and git — want you to work on one.

You can hack around it: stash, checkout, maybe a second clone, maybe git worktree add and a hand-written shell script to copy your .env, maybe remember which of your six Terminal.app tabs was running which session. You end up with a tab graveyard, stale worktrees littering your disk, Claude sessions you can't find, and a quiet tax on every task you do.

Canopy removes that tax. Completely.

What you actually get back

Every Canopy feature exists because I was tired of doing something manually. Each one saves a few seconds. Do the math over a day — over a week, over a month — and the compound is real.

You used to do this With Canopy
Stash your work, checkout another branch, lose Claude's conversation context Open a new worktree session — your old session keeps running in another tab
Hunt through ~/.claude/projects/<hash>/ for a session ID, then claude --resume abc123… Click the tab. Canopy resumes the right session automatically.
Juggle six Terminal.app windows, cmd-tabbing to find the right one One window, one tab bar, Cmd+1Cmd+9 to jump anywhere
Copy-paste the working directory into Cursor/VS Code with cmd-c / cmd-shift-o / cmd-v Right-click → Open in IDE
Switch windows to run git log while Claude is working Cmd+Shift+D — shell pane drops in below Claude, no interruption
Re-run npm install, copy .env, symlink node_modules every time you make a worktree Configure once per project. Canopy does it on every new worktree.
Wonder which of your branches are merged and safe to delete Project view lists every worktree with status and a one-click Merge & Finish
git checkout main && git pull && git merge feat/… && git worktree remove … && git branch -d … Right-click → Merge & Finish — two panels, one button
Squint at ls ~/.claude/projects/ trying to guess how many tokens you've burned this week Open Activity — token counts, session history, 12-week heatmap
Type out the same "write tests", "review security", "update docs" prompt for the tenth time Save it once in the Prompt Library — one right-click to fire it at any session
Scroll a flickering terminal trying to re-read what Claude said ten minutes ago Right-click → Show Transcript — the conversation as clean markdown, live-updating
Worry about what an autonomous agent might touch outside the repo Pick a sandbox — per session, per project, or globally — and Claude runs in a VM with just your worktree mounted

None of these are big problems on their own. All of them are papercuts. Canopy is a tool for people who notice papercuts.


Install

Homebrew (recommended)

brew install --cask juliensimon/canopy/canopy

Direct download

Grab the latest signed and notarized .dmg from Releases. Open, drag to Applications, launch.

Requirements: macOS 14 Sonoma or later. Apple Silicon or Intel. Claude Code installed (claude available in your $PATH).


Quick start

  1. Add a project (Cmd+Shift+P) — point at any git repository. Configure files to copy (.env), symlink paths (node_modules), and setup commands (npm install).
  2. Create a worktree session (Cmd+Shift+T) — pick a base branch, name your feature branch.
  3. Canopy creates the worktree, copies config, runs your setup, and launches Claude Code. Start prompting.
  4. Need a parallel task? Cmd+Shift+T again. Each session is completely isolated.
  5. When you're done with a session, right-click → Merge & Finish. Canopy merges your branch and cleans up the worktree.

That's the whole loop. Repeat forever.


Features in depth

🪟 Parallel sessions, one window

Main window with multiple tabs

Each tab is a separate worktree running its own Claude Code instance. Switch between them with Cmd+1Cmd+9. Drag tabs to reorder. Sort by name, project, creation date, or directory with Cmd+Shift+S. Activity dots show which sessions have output streaming, so you know at a glance which Claude is still thinking.

When you close and reopen Canopy, every session comes back — with its Claude conversation resumed automatically. No session IDs to remember, no --resume flags to type. Canopy finds the right session by scanning ~/.claude/projects/ and passes it to claude for you.


📊 Activity dashboard — know where your tokens go

Activity dashboard

Token usage is the one thing Claude Code doesn't surface well. Canopy fixes that.

The Activity view parses your ~/.claude/projects/ JSONL files and gives you a full picture of how you've been using Claude:

  • All-time token totals — input and output, across every session you've ever run
  • Last 12 weeks — same breakdown, so you can see recent trends
  • Session count — how many conversations you've had in the window
  • Busiest day — when were you deep in Claude?
  • Model breakdown — percentage split across Opus, Sonnet, and Haiku
  • Hour-by-hour heatmap — 12 weeks of your actual working hours, visualized

This is the view I use to answer "am I on track for my API budget this month" and "when am I most productive." No third-party tools, no scraping, no estimation — it's reading the same JSONL files Claude Code writes.


⌨️ Command palette — fuzzy search everything

Cmd+K opens a fuzzy-match palette over every session, project, branch, and action Canopy knows about. Type three letters of a branch name, hit return, you're there. Type the name of a project, hit return, the project view opens. Type "merge", hit return, the merge flow fires on the current session.

If you have more than four or five sessions open, this is the fastest way to navigate. Faster than clicking. Faster than Mission Control. Fast enough to feel instant.


🔎 Find in terminal — stop scrolling

Terminal search

Cmd+F inside any session opens an incremental search over the terminal output. Matches highlight as you type. Return jumps to the next match. Shift-return jumps to the previous one. Escape closes the search.

This is a small feature that turns out to matter a lot: when Claude produces a 400-line plan and you need to jump to the part about "database migration," you used to scroll. Now you don't.


📜 Show Transcript — read the conversation, not the terminal

Right-click any session → Show Transcript… for a clean, scrollable, read-only view of the whole conversation. When Claude Code is running, Canopy reads its structured JSONL session log and renders user/assistant turns with markdown formatting — tool calls compacted to one-line summaries instead of walls of raw output. It live-updates as Claude streams, with an auto-tail toggle so you can read history without being yanked back down. The Copy button (Cmd+Shift+C) puts the formatted markdown on your clipboard — handy for PR descriptions and notes.


⬓ Split terminal — Claude up top, shell below

Split terminal

Cmd+Shift+D toggles a secondary shell pane below Claude's terminal. Need to run git status while Claude is mid-thought? Peek at the test output from another tool? Tail a log? You don't need to interrupt Claude or open a new window. The split pane is a full interactive shell, scoped to the same worktree, and you can hide it the same way you showed it.

This is the feature I was most skeptical I'd use, and now I can't imagine working without it.


🛡 Sandboxes — run Claude in isolation

Pick a sandbox backend in Settings (globally, per project, or per session in the New Worktree Session sheet) to launch Claude inside a VM. Your working directory is bind-mounted into the sandbox, so file edits work normally, but everything that isn't explicitly mounted — SSH keys, documents, the Keychain, other repos, the rest of your home directory — is out of reach. A shield icon marks sandboxed sessions in the sidebar, and the split terminal still opens a host shell for inspecting the real filesystem. Canopy validates the required tools before enabling a backend. The user guide spells out exactly what is and isn't protected (the mounted project and outbound network are deliberate trade-offs).

Docker Sandbox (sbx) — a Docker Sandbox microVM via sbx run. Session resume is disabled (session files live inside the ephemeral microVM). Requirements: Docker Desktop and sbx (brew install docker/tap/sbx).

Apple container — a lightweight VM via Apple's open-source container runtime, no Docker Desktop needed. Canopy mounts the worktree, the project's main repo, and your ~/.claude state at their host paths — so git works inside the sandbox and session resume works, unlike sbx. The default canopy-claude image is built in one click (Settings → Build Image); a one-time /login inside the first sandboxed session sets up credentials. Requirements: macOS 26+ on Apple silicon, brew install container, container system start once per boot. Full setup steps in the user guide.


✅ Merge & Finish — one click, one worktree retired

Merge and Finish flow

The last step of every feature used to be a four-command dance:

git checkout main
git pull
git merge feat/whatever
git worktree remove ../canopy-worktrees/myproject/feat-whatever
git branch -d feat/whatever

…except you never actually did all of it, and now you have 11 stale worktrees and 40 merged branches on your laptop. Canopy replaces the whole thing with a two-phase confirmation sheet. Phase 1: pick the target branch, confirm the commit count, see any conflicts before they happen. Phase 2: pick what to clean up — worktree directory, feature branch, both, or neither. One click. Done. No debt.


🌳 Project view — see every worktree at once

Project detail view

Click any project in the sidebar to see every worktree, its branch, its status, and a one-click button to open, merge, or delete it. "Open All" resumes every inactive worktree at once with their prior Claude sessions — the fastest way to get back into a multi-branch project after a weekend away.

The project view also lists every open pull request for the repository, pulled via gh pr list — so you can see at a glance which of your worktrees already have a PR in flight and which are still local.


🔀 Git awareness — always-visible repo state

Canopy polls git and gh every 10 seconds so you never have to drop into a shell to check the state of the current worktree. You see:

  • Status bar at the bottom of the window, for the active session: modified files with + / line counts, commits ahead of the upstream, and open pull request count (with draft split). Hover any pill for a full tooltip — file list, push status, PR titles.
  • Sidebar session rows show a compact +N / −N diffstat and an up-arrow count for commits-ahead, so you can scan all your worktrees at once.
  • Project detail view lists every open PR with title, number, author, and draft status.

Requires gh to be installed for the PR data (brew install gh). Path is auto-detected; override in Settings if needed.


📋 Prompt Library — reusable prompts, one right-click away

Build a library of prompts you use repeatedly — "write tests for this", "check for security issues", "update the README" — and fire them at any session without retyping.

Sending a prompt: Right-click any session → Send Prompt. Starred prompts appear inline in the submenu for instant access. Click Browse All… to search the full library.

Managing the library: Open Settings → Prompt Library. Add, edit, reorder (drag-and-drop), star, and delete prompts. All changes save immediately.

Template variables are substituted at send time:

Variable Resolves to
{{branch}} Current git branch of the session
{{project}} Project name
{{dir}} Working directory name (last path component)

A prompt like "Review {{branch}} for correctness and add tests" becomes "Review feat/auth for correctness and add tests" when sent to that session.


Keyboard shortcuts

Shortcut Action
Cmd+T New plain session (directory picker)
Cmd+Shift+T New worktree session
Cmd+Shift+P Add project
Cmd+K Command palette
Cmd+F Find in terminal
Cmd+Shift+D Toggle split terminal
Cmd+Shift+A Activity dashboard
Cmd+Shift+S Cycle tab sort mode
Cmd+1Cmd+9 Jump to tab N
Cmd+, Settings
Cmd+? Help

How it works

Canopy builds on two ideas that play well together:

  • Git worktrees let you check out multiple branches of the same repo simultaneously, each in its own directory, sharing one .git store. Creating one is cheap and fast.
  • Claude Code sessions are directory-scoped and resumable. Canopy finds the last session ID for each worktree and passes it via --resume, so conversations survive restarts.

Everything else — the tabs, the project view, the Activity dashboard, the palette, the split pane — is a native SwiftUI app wrapped around SwiftTerm for terminal emulation. No Electron, no webviews, no bundled Node. It launches fast, idles quiet, and behaves like a Mac app.

For a deeper walkthrough, read the User Guide.


Per-project configuration

Every project can be configured independently from the Add Project sheet:

Setting Example Why
Files to copy .env, .env.local Untracked config files Claude needs at runtime
Symlink paths node_modules, .venv, vendor Heavy directories; symlinks save disk and install time
Setup commands npm install, bundle install, make setup Run once in each fresh worktree
Worktree base directory ~/worktrees/myproject Where new worktrees live (default: ../canopy-worktrees/<project>)
Auto-start Claude on/off Per-project override of the global default
Claude flags --permission-mode auto Per-project override of the global flags
Sandbox backend Off / Docker Sandbox / Apple container Run Claude inside a Docker Sandbox microVM or an Apple container VM
Sandbox flags --memory 8g Additional flags passed to sbx run
Container image / flags canopy-claude / --memory 8g Image and extra flags for the Apple container backend

All configuration lives in ~/.config/canopy/:

  • settings.json — global preferences
  • projects.json — project list and per-project config
  • projects.backup.json — automatic backup created on every launch
  • sessions.json — persisted sessions, restored on app restart
  • sessions.backup.json — automatic backup created on every launch
  • prompts.json — saved prompt library

Contributing

Found a bug, have a feature request, or want to send a patch? Open an issue or a PR.

Because Canopy is dual-licensed (see below), contributors are asked to sign the Contributor License Agreement by submitting a pull request. This is a lightweight CLA that grants the project maintainer the right to relicense contributions. It's what makes dual licensing possible while keeping the open source version free under AGPL.


Author

Built by Julien Simon — julien@julien.org.

I've been writing software for a long time. I built Canopy because I use Claude Code every day and the rough edges were getting in the way of the work. It started as a weekend experiment and turned into the tool I now reach for first every morning.

If Canopy saves you time, the best thank-you is to tell someone else who might also find it useful — post it on social, drop it in a Slack, submit a PR. A star on the repo never hurts either.


License

Copyright © 2026 Julien Simon.

Canopy is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). You can use it, modify it, and redistribute it under the terms of that license.

Commercial licensing: If you need to use Canopy under terms other than AGPL-3.0 — for example, embedding it in a proprietary product or redistributing without source disclosure — commercial licenses are available. Contact julien@julien.org.