Claude Agent Skill · by Intellectronica

Todoist Api

Install Todoist Api skill for Claude Code from intellectronica/agent-skills.

Install
Terminal · npx
$npx skills add https://github.com/obra/superpowers --skill brainstorming
Works with Paperclip

How Todoist Api fits into a Paperclip company.

Todoist Api drops into any Paperclip agent that handles this kind of work. Assign it to a specialist inside a pre-configured PaperclipOrg company and the skill becomes available on every heartbeat — no prompt engineering, no tool wiring.

S
SaaS FactoryPaired

Pre-configured AI company — 18 agents, 18 skills, one-time purchase.

$27$59
Explore pack
Source file
SKILL.md418 lines
Expand
---name: todoist-apidescription: 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.--- # 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: ```bashtd 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 ```bashtd 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 ```bashtd 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:**```bashtd task list --json                    # JSON arraytd task list --project "Work" --json   # Filtered JSONtd task list --all --json              # All tasks (no limit)``` ### View Task Details ```bashtd task view <ref>              # Human-readabletd task view <ref> --json       # JSON output``` The ref can be a task name, partial match, or `id:xxx`. ### Create Task **Quick add (natural language):**```bashtd add "Task text with #Project @label tomorrow p2"``` **Explicit flags:**```bashtd 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 ```bashtd 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 ```bashtd task complete <ref>``` ### Reopen Task ```bashtd task uncomplete id:xxx``` Note: Uncomplete requires the task ID (id:xxx format). ### Delete Task ```bashtd task delete <ref>``` ### Move Task ```bashtd task move <ref> --project "New Project"td task move <ref> --section <section-id>td task move <ref> --parent <task-ref>``` ### Open in Browser ```bashtd task browse <ref>``` ## Projects ### List Projects ```bashtd project list                     # Human-readable treetd project list --json              # JSON arraytd project list --personal --json   # Personal projects only``` ### View Project ```bashtd project view <ref>td project view <ref> --json``` ### Create Project ```bashtd 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 ```bashtd project update <ref> --name "New Name" --color "red"``` ### Archive/Unarchive Project ```bashtd project archive <ref>td project unarchive <ref>``` ### Delete Project ```bashtd project delete <ref>``` Note: Project must have no uncompleted tasks. ### List Collaborators ```bashtd project collaborators <ref>``` ## Sections ### List Sections ```bashtd section list <project>           # Human-readabletd section list <project> --json    # JSON array``` ### Create Section ```bashtd section create --name "Section Name" --project "Project Name"``` ### Update Section ```bashtd section update <id> --name "New Name"``` ### Delete Section ```bashtd section delete <id>``` ## Labels ### List Labels ```bashtd label list              # Human-readabletd label list --json       # JSON array``` ### Create Label ```bashtd label create --name "label-name" --color "green" --favorite``` ### Update Label ```bashtd label update <ref> --name "new-name" --color "blue"``` ### Delete Label ```bashtd label delete <name>``` ## Comments ### List Comments ```bashtd comment list <task-ref>                    # Comments on tasktd comment list <project-ref> --project       # Comments on project``` ### Add Comment ```bashtd comment add <task-ref> --content "Comment text"td comment add <project-ref> --project --content "Comment text"``` ### Update Comment ```bashtd comment update <id> --content "Updated text"``` ### Delete Comment ```bashtd comment delete <id>``` ## Reminders ### List Reminders ```bashtd reminder list <task-ref>``` ### Add Reminder ```bashtd reminder add <task-ref> --due "tomorrow 9am"``` ### Delete Reminder ```bashtd reminder delete <id>``` ## Filters ### List Saved Filters ```bashtd filter list --json``` ### Show Tasks Matching Filter ```bashtd filter show <filter-ref> --json``` ### Create Filter ```bashtd filter create --name "My Filter" --query "today & p1"``` ## Completed Tasks ```bashtd completed                              # Today's completed taskstd completed --since 2024-01-01           # Since specific datetd completed --project "Work" --json      # Filtered JSON outputtd 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 ```bashtd activity                  # Recent activitytd stats                     # Productivity stats and karma``` ## Pagination For large result sets, use `--all` to fetch everything, or handle pagination with cursors: ```bash# First pageresult=$(td task list --json --limit 50) # If there's a next_cursor in the response, continuecursor=$(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 confirmation3. **Write operations** - Ask for confirmation before executing4. **Use JSON output** - Add `--json` flag for machine-readable data5. **Handle large datasets** - Use `--all` or pagination with `--cursor`