Deprecated: Return type of I::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 62

Deprecated: Return type of I::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 91

Deprecated: Return type of I::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 71

Deprecated: Return type of I::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 101

Deprecated: Return type of I::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 53

Deprecated: Return type of Collection::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/collection.php on line 80

Deprecated: parse_str(): Passing null to parameter #1 ($string) of type string is deprecated in /home/public/kirby/toolkit/lib/url.php on line 135
One Tap Less | Better Reminders to Omnifocus

Better Reminders to Omnifocus

Back at the iOS 6 days, the easiest way to add multiple tasks to Omnifocus was through a built-in action in Drafts named List in Reminders. This action would turn every line of your draft into a reminder and Omnifocus can watch one of your lists in Reminders and convert any item added to it as a task. We're on iOS 8 and may find some better ways to make the most of this integration.

If there's one complaint Omnifocus earns is that its users have been maneuvering over improvised workflows to improve task creation on iOS. There's some progress on iOS 8 with the extension, nevertheless, it must interact with some content and I doubt most of your tasks have any sort of reference.

There's a workaround using Launch Center Pro to create a Share Sheet action, the benefit is that it works with more apps than just Omnifocus and you can select a project or a context, yet it demands an extra tap to choose Omnifocus in the Share Sheet and doesn't cover several tasks at once1 or setting due dates.

Drafts 4 brought many improvements over the original app and the List in Reminders action became more flexible since it became an action step, meaning you can use it in any action you have. Ben Whiting built an action with that goal for Things2 and this is my version for Omnifocus.

You can include notes along your reminders with a delimiter, which in the action I shared is |, but you can define your own. Mesh these two together and you can replicate the functionality from Omnifocus' URL scheme3 using only the List in Reminders step on Drafts.

But here's the catch, if these apps can grab notes from reminders, couldn't they also pick due dates or even repetition? Indeed they do! If you set a reminder with a due date in your Omnifocus list, next time you open the app it will create the task with a due date or even set a repetition pattern. But how can we add multiple tasks with due dates to Omnifocus?

Fantastical 2 came out with Reminders integration, making it easy to create these tasks using natural language. You can assign a custom list to your reminder by starting or closing the sentence with a slash and the first letters to identify the list, considering that our target list's name is Omnifocus and we have no other list starting with the letter o, adding /o to the end of our sentences should be enough.

If we tweak our recursive action to add events to Fantastical4, we can deliver multiple tasks to Omnifocus using its Reminders' integration.

Tasks to Omnifocus:

fantastical2://x-callback-url/parse?sentence=[[title]]{{ /omnifocus}}&reminder=1&add=1&x-success={{drafts4://x-callback-url/runAction?text=[[body]]&action=Tasks%20to%20Omnifocus&allowEmpty=NO&x-error=omnifocus%3A}}

There are a couple of tricks here we may want to pay attention. I'm using /omnifocus to define my list just for safety when you install the action, in my case, /o would work just fine. I set reminder=1 to avoid adding prefixes to our sentences, different than other parameters, this one is not ignored when used along with sentence. I decided to use add=1 to avoid stopping in Fantastical to either create or cancel a task, hence, I also removed the x-cancel on the callback for that reason.

The best trick from this action is the effective use of the x-error parameter. To avoid infinite loops at recursive actions, Drafts has the allowEmpty parameter, which set to NO stops the action if the draft is empty and throws an error. Since Drafts supports the x-error parameter, you can trigger another action after you dismiss the alert, in our case, we open Omnifocus to process our reminders into tasks.

Recursive actions are definitely my favorite feature of Drafts as they allow us to process a single document into bits. If you prefer GoodTask over Fantastical 2 and don't mind losing repetitive tasks, you can tweak my action to recursively add reminders to GoodTask with natural language and set the list parameter to your aimed list. Despite all, I'm hoping one day Omnifocus brings better URL schemes so we don't need to go so far to get more done.


  1. I didn't write this one down, but you could use Drafts to create a recursive action that applies the share sheet to every line of your document. I think it gets a little too cumbersome that way. 

  2. Things shares the same Reminders' integration as Omnifocus, therefore you can modify any action from this article to work for Things instead. 

  3. Things also supports a parameter to set the due date, so the List in Reminders step doesn't fulfill its capabilities. 

  4. Get the most recent version at the Actions page and also check the recent article at Drafts' documentation for another take on this action.