Implementing GTD with Orgmode

I try to implement the Getting Things Done (GTD) methodology in my daily life. It basically just involves pushing items around various lists, and enough discipline to keep the list up to date.

The core of GTD involves:

My tool of choice for implementing GTD is Orgmode for Emacs.


The GTD methodology suggests using a calendar strictly for the items that absolutely must get done by a certain date/time. The idea is that your calendar represents the "hard landscape", i.e. stuff that the rest of your TODO items (or Next Actions, as they are called) must work around.

My adventures in trying to use Orgmode as a calendar are documented on another page.

Projects, Next Actions, Categories

I have one monolithic file with all my Projects, Next Actions (NAs), Someday/Maybe items and Waiting items. I manage all these different kinds of items with different TODO states:

In addition, all these different kind of of items can be organized under categories (though it's not required). A category is first level list item with a a CATEGORY property. Categories generally have other list items underneath them, like this:

* Gnus
Added: [2009-08-29 Sat 10:34]
** DONE Set up signatures :@computer:
Added: [2009-10-05 Mon 00:47]
** TODO fix expiry problem with mailing lists  :@computer:
Added: [2010-01-24 Sun 21:24]

Gnus category, with a CATEGORY property (gnus) set up to show in my agenda lists . Note that categories and NAs have "Added" lines which tell me when these things were added to my file. I automatically add these lines via my remember templates.

A project is just a category with certain enhancements:

Though not strictly required, I put all my NAs are under some kind of category. I have a "Miscellaneous" category set up for those NAs which don't really belong anywhere in particular. I find it just makes everything more uniform.

Note that any kind of item can go under any kind of category; I have WAITING and SOMEDAY items mixed with NAs under various categories and projects. My NA list is computed by picking out all the TODO items. Similarly, my "waiting" list is computed by picking out all the WAITING items. And so on for my someday/maybe items and my projects.


GTD suggests using context to further organize you NAs. An NA of "Call Sam" might have a context of "@phone" for example. I implement this in GTD with tags, like this:

** TODO call Sam :@phone:

You can narrow your TODO list to the tag you want by typing /, then TAB, then the tag you want. Type "/" then "/" to get back to normal.


I have several agenda views to give me an overview of all my lists:

(setq org-agenda-custom-commands
           '(("w" "All Waiting" tags-todo "+TODO=\"WAITING\"")
             ("p" "All Projects" tags-todo "+TODO=\"PROJ\"")
             ("n" "All Next Actions" tags-todo "-TODO=\"TODO\"")         
             ("s" "All Somedays" tags-todo "+TODO=\"SOMEDAY\"")
             ("d" "Day-at-a-glance"
                          ((agenda "") 
                           (tags-todo "+TODO=\"PROJ\"")
                           (tags-todo "+TODO=\"TODO\"")
                           (tags-todo "+TODO=\"WAITING\"")
             ("W" "Week-at-a-glance"
                          ((agenda ""((org-agenda-ndays 7))) 
                           (tags-todo "+TODO=\"PROJ\"")
                           (tags-todo "+TODO=\"TODO\"")
                           (tags-todo "+TODO=\"WAITING\"")

The important ones are:

Remember templates

I used the remember package to quickly jot down NAs, Someday items and Waiting items. Note the automatic "Added" line I insert into each template.

(setq org-remember-templates
          ("Next Action" ?n "** TODO %^{Brief Description} %^{Contexts}\nAdded: %U\n%?\n" "~/pim/gtd/"  "Miscellaneous")
          ("Waiting" ?w "** WAITING %^{Brief Description} %^{Contexts}\nAdded: %U\n%?\n" "~/pim/gtd/" "Miscellaneous")
          ("Project" ?p "* PROJ %^{Brief Description}\n:PROPERTIES:\n:CATEGORY: %^{Category}\n:END:\nAdded: %U\n%?\n" "~/pim/gtd/" bottom)
          ("Someday" ?s "** %^{Brief Description}\nAdded: %U\n%?\n" "~/pim/gtd/" "Miscellaneous")

          ;; calendar
          ("Appointment" ?a "** %^{Brief Description}\n%^T%?" "~/pim/gtd/" "Appointments")
      ;; temporary for house hunt
      ("House to see" ?h "** CONTACT %^{Brief Description}\nAdded: %U\n%?\n" "~/pim/gtd/"  "Houses to See")


Every so often I'll do a sweep of the file to clean out any items that are "done". I use Orgmode's archiving mechanism to do this.

Further Ideas

CategoryEmacs CategoryOrgmode

GtdWithOrgMode (last edited 2013-11-04 01:46:38 by DesmondRivet)