.sift.toml
version = 1
[organize]strategy = "type"unknown = "other"
[watch]stability_seconds = 3
[[rules]]enabled = truepriority = 100pattern = "*.tmp"action = "Trash"description = "Trash all .tmp files"
[[rules]]enabled = truepriority = 90pattern = "*.zip"action = "Move"destination = "Archives"description = "Move .zip to Archives"Top level
Section titled “Top level”| Field | Type | Notes |
|---|---|---|
version |
integer | Must be 1 — the only version this Sift build supports. A file that doesn’t specify version is treated as 1. |
An unrecognized top-level key in .sift.toml is a hard error, not a silently-ignored typo — a config file that can drive automatic mutation is never allowed to have a field that quietly does nothing.
[organize]
Section titled “[organize]”| Field | Type | Notes |
|---|---|---|
strategy |
string | "type" (default), "date", "audio", "video", "photos", or "documents". See Strategies. |
unknown |
string | "other" (default) or "skip" — what happens to a type-classified file with no recognized extension. |
template |
string | Required for date/audio/video/photos/documents; invalid for type. The destination pattern, e.g. "{year}/{month}" or "{artist}/{album}". |
date_source |
string | Only valid with strategy = "date". |
[watch]
Section titled “[watch]”| Field | Type | Notes |
|---|---|---|
stability_seconds |
integer | 1–300. How long a candidate file must sit unchanged before Watch organizes it. Defaults to 2.5 seconds if omitted. See Stability Window. |
[[rules]]
Section titled “[[rules]]”See Rules for the full field-by-field reference, action semantics, and destination-safety rules, and Rule Priority for how conflicts between multiple matching rules resolve.
Where Sift looks for this file
Section titled “Where Sift looks for this file”See Configuration Lookup for the exact resolution order (local .sift.toml → global config → built-in defaults), and how recursive organize and Watch each pick which file governs which subtree.
Generating one
Section titled “Generating one”sift init ~/Downloadssift init ~/Downloads --force # overwrite an existing .sift.tomlValidating one
Section titled “Validating one”sift config check ~/Downloadssift config check ~/Downloads --json