Skip to content
Ideas

Mac app · 2026

6 min read

Playable

Menlo: a calmer place for your files

Downloads and Desktop, cleared into the folders you already use, by rules you write in plain words. Local-first, no account, and every run can be sent back.

Download Menlo for macOSSource on GitHub

v0.1.0 · DMG · Apple Silicon · macOS 11+ · MIT

Every Mac I have owned ends up with the same two folders. Downloads fills with invoices, boarding passes, screenshots and installers, and Desktop fills with whatever did not fit in Downloads. The tools that promise to fix it want one of two things: a rule builder with fifteen dropdowns, or permission to send your files to a model in someone else's data centre.

Menlo is the idea that neither is necessary. You name the folders you already use, you write rules the way you would say them out loud, and the app shows you every landing before a single file moves. It works with no AI at all, and it tells you plainly when a rule is one it cannot read.

Menlo's home screen: a dark window with the folders to clear on one side and the folders to file into on the other.

Watch a run

One run of Menlo over a typical Downloads folder, animated. It plays by itself; pause it, or pick any step to hold it there. The files are the same chips the whole way through, so you can follow each one from where it sat to where it lands, and back again.

01 · Scan. Menlo lists what is sitting in Downloads. Nothing is read beyond names, types, dates and sizes.

  • Anything named invoice
  • Lease or agreement in the name
  • Screenshots
  • Photos from 2025
  • Tax stuff

~/Downloads · 7

  • Invoice_Aug2026.pdf
  • Lease agreement.pdf
  • Screenshot 10.14.33.png
  • IMG_4821.heic
  • Invoice_Aug2026 copy.pdf
  • Form16_FY25-26.pdf
  • zoom_installer.pkg

Invoices 20260

Contracts0

Screenshots0

Photos 20250

Trash0

Two files never move, and that is the point. "Tax stuff" has no cue word Menlo can read, so the form waits for a model instead of being guessed at. The installer is left alone because installers are, unless you opt in. I would rather ship that gap than a heuristic that is right nine times and moves your lease into Pictures on the tenth.

The stages, in the app

In the app, a run moves through these screens, and nothing moves until you press Move. Pick a stage to read what happens there.

Choose

Pick the folders to clear and the folders things can land in. On first launch Menlo sets itself up from the folders you already have: Downloads and Desktop to clear; Documents, Pictures, Movies, Music and Developer to file into, with their existing subfolders.

The Shape step: the Documents folder with a Contracts subfolder carrying the rule 'Anything with the word lease or agreement goes here'.
Shape. Rules are sentences, stored exactly as written and read afresh on every run.
The preview dialog: three files have a place, one gets a clearer name, one duplicate goes to the Trash, and a Move 3 button.
The preview. A screenshot filed into Screenshots gets a name that says more than the one macOS gave it.

The idea underneath it

Most file organisers treat the problem as classification: look at a file, decide what it is. Menlo treats it as a contract about where files are allowed to go, and classification is only one way of honouring it.

That framing decides everything else:

Nothing moves unseen
You press Move, and by default you have seen every landing first.
Nothing is overwritten
A name clash gets a (2) suffix. A file that only shares a name is a different file.
Only identical copies are trashed
Both copies are re-hashed right before, so a file that changed after the preview is never removed.
No network code
The Rust core makes no network calls, and CI fails the build if an HTTP client is ever added to it.
A model never names a path
When one is used, it picks a folder key from a list Menlo supplied. Menlo maps the key to a folder you added.
It refuses the dangerous places
The system folders, ~/Library, app bundles, symlinks, files open in another app, and installers unless you opt in.

The last row but one is the part I care most about. A model is a good reader of "tax stuff" and a terrible thing to hand a filesystem path to. So the model's job is narrowed to choosing between options Menlo already trusts, which makes a wrong answer a misfiled document you can send back, never a file written somewhere you did not choose.

Where it goes next

  • A local model, through Ollama. Gemma on the same Mac for the rules plain matching cannot read, reached through the ollama command line so the Rust core stays free of network code.
  • A coding CLI as an option, never a requirement. Claude Code or Codex as a classifier, for people who already have one.
  • Learning from approvals. Every preview you confirm is a labelled example. A small decision model trained on those could replace the model step entirely, which is the same move that worked for categorising in Third Street Bookmarks.
  • A menu-bar agent for scheduled runs, and a notarised build so no right-click is needed on first open.
The Runs screen listing past runs, each of which can be sent back whole, by folder, or just its Trash.
Runs. Every run is reversible, down to a single folder of it.

Get it

Menlo is free and MIT licensed. The download above is the Apple Silicon build; it is signed ad hoc rather than with a paid Developer ID, so the first time you open it macOS will ask you to allow it under System Settings → Privacy & Security. On an Intel Mac, build it from source.

The code, the install guide and the architecture notes are on my GitHub at github.com/mayanksagar26/menlo, alongside everything else I build in the open at github.com/mayanksagar26.

It is named after the compulsively organised office aide in Recess.

Mayank Sagar

Bengaluru, India. Currently Senior Consultant, Product at MiQ Digital.

© 2026 Mayank Sagar. Built with Next.js.