Until a few months ago, I hadn't found a good tool to handle a task list
and track my time. Several were tried, but none of them could handle all the requirements to my satisfaction: the tool should be usable on the command line with straightforward commands that are easy to memorize, it should be able to use the same task data on different machines without having to install and maintain a dynamic website, the tool should be able to track the time I spend on tasks and projects, and it shouldn't force me to follow a specific time management philosophy such as Getting Things Done or the Pomodoro Technique.
At the beginning of this year, during my annual and always unsuccessful New Year's resolution to manage my time more efficiently, I tried a beta version of Taskwarrior 2.0. While it isn't perfect, it turns out that Taskwarrior is right for my use case. This command-line task list manager maintains a list of tasks that you can add, remove and annotate at will. It has a rich list of sub-commands to do advanced things with your tasks, including reports, charts, time tracking, and so on, and it is extensible with Lua scripts. After a year of development, version 2.0.0 has now been released.
Version 2.0 still has to trickle down to the repositories of various Linux distributions, but you can download the source and compile it (it has been tested on various Linux distributions, the BSDs, Solaris, Mac OS X, and Cygwin) or use the binary packages for i386 Debian 6, Ubuntu 11.10, or Fedora 16. Older versions are available in many repositories, but Taskwarrior 2.0 has added significant changes and changed the command-line syntax, so it's probably worthwhile to temporarily use a 2.0 downloaded from the project's web site until your distribution's repository updates its Taskwarrior package to 2.0.
Easy to learn
The first time you enter task in a terminal, it prompts to
create an initial ~/.taskrc file, which has default settings and
comments. After that, a task help command
a daunting list of sub-commands, syntax, and examples, but despite this
the basics of Taskwarrior are quite easy to grasp if you follow the
project's excellent documentation. The
place to start is the 30-second
tutorial which teaches you how how to add, list and delete tasks, set a
specific priority to a task, and to mark it as done. These are easily memorizable commands like task add, task ls, task <ID> delete, and task <ID> done.
While the 30-second tutorial teaches you the most important Taskwarrior
sub-commands, there's a lot more to the program, which would be difficult
to find out on your own only from reading the man pages. Luckily, there's a
as well. After the basic usage, it explains projects, priorities, tags, undo and delete, information about tasks, statistics, annotations, due dates, calendars, and so on. For instance, when your tasks have due dates, you can see them highlighted on a calendar with task calendar. The program even provides sample holiday files for a couple of countries. If you include the holiday file in your ~/.taskrc, holidays are shown in another color on your calendar.
The second part of the tutorial handles some advanced uses of Taskwarrior. Some of the topics are tasks that are recurring weekly, monthly, or yearly, waiting tasks (tasks with a due date far out into the future that remain hidden until a certain date to not clutter your task list), dependencies between tasks, reports and time sheets, monthly and yearly charts, a summary showing your progress in all projects and sub-projects, filters, and import and export in CSV, YAML, vCalendar, or JSON format. It pays to follow both tutorials and try their examples before you start using Taskwarrior, and you should probably read them again after having used Taskwarrior for a while. There's also a gallery with some video tutorials, as well as some HOWTOs about specific functionality.
One particular interesting feature of Taskwarrior is the built-in
synchronization functionality, which lets you backup, restore and
synchronize task lists using ssh or rsync to share the same task list on
multiple machines. So you can backup your local task list to a remote
machine with a task push command, restore it with a
task pull command, and merge a local and remote
task list with task merge. Of course you can configure
Taskwarrior to store its data (by default in the directory
~/.task/) in a Dropbox folder or any other directory that is
synchronized between your machines, but the advantage of Taskwarrior's
built-in synchronization feature is that it doesn't require you to install
any third-party synchronization software; ssh access to a remote machine is
enough. Note that the ~/.taskrc configuration file isn't
synchronized by this method, just the data in ~/.task/.
Configurable and extensible
Taskwarrior is highly configurable. A task show command shows more than 200 configuration variables you can set in the ~/.taskrc file with their current value. Variables that you have changed from the default values are highlighted in color. The colors for many types of information can also be changed in the configuration file, or you can use one of the several standard color themes.
You can also add your own variables to the configuration file, for instance to create custom reports with specific columns, labels, sorting order, and filters. The custom reports you add even show up in the help output of the task command and you can run it as a sub-command, just like the default reports. Taskwarrior 2.0 also adds the possibility of extending the program's functionality with Lua scripts, but unfortunately this is not documented yet.
Beginning with version 2.0, Taskwarrior has been re-licensed from GPLv2+ to the more permissive MIT license. One of the reasons the developers cite is that using the MIT license won't require that all plugins that ship with Taskwarrior be GPL compatible, which had to be done in the past. Another reason they cite is that "certain app stores don't accept GPL licensed software".
The developers welcome changes and give an overview of how you
can contribute. There's a big issues list
with feature requests and bug reports and the project has some big-picture
plans. For instance, they are working on a task
server that will support synchronizing task data and later group
collaboration. This task server will also be able to send out reminder
notices for tasks that are due.
There's also a lot of development happening on Taskwarrior extensions and external scripts. One example is Taskhelm, a graphical interface for Taskwarrior. Other ones are VITtk, which is a vi-like interface for Taskwarrior, the web interface Taskwarrior-web, as well as some conversion tools.
As a nice illustration of the development activity, the development of Taskwarrior 2.0 has been visualized by the software version control visualization tool Gource. The data was extracted and visualized from the project's Git repository and converted to a YouTube video.
Polished and frictionless
Taskwarrior will not appeal to everyone, but if you're spending a lot of time at the command line, it offers a frictionless window to your task list. It's always available because you don't have to switch to another window or open a specific web site. With an alias t=task in your ~/.bashrc, a couple of key presses are enough to view your current tasks and track your time. Of course it requires some time to get to know the right commands, but they are straightforward and the documentation and man pages (task, taskrc, task-color, task-faq, task-sync and task-tutorial) are excellent and comprehensive.
to post comments)