The most common mistake we often do is "I don't need to take notes. I will remember it". Isn't it? Indeed, it is. I am not an exception too. I have done this mistake so many times. Not anymore! Today, I found a useful command line TODO task manager application called "Taskwarrior". It is a free and Open Source utility that manages your TODO list from the command line. It is efficient, flexible, fast, and unobtrusive tool. You can add all sorts of tasks, such as daily, weekly, monthly chores, personal goals, official-related works, family events, and manage them like a pro from the command line.
Of course, there are many GUI-based task managers, web applications available. The reason I chose this utility is I used to work on command line mostly. It helps me to get things done as quickly as possible and it keeps me organized at work and home. To put this simply, It does its job then gets out of your way. In this tutorial, I will show you how to manage your tasks effectively using Taskwarrior in Unix-like operating systems. Read on.
Install Taskwarrior in Linux
Taskwarrior is available in the default repositories of most modern Linux operating systems.
In Arch Linux and its derivatives like Antergos, Manjaro Linux, run the following command to install it.
$ sudo pacman -S task
On RPM based systems such as Fedora, install it as shown below.
$ sudo dnf install task
$ sudo zypper in task
On Debian, Ubuntu, Linux Mint:
$ sudo apt-get install task
In case it doesn't available in the default repositories, you can install using Linuxbrew package manager like below.
$ brew install task
How to use Taskwarrior command line todo task manager
Taskwarrior usage is not a big deal. You can learn all commands within couple days. Here I've covered the most-frequently used commands.
Before start using it, run task command to create a file ~/.taskrc. This file keeps all settings of the Taskwarrior.
A configuration file could not be found in Would you like a sample /home/sk/.taskrc created, so Taskwarrior can proceed? (yes/no) y [task next] No matches.
Let us now populate Taskwarrior with some tasks.
To add a task, simply run:
$ task add Write a guide about Taskwarrior
Created task 1.
Let us add more tasks.
$ task add Fix Laptop OS problem
$ task add Clean living room
$ task add Pay Internet bill
$ task add Recharge mobile
Similarly, you can add as many task you want to manage.
To view the list of available tasks, run:
$ task list
$ task ls
ID Description 3 Clean living room 2 Fix Laptop OS problem 4 Pay Internet bill 5 Recharge mobile 1 Write a guide about Taskwarrior 5 tasks
As you see above, we have totally five tasks.
It gives you a quick overview of each task, including its ID, priority, and description. You can also view the detailed information of each task by running the following command:
$ task long
ID Created Mod Description 5 2017-04-06 1min Recharge mobile 4 2017-04-06 1min Pay Internet bill 3 2017-04-06 1min Clean living room 2 2017-04-06 1min Fix Laptop OS problem 1 2017-04-06 1min Write a guide about Taskwarrior
The above command gives you the countdown, age, and tags for each task.
To view a particular task, you can use the task ID with the following command:
$ task <Task-ID-Number> info
$ task 5 info
Name Value ID 5 Description Recharge mobile Status Pending Entered 2017-04-06 17:45:59 (2min) Last modified 2017-04-06 17:45:59 (2min) Virtual tags PENDING READY UNBLOCKED LATEST UUID 8c4ab173-df08-4b61-b813-f5eb0042b930 Urgency 0
Adding priority to tasks
Some times we need to do important tasks first. So, we can add priority to such tasks. Taskwarrior priority parameter has three values as mentioned below.
- H - High priority
- M - Medium
- L - Low.
You can add priority to tasks depending upon the importance of a task.
$ task add priority:H Buy Groceries
To create tasks with medium and low priority, use 'M' and 'L' flags respectively.
Adding tags to tasks
Sometimes, it is very good practice to add tags to the tasks, so you can quickly find a single or group tasks.
See the following example.
$ task add +household Buy Groceries
To list the tasks containing certain tags, run:
$ task list +household
ID Age Tags Description Urg 7 43s household Buy Groceries 0.8 1 task
You can also add multiple tags to a single task like below.
$ task add +tamil +language Learn Tamil Language
Adding notes to tasks
Taskwarrior also allows you to add notes to tasks.
$ task 8 annotate Start learning Tamil alphabets
Annotating task 8 'Learn Tamil Language'. Annotated 1 task.
Group tasks into a single project
It is always a good practice to group tasks into categories or projects. It makes you a lot easier to start a group tasks or complete a group of tasks.
Look at the following example to know how to group tasks into projects.
$ task add "Buy Groceries" project:personal +household
Created task 10. The project 'personal' has changed. Project 'personal' is 0% complete (1 task remaining).
Add another task.
$ task add "Clean living room" project:personal +household
Created task 11. The project 'personal' has changed. Project 'personal' is 0% complete (2 of 2 tasks remaining).
As you see in the above example, I have added two tasks into single project labeled "personal", and tagged them with "household". Now, we can easily filter tasks by project name like below.
$ task burndown.daily project:personal
We can also break down the task progress by weekly as shown below.
$ task burndown.weekly project:personal
This will help to know how you perform at work.
Assigning due dates to tasks
Some tasks needs to be done immediately, and some can wait. Taskwarrior comes with built-in keywords such as tomorrow, today, someday.
To set a due to a certain task, run:
$ task add Fix Laptop OS problem due:today
The above task needs to be completed today. Similarly, you can set next week as due date as shown below.
$ task add Fix Laptop OS problem due:'1week'
Due 1 month from now:
$ task add Fix Laptop OS problem due:'1month'
Due at specific date:
$ task add Fix Laptop OS problem due:due:2017-04-30
Once the due date passes, the task is tagged with the READY virtual tag.
You can check those tasks using command:
$ task ready
To remove a due date from a specific task, run:
$ task 1 modify due:
The above command removes the due date of task ID 1. For more details about due dates, check this link.
Edit and modify tasks
To edit a task's properties, run:
$ task 1 edit
This command will open the specified task in the default editor. So, you can manually edit the properties of that task.
Instead of editing tasks, you can use task <ID> modify command to modify a certain property of a specific task.
To modify a task, run:
$ task 2 modify priority:L
The above command will modify priority of the task 2 to LOW.
Also, you can change the due date of specific task as shown below.
$ task 1 modify due:5d
This command sets the due date of the task 1 to 5 days from now.
Taskwarrior helps to find the tasks you are currently working on. To keep track of tasks you are currently working on, just mark them as active like below.
$ task 1 start
$ task 2 start
The above commands will start the tasks. You can view the list of active tasks by running 'task list' command.
$ task list
As you see in the above output, all active tasks are highlighted, which makes it easier to identify them.
To stop an active task, just run:
$ task 1 stop
This stops the task ID 1. You can stop all tasks once they are completed.
You can search for specific task using regular expression.
Say for example, the following command displays the task that contains the word "Tamil".
$ task '/.* Tamil/' list
ID Age Tags Description Urg 8 56min language tamil Learn Tamil Language  1.7 1 task
To mark a task as completed, run:
$ task 1 done
Completed task 1 'Write a guide about Taskwarrior'. Completed 1 task.
Now, you can view the list remaining tasks, using command:
$ task next
I don't need a particular, what to do? Just delete it.
To delete a task, run:
$ task 10 delete
Confirm to delete the specified task.
Delete task 10 'Fix Laptop OS problem'? (yes/no) yes Deleting task 10 'Fix Laptop OS problem'. Deleted 1 task.
I need to know how many tasks did I completed so far. No problem! Use this command to display the timesheet.
$ task timesheet
2017-04-02 - 2017-04-08 Completed (2 tasks) Project Due Description Write a guide about Taskwarrior Fix Laptop OS problem Started (0 tasks)
Some tasks needs to be done everyday or every week. Say for example, this command will remind me to clean the living room on Friday to be done by Saturday and Taskwarrior will remind me to do it each week
$ task add Clean living room due:'Saturday' wait:'Friday' recur:'1week'
And, the following command will remind me to pay the Internet bill at the end of each month, every month.
$ task add due:eom recur:monthly Pay Internet bill
The commands cobered so far is just enough to get you started with Taskwarrior. However, there is more. I recommended you to refer the man pages for more details about Taskwarior.
$ man task
Also, check the Taskwarrior documentation page to learn more tips.
You know now how to add, view, manage and delete tasks from command line using Taskwarrior. As far as I tested this utility, Taskwarrior is the perfect TODO task manager for those who spend most of their time in command line. It is light weight, fast, and flawless command line utility to get things done effectively and keep you organized personally and professionally. Give it a try, you won't be disappointed.