Catch Up Automatically
Summary: Sets all the selected repeating actions to “Catch Up Automatically.”
Requires: OmniFocus Pro
Install Location: ~/Library/Scripts/Applications/OmniFocus/
Last Modified: 2026-01-13
Description
Changing the Catch Up Automatically for repeating actions takes a long time in the user interface because the checkbox is inside a popover that’s only accessible when a single action is selected. This script lets you select multiple actions at once and set them all to Catch Up Automatically.
Installation Instructions · Download in Compiled Format · Download in Text Format
Script
on processAction(_action)
tell application "OmniFocus"
set _repetition to _action's repetition rule
if _repetition is missing value then return
-- This should work, but OmniFocus 4.8.7 has a bug where it doesn't save the changes
set _repetition's catch up automatically to true
set _action's repetition rule to _repetition
-- So work around that by using JavaScript. We have to create a new rule because the properties are read-only.
set actionID to _action's id
evaluate javascript "
task = Task.byIdentifier(" & quoted form of actionID & ")
newRule = new Task.RepetitionRule(
task.repetitionRule.ruleString,
null, // deprecated `method` property replaced by `scheduleType`
task.repetitionRule.scheduleType,
task.repetitionRule.anchorDateKey,
true // catch up automatically
)
task.repetitionRule = newRule"
-- Test that it was actually set
set _newRule to _action's repetition rule
if not _newRule's catch up automatically then
display dialog "Change didn't get written back"
end if
end tell
end processAction
on run {}
repeat with _action in my selectedActions()
my processAction(_action)
end repeat
end run
on selectedActions()
tell application "OmniFocus"
return my filterValues(my selectedValues(), {inbox task, task, available task, remaining task})
end tell
end selectedActions
on selectedValues()
tell application "OmniFocus"
return value of selected trees of content of first document window of front document
end tell
end selectedValues
on filterValues(_values, _classes)
tell application "OmniFocus"
set _result to {}
repeat with _value in _values
if _classes contains _value's class then
copy _value to end of _result
end if
end repeat
return _result
end tell
end filterValues