Find file
Fetching contributors…
Cannot retrieve contributors at this time
110 lines (79 sloc) 4.64 KB


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)

In addition, tdcli requires the following Python modules (both available by pip install):


make install


Running 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 ApiClient.__init__.
  • Pull requests always welcome!


cycle is released under a BSD License. See the LICENSE file for details.


You can email me at

To report bugs or request features, please use the Issues feature.

Old News


I made a few more improvements to the cycle tool:

  • 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, cycle will hide tasks with a lower priority than that.


I made several changes to cycle which have made it more useful to me:

  • cycle now 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.
  • cycle now 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.