Download

Grove: Know what’s finished in ~/Code.

Grove reads every repository, worktree and stray folder, including the ones your agents left in .claude/worktrees, and shows what’s active, what’s gone stale and what’s safe to clear. Then it clears it, with undo.

Download for macOSmacOS 26 or later

Grove reads git, not just your disk.

A disk tool sees folders. Grove sees branches, remotes and worktrees, so it can tell a worktree whose pull request merged last week from one holding an afternoon of unpushed work.

Grove’s Overview window for the demo folder: ~/Code, 26 items, 11.75 GB on disk, a storage bar split into active, idle, dormant and not in git, counts of 15 repositories, 7 worktrees, 5 needing attention and 9 ready to remove, and recommendations starting with Remove finished worktrees, 2.08 GB.
Grove’s overview of the demo folder from the top of this page, captured from the app.
What each recommendation checks before Grove makes it
Clears spaceGrove saysBecause it checkedIn the demo folder
Offers to clearRemove finished worktreesNothing uncommitted, and the branch was merged, its remote branch was deleted, or it has sat idle with everything pushed.
marigold-image-pipeline, fix-flaky-upload-test, dark-mode-tokens, review-pr-2122.08 GB
Offers to clearClear out dormant repositoriesUntouched for over 90 days, every commit already on a remote, no stashes, nothing uncommitted in it or its worktrees.
pixel-garden, advent-of-code-2024, retro-weather, old-portfolio2.48 GB
Offers to clearPrune stale branchesMerged, or the remote branch is gone. Never the default branch, the current one, or one checked out in any worktree.
chore/bump-deps, docs/api-examples, fix/typo-in-readme3 branches
Offers to clearForget missing worktreesGit still tracks a worktree whose folder was deleted, which blocks its branch from being checked out anywhere else.
old-spike1 record
Points it outSave work in progressUncommitted changes, or commits that aren’t on any remote yet. Grove points at these; it never offers to clear them.
lantern-cli, onboarding-copy, refactor-sync-engine, workshop-zine, hackathon-scrapbot5 items
Points it outSort out loose foldersNot a git repository, so nothing backs it up. Grove shows how much space they take and leaves the call to you.
scratch, screenshots-2025, figma-exports, downloads-to-sort1.48 GB

Agents make worktrees. Grove finds every one.

Claude Code tucks them into .claude/worktrees, Codex keeps them under ~/.codex, and plenty end up outside ~/Code entirely. Grove follows git to each of them, and a repository stays active as long as its busiest worktree is.

Two repositories from the demo folder and their 7 worktrees, as Grove reads them
StateWhereBranchSizeGrove’s read
~/Code/tidepoolmain1.48 GBKeep Everything on main is pushed. 4 commits on its agent branches aren't on any remote yet.
.claude/worktrees/refactor-sync-engineclaude/refactor-sync-engine537 MBUnsaved work 2 uncommitted changes, 2 commits not on any remote.
.claude/worktrees/onboarding-copyclaude/onboarding-copy268 MBUnsaved work 1 commit not on any remote yet.
.claude/worktrees/fix-flaky-upload-testclaude/fix-flaky-upload-test537 MBRemove Branch merged into main, nothing uncommitted.
.claude/worktrees/dark-mode-tokensclaude/dark-mode-tokens470 MBRemove Remote branch deleted after its pull request closed, nothing uncommitted.
.claude/worktrees/review-pr-212claude/review-pr-212403 MBRemove Idle 21 days with everything pushed.
.claude/worktrees/old-spikeclaude/old-spike—Forget Folder deleted, but git still tracks the worktree. Grove can forget it.
~/Code/marigold-webmain1.01 GBKeep Everything is pushed.
~/.codex/worktrees/marigold-image-pipelinecodex/image-pipeline671 MBRemove Branch merged into main, nothing uncommitted. Lives outside ~/Code.

Nothing goes without a way back.

Removing moves things to the real Trash, so Finder’s Put Back works, and ⌘Z undoes it.

Scanning is read-only
Git runs with GIT_OPTIONAL_LOCKS=0, so Grove never takes the index lock out from under your editor or terminal.
Worktrees come back exactly
Removing a worktree also sets aside git’s record of it, so undo puts it back as it was. Those records are cleared after a week.
Repositories list what they take
Removing a repository takes its linked worktrees with it, and the confirmation names every one.
Unsaved work is called out first
Uncommitted changes, unpushed commits, stashes or no remote at all: you see it before you confirm.
Branches in use are off limits
Branch cleanup never touches the default branch, the current branch, or one checked out in any worktree. Deleted branches come back with ⌘Z.
Pins stay put
Pin a repository to keep it in the sidebar and out of every cleanup suggestion.
The network waits for you
Fetch All is the only network action, and it only runs when you click it.

From the keyboard

  • ⌘RRefresh
  • ⌥⌘RFetch all remotes
  • ⌘OOpen in editor
  • ⇧⌘TOpen in terminal
  • ⇧⌘RShow in Finder
  • ⇧⌘BOpen remote in browser
  • ⌘⌫Move to Trash
  • ⌘ZUndo the last removal
  • ⌥⌘IShow or hide the inspector

Your grove is tidy.

That’s what Grove says once there’s nothing left to clear. The 17 items above are what the demo folder keeps; see what yours says.

Download for macOSmacOS 26 or later