{"id":27650126,"url":"https://github.com/kgourgou/things-ai","last_synced_at":"2025-07-17T23:35:09.706Z","repository":{"id":275867288,"uuid":"923852050","full_name":"kgourgou/Things-AI","owner":"kgourgou","description":"An experiment in having LLM support for the Things 3 todo app. ","archived":false,"fork":false,"pushed_at":"2025-02-21T17:53:52.000Z","size":185,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-24T03:32:57.904Z","etag":null,"topics":["llm","things3","todolist"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kgourgou.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-01-28T23:46:08.000Z","updated_at":"2025-02-21T17:53:56.000Z","dependencies_parsed_at":"2025-04-24T03:38:22.633Z","dependency_job_id":null,"html_url":"https://github.com/kgourgou/Things-AI","commit_stats":null,"previous_names":["kgourgou/things-ai"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kgourgou/Things-AI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kgourgou%2FThings-AI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kgourgou%2FThings-AI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kgourgou%2FThings-AI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kgourgou%2FThings-AI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kgourgou","download_url":"https://codeload.github.com/kgourgou/Things-AI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kgourgou%2FThings-AI/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265678746,"owners_count":23810120,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["llm","things3","todolist"],"created_at":"2025-04-24T03:28:10.861Z","updated_at":"2025-07-17T23:35:09.679Z","avatar_url":"https://github.com/kgourgou.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Unofficial LLM support for the Things 3 todo app\n\n- [Unofficial LLM support for the Things 3 todo app](#unofficial-llm-support-for-the-things-3-todo-app)\n  - [Installation](#installation)\n  - [Acknowledgements](#acknowledgements)\n  - [Risks](#risks)\n\nAn experiment in giving LLM support to the Things 3 todo app.\n\nSay you write a task in things like this:\n\n```markdown\nI need to do the thing # set tag to hard, due in three days\n```\n\nIf 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.\n\nEssentially you write your tasks as\n\n```markdown\n\u003ctask title\u003e \u003ccommand character\u003e \u003ccommands to the LLM for updating the task in Things\u003e\n```\n\nand when Things cloud brings your tasks to your mac, the script will pick those with commands, send them to the LLM\nand update them accordingly, then remove the command from the task. Those tasks will then be synced back to the cloud.\n\nYou can change the \"#\" to a different command character in the main.py file.\n\nFor now, the parser can only update the following fields:\n\n- title\n- tags\n- due date\n- append_notes\n\nBut in reality it should be simple to support any field that is updateable through the Things URL scheme,\neg. the deadline, the project, the area, checklists, etc.\n\n## Installation\n\n```bash\npip install uv \nuv pip install -r pyproject.toml\n```\n\nYou 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:\n\n```bash\nTHINGS_AUTH_TOKEN=your_things_auth_token\nAPI_BASE = \u003cAPI_BASE_URL\u003e\nAPI_KEY = \u003cAPI_KEY\u003e\nMODEL_NAME = \u003cMODEL_NAME\u003e\n```\n\nYou can learn more about the auth token and the Things URL scheme [here](https://culturedcode.com/things/support/articles/2803573).\n\nI'm using litellm, so you can connect to any litellm-supported LLM. If you want to use a local model, I recommend either\n\n- \"mradermacher/Bespoke-Stratos-7B-i1-GGUF\" from [Bespoke Labs](https://www.bespokelabs.ai/)\n- or \u003chttps://huggingface.co/mlabonne/NeuralBeagle14-7B\u003e from Maxime.\n\nI use those locally with LMStudio and a 4bit quantization for about 5ish GB of RAM usage.\n\n## Acknowledgements\n\nThis experiment would not have been possible without:\n\n- The [Cultured Code](https://culturedcode.com/things/) team and their URL scheme.\n- The [things.py](https://github.com/thingsapi/things.py?tab=readme-ov-file) python library for reading the Things3 SQL database.\n\nI also appreciate the [DSPy](https://github.com/stanfordnlp/dspy/issues/1539) library and open-source model developers. \n  \n## Risks\n\n- 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.\n- 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.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkgourgou%2Fthings-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkgourgou%2Fthings-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkgourgou%2Fthings-ai/lists"}