Todoist
With a Todoist account, Jimothy can:
- start a run for each task matching a Todoist filter, then comment on the task and complete it (or move it to a section) when the run finishes;
- create tasks, comment on them or complete them as a pipeline step, or after any step.
Sign in
Section titled “Sign in”- In Todoist, open Settings → Integrations → Developer and copy your API token.
- In Jimothy, open Settings → Accounts & integrations and click Sign in under Todoist. You can also use the ⌘K palette (Sign in to Todoist).
- Paste the token into API token and click Sign in. Jimothy checks the token with Todoist and names the account after you (
Todoist · Ada Lovelace).
The token can do everything your Todoist account can. It’s stored encrypted with your OS keychain. If you reset the token in Todoist, paste the new one into the account in Settings → Accounts & integrations.
Start runs from tasks
Section titled “Start runs from tasks”Open the project’s Triggers tab (or All triggers in the ⌘K palette), click Add trigger and choose Todoist.
| Field | Stored as | Notes |
|---|---|---|
| Todoist account | connectionId |
Which account reads the tasks and writes back. |
| Filter | todoist.filter |
Required. Todoist filter syntax. New triggers start with #Jimothy, every open task in a project named Jimothy. Other examples: @ai, #Work & p1, assigned to: me & today. |
| Processed label | claimLabel |
New triggers start with jimothy-ran. Jimothy adds it to each task it starts a run for, and skips tasks that have it. Remove the label to run the task again. |
| Write back | onStart, onSuccess, onFailure |
Comment on the task, and Complete it or move it to a section. New triggers comment when a run starts and finishes, and complete the task when the run succeeds. |
Like every trigger, it also has Runs pipeline, Jimothy project and When it finds an issue: Start a run, or Add to a board to put each task on a board.
The trigger polls Todoist (every 2 minutes by default). Todoist only sends webhooks to registered apps with a public URL, so Todoist triggers don’t have an instant webhook.
Each task becomes the run’s issue:
| Template | Value |
|---|---|
{{issue.key}} |
TD- plus the task id, e.g. TD-6X7rM8997g3RQmvh |
{{issue.id}} |
The task id, which the actions below take |
{{issue.title}} |
The task name |
{{issue.description}} |
The task description |
{{issue.url}} |
A link to the task |
{{issue.labels}} |
The task’s labels |
{{issue.priority}} |
p1 (urgent) to p4, as Todoist shows them |
{{issue.raw.projectId}}, {{issue.raw.sectionId}} |
Where the task is |
Actions
Section titled “Actions”Use these in an integration step or after a step. Every text field is a template.
Create task
Section titled “Create task”| Field | Notes |
|---|---|
| Task | Required. The task name, e.g. Review {{issue.key}}. |
| Description | Optional. |
| Project | Optional; pick from your projects. Empty adds the task to your Inbox. |
| Labels | Optional, comma-separated label names. |
| Due | Optional, in Todoist’s own words: tomorrow 9am, next monday. |
The step’s output is Created Todoist task "<name>": <link>. Later steps can use {{steps.<id>.data.id}} and {{steps.<id>.data.url}}.
Comment on task
Section titled “Comment on task”| Field | Notes |
|---|---|
| Task id | Required. Starts as {{issue.id}}, the task that started the run. Use {{steps.<id>.data.id}} for a task an earlier step created. |
| Comment | Required. Markdown works, e.g. Done: {{steps.implement.output}}. |
Complete task
Section titled “Complete task”| Field | Notes |
|---|---|
| Task id | Required. Starts as {{issue.id}}. |
Example: hand a review to a person
Section titled “Example: hand a review to a person”A pipeline that builds a feature, then gives you a Todoist task to review it:
- Implement: an agent step.
- Open PR: a shell step that runs
gh pr create …and prints the link. - Review task: an integration step with Create task, Task
Review {{issue.key}}, Description{{steps.open-pr.output}}, Duetoday.
And on Implement, under After this step: when the step fails, Comment on task with {{issue.id}} and Jimothy got stuck: {{steps.implement.error}}.