easy_install holygrail

Short table of content: Configuration - Download - Clients - Bugs - Documentation

>>> import holygrail
>>> grail = holygrail.Grail()
Grail: DB doesn't exist, I'll create it
>>> quest = grail.add_quest("Find the holygrail !")
>>> mission = grail.add_mission("look in my kitchen", quest=quest.id)
>>> realm = grail.add_realm("meatspace")
>>> another_mission = grail.add_mission("Buy a coconuts to make an horse", realm=realm.id)
>>> grail.main_view()
# will display the main view, a list of lists
>>> mission.toggle()


For the past year, I've tested a lot of todo list softwares. None of them have really satisfied me. Except Tracks. But Tracks is a webapp and I don't like webapp. Plus, Tracks is in RoR witch is a cool framework but a pain in the ass to deploy.

Then I discovered that Tracks has a REST API. Great, let's build a ncurse client ! ... Hum, well no. This was clearly a scripting API not aiming to build a full client on it (although you can but you will be really limited). Plus I encountered stupid bugs (ie: webrick, the basic http server, breaks part of the already limited API).

My answer to this frustrating experience is HolyGrail.


I believed that each software should be build as a fully documented high level library and an user interface. This way you can easily script or build your own interface that fit your needs without being limited.


HolyGrail is a fully documented high level library. It intent to manage your nexts actions in the GTD way. It behave a lot like Tracks (see Differences with Tracks bellow). If you don't know how Tracks behave, read principle bellow. It's in python (writing a REST API or something similar hangs somewhere on my missions list). And I try to make it really easy to use.

I also try to keep HolyGrail code simple, documented and strong. HolyGrail has been develop using TDD so it's full of unit tests.


HolyGrail (like Tracks) is an implementation of the GTD's next action list. In other word it's some kind of todo list. It is composed of realms (contexts), quests (projects) and missions (todos). A realm regroup missions, it generally represent a location or a situation, ie: "at work", "at home", "code". A missions is a next action, the next physical action to do to complete your goal. A quest is a succession of missions. It represents a goal. Every time what you are planning require more than one next action, create a project.

Here is an example representation of what this could look like:

Realm: my holy workplace

Realm: at my palace

Realm: reading

Realm: inspiration

Why "HolyGrail" ?

Because all the vocabulary todo/project/context wasn't funny and implicitly implicates stuff I didn't like. Plus, I found that considering that organising your life like an epic quest was much more motivating.

Differences with Tracks



Create a ~/.holygrailrc file. In it create a section "[holygrail]" and add the option uri according to this documentation.

Sqlite uri must use a absolute path.



Get it


On pypi.


git clone git://git.worlddomination.be/python/holygrail.git

Git repository

Bugs and feedback

Testing shows the presence, not the absence of bugs - Edsger W. Dijkstra

I'm planing to deploy sd but haven't take the time for. So, for the moment, send me an email or join irc.freenode.net#holygrail.

I'll really appreciate feedback to make HolyGrail better and have a stronger code.


"Coming soon"


For the moment, there isn't any released client.

I'm working on a ncurse client for the moment, but I haven't released it. Hit me if you want to play with it.

A friend of mine is developing a web interface on his free time.

If you are writing a client and want to appears here, just send me an email.


Generate from the docstrings.


HolyGrail is currently in agplv3+.

"You sir are an extremist !" "Yes."

What's next