Creating a Project Assistant with Claude and Todoist

Claude 3.5 Sonnet is an impressive GenAI application in its own right, beating OpenAI’s GPT-4o on many tasks. But its ‘Project’ feature is the real stand-out, giving Claude the capacity to create custom chatbots with a significant knowledge base. In this post I’m going to combine Anthropic’s capable model with my favourite productivity app, Todoist, to create an assistant capable of tracking, updating, and advising on long-term projects.

This is a fairly long walkthrough, so I’ve included a step by step process and a video at the end.

Introducing the apps

Todoist

Before going any further, I’ll explain why I’m focusing on these two particular applications. Todoist is a productivity and to-do list app that I’ve been using since 2016. Over the 8 years I’ve been using the app, my stats tell me I’ve ticked off over 51,000 tasks. For any app to last that long in my virtual toolkit, it must be pretty good at what it does, and Todoist’s advantage over other apps is its simplicity and intuitiveness.

The basic look and feel of the app has developed over the years, and a few UX features have made it even easier to use, but it’s still fundamentally the same platform that it was when I started with it back in 2016.

A screenshot of the Todoist app's project view for "Furze Smith Consulting." The screen displays a list of tasks under the "Example School Project" category. Tasks listed include "Contract Finalization Meeting," "Send Signed Contract," "Initial Assessment and Goal Setting Meeting," and "Send Follow-up and Meeting Minutes," each with a due date in early July. The left sidebar shows various project categories and filters.
An example Project Section filled with Tasks, created for this article.

Todoist allows for the creation of Projects, which contain Tasks, and Tasks can be given Labels and a priority. Projects can have sections, and can be viewed as a list (above), or as stackable cards (below).

A screenshot of the Todoist app's project view for "Furze Smith Consulting." The screen displays a list of task cards under the "Example School Project" category. Tasks listed include "Contract Finalization Meeting," "Send Signed Contract," "Initial Assessment and Goal Setting Meeting," and "Send Follow-up and Meeting Minutes," each with a due date in early July. The left sidebar shows various project categories and filters.
Cards versus list view

What I’ve always loved about Todoist is the intuitive and easy-to-use features for adding and tracking tasks (which, for a to-do list app, should be fairly important). You can add a task from pretty much anywhere: browser, desktop app, phone app, chrome extension, widgets… Even the process of creating the task is smooth. For example, I can hit ‘Q’ to quick-add a new task, and then type:

New task p1 23 aug 8am !10mb @meetings #Furze Smith Consulting /Example School Project

