vFor Mac developers running several AI agents at once

Safe to delete.
Here’s the proof.

Orchard finds every git worktree on your Mac and tells you which ones are already in main — squash and rebase merges included — with evidence you can check. Clean them up in one go, and change your mind for 7 days. Work that hasn’t landed stays flagged, so nothing gets lost.

Free, no time limit No account Notarized by Apple Read-only in the background
Orchard’s Clean Up page: 8 worktrees already in main or idle, each with the reason — squash merge, identical commits, uncommitted changes already in main — and 1.2 GB to free.
Squash, rebase and plain merges all recognized Snapshot before every cleanup Never touches a worktree an agent is using
3
layers of checks for “is this already in main?”
7 days
to restore anything you cleaned up
6
kinds of unlanded work it won’t let you miss
0
force pushes or deleted remote branches. Ever.
The problem

Worktrees pile up.
Nobody remembers which ones still matter.

Three agents, three worktrees, and your main checkout on yet another branch. A week later some PRs were squash-merged, some changes are still sitting on disk, and some commits were never pushed. Every delete feels like a gamble.

git tells you where they are

13 worktrees
$ git worktree list ~/code/storefront 5d2c7e0 [main] ~/code/storefront-apple-pay 787882a [feat/apple-pay] ~/code/storefront-cart-rounding 3cbca05 [fix/cart-rounding] ~/code/storefront-order-history abf44dc [feat/order-history] ~/code/storefront-vite-6 8dee1e1 [chore/vite-6] ~/code/storefront-gift-cards 604a855 [feat/gift-cards] ~/code/storefront-edge-render 49d750a [spike/edge-render] ~/code/payments-api a4e19b2 [main] ~/code/payments-api-retry-budget c81f0d3 [fix/retry-budget] ~/code/payments-api-rate-limits 2b7a915 [feat/rate-limits] ~/code/payments-api-refunds e3d6c48 [feat/refunds] ~/code/payments-api-idempotency 2b7a915 [feat/idempotency]

Orchard tells you what to do

same worktrees
8
safe to clean up · 1.2 GB
“Changes were merged into main as a whole (squash merge)” — every verdict shows its evidence
Clean Up
2
not landed yet
Deleting them would lose work. Each card says why and offers the next step
Commit & Create PR
1
agent at work
claude is working in feat/idempotency — left alone, never offered for cleanup
Already in main?

Not a guess.
Evidence.

git branch --merged can’t see squash or rebase merges, so everything looks unmerged and nothing feels safe to delete. Orchard checks three layers, fastest first, and shows exactly what it found.

  • Computed, not predicted. A deterministic algorithm makes the call. AI never decides what’s in main or what to delete.
  • Readable reasons. “1 commit already in main with identical changes”, “PR #142 merged 3 days ago” — never a bare “safe”.
  • Cross-checked with GitHub. With gh signed in, PR status confirms what the commits say.
A squash-merged worktree selected in Orchard; the detail panel says “Changes were merged into main as a whole (squash merge)”.
01

CommitsThe branch tip is already an ancestor of main. Catches plain merges and fast-forwards.

Everything here is already in main
02

PatchesCompares each commit’s patch and the branch’s overall change to catch rebases, cherry-picks and squashes — then cross-checks PR status on GitHub.

Merged into main as a whole (squash)PR #142 merged 3 days ago
03

ContentEven uncommitted changes are compared piece by piece: identical content is already in main, or it’s an older version that a later commit replaced.

All uncommitted changes are already in main
Clean up

Free 1.2 GB in one click.
Undo for 7 days.

Check the worktrees you’re done with and clean them up together. Every one lands in Recently Cleaned with a Restore button.

  • Snapshot first. Uncommitted changes (new files included) and the branch tip are saved to refs/orchard/trash/ before anything is removed.
  • Ignored files too. Things like .env aren’t in git, so you’re told and they’re backed up separately.
  • Remote untouched. No remote branch is ever deleted and nothing is ever force-pushed.
  • Just want the space? Clean only build artifacts like node_modules and keep the worktree.
Orchard after cleaning up 7 worktrees: each appears under Recently Cleaned with the space freed, “Expires in 7 days” and a Restore button.
Not landed yet

What hasn’t landed
stays in front of you.

The Inbox lists only worktrees that would lose work if deleted. Each card names the concrete reason and puts the next step on the right: commit and open a PR, save orphaned commits to a branch, or hand it back to an agent.

Orchard’s Inbox: 2 items not landed yet, each with a one-line AI summary and reasons like “2 files uncommitted”; the detail panel shows an AI summary of what changed, progress and what to watch out for.
4 files uncommitted

Uncommitted changes

Including new files git isn’t tracking yet. Most half-finished agent work lives here.

2 commits not pushed

Committed, not pushed

Only on this Mac. Commits already in main don’t count, so no false alarms.

No remote copy

Branches never pushed

Created locally, never on the remote — the easiest thing to lose with a worktree.

2 stashes

Stashes

Grouped under the worktree they belong to, instead of an anonymous stash@{3}.

Orphaned commits

Commits on a detached HEAD

Not on any branch; switch away and they’re gone. Save them to a branch in one click.

rebase in progress

Interrupted operations

A rebase, merge or cherry-pick stopped halfway. Such worktrees can never be cleaned up.

main dashed ring = uncommitted changes solid dot = unpushed commit already in main
feat/checkout-redesign
Just branched from main; nothing of its own yet
No unlanded work
The branch rail

One line
tells the story.

