October 2016


Automation with OmniFocus


Currently, I use OmniFocus for all of my task management, from projects at work, to projects at home, to regular day to day tasks. I’ll go into why I’d recommend OmniFocus at another time, but today I wanted to discuss one of the most recent additions to the iOS version that makes it so powerful!


*This post will assume you have some understanding of how to work in in OmniFocus. I will lightly go into detail on some items, though this may still be overwhelming if you have never used OmniFocus before. *

While I plan to go more in depth into the basics, if you would like some in depth tutorials on OmniFocus, I would highly recommend MacSparky’s OmniFocus Field guide.

OmniFocus uses the TaskPaper format to allow for creating reusable checklists and templates. The syntax can seem a little weird at first if you’ve never worked with it before, so I’ll break it down myself with a checklist that I currently use and you can feel free to modify as you see fit.

It can be very useful to have a checklist or template you go through whenever completing a task, however creating one by hand every time can be a pain. I have to travel quite a bit for work, so one of the first things I did is create a simple checklist to make sure I always pack what is required every time I travel.

I can honestly say that this checklist has already saved me on a few occasions and has certainly brought peace of mind to knowing that I certainly packed everything that I will need.

Without further adieu, here is my travel TaskPaper script.

Travel List for «trip»  
    «days» shirts @context(Home)
    «days» socks @context(Home)
    «days» underwear @context(Home)
    slacks @context(Home)
    jeans @context(Home)
    shorts @context(Home)
    white noise generator @context(Home) @flagged
    earplugs @context(Home) @flagged
    passport @context(Home)
    dress shoes @context(Home) @flagged
    running shoes @context(Home)
    gym wear @context(Home)
    Dopp kit @context(Home)
        toothbrush @context(Home)
        toothpaste @context(Home)
        mouthguard @context(Home) @flagged
        razor @context(Home)
        razor blades @context(Home)
        shaving cream/butter @context(Home)
        deodorant @context(Home)
        medication for «days» days @context(Home) @flagged

This may seem like gibberish at first, but allow me to break this down a little for you.

Projects and Contexts

OmniFocus works on the GTD workflow, one of the big components of this is having a Project and a Context (where you would take care of this task) for every task. The project is the the name declared in the 1st line of this text, the context is declared with the variable @context on each of the lines.

There are certain items I want to be extra sure that I don’t forget them, so I flag them in OmniFocus to give them some extra attention, adding the @flaggedvariable to the end of a line makes sure that this item is flagged.

Finally, the «days» and «trip» entries are variables created for this project. When I run the workflow, a popup comes up asking me to enter these variables, allowing me to automate different parts of this checklist. Knowing how many days I will be traveling allows me to just set the variable for shirts, socks, underwear and medicine without having to statically set them every time.

Some extra software is required. To use this automation, on top of OmniFocus, you will need the app Editorial for iOS to be able to run the workflow required to turn the TaskPaper document into an OmniFocus project.

If you already have Editorial you can click here to download the Editorial workflow “new OmniFocus project” to execute the taskpaper script.

## The Nitty Gritty

There are several other @ tags that can be used in the taskpaper script that I did not utilize in this script, below some extra tags, with each I will give an example simple taskpaper script.

`@estimate(time span)` – time estimate, e.g. 2h for 2 hours or 3w for 3 weeks.

Write Blog Post  
rough draft @context(Home) @estimate(2h)  
proof read draft @context(Home) @estimate(1h)  
publish article @context(Home) @estimate(30m)  

`@flagged` – present when an item is flagged

I’ve gone through this in the travel example above, so I will just past a piece of it here again, flagging specific items in your project:

Dopp kit  
    toothbrush @context(Home)
    toothpaste @context(Home)
    mouthguard @context(Home) @flagged
    razor @context(Home)

`@parallel(bool)` – whether children are parallel (true) or sequential (false)

This may require a little extra information. Project tasks in OmniFocus can be either Parallel or Sequential. Parallel means that you can check off the tasks in any order you like. By default, this is the default behaviour if you don’t specify this tag.

With a Sequential task set, you can only complete an item in the list after all the items before have been taken care of. This can be very useful when working on a project that requires steps to be followed in a specific order and can’t be skipped.

Wear dress shoes @parallel(false)  
    Put on dress socks @context(Do)
    Put on dress shoes @context(Do)

`@autodone(bool)` – whether the item automatically completes itself when its children are complete (named to match @done)

If you made a task with subtasks, like my Dopp Kit example in my travel list, the top item will auto complete when all the other tasks are done if the (bool) is set to (true). The default behavior if nothing is put in here is false.

Study for Exam @context(Do) @autodone(true)  
    review chapter 7 @context(Do)
    complete study guide @context(Do) 
    complete test exam @context(Do)
    grade test exam @context(Do)

Finally I’ll combine these last two tags, as they make sense to be done together

`@defer(date) `– defer until date, e.g. YYYY-MM-DD 5pm or next Thursday -3d

`@due(date) `– due on date

With some projects, you may want to set a finite day that a task, or the entire project would be due. You also may know that certain tasks can’t be taken care of at all until a certain date, and seeing them in your workflow before you’re ready for them could be overwhelming. So you can defer a task, so It won’t show up at all until you are ready for them.

Here is an example project where an item is due in 1 day, a task is deferred for 3 days, and the project itself is due in a week:

Interview with the Bobs @due(7d)  
    planning meeting at Chotchkie's @context(Do) @due(1d)
    review handout "Is this good for the Company?" @context(Do) @defer(3d)
    upload virus to Initech banking server @context(Do) @defer(5d) @due(6d)

I hope this has been a good introduction for you!

If you would like the full set of tags, please check out[ this article]( from the OmniFocus forums that goes into further detail with this Automation.


Comments 0
There are currently no comments.