UPDATE 2021-02-14: Note that this plug-in has been updated substantially since this post was originally written. This post has now been updated to reflect those changes.
Though OmniFocus has options for sequential and parallel action groups which provide some capacity for dealing with tasks which are dependant on each other, on occasion these are insufficient for my needs.
I generally run up against two scenarios where I find this set of automations useful:
- Sometimes a task in one project can’t be started until a task in a second project has been completed. Despite this, they are still distinct projects. (An example of this: accounting work for two related (but distinct) parties.
- Sometimes the “dependency” relationship could be reflected using the built-in sequential and parallel task action group structure, but the level of complexity is such that the nesting of tasks becomes difficult to manage or just unwieldy to look at. (As an example: university coursework, which is often broken down into weekly components that should be completed sequentially with assignments attached to this that shouldn’t block further coursework. Sometimes there are optional readings, or only part of the coursework needs to be done before you can complete a particular part of an assignment.)
In addition, there are some scenarios where the way I am thinking about a task is in terms of “sequential projects”. Again, university coursework is a good example here: in my mind, each week’s content is its own project. But they still need to be done in order i.e. each week is dependant on the previous week.
I have written a plugin that contains a series of Omni Automation Scripts that use tags (
🔒) to designate one task as being dependant on another.
In addition, the ‘notes’ field is used to track more specific details of the prerequisite/dependant tasks:
- A prerequisite task will have a note similar to
[ DEPENDANT: omnifocus:///task/elnhPEQEJzq ] Task 2
- A dependant task will have a note similar to
[ PREREQUISITE: omnifocus:///task/mEur73AEC07 ] Task 1
This means that a task can have more than one dependant or prerequisite task, which allows for greater complexity.
Here is a quick video of the plug-in in action:
To make one or more tasks a prerequisite of one or more other tasks:
- Tag the prerequisite task(s) with
Make Prerequisite(or run the Make Prerequisite action which does this for you).
- Select the dependant task(s).
- Run the ‘Add Prerequisite’ Omni Automation Script.
Instead of marking a task complete, you can run the Complete For Prerequisite action; note that this will also work just fine on tasks that are not prerequisites.
You might wish to assign keyboard shortcuts to each of the above actions to make this easier.
- You can run the Check Prerequisites action as a backup, perhaps as part of a daily or weekly review or automatically using a tool like Keyboard Maestro (a downloadable macro is now included below as of 2021-02-20). This checks all the tasks that are waiting and, if all their dependent tasks have been completed, makes them available.
- You can run the Update Due Dates action, which updates the due dates on the prerequisite task, and any sequential actions that precede it, to match the earliest due date of its dependent tasks.
- You can also use functions available in the
dependencyLibraryin your own scripts:
- getDependants: get a list of a specific task’s dependent tasks
- getPrereqs: get a list of a specific task’s prerequisite tasks
- checkDependants and checkDependantsForTaskAndAncestors to check a prerequisite task for input and, if any of its dependent tasks have been completed, updates the tasks as needed.
- Create the following three tags. (In my database, I have these set up as subtags under a parent ‘Dependency’ tag.)
Make Prerequisite: This is a temporary tag. Refer to the ‘Usage Notes’ below for details of how this is used.
🔑: This tag denotes a task that is required to be completed before another (dependant) task becomes available.
🔒: This tag denotes a task that is currently unavailable because it is waiting for another task to be completed.
- Set the status of the 🔒 tag to ‘on hold’ (to reflect the fact that you can’t make any progress on these items until the prerequisite task has been completed).
The plugin can be downloaded from GitHub here. At that link you will find instructions for installing the plug-in and further details about all of the available actions and functions it contains.
Keyboard Maestro Macro (optional) [added 2020-02-20]
This Keyboard Maestro runs the Check Prerequisites action and so can be set up to run regularly: Run OF Plugin: Check Prerequisites