Bulk Setting “Catch Up Automatically” in OmniFocus
It turns out that one of my favorite new features in OmniFocus 4.7 is the Catch Up Automatically option for repeating actions:
With this setting turned off, completing an item will create the next occurrence following the schedule you have set, even when the next occurrence is in the past.
With this setting turned on, completing an item will create the next occurrence following the schedule you have set, skipping any occurrences in the past.
I have lots of repeating actions (e.g. for grocery shopping) that I want to do once every week or two. After I complete an action, I want it to disappear temporarily, but then I want it to reappear the next day for planning purposes. Setting the Defer Date to tomorrow and the repeat interval to just one day will make the action reappear as desired, but then when I complete it a week later I’ll have to tap it six times, because a new action will be created for each intervening day.
With Catch Up Automatically, only one new action will be created, and it will again be deferred until the next day. This exactly what I want. I can control which actions are available by bumping the Defer Date by one or two days, or a week, complete an action with a single tap, and have it come back the next day. (I suspect there may also be a way to solve this problem using the new Planned Date feature and a custom perspective that filters based on that, but I like the Defer Date because it works consistently across views.)
The problem with Catch Up Automatically is that it’s awkward to set. There’s no menu command. You have to open the inspector, open a popover, and click a checkbox. This does not work with a multiple selection (unless, I guess, the repetition parameters are identical) so it has to be repeated for each action. What I wanted was a way to set Catch Up Automatically in bulk, with just a keyboard shortcut. Naturally, I thought of writing an AppleScript and invoking it with FastScripts. Here’s the script I ended up with.
There’s a bunch of boilerplate in order to iterate over the selected actions. The meat of the script is just setting the catch up automatically property to true. Unfortunately, there’s a bug where this change doesn’t get saved. Fortunately, an Omni support person showed me that it does get saved if you set it using the JavaScript API (a.k.a. Omni Automation). I should probably start writing all my scripts in JavaScript, anyway, because then they’d work on iOS, too. But it’s cool that on the Mac you can mix and match, calling JavaScript from within an AppleScript, as shown in this script.
In some ways, e.g. iterating over the selection, the JavaScript API is much more compact, but AppleScript is nicer in that you can just mutate a property of the repetition rule. With JavaScript, you have to create a new rule and pass in all the properties as unlabeled parameters.
Previously:
Update (2026-01-23): I have to advise against using this script for now, because it seems to trigger a bug in OmniFocus that will add a due date to the action where there was none before.
Update (2026-01-25): I’ve fixed the script to avoid that bug.
Update (2026-02-06): The scripting bugs were fixed in OmniFocus 4.8.7, and I’ve updated the script accordingly.
5 Comments RSS · Twitter · Mastodon
2do has had an elegant solution to this for a long time, and I'm really glad to see it's back in active development after a long pause.
This is a good example of the interesting thing to me about heavy task management apps. It seems like the task management itself takes so much time and effort. How many people need this extensive of a time management system that we are talking about scripting now that don’t also have to put that extensive type of logging into some third party system for a company anyway, even if it’s their own?
Are people building entire team task management systems around Omnifocus for business? Maybe I just don’t see this much as a more traditional Windows admin but it’s a genuine question. I’ve always been curious how people actually build Mac based small businesses because I personally don’t see a lot of them that aren’t Mac or iOS developers.
@billyok How does 2do handle it?
@Bart What I like about OmniFocus is that it’s powerful but pretty frictionless and that you can use just the parts you care about and ignore the rest. It takes a while to learn the app (or GTD in general) and figure out how you want to organize your tasks, but I mostly did that ~20 years ago when version 1.0 came out. So now I know how I like to do things and I’m using mostly the same system I developed then so it doesn’t feel like there’s any overhead. I use it for personal task management; I don’t think it’s really suited for a team situation or if you need logging or extensive record keeping. So, for example, I might put in that I’m going to work on a certain bug, but that’s just to schedule my day; the details and history of the bug are kept separately in my issue tracker.
The one place Defer Date doesn't work as expected is the Forecast view. If you're only using Defer dates they will drop off the display completely. Planned dates will show up in "Past". I think they put in Planned because people were using Defer "wrong" - using it as the planned work date, not the earliest-it-can-be-worked date. Good example: I've got something I need to do next month. It could likely be done any date but I'll probably not get to it until the middle of the month (say the 15th) but I still want it available (maybe something else will fall through and I can get to it early). The old way is set the Defer to the 15th. The new "proper" way is set Defer to the 1st of the month making it Available then and the Planned date the 15th. In the first case it will drop off the Forecast view if you don't have a due or anything else set. In the second it won't if you miss the 15th, it will just then go in Past.
@JK Yes, I think I am probably using Defer wrong. I use it to hide actions that really should be available but that I don’t want to see right now. The idea of Planned Date makes a lot of sense to me, but I haven’t figured out how to do anything useful with it in terms of filtering what’s shown in my perspectives. I can see how it would be more useful if I drove everything off the Forecast view, but I barely use that.