There are many ways to keep track of tasks. A sticky note is often a great choice for things that need to be done today, or for items to pick up at the store. A notebook is step up from that. As you begin to plan further ahead, and organize the tasks, you gain the ability to turn goals into accomplishments.
Note: See the parent document: Using the Terminal as a Daily Driver for more about terminal productivity applications.
The go to application for managing tasks is called Taskwarrior.
Taskwarrior
Taskwarrior is simple enough to work like a sticky note of tasks. task add buy wiper blades for the truck will add a task to the application. To get the most out of taskwarrior:
- Start using it.
- Check out the documentation, tutorials, and getting started info.
- Watch some YouTube tutorials.
- Figure out the things that work the best for you.
Taskwarrior, once installed, as alluded to above, can be run with the task command.
Taskwarrior-tui is an additional application that gives you an interactive screen for managing your task.
- Taskwarrior source code
- Taskwarrior home page
- Taskwarrior documentation
- Taskwarrior cheat sheet - link to latest command reference
- Taskwarrior-tui source
- Taskwarrior-tui documentation
- Taskwarrior YouTube tutorial
Taskwarrior supports a variety of fields to bring extra information to tasks. These include:
- Projects
- Sub-projects
- Tags
- Start tasks to mark them as active
- Dependencies
- Due dates
- Recurring events
Configuration is stored in ~/.taskrc. Options to look at changing include:
# change your text editor
editor=hx
# use a different color theme
include ~/.task/themes/tw-dark-gruvbox.theme
Configuration
There is also a task config [VARIABLE] [VALUE] that can change configuration values. See the configuration page in the taskwarrior documentation for more information.
Data Storage
The data for the application is stored, by default, in ~/.task/taskchampion.sqlite3, and is a SQLite database file as the name implies. The location for the data files can be changed in the .taskrc file by setting the data.location=~/.task to another folder.
You can open the data file using one of the tools from the cli database article.
Diving into the Data
This is not necessary to do, but exploring the data will give you a deeper understanding of how taskwarrior collects and stores your information.
Opening taskchampion.sqlite3 you will find a tasks table has two fields (uuid, data).
.schema tasks;
-- CREATE TABLE tasks (uuid STRING PRIMARY KEY, data STRING)
If you retrieve a record from tasks, you will see the data is stored as a JSON string.
-- retrieve the first record.
SELECT data FROM tasks LIMIT 1;
-- or look for a particular task
SELECT data FROM tasks WHERE data LIKE '%buy%';
This gives the result…
{
"entry": "1750688944",
"description": "buy a/c filters",
"end": "1750711988",
"status": "completed",
"modified": "1750711988"
}
Suppose I wanted to export the data to be analyzed in another program? One good way is to export the tasks as a CSV file. From the command prompt, the following command creates a CSV of all the tasks.
litecli -D taskchampion.sqlite3 --csv --execute "SELECT data from TASKS;" > mydata.csv
Or better yet, since python is a great language for handling SQLite data and JSON data, it would be possible to build a tool that could graph your task data in interesting ways.
Conclusion
This tool is simple to get started, but has enough built-in power to grow with you as your needs grow. You will want to revisit the documentation frequently as your use case for Taskwarrior grows. My workflow is currently to review my task list each morning or the night before and select the must do tasks for the day. This helps me to get those things done at a minimum and keeps me consistently making progress.
At this point, I am exploring more of the reporting options and thinking more about managing projects. I’m also exploring ways to synchronize my tasks across devices. The Taskwarrior server isn’t supported any more for newer versions of Taskwarrior, but I think syncthing which I’m already using for other purposes can be used.