Free Open source Mac app for developers

Never let your Mac fill up with junk.

Ebb lives in your menu bar. Once a day it finds old node_modules, caches and build files, and sends one notification. Click it, press Move to Trash, done. Projects you're working on are never touched.

$ curl -fsSL https://ebb.serveka.com/install.sh | sh

Read the docs · View the source

  • Automatic, once a day
  • Customizable rules
  • Everything can be put back
  • macOS 14+
Once a dayscans by itself when your Mac is idle
One clickfrom the notification to a cleaner disk
6 signalsgit, edits, AI agents, editors and more keep your active projects safe
Undoeverything goes to the Trash and can be put back
How it works

You don't have to open it. It tells you.

Install it once and forget about it. Ebb does the looking; you only make the call.

1

It scans every day

Quietly, when your Mac is idle and on power. It only reads sizes and dates; nothing is changed.

2

You get one notification

Only when at least 2 GB can go, and never more than once a day.

6.2 GB can be cleared safely: 3 inactive node_modules, Docker build cache
3

Click, review, done

The panel shows what it found and whether it regenerates. Press Move to Trash. Changed your mind? Put it back from History.

Where you use it

Three ways in. Pick yours.

6.2 GB can be cleared safely
3 inactive node_modules, package caches

Notification

The everyday way. One a day at most, only when it's worth it. Click it and you're in.

6.2 GB9:41
Ebb
6.2 GB
can be cleared safely
Move 6.2 GB to Trash

Menu bar

The number is always there at a glance. Click it for the small panel: what's clearable, then one button.

$ ebbctl scan node-leftovers 3.1 GB package-caches 1.4 GB skipped 4 active projects safe to clear 6.2 GB $ ebbctl clean

Terminal

ebbctl scan, clean, undo, and --json for scripts. The same engine, no window.

Features

What it clears, how it decides, and how you change it.

What

What it finds

  • node_modules, .next, .turbo, distRegenerates
  • Python .venv, Rust target, Swift .build, GradleRegenerates
  • npm, pnpm, Yarn, Bun, pip, Homebrew, Go cachesRegenerates
  • Xcode DerivedData, simulators · Docker build cacheRegenerates
  • Old installers, temp files, local AI modelsRe-download
  • Old Claude Code, Codex, Cursor chats · duplicatesNever pre-selected
How

How it knows what you're working on

  • Files edited in the last 14 daysoutside build folders
  • Git commits, checkouts and stages.git/HEAD, index
  • Claude Code and Codex sessionsby working folder
  • A shell or dev server running inside itright now
  • Open in VS Code, Cursor or Xcoderecent workspaces
  • Anything you marked Always keepforever
Where

Where it looks, and where things go

  • Your home folder, for projectschange the folders
  • Tool caches in Library and dot-folderswith Full Disk Access
  • Downloads, Desktop, Documentsinstallers, duplicates
  • Cleared items go to the Trashnever deleted
  • Every clean is logged in Historyput back any item
  • Everything stays on your Macno account, no network
Yours

Customize it

  • Active means 7, 14 or 30 daysSettings
  • Turn categories and signals on or offSettings
  • Notify above 1, 2, 5 or 10 GBSettings
  • Your own regex rulesebbctl rule add
  • Never-touch rules for your folders--never-touch
  • Pin a project or fileAlways keep
Measured, not estimated
16.0 GB

safe to clear on the Mac Ebb was built on, with 35 projects in active use left alone.

node_modules8.9 GB
package caches4.3 GB
build output1.6 GB
python venvs1.0 GB

Read-only ebbctl scan on a MacBook Pro, 27 seconds. Your number depends on what you build.

Safe by design

Some things never leave the shore.

A built-in list that no category or rule can override, checked by tests before every release.

.git.env*CLAUDE.md~/.claude/settings.json.credentials*~/.sshkeychains/System

Nothing happens on its own

Scans only read. Cleaning needs your click.

Checked again before moving

Open files and project activity are re-checked right before anything moves.

Recent and open files stay

Changed in the last 24 hours, or open in an app: skipped.

When unsure, it leaves it

A build folder git tracks, or a zip you made: skipped.

Trash, never delete

Ebb never empties your Trash. History puts things back.

Open source, MIT

No telemetry, no account. Read every line.

Questions

Fair questions.

Do I need to open the app every day?

No. Ebb scans by itself and sends a notification only when there's at least 2 GB to clear. Click it, check the panel, press Move to Trash. The full window is there when you want details.

Will it delete something I need?

It never deletes: items go to the Trash and every clean is logged, so you can put things back. Projects with any recent activity are skipped completely, and a never-touch list protects things like .git, .env and your AI tool settings.

Doesn't it all just come back?

Caches refill when a tool needs them, and Ebb says so for every item. Most of the space is from projects you stopped opening, which only comes back if you build them again.

Why does it ask for Full Disk Access?

macOS hides parts of ~/Library and some tool folders without it. Ebb still works without it and tells you what it couldn't see.

Is it notarized?

Not yet. The install script downloads with curl, which macOS doesn't flag, and verifies the checksum and signature. If you download the zip in a browser, right-click Ebb and choose Open the first time.

How do I uninstall it?

curl -fsSL https://ebb.serveka.com/uninstall.sh | sh removes the app, the commands, the daily agent, its settings and its permissions. Add -s -- --keep-data to keep settings and history.

Let the tide take the junk.

One command to install. One notification a day. Your work stays.

$ curl -fsSL https://ebb.serveka.com/install.sh | sh