Every card has a branch rail: the grey line is main, the curve is this worktree’s branch. One glance shows where the risk is; hover for a plain-English explanation.

Safety

Careful by design.
More careful than you at 2 a.m.

The worst thing a cleanup tool can do is delete the wrong thing. So a few rules are hard-coded, and each one is tested against real git repositories.

Read-only in the background — agents keep working

Auto-refresh runs only read-only git commands with GIT_OPTIONAL_LOCKS=0, so git status never refreshes the index or fights a working agent for index.lock. The only background write is git fetch, and you can turn it off.

Some worktrees can never be cleaned up

One an agent process is working in; one with a rebase, merge or cherry-pick stopped halfway; the main worktree. The button simply isn’t there.

Snapshot before every delete

Uncommitted changes and the branch tip go to refs/orchard/trash/ and stay restorable for 7 days. Ignored files like .env are flagged and backed up first.

Never deletes remote branches, never force-pushes

The remote is off limits. Orchard doesn’t create worktrees or start agents either — it only observes and tidies what’s there.

Every action shows its commands

Before committing, pushing or cleaning up, you see the exact git commands that will run. Confirmation dialogs state facts: what happens, what isn’t affected, how to undo.

Your code stays on your Mac

No account, no uploads. AI is optional and uses your own ChatGPT sign-in; without it, every core feature works in full.

And also

From “what’s this?”
to done, in one window.

Commit & Create PR

AI splits the changes into sensible commits and drafts the PR title and description, and lists files that won’t be committed (like .env.local). Every command is shown before it runs.

Will run git add src/gift-cards.ts src/redeem.ts git commit -m "Redeem gift cards at checkout" git add src/flags.ts git commit -m "Add gift card feature flag" git push -u origin feat/gift-cards gh pr create --draft --title "Gift cards" # has a TODO, so draft

Lives in your menu bar

What hasn’t landed, one click away.

Hand off to an agent

Summarizes a worktree’s state and copies it, ready to paste into Claude Code or Codex to pick up where it left off.

Copied · feat/gift-cards has 2 uncommitted files and 2 commits with no remote copy. Left to do: redeem flow tests…

Collision warnings

Two agents editing the same file in different worktrees? You’ll know before you merge.

feat/gift-cardscheckout.ts
fix/cart-roundingcheckout.ts

⌘K, in plain words

Filter by name, or — signed in to ChatGPT — search by description.

⌘Kthe one that changed checkout last week

Live, and quiet about it

FSEvents watches for changes and refreshes only the affected worktree, skipping folders like node_modules. PR status comes from your signed-in gh, one request per repository.

Scanned 2 s ago
Pricing

The free version isn’t a trial.

Every feature is free, with no time limit and no account. You pay for one thing only: tracking more than one project.

Free
Freeforever

Tracks 1 project, with any number of worktrees.

  • 1 project, unlimited worktrees
  • All six kinds of unlanded work + three-layer checks
  • Clean up with 7-day restore, Commit & Create PR
  • AI summaries and drafts (with your ChatGPT)
  • Menu bar, live updates, auto-updates
Download free
No account, no credit card
License Launch price
one-time

Unlock every project. Pay once — no subscription, no expiry.

  • All projects, tracked together
  • Everything in Free
  • Activate on 2 Macs at once
  • New Mac? Deactivate the old one in Settings
  • Supports an independent developer
Buy a license
Try the free version first. Buy when it’s earned it.
FAQ

Questions you might have

How does Orchard know a worktree is safe to delete?

It checks three layers: whether the branch tip is already in main’s history, whether each commit’s patch (or the whole branch as one squash) matches something in main — cross-checked with the PR on GitHub — and whether uncommitted changes already exist in main. A deterministic algorithm decides; AI is never involved. Each verdict comes with the reason, so you can check it yourself.

What if I clean up the wrong thing?

Before cleanup, uncommitted changes (including new files) and the branch tip are snapshotted to refs/orchard/trash/ and kept for 7 days. Restore with one click under Clean Up › Recently Cleaned. Files ignored by git, like .env, aren’t in the snapshot, so they’re flagged and backed up separately first.

Will it get in the way of Claude Code or Codex?

No. Every background command runs with GIT_OPTIONAL_LOCKS=0, so it never refreshes the index or takes index.lock. When an agent process is working in a worktree, Orchard shows it as “Agent working” and won’t clean it up.

Does Orchard change my repositories?

Auto-refresh is read-only. Writes happen only when you click a button (commit, create PR, clean up, save as branch), and you see the commands first. Orchard doesn’t change your git config; the only extra thing it writes is refs/orchard/* for cleanup snapshots.

Do I need GitHub? What about GitLab?

The core features need only git. PR status and Commit & Create PR use GitHub’s official gh CLI, signed in once. Only GitHub is supported for now.

How does AI work, and is my code sent anywhere?

AI is optional. It runs through “Sign in with ChatGPT” and uses your own ChatGPT plan — Orchard doesn’t charge for it. Changes are sent to OpenAI only when you’re signed in and use an AI feature. Signed out, no code leaves your Mac.

What’s the difference between Free and a License?

Just one: the free version tracks 1 project; a license unlocks all of them. Every feature, AI included, works fully in the free version, with no time limit and no account.

What do I need to run it?

on a Mac with , and git. Orchard is notarized by Apple and keeps itself up to date.

Orchard icon

Delete with confidence.
Restore if you change your mind.

Installs in a minute. Your first scan shows what’s safe to clean up.