
Todoist Api
- 1.6k installs
- 279 repo stars
- Updated April 25, 2026
- intellectronica/agent-skills
How to read, create, update, delete, and filter Todoist tasks, projects, sections, labels, and comments using the td CLI tool with optional JSON output and user confirmation for destructive actions.
About
This skill provides procedural guidance for interacting with Todoist using the td CLI tool. Developers use it to automate task, project, section, label, and comment management via natural language quick-add or explicit command flags. The tool supports JSON/NDJSON output for agent integration, filters for querying tasks by project/label/priority/due-date, and requires explicit user confirmation before destructive actions like delete or complete. Key workflows include listing tasks with filters, creating tasks with metadata, updating task properties, and managing projects with nesting and collaboration features.
- CRUD operations for tasks, projects, sections, labels, and comments via single CLI tool
- Natural language quick-add parsing: td add "Buy milk tomorrow p1 #Shopping" auto-extracts due date, priority, project, a
- JSON/NDJSON output for machine-readable integration with agents; --full flag includes all fields
- Confirmation requirement enforced before destructive actions (delete, complete, update, archive) via AskUserQuestion pat
- Advanced filtering by project, label, priority, due-date, assignee, and raw Todoist filter queries; pagination support w
Todoist Api by the numbers
- 1,604 all-time installs (skills.sh)
- +16 installs in the week ending Jul 28, 2026 (Skillselion tracking)
- Ranked #339 of 3,301 Productivity & Planning skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Jul 28, 2026 (Skillselion catalog sync)
todoist-api capabilities & compatibility
Free (td CLI requires Todoist account; API calls are included in Todoist subscription)
- Capabilities
- list tasks with advanced filtering (project, lab · create tasks with natural language parsing or ex · update task properties (content, due date, prior · complete/uncomplete tasks · delete tasks with confirmation · manage projects (create, update, archive, delete · manage sections and labels · add/update/delete comments and reminders · output json/ndjson for agent integration · pagination and filtering with cursors and all
- Use cases
- project management · orchestration
- Platforms
- macOS · Windows · Linux · WSL
- Runs
- Runs locally
- Pricing
- Free
What todoist-api says it does
Before executing any destructive action, always ask the user for confirmation using AskUserQuestion or similar tool.
npx skills add https://github.com/intellectronica/agent-skills --skill todoist-apiAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.6k |
|---|---|
| repo stars | ★ 279 |
| Security audit | 3 / 3 scanners passed |
| Last updated | April 25, 2026 |
| Repository | intellectronica/agent-skills ↗ |
What it does
Automate Todoist task and project management via CLI commands for read, create, update, and delete operations.
Who is it for?
Automating task creation/updates, querying tasks by multiple filters, integrating Todoist with CI/CD or agent workflows, bulk task operations with confirmation gates.
Skip if: Real-time sync to external systems (use Todoist API directly), GUI task management, timeline/calendar views.
When should I use this skill?
User wants to read, create, update, delete, or filter Todoist tasks/projects/sections/labels/comments via CLI or agent.
What you get
Developers can automate Todoist management (CRUD, filtering, bulk operations) with machine-readable output and safe destructive-action confirmation patterns.
- Task list with optional filters and JSON output
- Created/updated/deleted tasks, projects, sections, labels, comments with confirmation
- Task details in human-readable or JSON format
By the numbers
- Supports 4 priority levels: p1 (urgent) to p4 (normal)
- Supports filtering by project, label, priority, due date, assignee, and workspace
- Supports natural language due dates: tomorrow, next monday, Jan 15, YYYY-MM-DD
Files
Todoist 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 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
td auth loginto authenticate via OAuth
Output Formats for Agents
For machine-readable output, use these flags:
--json- Output as JSON array--ndjson- Output as newline-delimited JSON (one object per line)--full- Include all fields in JSON output (default shows essential fields only)
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 |
|---|---|
td add "text" | Quick add with natural language parsing |
td today | Tasks due today and overdue |
td upcoming [days] | Tasks due in next N days (default: 7) |
td inbox | Tasks in Inbox |
td completed | 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 monday,Jan 15 - Priority:
p1(urgent) throughp4(normal) - Project:
#ProjectName - Section:
/SectionName - Labels:
@label1 @label2
Tasks
List Tasks
td task list [options]Filters:
--project <name>- Filter by project name or id:xxx--label <name>- Filter by label (comma-separated for multiple)--priority <p1-p4>- Filter by priority--due <date>- Filter by due date (today, overdue, or YYYY-MM-DD)--filter <query>- Raw Todoist filter query--assignee <ref>- Filter by assignee (me or id:xxx)--workspace <name>- Filter to workspace--personal- Filter to personal projects only
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 outputThe 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:
--content <text>- Task content (required)--due <date>- Due date (natural language or YYYY-MM-DD)--deadline <date>- Deadline date (YYYY-MM-DD)--priority <p1-p4>- Priority level--project <name>- Project name or id:xxx--section <id>- Section ID--labels <a,b>- Comma-separated labels--parent <ref>- Parent task for subtask--description <text>- Task description--assignee <ref>- Assign to user (name, email, id:xxx, or "me")--duration <time>- Duration (e.g., 30m, 1h, 2h15m)
Update Task
td task update <ref> --content "New content" --due "next week"Options:
--content <text>- New content--due <date>- New due date--deadline <date>- Deadline date--no-deadline- Remove deadline--priority <p1-p4>- New priority--labels <a,b>- Replace labels--description <text>- New description--assignee <ref>- Assign to user--unassign- Remove assignee--duration <time>- Duration
Complete Task
td task complete <ref>Reopen Task
td task uncomplete id:xxxNote: 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 onlyView Project
td project view <ref>
td project view <ref> --jsonCreate Project
td project create --name "Project Name" \
--color "blue" \
--parent "Parent Project" \
--view-style board \
--favoriteOptions:
--name <name>- Project name (required)--color <color>- Colour name--parent <ref>- Parent project for nesting--view-style <style>- "list" or "board"--favorite- Mark as favourite
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 arrayCreate 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 arrayCreate Label
td label create --name "label-name" --color "green" --favoriteUpdate 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 projectAdd 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 --jsonShow Tasks Matching Filter
td filter show <filter-ref> --jsonCreate 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:
--since <date>- Start date (YYYY-MM-DD), default: today--until <date>- End date (YYYY-MM-DD), default: tomorrow--project <name>- Filter by project
Activity and Stats
td activity # Recent activity
td stats # Productivity stats and karmaPagination
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)
id:xxxfor exact ID match- Numeric ID (interpreted as id:xxx)
Additional Reference
For detailed information on specific topics, consult:
references/completed-tasks.md- Alternative methods for completed task history via APIreferences/filters.md- Todoist filter query syntax for--filterflag
Workflow Summary
1. Verify authentication - td auth status 2. Read operations - Execute directly without confirmation 3. Write operations - Ask for confirmation before executing 4. Use JSON output - Add --json flag for machine-readable data 5. Handle large datasets - Use --all or pagination with --cursor
Retrieving Completed Tasks
The td completed command is the primary way to retrieve completed tasks.
CLI Usage
Basic Usage
td completed # Today's completed tasks
td completed --json # JSON output
td completed --all --json # All completed (no limit)Date Range
td completed --since 2024-01-01 --until 2024-01-31
td completed --since 2024-01-01 --jsonFilter by Project
td completed --project "Work" --jsonOptions
--since <date>- Start date (YYYY-MM-DD), default: today--until <date>- End date (YYYY-MM-DD), default: tomorrow--project <name>- Filter by project name--limit <n>- Limit number of results (default: 300)--all- Fetch all results (no limit)--json- Output as JSON--ndjson- Output as newline-delimited JSON--full- Include all fields in JSON output
Alternative: Direct API Access
If you need more control or the CLI doesn't provide the required functionality, you can use the API directly.
API v1 Endpoints
By Completion Date:
curl -s -H "Authorization: Bearer $TODOIST_API_TOKEN" \
"https://api.todoist.com/api/v1/tasks/completed/by_completion_date?since=2024-01-01T00:00:00Z&until=2024-01-31T23:59:59Z"By Due Date:
curl -s -H "Authorization: Bearer $TODOIST_API_TOKEN" \
"https://api.todoist.com/api/v1/tasks/completed/by_due_date?since=2024-01-01T00:00:00Z"API Parameters
since- Start date (ISO 8601 format)until- End date (ISO 8601 format)project_id- Filter by project IDlimit- Results per pagecursor- Pagination cursor
Response Structure
Completed task objects include:
{
"id": "123456789",
"content": "Task content",
"project_id": "987654321",
"completed_at": "2024-06-15T14:30:00Z",
"meta_data": null
}Notes
- Completed tasks are stored in history and may have limited retention based on user plan
- Use
td task uncomplete id:xxxto reopen a completed task - Recurring tasks create new instances when completed; the original remains in history
Todoist Filter Query Syntax
The --filter flag on td task list accepts Todoist's filter query language, enabling powerful task queries.
Usage with td CLI
td task list --filter "today & p1"
td task list --filter "overdue | today" --json
td task list --filter "#Work & @urgent" --allBasic Filters
| Filter | Description |
|---|---|
today | Tasks due today |
tomorrow | Tasks due tomorrow |
overdue | Overdue tasks |
no date | Tasks without a due date |
7 days | Tasks due within the next 7 days |
next week | Tasks due next week |
recurring | Recurring tasks only |
Date Filters
| Filter | Description |
|---|---|
due before: Jan 1 | Due before specific date |
due after: Jan 1 | Due after specific date |
due: Jan 1 | Due on specific date |
created: today | Created today |
created before: -7 days | Created more than 7 days ago |
Priority Filters
| Filter | Description |
|---|---|
p1 | Priority 1 (urgent) |
p2 | Priority 2 (high) |
p3 | Priority 3 (medium) |
p4 or no priority | Priority 4 (normal) |
Label Filters
| Filter | Description |
|---|---|
@label_name | Tasks with specific label |
no labels | Tasks without any labels |
Project and Section Filters
| Filter | Description |
|---|---|
#Project Name | Tasks in specific project |
##Project Name | Tasks in project and subprojects |
/Section Name | Tasks in specific section |
Assignment Filters
| Filter | Description |
|---|---|
assigned to: me | Tasks assigned to you |
assigned to: John | Tasks assigned to John |
assigned by: me | Tasks you assigned |
assigned | All assigned tasks |
Combining Filters
Use logical operators to combine filters:
| Operator | Description | Example |
|---|---|---|
& | AND | today & p1 |
| `\ | ` | OR |
! | NOT | !#Inbox |
() | Grouping | `(today \ |
Example Queries
High-Priority Tasks Due Soon
td task list --filter "(today | overdue) & (p1 | p2)" --jsonUnassigned Tasks in Work Project
td task list --filter "#Work & !assigned" --jsonTasks with Label Due This Week
td task list --filter "@waiting & 7 days" --jsonAll Inbox Tasks Not Started
td task list --filter "#Inbox & no date" --jsonUrgent Tasks Assigned to Me
td task list --filter "assigned to: me & p1" --jsonNotes
- Filter queries are case-insensitive
- Project and label names with spaces should be quoted:
"#My Project" - Complex filters may require Premium/Business plans
- The CLI handles quoting and escaping automatically (unlike raw API calls)
Related skills
How it compares
Use todoist-api for read-only completion exports; use Todoist create/update integrations when the workflow must assign or modify open tasks.
FAQ
What is the td CLI and how do I install it?
td is the Todoist CLI tool. Install with: npm install -g @doist/todoist-cli. Then authenticate with: td auth login
Which operations require user confirmation?
Destructive actions: delete tasks/projects/sections/labels/comments, complete/uncomplete tasks, update existing resources, archive projects. Read-only operations (list, view, filter) do not require confirmation.
How do I get JSON output for agent integration?
Use --json flag for JSON array output or --ndjson for newline-delimited JSON. Add --full to include all fields (default shows essential fields only).
Is Todoist Api safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.