todoist-api
Original:🇺🇸 English
Translated
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.
19installs
Added on
NPX Install
npx skill4agent add intellectronica/agent-skills todoist-apiTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Todoist CLI Skill
This skill provides procedural guidance for working with Todoist using the CLI tool.
tdPrerequisites
The CLI must be installed and authenticated. Verify with:
tdbash
td auth statusIf 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 OAuth
td 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
bash
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) through
p1(normal)p4 - Project:
#ProjectName - Section:
/SectionName - Labels:
@label1 @label2
Tasks
List Tasks
bash
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:
bash
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
bash
td task view <ref> # Human-readable
td task view <ref> --json # JSON outputThe ref can be a task name, partial match, or .
id:xxxCreate Task
Quick add (natural language):
bash
td add "Task text with #Project @label tomorrow p2"Explicit flags:
bash
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
bash
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
bash
td task complete <ref>Reopen Task
bash
td task uncomplete id:xxxNote: Uncomplete requires the task ID (id:xxx format).
Delete Task
bash
td task delete <ref>Move Task
bash
td task move <ref> --project "New Project"
td task move <ref> --section <section-id>
td task move <ref> --parent <task-ref>Open in Browser
bash
td task browse <ref>Projects
List Projects
bash
td project list # Human-readable tree
td project list --json # JSON array
td project list --personal --json # Personal projects onlyView Project
bash
td project view <ref>
td project view <ref> --jsonCreate Project
bash
td project create --name "Project Name" \
--color "blue" \
--parent "Parent Project" \
--view-style board \
--favoriteOptions:
- - 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
bash
td project update <ref> --name "New Name" --color "red"Archive/Unarchive Project
bash
td project archive <ref>
td project unarchive <ref>Delete Project
bash
td project delete <ref>Note: Project must have no uncompleted tasks.
List Collaborators
bash
td project collaborators <ref>Sections
List Sections
bash
td section list <project> # Human-readable
td section list <project> --json # JSON arrayCreate Section
bash
td section create --name "Section Name" --project "Project Name"Update Section
bash
td section update <id> --name "New Name"Delete Section
bash
td section delete <id>Labels
List Labels
bash
td label list # Human-readable
td label list --json # JSON arrayCreate Label
bash
td label create --name "label-name" --color "green" --favoriteUpdate Label
bash
td label update <ref> --name "new-name" --color "blue"Delete Label
bash
td label delete <name>Comments
List Comments
bash
td comment list <task-ref> # Comments on task
td comment list <project-ref> --project # Comments on projectAdd Comment
bash
td comment add <task-ref> --content "Comment text"
td comment add <project-ref> --project --content "Comment text"Update Comment
bash
td comment update <id> --content "Updated text"Delete Comment
bash
td comment delete <id>Reminders
List Reminders
bash
td reminder list <task-ref>Add Reminder
bash
td reminder add <task-ref> --due "tomorrow 9am"Delete Reminder
bash
td reminder delete <id>Filters
List Saved Filters
bash
td filter list --jsonShow Tasks Matching Filter
bash
td filter show <filter-ref> --jsonCreate Filter
bash
td filter create --name "My Filter" --query "today & p1"Completed Tasks
bash
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
bash
td activity # Recent activity
td stats # Productivity stats and karmaPagination
For large result sets, use to fetch everything, or handle pagination with cursors:
--allbash
# 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 parameter in commands accepts:
<ref>- Task/project/label name (partial match supported)
- for exact ID match
id:xxx - Numeric ID (interpreted as id:xxx)
Additional Reference
For detailed information on specific topics, consult:
- - Alternative methods for completed task history via API
references/completed-tasks.md - - Todoist filter query syntax for
references/filters.mdflag--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