DevTodo is a small command line application for maintaining lists of tasks. It stores tasks hierarchically, with each task given one of five priority levels. Data is stored as JSON.
The task list is stored in a file named .todo2 in the current directory. Whenever a list is modified a backup is first copied to .todo2~.
DevTodo1 still compiles and installs, but is now unmaintained. It is available here. Some differences are described below.

Add a task, like so:
$ todo2 -a I should really update my homepage.
Add a task as a child of an existing one:
$ todo2 -g 2 -a This is a child of task 2.
List open tasks:
$ todo2
List all tasks, including closed:
$ todo -A
Mark a task as complete:
$ todo2 -d 1.2
If you find that your todo list is overwhelming your screen, turn on summary mode. It displays only the first line of each note.
$ todo2 -s
Get a full list of command line options with:
$ todo2 --help
DevTodo is written in the Go programming language.
Installation is quite simple:
$ go get github.com/droundy/goopt $ git clone git://github.com/alecthomas/devtodo2.git $ cd devtodo2 $ make install
The binary and man page will be installed under /usr/local. To specify an alternate prefix just pass PREFIX=<dir>
Version 1 was written in C++ in 2004, and has been due for a rewrite for a very long time. The release of Go seemed like a good opportunity to both learn a new language and rewrite DevTodo.
~/.todorc configuration file.
DevTodo2 will load your old .todo files automatically. If you modify the task list with DevTodo2 it will transparently migrate the file to .todo2 in the new format.
You can specify the version 1 filename to load with --legacy-file=<filename>, and the version 2 filename with --file=<filename>.