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.

49 thoughts on “OmniFocus Automation – Kanban Board

  1. OmniFocusOmniFocus is essentially an outline of tasks that can be tagged and filtered in different ways. This makes it incredibly flexible—much like paper—which lets it grow with your needs—one of the requirements for my enabling system is simple. OmniFocus can be as straightforward or as complex as you choose to make it. The CEO of the OmniGroup has written an excellent blog about the concept of keeping it simple here.

    Below I have described how I have set up OmniFocus. The setup is an evolution of some eight years in which I am working with this wonderful product with excellent support. Because it is reliable and of good quality, it can serve as the “heart of the enabling system” and can be trusted.

    💡Tip: If I use a Shortcut or Applescript I have linked it to the text as link, so you can download it, use it and adjust it to your needs.

    The content of “the OmniFocus set up” guide is as following (click on the link to go to this paragraph directly):

    Folders – areas of responsibilityTags – ordering and sequenzing projects and tags Projects – realising the goalsThe user interface adjusted to contextual computing concept

    Areas of ResponsibilitiesI use folders to map out my area of responsibility. Within the folders, the projects are listed. Projects are the reflection of the goals I want to achieve. (💡the conceptual setup of how to go from goal->project->tasks you can read here).

    Assignments are commitments I have made to clients to deliver agreed results. Because of confidentially, I cannot show the clients I am working on.Work is the area of responsibilities for own companies or companies I work forPrivate is the responsibilities in the (financial) Administration area, keeping up my knowledge and competences, maintaining my Cars, things I want to do to maintain and improve my personal Health. Maintenance of my old home. How I keep relaxed. I believe in the concept of lifelong learning, so I also have projects (goals) on Personal development.For me, life is extra enjoyable if I can live with, enjoy and contribute to my friends and family, so it has “earned” a place as a goal.Routines are the tasks I conduct to keep the enabling system trusted (see the paragraph here for further explanation)Someday/ maybe are things I probably want to do sometimes. To get it out of my head in a trusted place. I review this section weekly.The checklist contains a professional checklist to increase my output and deliver quality products and services.Templates contains predefined “goals/ projects/ result streams/actions” for “projects set up” so every project (goal) start with an identical setup/ structure, “Travel plans” and “Preparation for meetings”.

    💡Tip: The order/ sequence of folders are essential: in views, perspectives, and listing, I mostly use the project order. The most important is on top of the folder list, so I work on the important stuff first.

    💡Tip: I try to use as many sequential projects () to work with the first action available and the next actions and not see all actions in available action.

    Tags – to sequence what is important for you

    Tags can help you quickly and conveniently home in on the projects and actions that are most relevant. A tag can represent a context or an extra bit of “metadata” that makes it easy to locate and create lists of related actions, action groups, and projects.

    For example, tagging actions with ☕️ Waiting for makes it easy to identify all of the actions you have delegated to your colleagues across all areas of responsibilities and projects (goals).

    Priority. Are the most important and most used tags in my way of working. I am using the Eisenhower Matrix mostly to sort my tasks in Importance and Urgency. The basic principle is that items that consume time, energy, and attention are ordered based on their relative urgency and importance.New Assignments. I use a sales process to sell “new” assignments. I use these tags to build up and follow the sales funnel. An opportunity/ lead is defined as a project.Communication. I try to do communications directly as they come up; however, sometimes I have to follow up or call back later. I use a tag per communication channel.Administration. Owning businesses and private life, I have to make/ send/ collect Invoices and pay Invoices and do accounting. For all significant administrative processes, I have a tag.The Kanban tag is an experiment. If you want to set up OmniFocus as a KanBan board, you can read here how this is possible.Routines are collections of checklists and or rituals. I have written a separate paragraph on Routines here.The tag Agenda I use for collecting meeting topics I want to discuss and hear about. I also use the tags to draft meeting notes before meetings containing the topics I want to discuss. (separate article about Meetings can be found here). I have 1:1 meetings (Bila’s) with people in my team but also chairing Group meetings. Every periodical meeting has his tag within groups. The Meeting prep tag I use to add a meeting topic what I want to achieve with this topic. I need this because I can not always recall what the intention was for a topic.Waiting for is a tag for projects or tasks I have delegated and want to track progress on, most of the time against an agreed due date. Also, mails where I need an answer, are collected with this tag.The Decision tag is used for decision logs on all projects. Taking a decision is one step. Most decisions need to be operationalized to keep track of these items until they are also implemented.The Horizon tag I am using for areas of focus. What and how to use Focus on horizons is explained here.The People tag I am using to add names of people to a task. For example, if a need an answer from John I add the tag Waiting for and the tag Jan stored under People. This is how I can build “meeting cheat sheets” with people to see in a few seconds which commitment somebody has with me.Maybe/ Sometime is being used for ideas/ bucket list stored in Someday/ Maybe folderNone, is used in Shortcuts were I want to do something without collecting tags, and “untagged” is not working (f.e. draft meeting minutes without prior tags).

    💡Tip: As you can see, the Tags “Routines” to “Maybe sometimes” are “on hold,” meaning that they will not show up in Available/ Remaining actions views: no clutter.

    💡Tip: You can use more tags on one project or action. I try to minimize the use of more tags (keep it simple). I only use it for New Assignment (priority and step in sales funnel), Waiting for and people I am waiting for, and Agenda.

    Goals represented in projectsWithin the folders (=area of responsibility), I set up projects. Sometimes I oversee programs or projects with more than 100 people, but I also have project teams with two people. I still use one template that I strip for the smaller or personal projects to maintain a consistent structure.

    I am using a script for copying a template into a new project using <<placeholders>>. You can download the script here. The breakdown/ setup of the project is as follows:

    The project name is a short description of the expected result.00. Add to DevonThink reference file is being used to create a reference folder with documents/ presentations that have the same structure as the OmniFocus project structure and are linked together. The set up is described here01. General information contains subprojects project general information, the project’s purpose, approach, project planning, and milestones.02. Standard and templates contain a standard for progress reports, decision documents, communication plans, etc.03. Programme/ project procedure contains procedures for changes, problem reports, management of deliverables, acceptance, onboarding of project members.04. Communications contains sub projects for a communication plan, external meetings, internal meetings, and correspondence.05. Reporting and information contain subprojects for progress reporting, evaluation reporting, steering comité, project groups, result teams, and suppliers (contract management).06. Quality and risk is about risk assessment and managing the mitigation tasks agreed upon.In 07. Registrations, you will find budget vs. actual reporting, time reports, and deliverable status.Every goal has one of more results. To deliver the end-results, I create per end-result a subproject in 08. Result streams

    The user interface on MacOs version

    I use different devices in my Apple ecosystem. However, every menu structure is the same, no matter which device I use. Furthermore, my way of working is based on the concept of contextual computing to avoid distraction as much as I can. This also means that I am not using OmniFocus’s user interface a lot but instead use KeyBoard Maestro pallets to jump directly to the action I want to do, and in a certain routine task the link to the specific perspective is embedded. How this works is explained here, including a short video.

    Below I will explain what is on the Sidebar. If you click on the link, you will see the setup and or download the AppleScript. For the Sidebar, I have chosen to put here all important perspectives/ views on my task list.

    Prepare for flight It contains all the untagged tasks and or have not a project and or have not an estimated duration. It helps with maintaining a trusted new system. Like many of you, I have more work at hand than hours in a day. I am using the concept to add to every task the estimated duration (in 5 minutes blocks). In the morning, during the Reveille routine, I can see how much time is remaining (total working time minus meeting duration) for doing specific tasks. In this way, I can plan the remaining time with tasks I can finish, and at the closure of the day, I can be 🥳joyful that I could finish my plan for the day. You can find the setup of this perspective here.Inbox contains all the items which I need to process with a project and tag still. If I did “prepare for flight,” it should be empty. It helps with maintaining a trusted system.Waiting for due. This perspective contains all the tasks I am waiting for to complete on or before the agreed due date. The setup of this perspective can be found here.Communications perspective is listing all available communication tasks per communication channel. The setup you can find here.Meeting topics contains all agenda topics per meeting and or people. Please find here the setup.Focus areas is the list with current horizons of focus. This perspective setup you can find here.Clear is a list of all available tasks per area of responsibility and project. This list is being used to clear out the available tasks to another moment if today’s remaining work time exceeds the sum of all duration times of the available tasks. I do this by deferring the task to another Defer date. Please find here the set up.Weekly debrief is a checklist to keep the system trusted. See the paragraph Keep the system trusted for further explanation. You can find the perspective here.

    ToolbarI use the toolbar for contextual computing. Unfortunately, we cannot please the text of an icon under the icon, so I have an overview. Please find below the setup of this toolbar:


    From left to right, I will explain every icon’s functionality and, if applicable, attach a link to the setup and or AppleScript.

    View all project is a standard functionality of OmniFocus and shows all projects, depend on how you adjust your focusLikewise, View all tags.Reveille is a perspective that helps to prepare for the day. I have written a different blog on the Reveille process here. Please find here the perspective.Today next actions (used the most) show all the tasks I have decided to work on today during the Reveille process (or added later in the day by a triggering event). It shows me all available tasks plus tasks that are due soon (I have committed to deliver) plus flagged tasks. These tasks should reside in the folders (area of responsibility) Assignments, Work and Private, and Hold tags 📍Priority, 📣Communications and or 📓Administration. The perspective can be found here.The icon Forecast is the standard functionality of OmniFocus. It shows a combination of the calendars and tags you have chosen in set up of the Forecast perspective (I use all my calendars combined with the 📍Priority, you can only choose one tag.Inbox is standard functionality, and it shows for me all the tasks with project and or tag.Add to Inbox, does what the title states.Clean up screen, refreshes your views, and is standard functionality.Mail tasks links to an AppleScript, which sends the selected task in a mail. Often used by me to inquire about the task per mail communication channel. You can download the script here.Kanban Board is an experiment that I am working on and changes OmniFocus in a Kanban board. You can find the information and scripts here.So today is a script that changes the defer date of selected tasks to today. I use the “start method” by deferring to today. I use it a lot when I am processing the Clear list. The script can be downloaded here.Defer one day does the same as above but moves the defer date to tomorrow. The script can be downloaded here.Defer one week, as above but defers with one week or any other number of days as required from the current date. Here to download.Create folder in DevonThink creates a reference folder in DevonThink of the selected project. You can find here more information and a download to the script.Complete and waiting for reply. I am not using it a lot anymore, but it is a script that completes the selected tasks and creates the same tasks with waiting for tag. You can download the script from here.Templates is a script that copies a template project into a new project, using <<placeholders>>, you can download the script here.View options are standard functionality to change the view.Focus removes all the clutter from your screen and gives you focus on the selected view.Inspector shows the project/ task details, which you can change. I have the inspector always open.
    Share this:TwitterFacebookPrintLinkedInRedditTumblrPocketWhatsAppSkypeEmailLike this:Like Loading…

  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;

Leave a Reply

Your email address will not be published. Required fields are marked *

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