TaskWarrior – Stop worrying and start warrioring!

$task add "Buy flowers for Mandy" Created task 1.  This adds the task to the list. You can display your todo list (and some other lists) in different ways. These ways are called reports in TaskWarrior. By simply typing $ task

a default report is shown (which can of course be edited and customized). You can also display all existing reports via
$task report Report Description active Lists active tasks all Lists all pending and completed tasks blocked Lists all blocked tasks [...] completed Lists completed tasks [...] information Shows all data and metadata list Lists all pending tasks long Lists all pending tasks ls Minimal listing of all pending tasks minimal Minimal listing of all pending tasks newest Shows the newest tasks next Lists the most urgent tasks oldest Shows the oldest tasks projects Shows all project names used ready Lists the most urgent tasks recurring Lists recurring tasks summary Shows a report of task status by project tags Shows a list of all tags used [...] waiting Lists all waiting tasks 28 reports  The following reports are used for displaying tasks: * active you can start a task in TaskWarrior, then it is called active and listed by this report. * all this report will get very large, since it also lists all tasks that have been completed * blocked TaskWarrior supports dependencies. This report lists all tasks that require another task to be completed. * completed can be used for documentation purposes, lists, as the name suggests, the tasks that are done. * information this lists tasks in their full detail, with things like all their modifications. * list/long/ls/minimal lists all tasks that you have to do (with different columns). This may exceed your screen height, especially if you use TaskWarrior to manage *all* your things. * newest/oldest the newest or oldest task, in terms of the entry date. * ready/next this is a very useful report and I it got my default report (the one that is called if I only type task) * projects this report lists all projects * recurring recurring tasks are task that come back to you every day, month, quarter or year. This has become a central part since I don't have to remember to put stuff like writing bills, reviewing the last week or doing my taxes on my todo list. * tags tag a task in TaskWarrior. This is also central, since I use tags to implement the concept of context from GTD. They can of course be used for a lot of other stuff. * waiting You can set a field called "waiting" in TaskWarrior. It contains a timestamp and the task will not appear on the normal todo lists until this timestamp. With this you can keep your todo-list clean and also implement features like "follow up". One can also define custom reports in the configuration file .taskrc like this (here I also use advanced filtering, which I will not describe in this post): report.morning.description=Morning report report.morning.columns=id,priority,due,description,project,tags report.morning.labels=ID,Pri,Due,Decription,Pro,Tags report.morning.sort=due-,priority- report.morning.filter=status:pending and '( due.before:1y or prio:H )'  # Modify The man page for task gives the general syntax: task <filter> <command> [ <mods> | <args> ]  Up till now, we have seen add command and different reports as command. Up to now, we did not use a <filter> yet, which means that no filter was applied. The next <command> I whould like to focus your attention on is modify. We added the task to buy Mandy some flowers to our list and it got the id 1. We can use such ids to filter and then modify the task $ task 1 modify /flowers/diamonds/

Which does a search and replace on the task description, replacing "flowers" with "diamonds". We can also set some of the other properties / fields of the tasks. We could for example add the task to a project filling the field project like this:
$task 1 modify project:Family Modifying task 1 'Buy diamonds for Mandy.'. Modified 1 task. The project 'Family' has changed. Project 'Family' is 0% complete (1 of 1 tasks remaining).  TaskWarrior has the neat feature that every command or fieldname can be abbreviated as long it remains unique. So for the previous command we could have also written $ task 1 mod proj:Family

When you have more then one task on your todo-list (which is very likely), the ordering of the tasks can be important. TaskWarrior sorts the tasks by "urgency" which is a value that is calculated automatically and depends on different parameters like priority, project, whether the task is blocked or blocking, due-date and some tags. This is one of the most powerful things that TaskWarrior does for you: it sorts the task in a way that, at least for me, most important tasks are on the top of your todo-list. # Fields and filters Let us look at other interesting fields that can be set for a task: * priority This specifies the priority of the task on the following scale: none, L, M, H (meaning low, medium, high) and the urgency of a task increases in exactly the same order. * due This should be the date at which the task has to be finished. It accepts a date as input but also some words from natural language like "tomorrow" or "5days". A due date boosts the urgency of a task when the sepcified date gets closer. * wait You specify a date and the task only appears after this date. This keeps your todo-list uncluttered. This is a very useful field, I use for follow-ups (then I specify a due date too) and for tasks that can only be done after a specific date. * recur this can be daily, weekly, monthly or yearly and means that the tasks appears again and again on your todo-list. A recurring task must also have a due date that gives the date when the task appears on your list. I also recommend to set a date in the field wait. Now that we know more fields, we can use filtering to batch modify a lot of tasks like this. This is something a GUI-based task-manager could not support (or at least not in a very usable manner):
$task 1,4-5,19 modify due:1week prio:M proj:Garden  You can also use fields as a filter: $ task proj:Garden modify due:sunday

$task add "Contact Jennifer from Interactive-Solutions under 555-4823 to talk about the project" +call  The tags are "created" automatically and "removed" if every task that has it is deleted. Of course you can also filter by tag: $ task +call

Finally with
$task tags  you get a full list of all tags, that you have used. One can use tags when adding or modifying a task and also as a filter: $ task add "Buy plane tickets for my trip to canada" proj:Family prio:H +online
$task 4 mod -driving$ task 4 mod +online
$task +online  I also use tags for persons. Whenever I want to talk to a person about a certain topic, I write it on my todo-list and add the person's name as a tag. This enables me to filter by a persons name, when I meet somebody, to make sure that I remember everything I wanted to talk about. # Annotations TaskWarrior allows you to annotate tasks to store additional information (together with a timestamp). For this just use the commands annotate and denotate: $ task 15 ann "Called the store and asked for a refund this morning, the guy's name was Steve"
$task 7 ann "Call 0123 567890 to directly talk to James"$ task 15 den "refund"

# More devices Regularly I use two different computers and an android smartphone. To stick to the principle of having only one place to look at, for all of my things to do, all three machines must be synchronized in some way. The people that create TaskWarrior are working on a solution: a TaskWarrior-server application is planed, basically making the task-command only a client for this server, but I don't want to wait. So I configured TaskWarrior to place its database in my Dropbox. This database only consists of three text-documents completed.data, pending.data and undo.data (the last one stores a full history of everything you did with TaskWarrior, typing task undo undoes the last action), which even enables me to work with TaskWarrior even when I am not online. When you accidentally cause a conflict by modifying my todo-lists on two offline computers (which causes the Dropbox to create "conflicting"-files) you can use the use the magic command merge, I guess. Sadly, there is no TaskWarrior-AndroidApp so I needed a workaround for this too: I installed my Dropbox and the TaskWarrior on a shell server and use ConnectBot to connect to this server via ssh. This is not very comfortable but works well for me. # Goodies * I added
alias t='task'

to my .bashrc to reduce typing. Another option for this is the command task shell. * A lot of quotations in the command of task warrior can be omitted, I only added them for convenience. * There is a possibility to have a Thunderbird button and shortcut to add something to TaskWarrior.

Tags: