Docs

Set up TinySift and clean safely

Install it, give it the access it needs, and clean your Mac with a preview before anything moves.

TinySift for Mac is not released yet. These pages describe the app as it is designed, so its sections carry a Planned for the app label. The open-source command line, which works today, is covered at the end.

Installation

TinySift for Mac Planned for the app

The app is not released, so there is nothing to download yet, and early access is not open.

Full Disk Access

Some folders, such as Mail and Safari data, are protected by macOS. An app cannot read them until you allow it, and nothing in TinySift can bypass that check. Without access TinySift still works, but the protected locations are out of reach.

Grant it to the Mac app Planned for the app

  1. Open System Settings and choose Privacy & Security, then Full Disk Access.
  2. Turn TinySift on. If it is not listed, click the plus button and pick it from Applications. macOS asks for your password or Touch ID.
  3. Quit and reopen TinySift. macOS applies the change only to apps that start afterwards.

The app is designed to say plainly which locations it could not read, rather than show them as empty. You can turn the switch off again at any time.

What access does and does not mean

  • TinySift looks only in the locations its cleanup categories name.
  • Access lets TinySift read. It never moves a path you did not tick and confirm, and it never follows symlinks out of the listed locations.

Finder access for the Trash

Moving files to the Trash goes through Finder so that Put Back works. The Mac app is designed to ask for this access itself. If you refused, turn it back on under Privacy & Security, then Automation. Until then the Trash action fails and TinySift does not fall back to deleting anything.

Clean Planned for the app

Clean finds caches and leftovers, shows how much space each category takes, lets you pick, and shows every path before it touches anything.

Categories

Each category is a tile with its size, why it is included and its risk. Tiles are grouped by what happens after a move.

  • Rebuilt automatically: caches and build output that tools or apps create again, such as developer caches and Xcode DerivedData.
  • Your files: things only the Trash can bring back, such as old downloads, old screenshots and Mail attachments. Check each path first.
  • Report only: shown but never moved, such as Docker, simulator devices and orphaned app data.

Permanent actions, such as emptying the Trash or deleting Time Machine snapshots, stay in the command line.

Safe, Review and Report only

Every category has a label that decides whether it starts ticked, and whether the app moves it at all.

  • Safe starts ticked: user logs, crash reports, font and Quick Look caches, and Xcode DerivedData.
  • Review is everything else that can go to the Trash. It starts unticked, because a quick look first is wise.
  • Report only covers items the app shows but never moves, such as Docker, simulator devices and orphaned app data.

Preview, then Trash first

  1. Pick categories, each shown as a tile coloured by risk. Safe ones are already ticked.
  2. Open the review sheet: every path with its size, before anything moves. Untick what you want to keep.
  3. Confirm Move to Trash.

Move to Trash goes through Finder, so Put Back works, and it is the only action the app is designed to offer. Afterwards each item is reported as moved, failed or skipped. Moving to the Trash is still deletion if macOS empties the Trash automatically (System Settings, General, Storage), so turn that off or review the sheet carefully.

What it skips

  • A category is skipped while its app is open, for example Xcode categories while Xcode runs. TinySift tells you which app to quit.
  • Project caches are listed only when the project has been idle for 30 days.
  • Orphaned app data is report only. A folder name does not prove an app is gone, so TinySift never moves it.
  • Personal files appear only in three Review categories: old downloads, old screenshots and Mail attachments.

Processes Planned for the app

Processes is designed to show what is using your CPU and memory so you can decide what to clean or quit. It is planned for the Mac app, which is not released yet. Everything below describes the design, not shipped behavior.

What it is designed to show

  • Three tiles on Overview: whole-machine CPU use, memory used out of the total, and the first listening ports.
  • An Apps tab with one row per app, showing its icon, process count and combined CPU and memory, and a Background tab for system and background processes.
  • For a selected app or process: name, PID, owner and its member processes, with search and sorting by CPU or memory.

CPU is counted per core, so a busy app can read above 100%. Data that could not be measured is labelled unavailable or stale, never shown as zero.

How acting on a process is designed to work

  • Quit asks the process to stop. Force Quit is a separate action with its own confirmation, and TinySift never escalates to it on its own.
  • Each confirmation names the target and what will happen. TinySift re-checks the process just before signalling and refuses system processes, itself and processes owned by other users.
  • A Ports tile lists the listeners it can see for your account, so you can find what holds a port. Listeners it cannot see are marked unknown, never free.
  • Reveal in Finder and Copy PID or path are available from the same menu.

Command line Available in the CLI

This engine is designed to run behind the app. Every command that can remove something shows a plan first. clean and uninstall default to Move to Trash, except Docker pruning and Time Machine snapshot deletion, which are permanent. tiny --help and tiny <command> --help list every flag, and tiny --version prints the version.

Install

The Rust engine is open source, and the tiny command is built from source today. You need a Rust toolchain; rustup installs one. The source lives on GitHub.

git clone https://github.com/mxrsv/tinysift
cd tinysift
cargo install --path crates/tiny
tiny --help

cargo install puts tiny in ~/.cargo/bin, so make sure that folder is on your PATH. To try it without installing, run any example below with cargo run -- in place of tiny.

