A series where author show how to use taskwarrior to implement GTD. This series requires some knowledge of GTD.
Part 1: Intro
Taskwarrior is very efficient list manager.
Taskwarrior base command format?
Taskwarrior usage:
task <filter> <command-name> <arguments>
What is a filter in Taskwarrior?
Task command by default run on all your tasks. So filter is used to select
specific tasks. For example: task +next
will show all tasks with +next
tag.
Which command names you can use in Taskwarrior?
Command name can be next
, add
, done
, list
, etc.
What is an argument in Taskwarrior?
Argument is used to pass additional arguments to command. For add
command
it is task description, task add <description>
will add new task with
given description. It’s one of the most basic command.
How to specify task “group” when you add it?
When you add any new task you can also specify project (proj:xxx
) and
tags. We use project because we usually split big tasks into projects of
tasks. Also, you can specify tags by adding +<tag>
to task description.
Example:
task add Read chapter 1 of GTD pro:read.gtd +read +@home
What task
command do?
Running task
itself is equivalent to task next
command. It’s shows most
important of your tasks, based on pre-configured filter (priority sorting).
How to change specific task/tasks?
Each task had own ID. You can use it to refer to specific task. For example
to mark task as done, you can use task done <ID>
. You can find required
task by task <keyword>
command.
You can also specify multiple IDs, separated by comma or a contiguous range
of IDs: task 1,3,5 done
or task 1-5 done
.
NOTE: I have alias t=task
to make it shorter, so I can run commands by t ...
.
Part 2: Collection
Collection is a capture process. Where you can save all your incoming tasks, this allows free your mind from remembering all this tasks. Items in inbox can be represented as tasks which needs to be processed.
Can you describe basic GTD collection requirements?
Usual GTD’s collection requirements:
- The inbox is where you capture ideas and tasks as they occur to you.
- The transaction cost of putting something in your inbox should be as low as possible.
- If your inbox is not at zero, it has to be immediately visible.
- You should need as few inboxes as possible (1-3).
- You are able periodically review your inboxes (weekly/monthly).
I use default project, “Inbox” (instead aliasing in
tag like in original article). So
any new task will be added to “Inbox” project.
My task add
command aliased to ==ta
==.
Urgency
To add urgency to a inbox
task, we modify its urgency coefficient. You can do
this by putting the following line in your ~/.taskrc
file:
urgency.user.tag.inbox.coefficient=15.0
But usually it’s can be useful with different tags (not inbox).
Inbox in terminal’s prompt
Inbox in terminal’s prompt, skipped. I think it’s generate a lot of clutter.
Report
Custom report can be configured through ~/.taskrc
file.
For example.
To see this report, just type ==ti
(my alias to task in
)==. You can use
this ad mental habit to quickly check your inbox in plain list
representation.
Part 3: Tickling
This chapter explaining how to use tickler file with Taskwarrior.
Adding wait:
metadata to a task ensures that the task won’t be visible
until the date that you set this metadata to. For example, when you enter
the following command, the task
doesn't show up until the following Sunday:
tat monday Remind mind, did I completed Syd-GTD note?
This task use special tat
function, to easily add tickle items.
This way the task will only show up in your inbox the following Monday. Of
course, you can also use full dates like 2023-09-24
.
To review tickle tasks use this command: ==t +tickle all
==
Thinking it over
Personally, I often encounter a situation where I need to think something over and decide what to do with it later. This really doesn’t have to end up on a task list because then there’s the possibility that I’ll see it before I’m ready to think about it. For precisely that situation, I made the
think
alias:It is important that you don’t ever
think
something over twice. You don’t want to create a snooze button! A good practical tip is to make sure that everythink
item is a simple yes/no question.
I think it’s useful, so I have this alias too.
alias think='tat +1d'
Part 4: Processing
You usually process items following GTD processing workflow.
Processing requirements?
- Processing your inbox should be very easy to start with.
- Processing is about making decisions, not about starting or finishing tasks.
To start processing your inbox, type ==ti
== (alias to task inbox
). You
should now see your inbox items if you’ve followed this series up to this
point. For every task you see there, go over the following questionnaire.
Processing inbox algorithm?
When you get into the habit of asking yourself all these questions/steps,
there should come a point where you don’t need this detailed answer
anymore.
- Item is actionable?
- It’s not: Decide whether to keep note of it in your
reference system, whether you want
think
it over of just delete it. (Remember, when usingthink
, you should enter a simple yes/no question.) Then check off the task. - It is: go on.
- Is there more than one action required?
- Yes: Start up a new project with first task (at least one have
+next
tag).ta +next pro:new.project "Set up a new git repository for the fancy new project"
Add as many tasks as you can possibly think of for this project. Then check off the task. - No: Decide what action the
+inbox
task represents and just create it with+next
tag.ta +next "Call Jamie to schedule a meeting."
- How long the action is going to take?
- It will take no longer than two minutes: Do it right now. Then check off the task
t 1 done
. - It will take longer than two minutes: Estimate how long it would take to complete the action and go on.
- Are you going to delegate the task?
- Yes: Modify the task to be a
waiting
task and annotate it with instructions on how to check whether the task is done yet. Then delegate the task. Let’s say the task has IDn
.task n modify project:wait
task n annotate "Check: Call Dave and ask about the car tires." due:+1w wait:+1d
- No: Go on.
- Defer the task
task n done
task pro:gtd add Call Jamie to schedule a meeting.
Make sure the action is really an action when you use +next
tag. It
must be something that you can start doing ==immediately== without
thinking about “how?”, “where?” or “why?” thanks to the thought you put
into it at this moment.
Contexts
How to group tasks by physical place, where are you doing tasks?
When you finally get around to doing, it will be very
important for your mental health to keep in mind the context in which
you are working. Luckily, Taskwarrior makes it very easy to allow you to
use your context to your advantage. For now, all you need to remember is to
always add at least one context tag to a task. Common context tags are
+@office
, +@phone
, +@computer
, @shop
, … Check more contexts
variants in GTD contexts.
Research
Often the very next task for a project is just a lot of ‘looking into
something’. For that reason, here is the
==rnd
, Research and development== alias:
Read and review
Reading something later, when you know very well what it is you want to
read is called ‘read and review’. Ideally, you know exactly what you need
to do, which drawer you need to open, which file to open, which link to
point your browser to. Taskwarrior allows you to keep this info in
annotation with ==t annotate
==.
Usually read and review happens on the internet. Enter the ==rnr <url>
==
to quickly generate this type of task.
TODO: dynamic include?
To grab web page title I use complex url2text
script,
which utilize Brave browser (to support dynamic rendered
web-pages, and avoid some false-positive web-sites protection issues).
And here rnr
function:
Part 5: Doing
Context
The most important step in choosing what task to work on is to realize that there are tasks you don’t even need to consider. If you’re on an airplane, and you have some time to work, there’s absolutely no way that you’re going to be able to water your office plants. Ideally, tasks that lie out of your current context should not even present themselves in the range of opportunities.
You can merge contexts into big one, or use custom parameters, for example
(need place into ~/.taskrc
):
How to use contexts?
To enable contexts filtering (show only context-specific tasks), use
context
command:
Brain power
Currently, I don’t use this feature, but it’s interesting.
Here’s another example. You’ve just done an exam and your brain feels like
its toast. There’s no use in seeing a task like Write a review of Marc's paper on monoids in the category of endofunctors
(wink). A task like
Water the office plants
would ideally present itself at the top of your
task list.
Can I create custom attributes for tasks?
You can use Taskwarrior’s user defined
attributes (UDA) to accomplish this.
Taskwarrior supports a set of standard attributes for a task, known as the core attributes. These include project, description, due and so on. There are more than 20 standard attributes. They are necessary to provide all the functionality of Taskwarrior. For example, the project attribute is used to provide feedback on completion of a project, the projects command itself, and project hierarchy filtering. The project attribute has a lot of functionality associated with it, and this is why project is a core attribute.
Start by defining a UDA for brainpower:
You can then add the brainpower
consideration to your next report:
This will sort the tasks on your list in a decreasing order by brainpower first.
Estimate
How I can organize tasks by time estimate?
Estimate useful to soft limit time on given task.
Similar to the way we define the brainpower
UDA, you can also define a
UDA for the time estimated to complete the task:
Using your UDA’s
How to create and list task with UDA (estimate)?
Same as standard attributes, but with own prefix.
To create a new task or list them, you now specify a custom UDA:
The next report should now show you a significantly smaller amount of tasks to choose from. Even better, you are sure that you only see tasks that you can actually make progress on within the next ten minutes.