Dry-run by default
Every command is a preview until you explicitly add --apply. Nothing moves or gets trashed before that.

Preview changes. Apply explicitly. Undo safely.
Keep messy folders organized without giving up control.
Dry-run by default
Every command is a preview until you explicitly add --apply. Nothing moves or gets trashed before that.
Undo built in
Successful moves are recorded as history and can be safely reversed with sift undo.
Explain every decision
sift explain <file> shows exactly why a file was classified, skipped, protected, or moved — before or after the fact.
Per-folder rules
Drop a .sift.toml into any directory to give it its own strategy, rules, and Watch behavior.
Watch
Turn selected folders into continuously organized inboxes, with explicit, persistent authorization.
Tray app
An optional desktop tray UI for managing watched folders without keeping a terminal open.
Folders accumulate entropy — a Downloads directory starts with a few PDFs and screenshots and ends up a mix of documents, archives, videos, datasets, and forgotten project folders. Manual cleanup doesn’t scale, one-off shell scripts are risky to reuse, and AI-based organizers can be hard to predict or audit.
Sift takes a different approach:
--apply, no mutation. Existing destinations are never silently overwritten, directory trees are never automatically merged, and software projects are protected outright.--auto-apply), and only for files that arrive from that point on..sift.toml file lets any directory define its own organize strategy and declarative rules, which always take precedence over the built-in defaults.sift organize ~/Downloadsinvoice.pdf → Documents/vacation.jpg → Images/backup.zip → Archives/notes.xyz → Other/my-project/ → protected: software project
No changes made.Run with --apply to execute.Happy with the plan? Apply it:
sift organize ~/Downloads --apply✓ Applied successfully
3 files moved3 directories created1 entry skipped0 failures
History hist-...Changed your mind? sift undo hist-... reverses it.
.sift.toml
Every directory can define its own policy: strategy, unknown-file handling, Watch stability, and declarative rules.
version = 1
[organize]strategy = "type"unknown = "other"
[[rules]]enabled = truepriority = 100pattern = "*.tmp"action = "Trash"Watch + Tray
Register a folder once, and Sift keeps it organized as new files arrive — stable-file detection avoids half-downloaded files. Manage every watched folder visually from the optional tray app: open, pause, reapply, or toggle recursive mode, without a terminal.
sift watch add ~/Inbox --auto-applysift watch start ~/Inboxsift watch tray