The Best Application for Command Line To-Do List Management

Konstantin Nezhbert
4 min readMay 10, 2022

On my computer, the main application that is always running is the terminal emulator. Throughout my workflow, I always use console applications to perform various tasks. I want to talk about one simple but very functional utility that allows you to manage your tasks from the terminal emulator.

Photo by AltumCode on Unsplash

This utility is called Taskwarrior. This is an Open Source application and is available in the repositories of almost all Linux distributions, as well as in Homebrew for macOS. Information about the installation on your system can be found in the Downloads section on the utility’s website.

After installation, I recommend watching a simple video that shows the main features of the program.

Task management

Let’s practice!

You can view all added tasks with the task command:

There’s nothing here right now, let’s add a task:

The task has been added, it has been assigned an ID, time of adding and priority.

You can end a task with the done command, specifying its ID:

Tasks can be divided into projects:

You can view the tasks of a specific project by specifying its name:

For a simple to-do list, these commands are more than enough.

Advanced usage

You can view detailed information about tasks using the long command:

You can view detailed information about a task with the info command:

Adding a task priority

Usually, tasks, if there are many of them, have a priority. Taskwarrior supports three priorities for tasks:

  • H — high priority;
  • M — medium priority;
  • L — low priority.

You can set the priority with the command priority:<PIORITY>. For example:

The task will also change its color if your terminal emulator supports colors.

Adding tags

In addition to projects, tasks can be grouped by attaching appropriate tags to them. You can add multiple tags to one task. The following syntax is used for this:

Adding notes

You can add annotations to tasks. You can do this with the annotate command:

Editing tasks

Created tasks can be edited. There are two ways to do this:

  • task 2 edit — The task will open in the default text editor (mine is Vim).
  • task 2 modify priority:L — For quick editing of priorities or other parameters.

Task tracking

Current tasks can be tracked. To do this, simply start the one you need with the start command:

The running task will also be highlighted. The Active column will show the time during which the task is being worked on.

You can stop a task with the stop command.

Deleting a task

Any task can be completely deleted. To do this, use the delete command.

Task execution time

For tasks, you can set a deadline when they must be completed. Taskwarrior supports several keywords, as well as specifying the date in a special format:

  • tomorrow;
  • today;
  • someday;
  • 1week;
  • 1month;
  • 2022–05–30.

You can set the date with the following command:

You can also view all tasks by date in a calendar view. You can call it with the command of the same name:


The appearance of the application can be configured in its configuration file — ~/.taskrc. To select a theme, simply uncomment the desired line.

I prefer the dark-blue-256 scheme.

Synchronization of tasks between different machines

I have several computers, so it is useful to synchronize tasks between them. I use Git for this. I have a personal GitLab that stores my pet projects, configs, scripts, knowledge base, blog source codes, and other useful things.

Taskwarrior is a utility with roots in UNIX, so it stores all of its contents in text format in the user’s home directory. And text files are well versioned with Git.

I clone the repository with the contents of the utility in ~, and then override the location of the utility’s system files in its configuration file.

After the changes, it is enough to commit the changes, and all your tasks will be synchronized between all machines.


Taskwarrior has become an indispensable tool for me in my daily work. This simple application helps you quickly and efficiently manage tasks in your terminal. And synchronization with other machines allows you to quickly move from one computer to another without losing what you still need to do.