Todo.txt
Todo.txt is the most amazing todo list manager of all time: text files.
The todo.txt todo list follow a very simple syntax. Each line is a new item.
Once completed the item is moved to a done.txt (my done file is approaching
26,000 items). All of it managed by a simple, extendable shell script. Which
means all of your terminal tooling is available to you to sort, grep, and filter
the list however you want. You can prioritize items by adding (A)
in front,
you can group tasks contextually via @context
and you can group tasks by
project with +project
. e.g.
(A) transcribe travelogue +writing @lab
send headphones for repair +shopping @lab
(B) organize crawlspace +konmari @yard
truck trailer pin +shopping @out
homemade periogi +menu @kitchen
(C) el topo & the holy mountain +film @study
(C) oot +game @study
This snippet has four contexts (lab, yard, out, kitchen, and study) and six projects (writing, shopping, konmari, menu, film, and game).
Best Practices
Use the principles of PARAM to organize your todo list
[[PARAM]], which stands for Project, Area, Resource, and Meta. All of my todo items are organized around Projects. If they are an atomic task and not part of a larger project then their project is the area or resource that they best fit into.
For example, my current projects contain +fallgarden
and +fallops
. These are
explicit projects that I am working on. However, I also have +finance
and
+sal
(short for salubrity) which are my areas of finance and salubrity
respectfully and contain many atomic tasks not associated with any larger
project. Last, I have +film
and +game
, which would fall under my +media
area but are explicitly called out because I have resource notes where I log
the films and games that I play in the year.
All tasks should have a project and context (and only one)
It is very easy for tasks to fall through the cracks if they do not have a project and context. It is also easy to get carried away and assign a list of projects and contexts to a task. I find that one, and only one, project and context should be assigned to each task.
Avoid the temptation to add meta-data to tasks
Just as it's tempting to load a task with multiple projects and contexts, it's tempting to start adding all kinds of additional fields to record meta-data to tasks. Resist this temptation! The only meta-data field I find useful is the due tag to surface priority tasks during my nightly review.
Keep the list small
At one point, my list grew to over 300 items covering a huge range of ongoing and backlogged projects. It became untenable to evaluate the entire list during my reviews. My current list has 71 items, almost all are prioritized to be done within the next two weeks. I try to keep the list under 100.
Keep calendar items off the list
In practice, I find it best to leave calendar items on my calendar until they are one [[pythefnos]] away. Projects or events that are more than a quarter away, are best catalogued in my internal digital garden until my quarterly review.
Use project stub tasks and next action items
It is best to keep projects or events that are more than a quarter away detailed
in my internal garden. Projects that are coming up this quarter, but not this
[[pythefnos]], are given a stub in todo.txt corresponding to the project note in my
garden (e.g. fall operations +fallops @lab
).
Once I begin working on a project, I drop the stub from todo.txt and begin feeding next action items from my project note into todo.txt. It can be easy to overwhelm the todo list by dumping the entire task list from the project note into the list. I find it best to just add the tasks that I will either accomplish this [[pythefnos]] or just the next action item itself.
A Context is where a thing is done
We should not confuse Context with [[PARAM]]'s area. A context is best
understood as the space containing the tools where we would complete a task.
However, a space can be multiple contexts: the home office is both my @office
where work is done and the @lab
where [[home lab]] projects are usually worked
on. I have a @phone
context for phone calls, but with modern cell phones, this
could be almost anywhere.
For example the following are my current contexts:
Context | Description |
---|---|
@phone | Tasks completed on my phone |
@office | Tasks for work in my home office |
@lab | Tasks for when my home office transforms into my home lab |
@kitchen | Tasks explicitly in the kitchen (dishes, cooking, meals) |
@study | Tasks for the living room, although if the weather is nice, could be moved outdoors |
@bath | Tasks completed in the bathroom/laundry space |
@garden | Tasks completed in the "garden center" space of the cabin |
@gym | Tasks completed in the home gym space of the cabin |
@house | Catch all for tasks around the cabin that don't fit into any other context |
@yard | Tasks completed in the yard |
@out | Tasks completed beyond the yard but reachable by foot |
@town | Tasks completed in town, usually requiring driving |
@socal, @showlow, @phx, @abq, etc. | Tasks that will require a special effort to travel to these contexts |
The last item is useful for contexts that might occur only a few times a year. If I go to Showlow once a quarter, I might have a backlog of errands to run when I do!
Likewise, I find that even when traveling I will recreate these contexts
wherever I go. On a workaction, I have both my work and personal equipment for
the @office
and @lab
contexts. I might stake out a space on vacation to do
my reading (@study
). The kitchen is always the @kitchen
, regardless of whose
kitchen it happens to be.
Make priorities meaningful
I currently only use priorities A - E, with a specific meaning assigned to each:
Priority | Description |
---|---|
Priority A | Three most important tasks today (Limit 3) |
Priority B | Tasks for today (Limit 7) |
Priority C | Tasks for this pythefnos (~90 tasks) |
Priority D | Blocked tasks. Re-prioritize when unblocked |
Priority E | Daily recurring tasks |
Use Tmux & watch to create a terminal kanban board
See the section under Tmux Set Up in my article on Todo.txt Best Practices for details on how to create a terminal kanban board to display your todo list in a series of columns resembling a TUI interface.
External References
- Trapani, Gina. Todo.txt: Future-proof task tracking in a file your control <http://todotxt.org>, Todo.txt. Retrieved 20V2.
- Hallenbeck, Joseph. Todo.txt Best Practices. <https://joehallenbeck.com/todo-txt-practices/>. Retrieved 24VE
Linked References
- bullet-journal
The bullet journals work in conjunction with [[todo.txt]] and my [[digital calendar]] which provides a record of done tasks, upcoming tasks, and my quarterly backlog.
- calendar
Since the day of each Pythefnos is counted from 0 - G, we have a useful property for tracking recurring events in our [[Todo.txt]] list: we can simply shorten the due date to the final character of the Pythefnos date and assume the current Pythefnos.
- default-apps
- ✅ To-Do: [[Todo.txt]] + [[Paper Based Planning]]
- paper-based-planning
Computational planning tools are then used as a mean of enhancement, e.g. calendar applications, [[todo.txt]], and [[Digital Gardening]] all extend a process that is primarily paper-based.
- personal-productivity-practices
- review-pythefnos
- Export the last 14 days from [[Todo.txt]] into a text file to review
- review-pythefnos
As we review each area, add any new or upcoming tasks to [[Todo.txt]] and update any relevant project or resource notes.
- review-pythefnos
- Review the contents of [[Todo.txt]] by project
- Is every task assigned a project?
- Is there a stub or next action item for each project in the Quarterly Vision Document?
- Review the contents of [[Todo.txt]] by project
- review-pythefnos
- Review the contents of [[Todo.txt]] by context
- Is every task assigned the correct context?
- Review the contents of [[Todo.txt]] by context
- review-pythefnos
- Squash-merge [[Todo.txt]] repository into master and create a new branch