One of the things I’ve embraced about GTD is the idea of the tickler file system. This is accomplished really well in to-do applications like Things, and in the Mailbox app for emails, but I wanted to create a similar system for physical files.

The only prerequisite, I suppose, is that you use your desktop like I do – as a place for relevant files for today’s work, not as a dump for all your files. In other words, your desktop has to be relatively clear for you to notice when new files pop up.

Here’s how it works:

Drop a file onto a folder on your desktop named “Defer” and Hazel recognizes it, bringing up a user input dialog like this:

After you choose, Hazel sorts the file into a folder based on the date (“This Weekend” is for the next Saturday, “Next Week” is for the next Monday, “In a Month” is in 30 days, and “Someday” is in 3 months):

Hazel then periodically checks the file names against today’s date and moves the files onto the desktop when appropriate.

Here’s how to set it up:

In Hazel, create a new rule for your “Defer” folder, with the following criteria and the attached applescript:

Edit: you need to add the custom attribute ‘test’ in the options dialog for the Run Applescript action:

on hazelProcessFile ( theFile ) tell application "Finder" activate set todayDate to current date choose from list { "Tomorrow" , "This Weekend" , "Next Week" , "In a Month" , "Someday" , "Pick Date" } with prompt "How long to snooze " & ( name of theFile ) & "?" set theAnswer to result as text if theAnswer is "Tomorrow" then set theDate to ( todayDate + ( 24 * 60 * 60 )) set theDateString to date string of theDate return { hazelExportTokens :{ test : theDateString }} end if if theAnswer is "This Weekend" then set theDate to my DateOfThisInstanceOfThisWeekdayBeforeOrAfterThisDate ( current date , Saturday , 1 ) set theDateString to date string of theDate return { hazelExportTokens :{ test : theDateString }} end if if theAnswer is "Next Week" then set theDate to my DateOfThisInstanceOfThisWeekdayBeforeOrAfterThisDate ( current date , Monday , 1 ) set theDateString to date string of theDate return { hazelExportTokens :{ test : theDateString }} end if if theAnswer is "In a Month" then set theDate to ( todayDate + ( 24 * 60 * 60 * 30 )) set theDateString to date string of theDate return { hazelExportTokens :{ test : theDateString }} end if if theAnswer is "Someday" then set theDate to ( todayDate + ( 24 * 60 * 60 * 30 * 3 )) set theDateString to date string of theDate return { hazelExportTokens :{ test : theDateString }} end if if theAnswer is "Pick Date" then set theCurrentDate to current date display dialog "When should I remind you (date)?" default answer ( date string of theCurrentDate & space & time string of theCurrentDate ) set theText to text returned of result set theDate to date theText -- a date object set theDateString to date string of theDate return { hazelExportTokens :{ test : theDateString }} end if end tell end hazelProcessFile on DateOfThisInstanceOfThisWeekdayBeforeOrAfterThisDate ( d , w , i ) -- returns a date -- Keep an note of whether the instance value *starts* as zero set instanceIsZero to ( i is 0 ) -- Increment negative instances to compensate for the following subtraction loop if i < 0 and d 's weekday is not w then set i to i + 1 -- Subtract a day at a time until the required weekday is reached repeat until d 's weekday is w set d to d - days -- Increment an original zero instance to 1 if subtracting from Sunday into Saturday if instanceIsZero and d 's weekday is Saturday then set i to 1 end repeat -- Add (adjusted instance) * weeks to the date just obtained and zero the time d + i * weeks - ( d 's time ) end DateOfThisInstanceOfThisWeekdayBeforeOrAfterThisDate

2. Make another rule for the “Defer” folder that has “move to Desktop” as the action.

I keep this folder on the desktop with this custom icon.