Devbroom finds what your coding agents leave behind on your Mac and sorts every piece by its evidence. Unless you turn on Automatic upkeep, nothing changes until you confirm.
A view of the app: 9.1 GB ready to clean. Press Clean and the Ready items go to the Trash; Put back returns all of them.
Every parallel task is a new worktree, every session a new scratch folder, every build a new node_modules. When the work is done most of it stays, and nobody can tell which of it is still in use.
Ordinary cleaners don't know agents: they look at a folder and delete it. They can't say “a Claude Code session is running in this folder”.
Three steps, no surprises. Scanning doesn't change a single file; you confirm the cleanup.
It reads your projects and your agents' own folders. Everything it finds becomes a bubble, as big as the space it takes. Scanning changes nothing on disk.
Each bubble gets its verdict and joins its pile: Ready, Review, Blocked or Unknown. The reason is always beside it: which agent it belongs to, whether it's in use, whether it holds unsaved work.
When you press Clean, every item is checked again and what you picked goes to the Trash; Ready items are selected from the start. Blocked and Unknown stay where they are, and anything sent to the Trash can be put back from History.
Color is never the only sign: each verdict has its own pattern, its own mark and its own rule. Blocked and Unknown items can't be selected, ever.
Every check passed.
Selected by default · goes to the Trashpackage.json beside it; the name alone isn't enough.Worth a look first.
Not cleaned unless you choose “Include anyway”.env file: git worktree remove deletes it without asking.git status doesn't prove there's nothing of value inside.In use or holding work.
Can't be selected~/projects/shop.--force; Devbroom never uses --force.Not enough evidence.
Can't be selected · never counted as ReadyThe real fear isn't wasted space, it's losing work. That's what Devbroom's rules are for, and none of them is a setting.
Scanning doesn't change a single file. Unless you turn on Automatic upkeep, nothing is touched that you haven't seen in the preview and confirmed.
A worktree with uncommitted changes is Blocked. git won't remove it without --force, and Devbroom never uses --force.
The Trash is the default. Deleting permanently is a separate choice, and you hold the button to confirm it.
If an agent is working in that folder, a process runs from it or a file in it is held open, the item is Blocked.
node_modules is Ready only with a package.json beside it, target only with Cargo's marker inside. Without the marker it stays Review.
Space shared through hard links and APFS clones isn't counted. The number you see is what deleting frees.
Agent databases and credentials are never touched. When an agent has its own cleanup command, that's the way it's done or shown to you: claude purge for Claude Code, for example.
The processes of a running agent session are never touched. It asks processes agents left behind to quit only when you say so, and only after checking again.
No account, no telemetry; nothing about you is sent. The app only checks for updates; if you enter a Pro license it activates it once and quietly checks it again about once a month. From session logs it takes only token counts and model names; message text is never stored.
Worktrees are found even when they live outside your project folders. Moved repositories, deleted folders and orphaned worktrees are each recognized for what they are.
Session logs, checkpoints, scratch folders and worktrees.
Sessions, archived sessions and Codex worktrees.
Agent worktrees, transcripts and caches.
Session database (read only), snapshots and worktrees.
Git worktrees, each assessed on its own.
The devbroom command runs the same scan and prints the same reasons; devbroom clean shows what's Ready first, then moves it to the Trash. In the menu bar you see it all at a glance without opening the app.
Every option: command line docs--details opens the checks behind every verdict.--json gives the whole report as JSON.ready to clean · 26 items
Your agents, Shortcuts and scripts can reach what Devbroom knows. None of them cleans on its own: agents' requests come to you in the app, and devbroom clean shows first and asks.
With devbroom mcp, Claude Code, Codex or Cursor can read the last scan, ask why a folder is Ready or Blocked, and ask you to clean. The request comes to you in the app; nothing is cleaned until you confirm, and every item is checked again after you do.
devbroom://scan, devbroom://clean and devbroom://open only open Devbroom; the cleanup waits for you.
devbroom status --json gives the app's last scan; it doesn't scan again.
How much agent data grew in the last 30 days, what grows fastest, what was cleaned this year, your sessions' token counts and estimated cost. In the Sessions tab you can search conversations and archive old Claude Code conversations without touching their memory. Comes with Pro.
Devbroom can scan by itself daily or weekly; automatic scans only read. Set a rule to “Do it by itself” and it moves only Ready items, and only to the Trash. There are no rules until you add one. Comes with Pro.
The app shows every item's verdict with its reasons right beside it. More in the docs.
Not unless you turn that on. Scanning only reads. Cleaning happens for the items you confirm, and every item is checked again right before it's removed; if anything changed since the scan, it's left alone.
If you set a rule to “Do it by itself” in Settings › Automatic upkeep, Devbroom moves only Ready items, and only to the Trash, after automatic scans. Emptying the Trash is a separate setting and only deletes what Devbroom moved there. Both are off at first.
The Trash is the default, and you can put back every item that went there one by one from History. Worktrees are removed with git: their HEAD is saved under refs/devbroom/removed and the branch stays. Deleting permanently is a separate choice, and you hold the button to confirm it.
Claude Code, Codex, Cursor, OpenCode and Orca. It also shows the data of Gemini CLI, Aider, Cline, Windsurf, Copilot CLI, Amp and Kiro, but doesn't clean it yet. Beyond agents it finds developer caches such as npm, pnpm, Cargo and Xcode; you can turn those off in Settings.
It sends nothing about you. It checks for updates: once, 8 seconds after launch, and when you press “Check now”, it reads the latest.json file we publish. If you enter a Pro license it activates it once and quietly checks it again about once a month; only the license key and your Mac's name are sent for that. Without a license, the update check is the only request. There's no account and no telemetry. The command lines of running processes are read in memory only and written nowhere.
No. It shows which agents are running and which processes were left behind. It never touches the processes of a running session, and that session's folder stays Blocked. It asks processes agents left behind to quit only when you say so, and only after checking again.
Macs with Apple silicon, on macOS 13.3 or later. Windows support is planned.
Scanning, verdicts, cleaning, putting back from History, the devbroom command and MCP are free and will stay free. Automatic upkeep, Analytics and the session tools (usage and cost, search, archive) are in Pro.
Pro is a one-time $29 for 2 Macs; the license never expires and covers every version released for a year. After that, new versions are an optional $15 a year. For the first 14 days all of Pro is on, with no card and no account. Details on the Pricing page.

Scanning only reads, every verdict comes with its reason, and everything sent to the Trash can be put back.