Want your AI to be in charge of your to-do list but not sure where to start? Here's my setup for AI managed to-do lists using Vikunja and Open WebUI. ## Selecting [Vikunja](https://vikunja.io) - self-hostable to-do app My prior to-do app, Apple Reminders, lacked a web API, forcing me to select another. I selected Vikunja as the best choice because it is: * Open source and self-hostable * Actively maintained with well documented APIs I deployed it from its [Coolify](https://coolify.io) template on my VPS, after a few clicks it was up and running. ## Creating the [Vikunja Open WebUI Tool](https://openwebui.com/t/whogben/vikunja) As task management is critical, and accidents here could impact my professional life, I planned this tool carefully. First, I excluded features too complex for the v1 target: * No user assignments * No labels / tags / comments / attachments * No notification management Then I designed a structure that would cover the essentials: * Uses a generic task/list interface, adaptable to other backends * Includes integration tests for each of its key features * Features an advanced filtering and sorting system, allowing AI agents to retrieve only relevant tasks. This efficiency enables batch updates. Finally, I hand-coded the generic interface, and then used Gemini 3 in Cursor to write the tests and make them pass. # Example Usage In an Open WebUI chat I ask the agent to remind me about something with a due date. ![[vikunja_owui_example_prompt.jpeg]] The agent calls list_lists to find out what Vikunja projects are available to insert the reminder into, then it calls create_task to finish the task. ![[vikunja_owui_example_response.jpeg]] Switching over to Vikunja, we can see that the task and due date are properly recorded. ![[vikunja_owui_example_app.jpeg]] # Tool List The full tool list includes: **Project Management** - list_lists: List all available projects (task lists). - get_list: Retrieve details for a specific project. - create_list: Create a new project. - update_list: Update a project’s title, description, or color. - delete_list: Delete a project and all its contained tasks. **Task Management** - **list_tasks**: Search for tasks across all or specific lists using a powerful filter set. - Available Filters: specific list IDs, completion status (is_done), favorite status, priority range (min/max), date ranges (due, start, or end dates), and recurring status. - Sorting: Results can be sorted by priority, due date, creation date, or update time. - **get_task**: Get specific details for a single task. - **create_task**: Add a new task with support for priorities, due dates, colors, and repeating intervals. - **update_task**: Modify any property of an existing task. - Editable Fields: title, description, completion status, priority, dates (due/start/end), color, favorite/archived status, and repeat settings (interval/mode). - **batch_update_tasks**: Apply changes to multiple tasks at once that match specific filter criteria (e.g., "Move all overdue tasks to tomorrow"). - **delete_task**: Permanently remove a task. # Troubleshooting As of writing, I have used these tools for two days - if you discover issues outside of the below please let me know: **Timezone Issues** All timestamps in Vikunja are in the UTC timezone, so your agent will need to translate between UTC and your current time zone. In Open WebUI, add this to your agent’s system message to ensure this: > You are being prompted at {{CURRENT_DATETIME}} in {{CURRENT_TIMEZONE}} timezone. > - When speaking with the user, assume their timezone. > - When using tools that expect or return UTC timestamps, convert them to/from the user’s timezone yourself.