This slightly mysterious string of gibberish will create a task called ‘New Task’ in the Furze Smith Consulting Project (the #), with the “meetings” label (@), in the “Example School Project” section (/) with a priority one flag (p1) and the due date and time set for the 23rd of August at 8am, with a reminder notification 10 minutes before (!10mb). Trust me, once you’ve done it a few times it just rolls off the fingers…

A screenshot of the Todoist app showing a new task creation window. The task is being created under the project "Furze Smith Consulting" and the subproject "Example School Project." The task details include a priority level (P1), date and time (23 August 8 AM), a reminder (10 minutes before), and tags (#Furze Smith Consulting, @meetings). The task description box is also visible with additional options.
Creating a task is very intuitive once you actually remember all the symbols and shortcuts. Until then, you can also just click the buttons.

There are other features which I use occasionally, such as location-based reminders, assignees for group tasks, and the ‘description’ field which can take about 3000 characters of text: I’ll use that feature later.

But the thing that really makes Todoist useful for this particular project is its comprehensive and flexible API.

The Todoist API

For those of you unfamiliar with the term, an API is a set of rules and protocols that allows different software applications to communicate with each other. API stands for Application Programming Interface, and it specifies how software components should interact, which data and functionality are available, and the methods used to access them. Essentially, an API enables the integration of various systems, allowing them to exchange information and perform actions seamlessly.

If you’ve used platforms like Zapier to connect apps together, or if you’ve ever added an ‘extension’ to a program you like to use to add the functions of another app, then you’ve probably used an API. But they can also be built into custom apps and services, and I’m going to use the Todoist API to create an important part of my project assistant.

The Todoist API can be used to automate any of the features of the standard app using code. I’m using Python in this case, and the API can be used to create Projects, Tasks, Sections, Labels, and set dates, descriptions, and all of the other features available to the normal app. Essentially, I’ll be using Claude to create code which interacts directly with my Todoist account and automates the creation of tasks related to my project.

A screenshot of the Todoist Developer website, specifically the REST API documentation for managing tasks. The page lists properties and descriptions of tasks, including Task ID, Project ID, Section ID, Content, Description, Is Completed, and Labels. On the right side of the screen, an example task object is shown in JSON format, illustrating various attributes and their values.
The Todoist REST API for Python. Source:https://developer.todoist.com/rest/v2/?python#python-sdk

Claude 3.5 Sonnet

I’ve written about the recent updates to Claude 3.5 Sonnet, including Projects, in an earlier post, so I’ll just gloss the details here.

Claude is a generative AI application developed by Anthropic, designed for advanced text generation tasks. It is particularly useful for its language capabilities, excelling in transcription, editing, and handling complex texts without distorting the original content (unlike ChatGPT which has a tendency to butcher language).

Claude can also interpret documents including images, work with large datasets, and execute code in real-time, making it versatile for applications like creating interactive web apps, prototyping ideas, and performing data analysis. With features such as a large context window and the ability to create “artifacts” similar to a code interpreter, Claude is now my go-to AI app for tasks involving reasoning, knowledge, and coding.

I’m focusing on a specific feature in this post called “Projects”. It’s a subscription feature, but honestly it is worth the $20USD/mth if you’re using Generative AI regularly. Claude Projects allow for the creation of a custom chatbot similar to OpenAI’s “GPTs”, with the capacity to upload multiple files and provide contextual instructions to tell the chatbot what to do and how to do it. I’ll explore more of the feature as I get into the step-by-step.

Building a project assistant

With these two tools, I’m going to create a project assistant that can do the following (and more, but I won’t cover everything here):

  • Summarise and track long-term projects
  • Suggest actions, tasks, and timelines
  • Create and maintain Todoist projects and tasks
  • Interpret and use project materials and information
  • Generate resources and materials

Step one: Gathering the data

For this example project, I used ChatGPT to create some mock data to work with. I often use ChatGPT as a sort of assistant for Claude, moving over to OpenAI’s platform when I just want to grind out a task or create resources which I know will need lots of editing. In this case, I generated some fake emails between myself and a potential school client, as well as some accompanying documents (using code interpreter to create Word docs, PDFs, and a PowerPoint, as you can see in the video at the end of this post).

A screenshot of a mock email conversation regarding a potential advisory contract on generative AI. The screen displays a detailed message outlining the request for generating a long thread of client emails between the user and a K-12 school leader. The subject of the email thread is "Exploring a Potential Advisory Contract on Generative AI," and the first email from a K-12 school leader to Leon Furze, dated 1 June 2024, inquires about generative AI advisory services.
Creating some dummy data with Claude’s own personal assistant, ChatGPT

In reality, my initial project data might include email conversations, draft and final proposals, and any other communications between myself and the client. Anthropic does not train on data used in Projects, and Projects are self-contained and the data entirely removed if the project is deleted. Even so, with real data (not fake ChatGPT data) I de-identify things like emails and documents just for an extra level of security. Usually this is easy enough to do by simply deleting names and addresses from any documents.

Step two: Setting up the Project

Once you have all of the data, it can be added to a new Claude Project. This can be done in a couple of ways: adding text, or uploading files. Adding text content allows you to create a new item with a title and content, so it works well for copy/pasting an email thread (and then deleting names if necessary).

A screenshot from the Claude AI interface showing the "Add text content" dialog box. The user can enter a title and content for the text to be added to the project "Example School Project." The background displays the project workspace with options to add content and a list of existing project knowledge files.

The direct file upload is more suitable for documents, PDFs, CSV files, and so on. Some file types don’t seem to work well (e.g., .xlsx Excel spreadsheets and .pptx PowerPoints) but you can always convert them into file types which do work, such as PDF.

A screenshot from the Claude AI interface showing how to upload files directly to the project "Example School Project." The sidebar includes a list of project knowledge files, and an arrow points to the "Upload from device" option with the text "Upload files directly to the project, or drag and drop them into the sidebar."

Once you’ve got all of your files in the Project, you can then add some further custom instructions, which will be used in every subsequent chat to guide the response. In this example the instructions are fairly generic, but they can be as specific and detailed as you like.

A screenshot from the Claude AI interface showing the settings for custom project instructions. The dialog box explains how Claude should respond to project management tasks, including reviewing project documents, suggesting timelines, and creating and reviewing resources. The project "Example School Project" is visible in the background.

The “context window” or token window for Claude is enormous, so even uploading quite a lot of information won’t make a difference. Even so, there’s a bar along the top which indicates how much of the Project knowledge has been used. This is important because larger projects use up your message capacity, meaning fewer chats. This is probably the biggest limitation of Claude at the moment, as with a very large project you can hit that cap relatively quickly.

Step three: Using the Project

With all of the data and custom instructions loaded up, you can now start to use the Project. For this particular example, I have the draft and final proposals, the client’s revisions, some emails, zoom meeting transcripts, and so on. With all of this information, Claude 3.5 Sonnet can do a huge range of tasks, starting with the simple task of summarising the project so far.

A screenshot from the Claude AI interface displaying an engagement timeline for Evergreen High School. The timeline lists events from June 1, 2024, to June 28, 2024, detailing interactions between Sarah Johnson and Leon Furze regarding generative AI advisory services. Key dates include initial inquiries, scheduling Zoom meetings, and follow-up emails.

It can also handle all of the content creation tasks you might expect from an LLM, much in the same way you would use an application like ChatGPT. In the example that follows, you can see I have prompted “Create an outline for workshop 3” referring to a point from earlier in the chat thread. Claude produces the outline as an “artifact”; another new feature.

A screenshot from the Claude AI interface showing an outline for "Workshop 3: AI in the Classroom." The outline includes sections on Introduction (15 minutes) and Strategies for Integrating AI into Various Subjects (45 minutes), with detailed subpoints such as AI-assisted writing tools, problem-solving assistance, data visualization, and simulation and modeling. The left sidebar contains the "Example School Project" with tasks and engagement timelines for Evergreen High School.

Now, I could (and often do) stop here. I have a Project which contains a lot of information on this current contract, and I can keep adding to it as the work evolves, for example adding more files, slides from my sessions, further communications, and so on. As the Project develops, it will retain all of the original information and become a very useful tool for tracking and updating the work.

But while Claude can advise on project tasks and even suggest timelines, at the moment it’s not a fully developed virtual assistant. If I really want to squeeze the juice out of Claude’s new features, I’m going to have to bring in some other tools. Enter Todoist.

Step four: Create the Todoist Automator

Now that I have my assistant Project, I’m going to create a second Project to handle the creation of Todoist tasks and reminders. Since I’m so accustomed to using the to-do app, it makes sense to connect the two together. To achieve that, I’ll create a new Project which “understands” the Todoist API.

As you can see, the project is a similar setup. In the project knowledge, I’ve added a copy/paste of the Todoist API documentation. This project also has Airtable docs – that’s another platform I use for keeping track of clients and projects, but I’m not going to use it this time around.

You might notice that this project is much larger: 65% of the project knowledge has been used up by the lengthy docs from Todoist and Airtable. That’s fine, however, since this Project only gets used as a tool to support the others like the previous example.

With the Todoist API in its project knowledge, Claude can now write Python scripts which automate the creation and maintenance of Todoist Projects and Tasks.

Step five: Create the Todoist Tasks

It’s time to smash the two projects together. I want to create a project timeline from now until the end of the project, based on the information provided so far and the discussions wth the “client” (ChatGPT’s generated example in this case) about our next steps.

In the first Project, I’ll generate a draft timeline which has the date, task title, and description for each task.

A screenshot from the Claude AI interface showing the engagement timeline for Evergreen High School. The timeline starts on June 28, 2024, and includes tasks with specific dates and descriptions, such as "Schedule Contract Finalization Meeting" (July 1), "Contract Finalization Meeting" (July 4), "Send Signed Contract" (July 6), and more, following the project's proposal and workshop plan.

In a real situation, I’d want to carefully check and refine these to make sure they line up with my expectations of the project. For this example, they’re good enough. The next step is to switch over to the Todoist Automator Project and create the Python script.

A screenshot from the Claude AI interface showing a task creation for "Example School Project" in the "Furze Smith Consulting" Todoist project. The screen displays the script to produce tasks with specific descriptions, including dates and task titles like "Schedule Contract Finalization Meeting," "Send Signed Contract," and various generative AI workshops.

Note that the code provided doesn’t have the API key in it. You can find your Todoist API key in your account settings, but you should never share it with anyone since it provides full access to your account to read/write/delete data. That includes sharing it with Claude, despite its privacy settings.

I will download the Python file that Claude has created, open it in my folder on my laptop, and add the API key manually. This new file, with the key, stays on my device and is never shared (and I’ve edited it out of the video). I edit in Visual Studio Code on my MacBook.

A screenshot of the Visual Studio Code (VSCode) editor displaying a Python script for creating a new section and adding tasks to the "Furze Smith Consulting" project in Todoist. The script includes the Todoist API key, project retrieval, section creation, and a list of tasks with titles, descriptions, and dates.

When I run the code, either by hitting run in VS or by running it in Terminal with the command python3 file_name.py, the script connects to my Todoist account and creates the new “Example School Project” section in my Furze Smith Consulting project, and all of the required tasks.

A screenshot of a terminal window showing the creation of a new section and tasks for the "Example School Project" in Todoist. The tasks include scheduling meetings, sending contracts, and conducting workshops on generative AI, with specific dates and descriptions for each task.

And when I open up the Todoist app – on desktop, browser, or phone – those tasks have been instantly created, including the dates, priorities, and any description added during the process. The description – which can be generated by Claude and prompted further to add extra detail – is particularly useful in helping me to remember why a task actually exists when I see it pop up a few weeks after it has been created.

A screenshot of the Todoist app showing a list of tasks under the project "Furze Smith Consulting" and subproject "Example School Project." Tasks include "Contract Finalization Meeting" (July 4), "Send Signed Contract" (July 6), "Initial Assessment and Goal Setting Meeting" (July 8), and various workshops on generative AI. The left sidebar displays different project categories and filters.
A screenshot of a task detail view in the Todoist app for the project "Furze Smith Consulting" and subproject "Example School Project." The task titled "Initial Assessment and Goal Setting Meeting" involves conducting a Zoom meeting with Evergreen High School's leadership team for initial assessment and goal setting. The due date is July 8, with options to add sub-tasks, comments, and assign priority, labels, reminders, and location.

Video Walkthrough

That’s a lot of information in just five steps, particularly if you have never used Claude Projects, Todoist, or APIs before. To help explain things further, here’s a short video outlining the entire process from start to finish, including the creation of the mock data.

The video here is having trouble converting. While I fix it, it is available over on my LinkedIn profile.

The (near) Future

I’m always interested in the “what’s next” questions for these technologies. I’ve written before about why chatbots bore me to tears and why I’m more interested in multimodal, flexible uses of the technology.

At the moment, Claude Projects can’t make API calls (ie., use the API information to directly interact with the application, rather than me downloading and running code), but that’s a logical next step. In fact, you can already do this with OpenAI’s custom GPTs, though the process is fairly painful and relies on some tedious manual work.

In the near future, I imagine Claude will be able to interact with many applications by making the API calls itself. Within a chat thread for the first Project, for example, I can imagine being able to simply type “send those to Todoist” and having Claude do the work of the second Project automatically.

Every application also seems to be in the race to add its own AI features. Todoist, in fact, already has AI functionality built into it. Todoist uses GPT-3 under the hood to handle simple things like the decomposition of tasks into AI-generated subtasks, or the rewording of a task to “make it more actionable”. That’s nowhere near the level of sophistication demonstrated in this post, but again it is not hard to imagine that Todoist will one day have its own Claude 3.5 Sonnet-level AI Assistant (as will every other app you use).

For now, this is a fun, productive, and incredibly useful way to interact between Claude and other technologies. I hope you’ve found the post interesting, and that you can follow along and build your own Project-based assistants.

If you’ve enjoyed the post, please share it, comment with your own experiences, or get in touch via the form at the end.

Want to learn more about GenAI professional development and advisory services, or just have questions or comments? Get in touch:

Go back

Your message has been sent

Warning
Warning
Warning
Warning
Warning.

2 responses to “Creating a Project Assistant with Claude and Todoist”

  1. Laura Adele Soracco Avatar
    Laura Adele Soracco

    I’ve really benefited from using Claude’s project feature this summer, but I hadn’t thought about an API integration with my project management tool. I’ve used ClickUp since 2018, and I might just give this a try! Thanks for your incredibly insightful posts.

    1. You’re welcome, let us know how you get on!

Leave a Reply