Protected Paths
Software project roots
Section titled “Software project roots”A directory containing any of these markers is treated as a software project root and protected outright — organize (recursive or not) never descends into it or reclassifies its contents:
.gitCargo.tomlpackage.jsonpyproject.tomlpubspec.yamlsift folders reflects the same rule: a child folder that’s a software project is reported under Protected, never moved or even suggested.
Traversal boundaries
Section titled “Traversal boundaries”Recursive traversal (organize --recursive, recursive Watch) also stops at known build/dependency output directories, without needing a project marker at that exact level:
node_modulestarget.venvSift’s own category directories
Section titled “Sift’s own category directories”Recursive traversal also avoids descending into the categories Sift itself creates (Documents, Images, Audio, Video, Archives, 3D, Code, Data, Other), which prevents repeated nesting like:
Documents/Documents/file.pdfA custom rule destination (e.g. destination = "Invoices") is protected from re-entry the same way — Sift never reclassifies a file it (or a nested .sift.toml) already placed there.
Hidden entries and symlinks
Section titled “Hidden entries and symlinks”Hidden entries (dotfiles/dotdirs) are left alone entirely. Symlinks are never followed for organization decisions — see Safety Model for the full no-follow guarantee.
Checking what’s protected without applying anything
Section titled “Checking what’s protected without applying anything”sift doctor ~/Downloads --recursivereports software projects, symlinks, and other findings without touching the filesystem. See Doctor.
