cycle is a command-line tool which implements the Cycle System from Time Management for System Administrators by Thomas Limoncelli. The Cycle System, in this context, has five main activities:
- Display the tasks assigned to today's list
- Add a new task
- Complete a task
- Move a task
- Reprioritize a task
It's a lot to explain in a short blurb here, but basically, the idea is to assign your tasks to a specific day, and by the end of the day, to have taken some action with each task (either completing it, deleting it, or moving it to another specific day).
cycle implements this system by keying off of the
duedate field in Toodledo; when you run
cycle by itself, it will show a list of all of your tasks which have a
duedate of today, along with their priorities. Really though, if this sounds at all intriguing, you should read the book; Tom explains it a lot better than I ever could.
- Python 2.5+ (or, an older version with the ElementTree module installed)
- < Python 3 (working on this)
tdcli requires the following Python modules (both available by
cycle by itself lists the tasks which are due today:
$ cycle 1: (A) Write README for cycle
cycle -d lists the tasks due on a specific day:
$ cycle -d tuesday 1: (D) Tuesday's demonstration task
This uses the parsedatetime library, which understands most human-readable strings ("tomorrow", "next wednesday", "june 12", etc.).
cycle -a adds a new task, due today:
$ cycle -a Create a demonstration task $ cycle 1: (A) Write README for cycle 2: (D) Create a demonstration task
cycle -p reprioritizes a task:
$ cycle -p 2 B Reprioritizing task 'Create a demonstration task' to B $ cycle 1: (A) Write README for cycle 2: (B) Create a demonstration task
cycle -m moves a task to another day (tomorrow by default):
$ cycle -m 2 Moving task 'Create a demonstration task' to tomorrow $ cycle -d tomorrow 1: (B) Create a demonstration task $ cycle -m 7 next wednesday Moving task 'improve poodledo' to next wednesday $ cycle -d next wednesday 1: (A) improve poodledo
cycle -c marks a task as complete:
$ cycle -c 1 Marking task 'Write README for cycle' as complete
- In order to use this script, you will need to get your own API token. I have not included mine in the code. Add it to
- Pull requests always welcome!
cycle is released under a BSD License. See the LICENSE file for details.
You can email me at email@example.com.
To report bugs or request features, please use the Issues feature.
I made a few more improvements to the
- I improved date handling for the "--day" and "--move" arguments to better support date strings with spaces in them (like "next thursday").
- I added support for moving all of the tasks on a day by specifying '*' as the task argument. (Just specifying an asterisk gets eaten by the shell.)
- Updated "--priority" to support all five priority levels.
- Added a priority cutoff filter to the config file; by specifying "priority = -1" (or higher) in the [filter] section of your config file,
cyclewill hide tasks with a lower priority than that.
I made several changes to
cycle which have made it more useful to me:
cyclenow supports a "-t" parameter; it will only print tasks with that tag. You can also add a section to the config file called "[filter]" and a key there called "tag" which will have the same effect. This way you can keep your home and work to-do lists separate if you want. Also, newly created tasks will carry the currently-defined tag.
cyclenow supports combining the -a (add) and -c (complete) arguments; it will create a new task and immediately close it, to aid in keeping track of completed, unplanned work.
- Tasks now sort by duedate and duetime, in addition to by priority.
- The "-d" parameter now supports a special "week" value, which sets the range of displayed tasks to ("last sunday", "saturday") inclusive. This violates the Cycle System, but I find I need the view.
I also added a bit of error checking.