Wednesday, January 14, 2026

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:

3 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.

Leave a Comment