sys, scan and focus only read your system or write their own log. clean and uninstall need macOS and move things to the Trash through Finder, so the first run may ask you to allow your terminal app to control Finder.

Full Disk Access for the terminal

The command-line tool runs with your terminal's permissions. To let it read protected folders, add the terminal app you run it from (Terminal, iTerm and so on) in the Full Disk Access list. The command line does not report what it could not read: it skips unreadable folders without a message, so a category can look smaller than it is until the terminal has access.

System information

Prints one snapshot of the OS, host, uptime, CPU, memory and per-disk usage, then exits. Nothing is written anywhere.

tiny sys

There is no process command yet. A tiny processes command is planned, not built, so the CLI and the app share one implementation.

Scan files

Reports large and old files so you can decide what to keep. It never deletes, moves or changes anything. By default it looks in ~/Downloads, ~/Desktop and ~/Documents.

tiny scan
tiny scan --min-size-mb 500 --older-than-days 365
tiny scan --path ~/Movies --path ./assets
tiny scan --by-ext --duplicates
tiny scan --json > report.json
--min-size-mb <MIN_SIZE_MB>
Report files at or above this size in megabytes. Default 100.
--older-than-days <OLDER_THAN_DAYS>
Report files not modified for this many days. Default 90.
--path <DIR>
Scan this folder instead of the default three. Repeatable; each use replaces the default set.
--limit <LIMIT>
Items shown per section in text mode. Default 20.
--sort <SORT>
size (largest first, default), age (oldest first) or path.
--by-ext
Add a per-extension breakdown: file count and total size.
--duplicates
Group files that share both size and filename.
--hash
With --duplicates, confirm groups by comparing file content. Slower, but drops files that only looked alike.
--json
Print one JSON object on stdout instead of text.

Version-control folders, build and package output such as node_modules and target, macOS metadata folders and anything deeper than 12 levels are always skipped. A .tinyignore file in a scanned folder or your home folder skips more: one folder name or *.ext pattern per line.

Clean caches

Interactive cleanup of caches and recoverable data. It needs macOS, shows a plan first and defaults to Move to Trash, except for Docker pruning and Time Machine snapshots, which are permanent. It uses the same categories as the Clean section above; on the command line they are labelled Safe, Review or Destructive.

tiny clean --dry-run
tiny clean
tiny clean --include-review --review-paths
tiny clean --category node-modules --idle-days 60
--dry-run
Show the report and exit without prompting for cleanup.
--category <CATEGORY>
Restrict discovery and selection to this category. Repeatable; shows it whatever its risk level.
--include-review
List review-risk categories in the picker, unticked.
--include-destructive
List destructive categories such as Trash, unticked.
--review-paths
Untick individual paths after picking categories. Cannot be combined with --yes.
--idle-days <IDLE_DAYS>
Project caches and old downloads or screenshots are listed only when untouched for this many days. Default 30, must be above 0.
-y, --yes
Skip the picker and the action menu. Requires --category and cannot be combined with --dry-run.
--hard
Delete permanently instead of moving to the Trash. Not recoverable.

The plan lists up to 20 paths per category with their sizes, then a count of the rest. The action menu offers Move to Trash (the default), Dry-run, Review paths, Hard delete and Cancel. Hard delete is permanent and asks you to confirm once more. At the end tiny prints how many paths it removed and lists any it could not.

Destructive categories, the Trash, Time Machine snapshots and Docker volumes, are listed only with --include-destructive. Docker cleanup prunes only unused images and build cache. It and Time Machine snapshot deletion have no Trash at all: they are permanent whichever action you choose.

Permanent deletion without a prompt needs TINY_CONFIRM_HARD=1 in the environment as well as -y and --hard.

Focus timer

A focus timer with a progress bar. A finished session is appended to ~/.tiny-cli/focus-sessions.json; stopping early with Ctrl-C records nothing.

tiny focus
tiny focus --minutes 50 --label "deep work"
--minutes <MINUTES>
Length of the session in minutes. Default 25.
--label <LABEL>
Optional label stored with the session.

If the log file is not valid JSON, tiny refuses to overwrite it: it copies the file to focus-sessions.json.bak and asks you to fix or delete the original.

Uninstall apps

Removes an app from /Applications together with the data it left in ~/Library. It needs macOS, reports what it found and asks before removing anything.

tiny uninstall
tiny uninstall AltTab --dry-run
tiny uninstall AltTab --leftovers-only
[NAME]
App name. Without it, an interactive picker lists every app in /Applications.
--dry-run
Only show the report and exit.
--shallow
Remove only the .app, skip ~/Library. Cannot be combined with --leftovers-only.
--leftovers-only
Clean only the ~/Library data and keep the app. Cannot be combined with --shallow.
--sort <SORT>
Picker order: last-used (default, least recently used first), size or name.
-y, --yes
Skip the action menu and move to the Trash immediately.
--hard
Delete permanently instead of using the Trash. Not recoverable.
--force
Allow removing apps installed as Homebrew casks, which tiny refuses by default.

Apple's own apps are always refused. If any selected app is refused, tiny stops after the report and removes nothing.

Unlike clean, uninstall --hard -y deletes permanently with no further confirmation, so run --dry-run first.