Python Library and Command Line Tool

Hey,

finally got around to write some Python bindings for the Everdo SQLite database: GitHub - larsborn/everdo: A read-only zero-dependency Python interface to the Everdo GTD database · GitHub .

I realize that it might break anytime because I basically just guessed what the structure in the database means and it can change anytime. For that reason, I opted for a read-only approach. Then this tool will at least not corrupt databases and make Everdo maintenance harder than it needs to be.

That being said, I just really needed some very basic features for myself (counting current number of inbox items). LMK what you think and if you find it useful. Also bug reports, feature requests, and contributions are very welcome on Github!

Cheers
Lars

1 Like

That’s cool, thanks for sharing!

Definitely don’t try writing to the database, that will not work well.

Can you share more about your use cases?

Absolutely! There are actually a couple of use cases:

  • I have a StreamDeck and would like to see the current number of items in my Inbox on it (doesn’t need to be real-time). Buttons can just display contents of files so I now have cronjob using my Python library to count the items on inbox and write that number to a text file.
  • Especially when it comes to really old tasks “I know I did that thing once, but can only remember that it contained the word apple”, nothing beats grep on the command line.
  • On a similar topic: a bit of cut/awk/sort/uniq does wonders when it comes to long-term stats of style “how many tasks did I finish in every month last year?”
  • I am currently planning to expose my Everdo list to an LLM via an MCP server.

Definitely don’t try writing to the database, that will not work well.

Hmm why is that so? Asking because I have done minor edits to the db using dBeaver in the past. Took backups of course. Forgot why I did so.

It depends on what you are editing. Something simple like a title of an action is unlikely to go wrong, but something like creating entire items is risky.

  1. You don’t know what assumptions the app is making about the data, so you could silently corrupt the data and break the application. I know you are probably careful about this and have backups, but it’s possible to go without noticing a problem until later on when the earlier backups are gone.
  2. You update may work correctly today, but end up corrupting the database in a future version of the app that expect different things about the data.
  3. None of your edits will reflect in the app until restart, which increases the probability of silently breaking something and only learning about it in a few days when you restart the computer

@larsborn pretty cool, I’ve been thinking about MCP myself, but didn’t get around to it yet. For the most part I don’t want to share the entire history of my projects with an LLM, so I’m just using this to share one action at a time Exporting Everdo actions as Markdown for AI prompting

I don’t want to share the entire history of my projects with an LLM

I can absolutely see this! If sharing stuff like this with, say Anthropic, is within your threat model, you can run relatively powerful models locally.

Thanks for sharing the post about copying as markdown, will absolutely start using it for use cases like “also consider this task: …”. I’m coming from use cases more of the style of “please compile a list of todos for today” and “what did I achieve last week?”. The plan then is to have a bunch of MCP servers talking to all kinds of “action artifact stores” like Obsidian, Everdo, sent emails, …

It depends on what you are editing. Something simple like a title of an action is unlikely to go wrong, but something like creating entire items is risky.

I was particularly holding back from those use cases because it might lead to users unknowingly corrupting their database and then you having to deal with bug reports caused by my ignorance about the precise data model :-). LMK if you think some light editing (modify titles for example) should be within scope for my Python bindings and I’m happy to add that. But also fine with me to not have those features in the lib.

Ah ok. For the most part, I was just editing titles, descriptions, and viewing archived projects. I think I was also deleting old tasks that weren’t shown in the app (though I’ve stopped doing it since it’s probably a waste of time). Would deletion cause potential corruption? I’m also doing edits with the app closed

I also started using this custom GPT geared for GTD for simplifying todos in my GTD review tasks. Haven’t fed sensitive data there for now but it works pretty good.