AppleScript for Creating Follow-up Tasks in Things
A major component of my job is asynchronously collaborating with other people, usually subject matter experts from whom I need to get additional information or content approval on something I have created.
All of my project templates have this approval process built in at the appropriate points. This creates a common challenge: the people I’m working with are often overworked or get appropriately distracted by dealing with some type of emergency at work, and reviewing a script for the trainer gets put on the back burner. So, tactful follow-up is a critical skill and often something I’m managing across multiple people and projects at the same time.
After I created this solution, I realized that I essentially created the Things version of the Complete and Await Reply script from Curt Clifton, which I definitely used back in the day with OmniFocus. I guess I just incepted myself into making this for Things. You’ll definitely see some similarities in the core concepts, but those were subconscious.
Solution
I’m a heavy user of the dates and notes fields for action items and projects in Things, so I wanted to make sure that those notes were preserved, but I also wanted to have a history of when I completed the task available to me in the notes field.
I also wanted the action item to be readily visible as a follow-up item and to be searchable via a standard URL scheme for use in my weekly reviews. As is appropriate for my workplace, I wanted to be reminded of this follow-up task seven days after initially marking it complete.
I also wanted to be able to run this script on a task a second time without cluttering the task up too much while still maintaining the documentation of multiple follow-ups. I can’t say I have to use this double application very often, but it is nice to have.
Here’s how it looks in action:


Script
The script handles these key functions:
- Marks your original task complete
- Creates a new follow-up task with “📬 Follow Up:” prefix
- Preserves all original task metadata (project, area, due dates, deadlines)
- Maintains a timestamped history in the notes
- Adds a “waiting” tag for GTD compatibility
- Sets a follow-up reminder for 7 days later
After going through five different iterations and a lot of help from Claude, here is the script I’m using to achieve all of these requirements.
(*
Things 3 "Create Follow-up Task" Script
Version: 1.5
Created by: Mike Burke (https://www.themikeburke.com) and Claude (Anthropic)
Last Updated: 2025-02-01
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 enhances Things 3's task management by creating an automated workflow for tasks that require active follow-up with external parties.
It provides a proactive approach to tracking follow-ups while maintaining compatibility with GTD methodology.
Functionality:
1. Processes selected task(s) in Things 3 and converts them to follow-up tasks
2. For each selected task, it:
a. Marks the original task as complete
b. Creates a new task with modified title based on status:
- New tasks: Adds "📬 Follow Up: " prefix
- Existing follow-up tasks: Maintains current prefix
c. Preserves and transfers the following properties:
- Project assignment
- Area
- Due date
- Deadline
- Tags
d. Adds a "waiting" tag for GTD system compatibility
e. Updates task notes with timestamped history:
- First time: "Original task completed on [date]"
- Follow-ups: "Followed up on [date]"
f. Places the new task in same project/area as original
g. Sets follow-up date 7 days from creation
Usage:
1. Select one or more tasks in Things 3
2. Run this script
3. Selected tasks will be completed and new follow-up tasks created with 7-day reminders
Note: Requires Things 3 for macOS. Maintains GTD workflow compatibility while promoting active follow-up approach.
*)
tell application "Things3"
-- Get today's date in the desired format
set currentDate to current date
set formattedDate to short date string of currentDate
-- Get selected to-dos
set selectedToDos to selected to dos
-- Check if any to-dos are selected
if (count of selectedToDos) is 0 then
display dialog "No tasks selected. Please select at least one task in Things 3." buttons {"OK"} default button "OK" with icon stop
return
end if
repeat with selectedToDo in selectedToDos
-- Get the original task's properties
set originalName to name of selectedToDo
set originalNotes to notes of selectedToDo
set originalTagNames to tag names of selectedToDo
-- Check if this is already a follow-up task
set isFollowUp to originalName starts with "📬 Follow Up: "
-- Prepare the new task name and notes based on whether it's a follow-up
if isFollowUp then
set newTaskName to originalName
set newNotes to "Followed up on " & formattedDate & linefeed & "---" & linefeed & originalNotes
else
set newTaskName to "📬 Follow Up: " & originalName
set newNotes to "Original task completed on " & formattedDate & linefeed & "---" & linefeed & originalNotes
end if
-- Create the new task in the inbox (we'll move it later if needed)
set newTask to make new to do with properties {name:newTaskName, notes:newNotes} at beginning of list "Inbox"
-- Set project or area
try
set originalProject to project of selectedToDo
if originalProject is not missing value then
set project of newTask to originalProject
end if
end try
if project of newTask is missing value then
try
set originalArea to area of selectedToDo
if originalArea is not missing value then
set area of newTask to originalArea
end if
end try
end if
-- Set due date
try
set originalDueDate to due date of selectedToDo
if originalDueDate is not missing value then
set due date of newTask to originalDueDate
end if
end try
-- Set deadline
try
set originalDeadline to deadline of selectedToDo
if originalDeadline is not missing value then
set deadline of newTask to originalDeadline
end if
end try
-- Prepare tag names
if originalTagNames is not "" then
if originalTagNames does not contain "waiting" then
set newTagNames to originalTagNames & ", waiting"
else
set newTagNames to originalTagNames
end if
else
set newTagNames to "waiting"
end if
-- Apply tags
set tag names of newTask to newTagNames
-- Set when date to 7 days from now
schedule newTask for (current date) + (7 * days)
-- Mark the original task as complete
set status of selectedToDo to completed
-- Show the new task in Things 3
show newTask
end repeat
end tell
Application
While creating a script that does this is the bulk of the achievement, I also wanted to make sure the script was easy to use while I’m in Things.
As I’ve shared before, I love using my Stream Deck to interact with Things. So, I added a Waiting button to my Things profile for Stream Deck. That button uses KMLink to trigger a Keyboard Maestro macro that houses the above script.
Conclusion
As a result of using this script, I have far fewer stalled projects and abandoned action items hidden in the depths of Things. As a side benefit, I’ve also improved my documentation for projects.
I hope this script helps you do the same! Feel free to modify the script to match your needs – for instance, you might want to adjust the 7-day follow-up period or customize the emoji prefix to match your system.
Leave a Reply
Want to join the discussion?Feel free to contribute!