in Blog

OmniFocus Automation – Kanban Board

Edit: Updated the plug-in to include Sal’s code for viewing the kanban tags (the top-down view) and for adding the kanban tags to OmniFocus if they don’t already exist. Updated the article’s instructions accordingly.

I’ve recently been trying out Kanban boards for my personal use, both at home and at work.

I’m by no means a software developer, but I find the idea of selecting a subset of tasks to be done today and then further highlighting the one task that is currently in progress to be very helpful for a scatterbrain like me.

In my work, I also get constantly interrupted by people asking me questions or handing me “one quick task” – so it’s always helpful to see what it was that I was working on before the interruption.
But as much as I like the Kanban board idea, I was not interested in trying another task manager (i.e. Trello). I am happy with OmniFocus, and I wanted to see whether it was possible to implement a Kanban board with OmniFocus.

Kanban Board Layout

I searched online for solutions other people have come up with. And there were a few, most of them involving the capture of OmniFocus data and then creating a visual board using some script of another.
Although there were some interesting ideas, I didn’t want a board I couldn’t edit and that required me to jump back into OmniFocus to tick off my tasks.

One of the other suggestions was to create tags for the different Kanban columns and then open multiple instances of OmniFocus, each showing their respective “column” of tasks.

This was a workable idea for me. It just required a little fiddling with Keyboard Maestro to create the three instances of OmniFocus and have them show the correct Perspective. (I’m not a programmer, so I don’t need the “Testing” column. However, I have replaced it with a “Waiting” column – sometimes, I need to pass tasks off to other people, and I need to keep track of what I’m waiting for.)

The other option, of course, is to have the one instance of OmniFocus open and select just the Kanban tags I’m interested in seeing.

Update: There is now an additional script in the plug-in called “Kanban View”. Activating this script will automatically take you into this Top-Down view. This might be the easiest way to implement the kanban view (if you don’t want to mess about with Keyboard Maestro).

OmniFocus Automation Plug-In

But this was just the barest of what I need to make a viable Kanban board – you see, I needed a way to move tasks between the columns quickly.

It was possible to edit the task tags manually, but the whole point was to make this as painless as possible (not to mention that to move a task from one column to another properly, you had to remove the tag of the previous column as well).

So I created a few automation scripts to remove unwanted Kanban tags and assign the correct one quickly.
I’ve put all six scripts into one OmniFocus Plug-In bundle. I chose to create a plug-in bundle instead of standalone files because the bundle allows me to include icons that would show up in the toolbar if you were to add the script up there.

You can download the OmniFocus plug-in here. Unzip it before trying to install it.

For more information on how to install OmniFocus automation plug-ins, please visit the Omni Automation website.

TLDR; You double click it on the .omnifocusjs file and follow the OmniFocus prompts.

There is just one thing you need to do before using the scripts – and you don’t even need to do it if you don’t care about keeping your OmniFocus tags neat – create the tag “Kanban” and create the following sub-tags (you would want them in this order):

  • To Do
  • In Progress
  • Waiting
  • Done

Update: If you run the “Kanban View” script, it will automatically create all the tags required.

How I Use the Scripts

I put the scripts in the OmniFocus toolbar for easy access.1
You might notice the icons look a little different in your version – that was because I realised at the time of creating this blogpost that my icons don’t show very well in dark mode, so I went and changed all the icons.

Otherwise, you can activate the script by going to Automation > Kanban:

Update: You will now see the “Kanban View” script above “Kanban: To Do”.

Every day I go through my master list of potential tasks and select the ones I want to work on today. I then activate the “Kanban: To Do” script and the selected tasks would be assigned the appropriate tag.

I then move to my Kanban board layout – whether that is the three-column view or the top-down view, it doesn’t matter – and I select the one item that I want to start work on. I click on the “Kanban: In Progress”. This moves the task into the appropriate “column”, and I begin my work.

If a task gets held up because I’m waiting for someone to give me something, I click on the “Kanban: Waiting” script and the task would be moved to the “Waiting” column. I either rename the task or add a note to remind myself who I was waiting.
As an alternative, you may want to check out Rosemary Orchard’s “Complete and Await Reply” automation plug-in. This plug-in marks a selected task as complete and create a duplicate of the task and prepend the task name with “Waiting on reply: ”
Just a note though: this plug-in doesn’t assign any tags to the task, so you would still need to use the “Kanban: Waiting” script to move the task to the correct column.

Once I complete a task, I use the “Kanban: Done” script to move it to the Done column. The script marks the task as completed and assigns the “Done” tag to it.

