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.

25 stars

Best use case

todoist-api is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

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.

Teams using todoist-api should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/todoist-api/SKILL.md --create-dirs "https://raw.githubusercontent.com/ComeOnOliver/skillshub/main/skills/intellectronica/agent-skills/todoist-api/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/todoist-api/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How todoist-api Compares

Feature / Agenttodoist-apiStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

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.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 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:

```bash
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 `td auth login` to 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

```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 monday`, `Jan 15`
- Priority: `p1` (urgent) through `p4` (normal)
- Project: `#ProjectName`
- Section: `/SectionName`
- Labels: `@label1 @label2`

## Tasks

### List Tasks

```bash
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:**
```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 output
```

The ref can be a task name, partial match, or `id:xxx`.

### Create 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:**
- `--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

```bash
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

```bash
td task complete <ref>
```

### Reopen Task

```bash
td task uncomplete id:xxx
```

Note: 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 only
```

### View Project

```bash
td project view <ref>
td project view <ref> --json
```

### Create Project

```bash
td project create --name "Project Name" \
  --color "blue" \
  --parent "Parent Project" \
  --view-style board \
  --favorite
```

**Options:**
- `--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

```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 array
```

### Create 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 array
```

### Create Label

```bash
td label create --name "label-name" --color "green" --favorite
```

### Update 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 project
```

### Add 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 --json
```

### Show Tasks Matching Filter

```bash
td filter show <filter-ref> --json
```

### Create 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:**
- `--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

```bash
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:

```bash
# 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:xxx` for 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 API
- `references/filters.md` - Todoist filter query syntax for `--filter` flag

## 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`

Related Skills

todoist-due-drafts

25
from ComeOnOliver/skillshub

Check Todoist for tasks due today (and overdue) that involve pinging, emailing, or following up with someone. Auto-draft the emails using meeting context and notify via WhatsApp. Use when running the daily due-drafts cron, or when user asks to process email tasks from Todoist.

action-items-todoist

25
from ComeOnOliver/skillshub

Extract action items from today's Granola/Grain meetings, create Todoist tasks, complete fulfilled tasks, and draft meeting-triggered follow-up emails. Use when running the daily action items cron, post-meeting cron, or when user asks to process meeting action items. NOT for general email drafting without meeting context.

todoist-automation

25
from ComeOnOliver/skillshub

Automate Todoist task management, projects, sections, filtering, and bulk operations via Rube MCP (Composio). Always search tools first for current schemas.

Daily Logs

25
from ComeOnOliver/skillshub

Record the user's daily activities, progress, decisions, and learnings in a structured, chronological format.

Socratic Method: The Dialectic Engine

25
from ComeOnOliver/skillshub

This skill transforms Claude into a Socratic agent — a cognitive partner who guides

Sokratische Methode: Die Dialektik-Maschine

25
from ComeOnOliver/skillshub

Dieser Skill verwandelt Claude in einen sokratischen Agenten — einen kognitiven Partner, der Nutzende durch systematisches Fragen zur Wissensentdeckung führt, anstatt direkt zu instruieren.

College Football Data (CFB)

25
from ComeOnOliver/skillshub

Before writing queries, consult `references/api-reference.md` for endpoints, conference IDs, team IDs, and data shapes.

College Basketball Data (CBB)

25
from ComeOnOliver/skillshub

Before writing queries, consult `references/api-reference.md` for endpoints, conference IDs, team IDs, and data shapes.

Betting Analysis

25
from ComeOnOliver/skillshub

Before writing queries, consult `references/api-reference.md` for odds formats, command parameters, and key concepts.

Research Proposal Generator

25
from ComeOnOliver/skillshub

Generate high-quality academic research proposals for PhD applications following Nature Reviews-style academic writing conventions.

Paper Slide Deck Generator

25
from ComeOnOliver/skillshub

Transform academic papers and content into professional slide deck images with automatic figure extraction.

Medical Imaging AI Literature Review Skill

25
from ComeOnOliver/skillshub

Write comprehensive literature reviews following a systematic 7-phase workflow.