# Why TaskWarrior?
After I've heard of the software TaskWarrior in summer of 2012, I started using it instantly. My main reasons are:
* Since I'm a big fan of self quantification, I wanted the data to be accessible and independent of the existence of any software company. The TaskWarrior stores its data in text, which is imho the most future proof format.
* Everything from the system described in David Alan's book "Getting things done" (short GTD) can be implemented with TaskWarrior.
* It is cool and geeky to use (via command line!). This has a real advantage too: you have the full power of your shell at hand and the programm itself also has powerfull batch processing capabilities.
---
The main idea of GTD is that you store everything that you have to do at one single location on context-dependent todo-lists. I will give some definitions of the words in the previous sentence to make it clearer:
* "everything" really means everything in your daily life: starting from "buy a present for your grandmother" or "do your taxes" to "find a gorgeous girlfriend". This way, you are sure that you never forget anything.
* "one single location" means that you don't have to process different locations every time you want to look at the things to do. If you have two or more locations to look at, you are never sure whether you have the one single most important item on the list you are looking at.
* "context" is a powerful concept that I first saw in GTD: Sometimes, during a normal day, you are sitting at your computer, sometimes you are driving your car and sometimes you are waiting for something (at the doctor's for example). I call this different situations, "contexts", and whenever I change my context, I look at the list for this special context.
# Add and report
Let's make an easy example:
$ 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/
Modifying task 1 'Buy diamonds for Mandy.'.
Modified 1 task.
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
# Tags
You can tag your tasks via
$ 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.
2 Replies to “TaskWarrior – Stop worrying and start warrioring!”