Taskwarrior Contexts

I manually applied tag filters to keep task listings relevent in my previous Taskwarrior posts, but Taskwarrior provides contexts to apply filters automatically. Let's use those instead.

What is a context?

Taskwarrior contexts are predefined filters appropriate to a particular set of circumstances. Once you define and load your context, Taskwarrior automatically applies the context's filter for reporting. You can use them to focus on tasks important to those circumstances: work, craft projects, unsorted ideas, or home projects.

I removed sensitive tasks from task output with manual filters like -work. A special context for my blog would let me concentrate on writing instead of remembering that filter every time.

Using contexts

To create a context, use context define with its name and filter rules.

$ task context define blog -work
Are you sure you want to add 'context.blog' with a value of '-work'? (yes/no) yes
Context 'blog' defined. Use 'task context blog' to activate.

Now I have a context that includes everything but +work tasks. Perfect.

Maybe another context for only work tasks?

$ task context define work +work

How do I get a handy list of created contexts?

$ task context list

Name Definition Active
blog -work      no
work +work      no

I could get carried away with new contexts, but I'll keep it to three for now: at work, on the blog, and everywhere — no context at all. I can add more later.

Before I start using the contexts, how many tasks do I have?

$ task count
153

count counts every task, including those that I completed or deleted. Let's apply the +PENDING virtual tag to only count incomplete tasks.

$ task +PENDING count
63

With these numbers in my head, let's set the "blog" context.

$ task context blog
Context 'blog' set. Use 'task context none' to remove.

Now how many tasks do I have?

$ task count
112
$ task +PENDING count
53

Okay, I don't have that many +work tags. It's still nice not to worry about them when writing.

How do I see what context I am in? context list includes a column to show the active context.

$ task context list

Name Definition Active
blog -work      yes
work +work      no

However, it might be clearer to show only the current context.

$ task context show
Context 'blog' with filter '-work' is currently applied.

Context affects reporting, but does not affect task creation. I can create a +work task from my "blog" context. It just won't show up in any reports until I switch context.

Taskwarrior maintains context across shell sessions, so eventually I will want to clear the current context.

$ task context none

I must confess something, dear reader. This post has been sitting as a draft for almost a month. My Taskwarrior usage evolved during that month. I create fewer +work tasks, because it often duplicated effort between Taskwarrior and the issue tracker used at work. I still have a few for side tasks that don't fit neatly into work's ticketing system. I don't really have enough to merit a work context, though.

I may as well delete the "work" context.

$ task context delete work
Are you sure you want to remove 'context.work'? (yes/no) yes                                                      
Context 'work' deleted. 
$ task context list

Name   Definition      Active
blog   -work           yes
bucket +idea -PRIORITY no

Oh yeah — the bucket. That's new since I started this post.

I get a lot of ideas. Some of them are awful. Some of them seem worth doing. They all go in Taskwarrior. Every once in a while I sit down with a cup of coffee and sort through unexamined ideas: tasks tagged +idea and without an assigned priority. That's what the "bucket" context is there for.

The interesting ideas get a priority — usually L unless they excite me. The uninteresting ones get deleted.

That's all for now. Have fun getting something done!