Skip to content

An experiment in having LLM support for the Things 3 todo app.

License

Notifications You must be signed in to change notification settings

kgourgou/Things-AI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unofficial LLM support for the Things 3 todo app

An experiment in giving LLM support to the Things 3 todo app.

Say you write a task in things like this:

I need to do the thing # set tag to hard, due in three days

If you then run main.py (and everything goes well), it should update the task in Things 3 to have the tag "hard" (if that tag already exists) and the due date three days from now.

Essentially you write your tasks as

<task title> <command character> <commands to the LLM for updating the task in Things>

and when Things cloud brings your tasks to your mac, the script will pick those with commands, send them to the LLM and update them accordingly, then remove the command from the task. Those tasks will then be synced back to the cloud.

You can change the "#" to a different command character in the main.py file.

For now, the parser can only update the following fields:

  • title
  • tags
  • due date
  • append_notes

But in reality it should be simple to support any field that is updateable through the Things URL scheme, eg. the deadline, the project, the area, checklists, etc.

Installation

pip install uv 
uv pip install -r pyproject.toml

You will also need an LLM and Things 3 app installed on your Mac. To connect to the LLM, you need to create a .env file in the root directory with the following content:

THINGS_AUTH_TOKEN=your_things_auth_token
API_BASE = <API_BASE_URL>
API_KEY = <API_KEY>
MODEL_NAME = <MODEL_NAME>

You can learn more about the auth token and the Things URL scheme here.

I'm using litellm, so you can connect to any litellm-supported LLM. If you want to use a local model, I recommend either

I use those locally with LMStudio and a 4bit quantization for about 5ish GB of RAM usage.

Acknowledgements

This experiment would not have been possible without:

  • The Cultured Code team and their URL scheme.
  • The things.py python library for reading the Things3 SQL database.

I also appreciate the DSPy library and open-source model developers.

Risks

  • The LLM may overwrite your tasks in ways you don't like. That's why by default I set the possible_edits to be ["tags", "due date", "append_notes"]. You can change this in the main.py file.
  • I don't know what triggers cloud sync in Things 3, so you may have to wait a bit for the changes to be reflected in the app.

About

An experiment in having LLM support for the Things 3 todo app.

Topics

Resources

License

Stars

Watchers

Forks

Languages