OmniFocus 4.7 Request: Trigger iOS Shortcut when completing task

It would be great if there was a way to trigger an iOS or macOS Shortcut to run upon marking as task as completed in OmniFocus. This would be particularly useful in repeating tasks, making it possible to run OmniAutomation scripts immediately.

I can think of so many use cases for this.

Imagine you have a task to “Put laundry on to wash” which is part of a sequence of tasks for your laundry routine. When you tick this task off, you could run a script to set the defer time for the next task “put laundry in dryer” to 3 hours from now when the cycle has likely finished therefore hiding the next task until it is needed.

This feature would really open up the customization options for for specific use cases that may not natively be supported by OmniFocus out the box.

5 Likes

I love this idea! I can also think of several things I’d do with this. For example, I use a separate app for logging certain recurring actions, to monitor when and how frequently I’m doing them. Currently I complete the task, check it off in Omnifocus, then open the other app and check it off there as well. I’d love for Omnifocus to trigger a Shortcut that marks an action as completed elsewhere.

1 Like

In case it helps you, I do have a kind of workaround for some use cases like this at the moment, but it is not perfect, and only works in some situations. As an example, I use the app “HabitKit” to keep track of particular daily habits I am trying to stick to (Meditate, Workout, Duolingo etc.). It nicely has Shortcuts support for completing habits. In OmniFocus, as part of the sequence of tasks for doing my daily Duolingo practice, I have an task that appears in the sequence called “Hey Siri, extend my Duolingo Streak!”. When the it appears, I recite the command which activates Siri and then runs a shortcut, that both extends the streak in Habitkit, and also marks this action as complete in OmniFocus. i.e. It ticks itself off, once it has run.

It is nothing like as elegant as having the Shortcut run automatically when you you complete the previous action but it works okay for this situation. It also requires having an extra task for everywhere you want to do this which makes things more cluttered than where you want to do this.

HabitKit is here: https://www.habitkit.app/

(I used to use the app Streaks for years but I recently switched to HabitKit since I just love the fact that it gives you a view of your overall progress as widgets which can also be displayed on the homescreen)

2 Likes

It also would be great to be able to set an OmniAutomation plug-in to run when a task is marked as completed.

(Or possibly whenever the status of the task changes, allowing a shortcut / plug-in to check the status and do something different depending on the status, for example, whether the task has been completed or dropped.)

1 Like

This would be so useful

You need to email the Omni Support team and let them know you want this. They’ll add it to the idea list and triage as appropriate

Did some automation for that. Should I look that post up?

Already done, but anyone else who wants this feature should also email them. That’s why I also share it here.

I think the OPs request could also be something built right into OF for sequential projects. It’s fairly common for a subsequent task in a project to not be immediately available, but have an offset from the completion of the prior task. While I can put in a manual defer when planning the projects, that is a set date rather than a relative date. I’d love the ability to configure a defer as X hours/days/weeks/months after the prior task completes. While this can be done with automations, that can be beyond a regular non-tech user, so something built in would be great.

Unfortunately today, there is not any external trigger based on an event within OF (either shortcuts or OmniAutomation).

The closest would be to have an automation/Shortcut that gathers the most recently updated tasks and then performs desired operations based on that. In shortcuts, you can use an automation run every hour for example that gets any recently completed tasks and then does something based on that. While this is not evented, but rather more like a cron job, it still delivers the OP’s intention albeit with up to an hour delay.

1 Like

You may find this helpful.

What you are talking about is really what I want this for. I requested this yearsf ago but frustratingly there is still no solution that I have found for this: Feature Request: Insert time delay between sequential tasks

I have always wished that actions had a “Delay after Completion” setting which can be set to x minutes/hours/days. This could be used to insert a delay between sequential tasks so that the next task in a sequence won’t become available for a finite duration based on when the prior task was completed. It’s frustrating that there is no way to accomplish this (at least as far as I have discovered).

Perhaps it could be completed using an OmniAutomation plugin, but as far as I know there is no way to run a script upon completion of the prior task. This is why I was asking for this feature which would hopefully open up a lot of possibilities to enable this.

The closest is what I alluded to with a recurring automation that executes the automation plugin. In many cases, if you only update downstream tasks once a day for the delay, that’s probably OK.

But internally for OF to support an evented callback could cause the app to slow down a lot. I have some scripts I’ve written that look for tasks meeting certain date based criteria & then aggregate them to capture estimated time summed up. On an M4 max MacBook, this still takes about 3-4 seconds. On my iPhone or iPad it is even slower. I do have ~6K tasks in my DB.

If on every task complete the app needed to notify any number of scripts that could then take some time to return, it could make the app feel positively lethargic. OmniGroup is good about adding in useful features, but they also consider the user experience, so I can assume its because of a worry of sluggish performance that they haven’t offered it yet.