Command Line Task Management
If using a terminal and working from the command line is where you like to live, then you might want to consider also trying out a command line based task management tool like TaskWarrior.
It's open-source and fairly feature rich consider it's a non-gui tool.
You can install on macOS using:
brew install task
If you need help using the tool, then their website has some good documentation. But I found using either:
This (for me) was more useful in getting up and running quickly. I know there are 'quickstart' style guides available from their site. But sometimes just getting stuck in and playing around can getting you using a tool like this in a 'practical' sense much more quickly.
List any tasks already created:
To create a new task with the description "this is my task":
task add +foo this is my task
Note: no quotes around the description are necessary
If you need to tag your task as well, use the
task add +foo this is my task
If you want to filter your tasks by tag, again use the
task list +foo
You can mark a task as being 'done' by specifying the task's ID (you'll find a task's ID within the
ID column of the output shown when executing
task list), which is just an incrementing integer starting from
1. This means that your first task will have an ID of
1 and we can mark that task done like so:
task done 1
It's important to know that for most commands you can swap the task ID and the subcommand being specified. So
task list 1is the same as
task 1 list. Use whatever makes more sense to you. I'm more used to
task <subcommand> <id>
Any tasks that are marked 'done' move into a separate completed area, which you can view:
Similarly you can filter that completed list of tasks with tags:
task completed +foo
Note: task IDs are reused when tasks are marked 'done'
but each task also gets a UUID (unique user id)
you'll see this UUID in the
To modify your task, specify the task id (e.g. 1):
task modify 1 this will replace my previous task description
Note: not specifying a tag doesn't affect tags already applied
If you want to add a new tag on a task, use
task modify 1 +some_new_tag
Note: adding new tags, doesn't affect existing tags
You can remove tags by using the
task modify 1 -some_new_tag
You can use the
append command instead of
modify to tweak your description without having to rewrite it completely:
task append 1 some text to add to end of existing description
Similarly there is the
task prepend 1 some text to add to beginning of existing description
So imagine we created a new task and used both
task add foo task append bar task prepend baz
When we list the task we'd see the task description as:
baz foo bar
modify command isn't flexible enough, then you can go direct to the stored data with the
edit command (but rarely do I use this particular feature over
task edit 1
Note: uses editor assigned to
To delete a task that you've realised you're not going to work on:
task delete 1
delete command will check you're sure you want to delete:
Delete task 1 'this is my task'? (yes/no)
Note: a deleted task doesn't show in the
A priority can be set using the
priority attribute. The value for this attribute can be set to
M (Medium) and
Setting a priority affects the position of the task in the list. Setting a task to a low priority also affects the colour of the task so it becomes more obvious 'at a glance' what's important.
task add priority:H some important task
In the real world we find our tasks can be blocked by other tasks all the time. You can use the
depends attribute to indicate another task that is blocking an existing task:
task modify 1 depends:2
Doing this will move task 1 to the bottom of the task list and when using
task list we will now find a
D column that again helps us to identify what tasks are blocked 'at a glance'. Also, any task that is now 'depended' on will become highlighted and moved to the top of the task list, again to indicate its urgency.
This means you can also use the following commands to filter out only those tasks that have been explicitly blocked or that are blocking:
task blocked task blocking
If you need to remove a dependency link, then specify the
depends attribute without a value:
task modify 1 depends:
Here are some features I've not yet fully explored, but seem interesting as a way to include data that is typically more related to full task management GUIs.
TaskWarrior can show a report of aggregated task status by project:
task summary Project Remaining Avg age Complete 0% 100% (none) 5 1d 64% 1 projects
TaskWarrior can show a weekly report of tasks completed and started:
task timesheet 2016-12-18 - 2016-12-24 Completed (0 tasks) Started (0 tasks)
Note: I was holiday that week ^ hence no tasks :-)
This command starts with the current week and works backwards. So as an example, the following will show the last two weeks timesheet:
task timesheet 2
TaskWarrior can show a graphical burndown chart by the day, week or month.
Note: there is also
but I like using
For a shorter/clearer breakdown of tasks (added/completed/deleted):
According to the
Shows all data and metadata for the specified tasks. This is the only means of displaying all aspects of a given task, including the change history
I used to use TaskWarrior a looong time ago and have recently come back to it to find it has improved a lot and added some really cool features that weren't there when I last used it.
The reason I stopped though was because there's something tangible when dealing with a paper list. It's hard to explain. So I'm not sure if I'll ultimately find myself gravitating towards that method again in the future?
I hope not, because other than the inability to articulate why I went back to paper it seems there should not be a preference for that over TaskWarrior (considering how much I love working from the command line).