Skillshub todoist-api
This skill provides instructions for interacting with Todoist using the td CLI tool. It covers CRUD operations for tasks/projects/sections/labels/comments, and requires confirmation before destructive actions. Use this skill when the user wants to read, create, update, or delete Todoist data.
git clone https://github.com/ComeOnOliver/skillshub
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/intellectronica/agent-skills/todoist-api" ~/.claude/skills/comeonoliver-skillshub-todoist-api && rm -rf "$T"
skills/intellectronica/agent-skills/todoist-api/SKILL.mdTodoist CLI Skill
This skill provides procedural guidance for working with Todoist using the
td CLI tool.
Prerequisites
The
td CLI must be installed and authenticated. Verify with:
td auth status
If td is not installed or not authenticated:
- Not installed: Tell the user to install with
npm install -g @doist/todoist-cli - Not authenticated: Tell the user to run
to authenticate via OAuthtd auth login
Output Formats for Agents
For machine-readable output, use these flags:
- Output as JSON array--json
- Output as newline-delimited JSON (one object per line)--ndjson
- Include all fields in JSON output (default shows essential fields only)--full
Confirmation Requirement
Before executing any destructive action, always ask the user for confirmation using AskUserQuestion or similar tool. A single confirmation suffices for a logical group of related actions.
Destructive actions include:
- Deleting tasks, projects, sections, labels, or comments
- Completing tasks
- Updating existing resources
- Archiving projects
Read-only operations do not require confirmation.
Quick Commands
| Command | Description |
|---|---|
| Quick add with natural language parsing |
| Tasks due today and overdue |
| Tasks due in next N days (default: 7) |
| Tasks in Inbox |
| Recently completed tasks |
Quick Add Examples
td add "Buy milk tomorrow p1 #Shopping" td add "Call dentist every monday @health" td add "Review PR #Work /Code Review"
The quick add parser supports:
- Due dates:
,tomorrow
,next mondayJan 15 - Priority:
(urgent) throughp1
(normal)p4 - Project:
#ProjectName - Section:
/SectionName - Labels:
@label1 @label2
Tasks
List Tasks
td task list [options]
Filters:
- Filter by project name or id:xxx--project <name>
- Filter by label (comma-separated for multiple)--label <name>
- Filter by priority--priority <p1-p4>
- Filter by due date (today, overdue, or YYYY-MM-DD)--due <date>
- Raw Todoist filter query--filter <query>
- Filter by assignee (me or id:xxx)--assignee <ref>
- Filter to workspace--workspace <name>
- Filter to personal projects only--personal
Output:
td task list --json # JSON array td task list --project "Work" --json # Filtered JSON td task list --all --json # All tasks (no limit)
View Task Details
td task view <ref> # Human-readable td task view <ref> --json # JSON output
The ref can be a task name, partial match, or
id:xxx.
Create Task
Quick add (natural language):
td add "Task text with #Project @label tomorrow p2"
Explicit flags:
td task add --content "Task text" \ --project "Work" \ --due "tomorrow" \ --priority p2 \ --labels "urgent,review" \ --description "Additional details"
Options:
- Task content (required)--content <text>
- Due date (natural language or YYYY-MM-DD)--due <date>
- Deadline date (YYYY-MM-DD)--deadline <date>
- Priority level--priority <p1-p4>
- Project name or id:xxx--project <name>
- Section ID--section <id>
- Comma-separated labels--labels <a,b>
- Parent task for subtask--parent <ref>
- Task description--description <text>
- Assign to user (name, email, id:xxx, or "me")--assignee <ref>
- Duration (e.g., 30m, 1h, 2h15m)--duration <time>
Update Task
td task update <ref> --content "New content" --due "next week"
Options:
- New content--content <text>
- New due date--due <date>
- Deadline date--deadline <date>
- Remove deadline--no-deadline
- New priority--priority <p1-p4>
- Replace labels--labels <a,b>
- New description--description <text>
- Assign to user--assignee <ref>
- Remove assignee--unassign
- Duration--duration <time>
Complete Task
td task complete <ref>
Reopen Task
td task uncomplete id:xxx
Note: Uncomplete requires the task ID (id:xxx format).
Delete Task
td task delete <ref>
Move Task
td task move <ref> --project "New Project" td task move <ref> --section <section-id> td task move <ref> --parent <task-ref>
Open in Browser
td task browse <ref>
Projects
List Projects
td project list # Human-readable tree td project list --json # JSON array td project list --personal --json # Personal projects only
View Project
td project view <ref> td project view <ref> --json
Create Project
td project create --name "Project Name" \ --color "blue" \ --parent "Parent Project" \ --view-style board \ --favorite
Options:
- Project name (required)--name <name>
- Colour name--color <color>
- Parent project for nesting--parent <ref>
- "list" or "board"--view-style <style>
- Mark as favourite--favorite
Update Project
td project update <ref> --name "New Name" --color "red"
Archive/Unarchive Project
td project archive <ref> td project unarchive <ref>
Delete Project
td project delete <ref>
Note: Project must have no uncompleted tasks.
List Collaborators
td project collaborators <ref>
Sections
List Sections
td section list <project> # Human-readable td section list <project> --json # JSON array
Create Section
td section create --name "Section Name" --project "Project Name"
Update Section
td section update <id> --name "New Name"
Delete Section
td section delete <id>
Labels
List Labels
td label list # Human-readable td label list --json # JSON array
Create Label
td label create --name "label-name" --color "green" --favorite
Update Label
td label update <ref> --name "new-name" --color "blue"
Delete Label
td label delete <name>
Comments
List Comments
td comment list <task-ref> # Comments on task td comment list <project-ref> --project # Comments on project
Add Comment
td comment add <task-ref> --content "Comment text" td comment add <project-ref> --project --content "Comment text"
Update Comment
td comment update <id> --content "Updated text"
Delete Comment
td comment delete <id>
Reminders
List Reminders
td reminder list <task-ref>
Add Reminder
td reminder add <task-ref> --due "tomorrow 9am"
Delete Reminder
td reminder delete <id>
Filters
List Saved Filters
td filter list --json
Show Tasks Matching Filter
td filter show <filter-ref> --json
Create Filter
td filter create --name "My Filter" --query "today & p1"
Completed Tasks
td completed # Today's completed tasks td completed --since 2024-01-01 # Since specific date td completed --project "Work" --json # Filtered JSON output td completed --all --json # All completed (no limit)
Options:
- Start date (YYYY-MM-DD), default: today--since <date>
- End date (YYYY-MM-DD), default: tomorrow--until <date>
- Filter by project--project <name>
Activity and Stats
td activity # Recent activity td stats # Productivity stats and karma
Pagination
For large result sets, use
--all to fetch everything, or handle pagination with cursors:
# First page result=$(td task list --json --limit 50) # If there's a next_cursor in the response, continue cursor=$(echo "$result" | jq -r '.[-1].id // empty') td task list --json --limit 50 --cursor "$cursor"
Reference Resolution
The
<ref> parameter in commands accepts:
- Task/project/label name (partial match supported)
for exact ID matchid:xxx- Numeric ID (interpreted as id:xxx)
Additional Reference
For detailed information on specific topics, consult:
- Alternative methods for completed task history via APIreferences/completed-tasks.md
- Todoist filter query syntax forreferences/filters.md
flag--filter
Workflow Summary
- Verify authentication -
td auth status - Read operations - Execute directly without confirmation
- Write operations - Ask for confirmation before executing
- Use JSON output - Add
flag for machine-readable data--json - Handle large datasets - Use
or pagination with--all--cursor