Janitor
Menu bar app · macOS 15 and later

Your Mac tidies itself every 15 minutes.

Janitor closes the windows, tabs, dev servers and apps you stopped using, and clears the caches piling up behind them. No Scan button. No monthly clean-up ritual.

Day one is learning mode: you see what Janitor would close before it closes anything.

18 idle tabs
vite :5173
DerivedData
Numbers · idle
zsh · 1 h
Old Downloads
RUN LOG
14:45 closed 41 tabs · Chrome 14:45 stopped vite · localhost:5173 14:30 quit Numbers · no windows for 1 h 14:30 closed 3 windows · idle 2 h 14:15 ended zsh session · idle 1 h 14:15 skipped Figma · on your allowlist 03:00 cleared app caches 03:00 deleted logs older than 7 days
THE NEXT SWEEP

Listed before it runs. Gone when it does.

Click the menu bar icon and you see exactly what the next sweep will touch, each item with its reason. Skip one, sweep now, or let it go on schedule.

  • Never the app or window in front of you
  • Apps with unsaved changes stay open
  • Closed tabs come back from Restore for 30 days
Wed 14 Oct 14:48
Janitor On · every 15 min
Next sweep 15:00 in 12 min · frees 4.1 GB memory
18 idle tabs · ChromeClose
vite · localhost:5173Stop
Numbers · no windows for 1 hQuit
Sweep now Skip this one
HOW IT WORKS

Set it up once. Then forget it's there.

01

It learns for a day

For the first 24 hours Janitor only writes down what it would do. Anything you want left alone goes on the allowlist with one click.

Learning mode · nothing closes yet
Figma · idle 3 hWould quit
Spotify · idle 5 hAlways keep
02

It sweeps on a schedule

Every 15 minutes it clears what sat idle past your limits: windows after 2 hours, tabs after 4, terminal sessions after 1. Every limit is yours to change.

14:30 14:45 15:00 15:15
03

You can bring things back

Closed tabs reopen from Restore for 30 days. Quit apps get a Reopen button. Old Downloads go to the Trash, not straight into the void.

14:45 · closed 41 tabs Restore 41 tabs
WHAT IT CLEANS

Two kinds of mess: what's left open, and what piles up.

Left open · frees memory

Idle windows

Closed after 2 hours out of focus. A window with unsaved changes stays open.

Browser tabs

Chrome, Chrome Canary and Safari. Each address is saved before the tab closes, so Restore brings it back.

Terminal and agent sessions

Shells and Claude Code sessions idle for an hour. Pick a Claude session up later with claude --resume.

Dev servers

That vite or next server on localhost with no requests and no work for 30 minutes.

Idle apps

Apps running with no windows for an hour, or not opened for 4. Always quit the normal way.

Runaway processes

80% CPU or more for 10 minutes, left behind on a terminal nobody is watching.

Piles up · frees disk

App caches, logs and crash reports Caches of apps not in use; logs older than 7 days Daily
Xcode DerivedData Untouched for 7 days, never while xcodebuild runs Daily
Package caches npm, pnpm, bun, pip, Homebrew and cargo, only the ones you have Daily
Old Downloads and old Trash Downloads untouched for 30 days go to the Trash; the Trash empties after 30 more Daily
Stale project builds node_modules, .next, dist, build and target in projects untouched for 30 days; never a folder git tracks Weekly
Simulators and old toolchains Unavailable simulators, old nvm Node versions, rustup toolchains, Xcode device support Weekly

Big files you might not need show up as suggestions. You pick; they go to the Trash. Ports, Applications and Performance tools are there when you want a closer look.

CAREFUL BY DEFAULT

It would rather leave something open than lose your work.

Never what's in front of you

The app and window you're using are skipped, checked when the sweep is planned and again right before it acts.

Unsaved work stays open

An app that asks before closing is left alone, and the log tells you why.

Big sweeps wait for you

A run that would close more than half your windows holds until you press Confirm.

Your allowlist wins

Apps, processes, sites and folders on it are never touched, nor anything inside them.

Hands off your repos

Build folders go only when git tracks nothing inside them. Dotfiles in Downloads are skipped.

Nothing happens off the record

The next sweep is listed before it runs, each item with its reason. Every run is logged for 30 days.

PRICING

One plan. Every rule.

Both options include everything Janitor does. The first 7 days are free.

Monthly

$2.99 / month

Billed every month.

Start free trial

Yearly

Save 16%
$29.99 / year

$2.50 a month, billed once a year.

Start free trial

Prices in US dollars. Checkout by Polar asks for a card; cancel within 7 days and you pay nothing.

Let it sweep.

Start free trial macOS 15 or later · 7 days free, then $2.99 a month or $29.99 a year