Things 3 Audit
My use of various tools to work around UI and CLI limitations with Things 3.
Problem Statement
All tasks in GTD should have associated contexts, things like Errand, Computer, Call, Email, etc. In Things 3, these are typically defined using tags. Tags can be applied directly to tasks. Tags can also be applied at the Project and Area levels, which will be inherited by all child tasks.
While super-useful, I don’t appreciate that the Things 3 UI does not actually show these inherited tags on the individual tasks themselves. There is also no means to search for tasks that are not tagged (when inheritance is being applied) or missing specific tags (assigned directly or via inheritance).
As a result, I find it hard to confirm if my tasks are missing contexts without navigating to & filtering each built-in list (ex: Anytime, Upcoming, etc.) one-at-a-time.
These instructions provide a way to overcome the above, to audit tasks & identify which ones are missing contexts (either directly-applied or inherited). I run this once per week, so my tasks are in tip-top-shape ahead of starting my GTD weekly review.
Prereqisites
Running these steps requires Python 3 to be installed on your local machine. In addition, you will need access to Google Sheets. This should be usable by either Windows or macOS.
Setup
- Install the things-cli Python package, using instructions available on its GitHub repository.
- Secure your own copy of the following Google Sheets workbook:
- Open the workbook URL
- If prompted, log into your Google account
- Follow the on-screen prompts to finish copying the file
When complete, you will have the toolset necessary to:
- Extract your Things 3 data to a text file
- Parse that file’s contents to surface the tasks requiring your attention
Process
- Open your computer’s command line utility, such as Terminal for macOS
- Navigate to the folder where you wish to store the exported Things 3 tasks
- Run the following command to export all tasks to a CSV file:
things-cli --csv all > tasks.csv
- In Google Sheets, open the “Things 3 Audit” workbook you copied above
- Select the
$Input
sheet - In the menu, select File > Import
- On the Import File modal, select the Upload tab
- Click the Browse button
- Select the
tasks.csv
file from your workstation - When prompted, enter the following selections:
- Import Location: Replace current sheet
- Separator type: Detect automatically
- Click the Import Data button
- Wait for the file to complete importing (it may take several seconds, depending on your volume)
- Select the
$Output
sheet - Filter by the following:
- title: everything except Blanks
- Has Context Overall?: False
Anything that remains displayed is a task that is missing context, either:
- As a tag on the task itself, or;
- As a tag inherited from an ancestor (Area or Project)
Nota Bene
- The Google Sheets workbook initially supports processing 5000 tasks and has been tested for such volume. If you have more than 5000 tasks, you can try the following:
- Add extra rows as needed to the
$Input
and$Ouput
sheets - On the
$Output
sheet, be sure to copy down the formulas in Columns G thru O
- Add extra rows as needed to the
- Because of a things-cli bug where the exported column order is unpredictable, to keep formulas from breaking in the Google Sheet workbook, I've taken advantage of the Apps Script documented here
- Regarding the "Heading Has Context?” column: yes, I’m aware that tags cannot be applied to headers. Because of the way things-cli exports data, I have to perform a secondary lookup in Column M between header UUID → parent project UUID to keep things solid.