You only need to do this if you’re interested in seeing how many tasks you’ve completed in a day (it might give you a sense of accomplishment, or you may want to review your completed task for planning purposes). If you aren’t interested in this, you can mark a task as completed normally once you’re done with it.

The Done column is actually a specially created Perspective that shows all completed items with the “Done” tag.

Once I’m done with my end of the day review, I select all the tasks in the Done column and run the “Kanban: Clear” script. This would clear the “Done” tag from the tasks, and the tasks would disappear from the Done perspective.

— * —

The scripts are fairly straightforward; for the most part, they just remove and assign tags. But that’s the whole point of the automation – to remove friction and speed up a task I have to do multiple times a day.

And the great thing about this Kanban Board automation? It works even if you have other tags assigned to the tasks. If on a particular day, I didn’t want to view my task as a Kanban board I can still use my “Hot” perspective (flagged tasks with either the “Personal” or “Work” tag assigned) to work on my Top-3 tasks of the day.

Let me know in the comments below if this helped in any way.

  1. Right-click the toolbar and select “Customize Toolbar”. You then find the little icons for the Kanban scripts and drag them up to the toolbar.


  • joe jenett


  • Geeky Organizer
  • Geeky Organizer
  • Ken Case
  • Ken Case


Write a Comment


This site uses Akismet to reduce spam. Learn how your comment data is processed.

  1. Love the idea nice. Have you also shared the Keyboard Maestro scripts? I’d love to play around this those too?

  2. Great idea. I’m going to try this right away. Can you please share some info or a link to the Defer plugin you’re using in your Automation menu screenshot above? Thx!

    • Hmm, I don’t have anything official for the Defer script, but here is the script for the “Defer: Monday” script that you can edit for all the other defer scripts.

          "type": "action",
          "targets": ["omnifocus"],
          "author": "Serena",
          "identifier": "com.serena.of.monday",
          "version": "1.0",
          "description": "This plug-in will set the defer date to next Monday",
          "label": "Defer: Monday",
          "shortLabel": "Defer: Monday"
      (() => {
          var action = new PlugIn.Action(function(selection, sender){
              var formatter = Formatter.Date.withStyle(Formatter.Date.Style.Short)
              var d = new Date();
              var deferMon = formatter.dateFromString("next Monday @ 9:30AM"); /* This sets the defer date to next Monday */
              var dueMon = formatter.dateFromString("next Monday"); /* This is the empty due date starting at 12am */
              selection.tasks.forEach(task => {
              task.deferDate = deferMon;
                  if(task.dueDate !== null){
                      var oldDue = task.dueDate;
                      var newDue = new Date(dueMon.getFullYear(), dueMon.getMonth(), dueMon.getDate(), oldDue.getHours(), oldDue.getMinutes());
                      task.dueDate = newDue;
          action.validate = function(selection, sender){
              return (selection.tasks.length > 0 )
          return action;


  • Louiscard liked this article on

  • bkruisdijk 25/03/2021

    bkruisdijk mentioned this article on

  • Florian Breitenbach 🇦🇺🇩🇪🇪🇺 liked this article on

  • Bookmarked OmniFocus Automation – Kanban Board by Serena (
    I’ve recently been trying out Kanban boards for my personal use…

    still wrapping my head around this……

  • joe jenett bookmarked this article on

  • still wrapping my head around this… 😎

  • Yaaqoub ben Avraham liked this article on

  • JasonBLee liked this article on

  • hyperorganised liked this article on

  • Matthew Lee liked this article on

  • Minja liked this article on

  • Aizad Shafeez liked this article on

  • Andrey liked this article on

  • Daniel liked this article on

  • Michael Grant liked this article on

  • Zoe ♥️ Hendrickse liked this article on

  • Tony Lea liked this article on

  • Scott Obara liked this article on

  • Geeky Organizer liked this article on

  • 研究室のEvernote liked this article on

  • Geeky Organizer reposted this article on

  • Geeky Organizer reposted this article on

  • Kris Osowski liked this article on

  • Mike Burch liked this article on

  • Roman J. Clara liked this article on

  • Hum liked this article on

  • Alexandre Fonseca liked this article on

  • べいん liked this article on

  • Christian Pérez liked this article on

  • Vincent van Andel liked this article on

  • Christopher Mackay liked this article on

  • David-19 liked this article on

  • Naupaka Zimmerman liked this article on

  • Jim Tinsky liked this article on

  • Aslak Raanes liked this article on

  • Jim W liked this article on

  • Ken Case reposted this article on

  • Ken Case reposted this article on

  • Ken Case liked this article on

  • Wilson Ng liked this article on

  • Vipul Satya liked this article on