Updated Evening AppleScript for Things
Improving existing solutions is a slippery slope for automators. You might improve things in a way that continues to save time and improve outcomes. But you might also be spending time rearranging apps in your Mac’s Dock to save milliseconds of mouse movement, only to realize you could have just used Alfred all along.
In this post, I share an improved automation for dealing with recurring tasks in Things that I think falls firmly on the side of worthwhile.
Previous AppleScript
I previously shared a wonderful AppleScript I found for dealing with moving repeating tasks in Things tasks to the Evening section of the Today view. It has been an awesome improvement to my Things experience for years.
But I have always had a paper-cut about the fact that the script removed any reminders that are on the recurring tasks, which it moved to the Evening section. As a result, I would have an evening task to Journal, but I would never do it since I was not looking at Things in the evening.
I decided to take this problem to Claude, and we came up with a new AppleScript that not only moves tasks to the Evening section based on a tag but also assigns reminders to those tasks too!
New AppleScript
This new script still runs via Keyboard Maestro early each morning to sort all my tasks before I wake up. It looks for any task tagged with “evening” and moves that task to the This Evening section of my Today view in Things.
But, after the task is moved, the script also looks through the notes of the task to look for a reminder time. If it finds one, it will add a reminder to the task with the time it found. It also preserves any Deadlines you have assigned to tasks, ensuring due dates aren’t lost when moving items to evening.
Reminder Time Formatting
This was needed because neither of Things’ automation solutions can read reminder data for a task, but they can read its notes. Since this is for recurring tasks, I decided it would be worth it for me to add this reminder time data in the notes section of the relevant tasks to get reminders on my tasks.
To prevent accidental assignment of reminders to actions, I decided that a useable but unique format would be best. The format that the script looks for is:
Reminder: 19:00
When the script searches the notes of an evening task and finds “Reminder: ” it reads the next five characters and converts that to a time for the reminder, this means that the reminder time needs to be in 24-hour time format since the script is just looking for five characters (including the colon).
Your reminder time can be at any part of the note, so feel free to continue using your notes as you need. I like having URLs for Shortcuts in mine.

Code
Here is the code for this new version of the script I use. You will need to get your Things Authentication Token and replace the “YOUR_AUTHENTICATION_TOKEN_GOES_HERE” part of the code with your token, inside the quotes.
(*
Evening Task Manager for Things 3
Version: 1.0
Created by: Mike Burke (https://www.themikeburke.com) and Claude (Anthropic)
Last Updated: 2025-02-02
License: MIT
Copyright (c) 2025 Mike Burke
Permission is hereby granted to use, copy, modify, and share this script freely,
provided the above copyright and attribution notices are preserved.
Full license text: https://opensource.org/licenses/MIT
Description:
This AppleScript automates the management of evening tasks in Things 3 by moving tasks tagged with "evening" from the Today list to the evening section. It supports custom reminder times and preserves existing due dates during the transfer process.
Functionality:
1. Scans the Today list in Things 3 for tasks tagged with "evening"
2. For each matching task, it:
a. Preserves the original due date if one exists
b. Checks for a reminder time in the task's notes
c. Preserves and transfers:
- Task metadata (ID, content, tags)
- Due dates
- Reminder times (if specified)
d. Moves the task to the evening section
e. Handles two scenarios:
- Tasks with reminder times: Moves to evening with specified time
- Tasks without reminder times: Moves to evening without time
f. Reapplies the original due date after moving
Usage:
1. Tag any Today tasks that should move to evening with the "evening" tag
2. Optionally add a reminder time in the task notes using format:
Reminder: HH:mm (e.g., "Reminder: 18:00" for 6:00 PM)
3. Run the script to move tasks to the evening section
Note: Requires Things 3 for macOS with URL scheme access enabled. Authentication token must be configured in Things 3 settings.
*)
tell application "Things3"
-- Initialize Things 3 authentication token
set theToken to "YOUR_AUTHENTICATION_TOKEN_GOES_HERE"
-- Get all tasks from Today list
set theTodos to to dos of list "Today"
-- Process each task in Today list
repeat with aTodo in theTodos
-- Store the original due date before moving task
set originalDueDate to missing value
try
set originalDueDate to due date of aTodo
end try
-- Extract reminder time from task notes if present
set notesContent to notes of aTodo
set reminderTime to missing value
-- Parse reminder time using format 'Reminder: HH:mm'
if notesContent contains "Reminder:" then
set textStart to offset of "Reminder:" in notesContent
-- Extract the time string (5 characters: HH:mm)
set reminderString to (characters (textStart + 10) through (textStart + 14) of notesContent) as string
set reminderTime to reminderString
end if
-- Check task tags for "evening" tag
set tagList to tags of aTodo
repeat with aTag in tagList
if (name of aTag as text) is "evening" then
-- Construct URL to move task based on reminder presence
if reminderTime is not missing value then
-- Move to evening with specific reminder time
set theUrl to "things:///update?auth-token=" & theToken & "&id=" & (id of aTodo as text) & "&when=evening@" & reminderTime
else
-- Move to evening without specific time
set theUrl to "things:///update?auth-token=" & theToken & "&id=" & (id of aTodo as text) & "&when=evening"
end if
-- Execute the move operation
open location theUrl
-- Restore original due date if it existed
if originalDueDate is not missing value then
set dueDateUrl to "things:///update?auth-token=" & theToken & "&id=" & (id of aTodo as text) & "&due=" & originalDueDate
open location dueDateUrl
end if
end if
end repeat
end repeat
end tell
Closure
I hope this script helps you have a better experience with Things and serves as an example of how automation can help customize and improve your experience with an app. Now that Things is giving me a reminder, my Evening Journaling habit is actually starting to develop; I hope this workflow has the same result for you.
Let me know in the comments about an improvement you made to your setup through customization or automation!
Trackbacks & Pingbacks
[…] Update: I created an improved solution for evening tasks in Things. Check out the new new post here. […]
Leave a Reply
Want to join the discussion?Feel free to contribute!