openakita/skills@todoist-task
Manage Todoist tasks, projects, sections, labels, and filters via REST API v2. Supports task CRUD, due dates, priorities, recurring tasks, project organization, and advanced filtering. Based on doggy8088/agent-skills/todoist-api, using curl + jq.
Best use case
openakita/skills@todoist-task is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Manage Todoist tasks, projects, sections, labels, and filters via REST API v2. Supports task CRUD, due dates, priorities, recurring tasks, project organization, and advanced filtering. Based on doggy8088/agent-skills/todoist-api, using curl + jq.
Teams using openakita/skills@todoist-task 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
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/todoist-task/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How openakita/skills@todoist-task Compares
| Feature / Agent | openakita/skills@todoist-task | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Manage Todoist tasks, projects, sections, labels, and filters via REST API v2. Supports task CRUD, due dates, priorities, recurring tasks, project organization, and advanced filtering. Based on doggy8088/agent-skills/todoist-api, using curl + jq.
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.
Related Guides
SKILL.md Source
# Todoist Task — Todoist 任务管理
## When to Use
- 用户需要创建、查看、更新或删除 Todoist 任务
- 需要管理 Todoist 项目和分区
- 需要设置任务优先级、截止日期、重复规则
- 需要用标签分类任务
- 需要查询和过滤任务
- 需要将对话中讨论的待办事项同步到 Todoist
- 需要批量管理任务(导入/导出/整理)
---
## Prerequisites
### 必需配置
| 配置项 | 说明 |
|--------|------|
| `TODOIST_API_TOKEN` | Todoist API Token |
**获取 Token:**
1. 登录 Todoist → 设置 → 集成 → 开发者
2. 或访问:https://app.todoist.com/app/settings/integrations/developer
3. 复制 API Token
在 `.env` 中配置:
```
TODOIST_API_TOKEN=your_todoist_api_token_here
```
### 工具依赖
| 工具 | 用途 | 说明 |
|------|------|------|
| `curl` | HTTP API 调用 | 系统通常自带 |
| `jq` | JSON 解析 | Windows: `choco install jq`; macOS: `brew install jq` |
### 验证配置
```bash
curl -s "https://api.todoist.com/rest/v2/projects" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | jq '.[0].name'
```
---
## Instructions
### Todoist API v2 基础
所有请求发送到 `https://api.todoist.com/rest/v2/`,携带 Bearer Token:
```bash
curl -s "https://api.todoist.com/rest/v2/{endpoint}" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json"
```
### 核心概念
| 概念 | 说明 |
|------|------|
| Task(任务) | 待办事项,Todoist 的核心单元 |
| Project(项目) | 任务的容器,类似文件夹 |
| Section(分区) | 项目内的分组/栏目 |
| Label(标签) | 跨项目的任务分类标签 |
| Filter(过滤器) | 自定义查询条件 |
| Priority(优先级) | 1=普通, 2=低, 3=中, 4=紧急(API 与 UI 相反) |
| Due Date(截止日期) | 支持自然语言和 ISO 8601 |
### 优先级映射
注意 API 的优先级数字与 Todoist UI 显示是**相反**的:
| API 值 | UI 显示 | 颜色 |
|--------|---------|------|
| `priority: 1` | Priority 4(普通) | 无色 |
| `priority: 2` | Priority 3(低) | 蓝色 |
| `priority: 3` | Priority 2(中) | 橙色 |
| `priority: 4` | Priority 1(紧急) | 红色 |
---
## Workflows
### Workflow 1: 任务 CRUD
#### 创建任务
**基本创建**
```bash
curl -s -X POST "https://api.todoist.com/rest/v2/tasks" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "完成项目方案",
"description": "包含技术选型和时间线",
"due_string": "明天下午3点",
"due_lang": "zh",
"priority": 4,
"project_id": "PROJECT_ID"
}' | jq '.'
```
**带标签和分区的创建**
```bash
curl -s -X POST "https://api.todoist.com/rest/v2/tasks" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "Review PR #42",
"description": "Check error handling and test coverage",
"due_date": "2025-03-05",
"priority": 3,
"project_id": "PROJECT_ID",
"section_id": "SECTION_ID",
"labels": ["code-review", "urgent"]
}' | jq '.'
```
**创建子任务**
```bash
curl -s -X POST "https://api.todoist.com/rest/v2/tasks" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "编写单元测试",
"parent_id": "PARENT_TASK_ID",
"priority": 2
}' | jq '.'
```
#### 查看任务
**获取所有活跃任务**
```bash
curl -s "https://api.todoist.com/rest/v2/tasks" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | jq '.'
```
**按项目筛选**
```bash
curl -s "https://api.todoist.com/rest/v2/tasks?project_id=PROJECT_ID" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | jq '.'
```
**按标签筛选**
```bash
curl -s "https://api.todoist.com/rest/v2/tasks?label=urgent" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | jq '.'
```
**使用过滤器查询**
```bash
curl -s "https://api.todoist.com/rest/v2/tasks?filter=today%20%7C%20overdue" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | jq '.'
```
**获取单个任务**
```bash
curl -s "https://api.todoist.com/rest/v2/tasks/TASK_ID" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | jq '.'
```
#### 更新任务
```bash
curl -s -X POST "https://api.todoist.com/rest/v2/tasks/TASK_ID" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "更新后的任务标题",
"due_string": "下周一",
"due_lang": "zh",
"priority": 3
}' | jq '.'
```
#### 完成任务
```bash
curl -s -X POST "https://api.todoist.com/rest/v2/tasks/TASK_ID/close" \
-H "Authorization: Bearer $TODOIST_API_TOKEN"
```
#### 重新打开任务
```bash
curl -s -X POST "https://api.todoist.com/rest/v2/tasks/TASK_ID/reopen" \
-H "Authorization: Bearer $TODOIST_API_TOKEN"
```
#### 删除任务
```bash
curl -s -X DELETE "https://api.todoist.com/rest/v2/tasks/TASK_ID" \
-H "Authorization: Bearer $TODOIST_API_TOKEN"
```
---
### Workflow 2: 项目管理
#### 列出所有项目
```bash
curl -s "https://api.todoist.com/rest/v2/projects" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | jq '.[] | {id, name, color, is_favorite}'
```
#### 创建项目
```bash
curl -s -X POST "https://api.todoist.com/rest/v2/projects" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Q2 产品开发",
"color": "blue",
"is_favorite": true,
"view_style": "board"
}' | jq '.'
```
`view_style` 可选:
- `list`:列表视图(默认)
- `board`:看板视图
#### 更新项目
```bash
curl -s -X POST "https://api.todoist.com/rest/v2/projects/PROJECT_ID" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Q2 产品开发(已完成)",
"color": "grey"
}' | jq '.'
```
#### 删除项目
```bash
curl -s -X DELETE "https://api.todoist.com/rest/v2/projects/PROJECT_ID" \
-H "Authorization: Bearer $TODOIST_API_TOKEN"
```
---
### Workflow 3: 分区管理
分区(Section)用于在项目内组织任务,类似看板的列。
#### 列出分区
```bash
curl -s "https://api.todoist.com/rest/v2/sections?project_id=PROJECT_ID" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | jq '.'
```
#### 创建分区
```bash
curl -s -X POST "https://api.todoist.com/rest/v2/sections" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"project_id": "PROJECT_ID",
"name": "进行中"
}' | jq '.'
```
#### 常见分区模板
**看板式**
```bash
for section in "待处理" "进行中" "待审核" "已完成"; do
curl -s -X POST "https://api.todoist.com/rest/v2/sections" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"project_id\": \"PROJECT_ID\", \"name\": \"$section\"}"
done
```
**GTD 式**
```bash
for section in "收集箱" "下一步行动" "等待中" "将来/也许" "参考资料"; do
curl -s -X POST "https://api.todoist.com/rest/v2/sections" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"project_id\": \"PROJECT_ID\", \"name\": \"$section\"}"
done
```
---
### Workflow 4: 标签管理
#### 列出所有标签
```bash
curl -s "https://api.todoist.com/rest/v2/labels" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | jq '.[] | {id, name, color, is_favorite}'
```
#### 创建标签
```bash
curl -s -X POST "https://api.todoist.com/rest/v2/labels" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "high-energy",
"color": "red"
}' | jq '.'
```
#### 推荐标签体系
| 类别 | 标签 | 用途 |
|------|------|------|
| 精力 | `high-energy`, `low-energy` | 按精力状态选择任务 |
| 时长 | `5min`, `15min`, `30min`, `1hour` | 按可用时间选择任务 |
| 场景 | `at-computer`, `at-phone`, `at-office`, `anywhere` | 按场景选择任务 |
| 类型 | `meeting`, `deep-work`, `admin`, `learning` | 按任务性质分类 |
---
### Workflow 5: 截止日期与重复任务
#### 自然语言日期(推荐)
Todoist 支持多语言自然语言日期:
```json
{
"due_string": "明天下午3点",
"due_lang": "zh"
}
```
| 中文表达 | 英文等效 | 解析结果 |
|---------|---------|---------|
| 今天 | today | 当天 |
| 明天 | tomorrow | 次日 |
| 后天 | in 2 days | 两天后 |
| 下周一 | next Monday | 下个周一 |
| 每天 | every day | 每日重复 |
| 每周一 | every Monday | 每周一重复 |
| 每月1号 | every 1st | 每月1日重复 |
| 3月15日 | March 15 | 指定日期 |
#### ISO 日期格式
```json
{
"due_date": "2025-03-15"
}
```
或带时间:
```json
{
"due_datetime": "2025-03-15T15:00:00Z"
}
```
#### 重复任务
```json
{
"due_string": "every weekday at 9am",
"due_lang": "en"
}
```
常见重复规则:
| 规则 | `due_string` | 说明 |
|------|-------------|------|
| 每日 | `every day` | 每天 |
| 工作日 | `every weekday` | 周一至周五 |
| 每周 | `every week` | 每 7 天 |
| 每月 | `every month` | 每月同日 |
| 每季度 | `every 3 months` | 每 3 个月 |
| 每年 | `every year` | 每年同日 |
| 完成后 3 天 | `every! 3 days` | 完成后 3 天再次出现 |
| 隔周一 | `every other Monday` | 每两周的周一 |
---
### Workflow 6: 高级过滤查询
#### 过滤器语法
| 过滤器 | 说明 |
|--------|------|
| `today` | 今天到期的任务 |
| `overdue` | 已过期任务 |
| `today \| overdue` | 今天到期或已过期 |
| `7 days` | 未来 7 天到期 |
| `no date` | 没有截止日期的任务 |
| `p1` | 优先级 1(紧急) |
| `p1 & today` | 紧急且今天到期 |
| `#项目名` | 指定项目的任务 |
| `@标签名` | 指定标签的任务 |
| `assigned to: me` | 分配给自己的任务 |
| `created before: -7 days` | 7 天前创建的任务 |
#### 查询示例
**今日待办**
```bash
curl -s "https://api.todoist.com/rest/v2/tasks?filter=today%20%7C%20overdue" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | \
jq '.[] | {content, due: .due.string, priority}'
```
**本周紧急任务**
```bash
curl -s "https://api.todoist.com/rest/v2/tasks?filter=7%20days%20%26%20(p1%20%7C%20p2)" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | \
jq '.[] | {content, due: .due.string, priority}'
```
---
### Workflow 7: 批量操作
#### 从对话生成任务
当用户在对话中提到多个待办事项时,批量创建:
```bash
tasks='[
{"content": "准备周会PPT", "due_string": "明天", "priority": 3},
{"content": "回复客户邮件", "due_string": "今天", "priority": 4},
{"content": "代码审查 PR #55", "due_string": "后天", "priority": 2}
]'
echo "$tasks" | jq -c '.[]' | while read task; do
curl -s -X POST "https://api.todoist.com/rest/v2/tasks" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" \
-H "Content-Type: application/json" \
-d "$task" | jq '{id, content, url}'
sleep 0.3
done
```
#### 批量完成任务
```bash
task_ids=("TASK_ID_1" "TASK_ID_2" "TASK_ID_3")
for id in "${task_ids[@]}"; do
curl -s -X POST "https://api.todoist.com/rest/v2/tasks/$id/close" \
-H "Authorization: Bearer $TODOIST_API_TOKEN"
sleep 0.3
done
```
#### 任务导出
```bash
curl -s "https://api.todoist.com/rest/v2/tasks" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | \
jq -r '["内容","项目ID","优先级","截止日期","标签"], (.[] | [.content, .project_id, .priority, (.due.date // "无"), (.labels | join(","))]) | @csv' \
> tasks_export.csv
```
---
## Output Format
### 任务列表输出
```
📋 今日待办 (5 项)
🔴 [P1] 回复客户紧急邮件
📅 今天 14:00 | 🏷️ work, urgent
📁 客户项目
🟠 [P2] Review PR #42
📅 今天 | 🏷️ code-review
📁 开发任务
⚪ [P4] 整理会议纪要
📅 今天 | 🏷️ admin
📁 日常事务
✅ 已完成: 3 项 | ⏰ 逾期: 1 项
```
### 创建确认
```
✅ 任务已创建
- 内容: 完成项目方案
- 项目: Q2 产品开发
- 截止: 明天 15:00
- 优先级: P1 (紧急)
- 标签: deep-work
- 链接: https://todoist.com/app/task/12345
```
---
## Common Pitfalls
### 1. API Token 无效
**症状**:所有请求返回 401
**解决**:确认 `TODOIST_API_TOKEN` 正确设置,到 Todoist 设置页面重新获取
### 2. 优先级数字混淆
API 的 `priority: 4` 对应 UI 的 P1(紧急),这是反直觉的。牢记映射关系或在代码中使用常量:
```bash
P1_URGENT=4
P2_HIGH=3
P3_MEDIUM=2
P4_NORMAL=1
```
### 3. 中文日期解析失败
使用中文自然语言日期时必须指定 `due_lang: "zh"`,否则会解析失败或解析为错误日期。
### 4. 过滤器 URL 编码
通过 curl 传递过滤器时需要 URL 编码:
- `|` → `%7C`
- `&` → `%26`
- `#` → `%23`
- 空格 → `%20`
### 5. 项目/任务 ID 是字符串
Todoist REST API v2 返回的 ID 是字符串类型,不是数字。使用 jq 处理时注意类型。
### 6. 批量操作超频
Todoist API 的限制是每分钟约 450 次请求。批量操作时添加 sleep:
```bash
sleep 0.3 # 每次请求间隔 300ms
```
### 7. 重复任务的 close vs delete
- `close`(完成):对重复任务,会自动创建下一次任务
- `delete`:永久删除,不会创建下次任务
确保对重复任务使用 `close` 而非 `delete`。
### 8. 时区问题
带时间的截止日期使用 UTC 格式。如果用户在东八区(CST),需注意时差:
```json
{
"due_datetime": "2025-03-15T07:00:00Z"
}
```
上述表示北京时间 15:00。
---
## 进阶用法
### 每日回顾脚本
```bash
echo "=== 📋 每日回顾 $(date +%Y-%m-%d) ==="
echo ""
echo "--- 🔴 逾期任务 ---"
curl -s "https://api.todoist.com/rest/v2/tasks?filter=overdue" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | \
jq -r '.[] | " ❗ \(.content) (原定: \(.due.date))"'
echo ""
echo "--- 📅 今日任务 ---"
curl -s "https://api.todoist.com/rest/v2/tasks?filter=today" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | \
jq -r '.[] | " • [\(if .priority == 4 then "P1" elif .priority == 3 then "P2" elif .priority == 2 then "P3" else "P4" end)] \(.content)"'
echo ""
echo "--- 📆 明日预览 ---"
curl -s "https://api.todoist.com/rest/v2/tasks?filter=tomorrow" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | \
jq -r '.[] | " ○ \(.content)"'
```
### 项目进度统计
```bash
PROJECT_ID="your_project_id"
total=$(curl -s "https://api.todoist.com/rest/v2/tasks?project_id=$PROJECT_ID" \
-H "Authorization: Bearer $TODOIST_API_TOKEN" | jq 'length')
echo "📊 项目进度: 剩余 $total 个活跃任务"
```
---
## EXTEND.md 扩展
用户可在技能同目录下创建 `EXTEND.md` 添加:
- 默认项目 ID 和名称映射
- 自定义标签体系
- 任务模板(如每周例行任务)
- 与其他工具的集成配置
- 团队成员 ID 映射Related Skills
openakita/skills@yuque-skills
Manage Yuque (语雀) knowledge bases, documents, and team collaboration through API integration. Supports personal search, weekly reports, knowledge base management, document CRUD, and group collaboration workflows. Based on yuque/yuque-skills.
openakita/skills@youtube-summarizer
Summarize YouTube videos by extracting transcripts and generating structured notes. Use when the user wants to summarize a YouTube video, extract key points from a talk, create study notes from a lecture, or get timestamps for important moments. Supports multiple URL formats and languages.
openakita/skills@xlsx
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like "the xlsx in my downloads") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved.
openakita/skills@xiaohongshu-creator
Create engaging Xiaohongshu (RED/小红书) content including titles, body text, hashtags, and image style recommendations. Supports multiple content types such as product reviews, tutorials, lifestyle sharing, and shopping guides with platform-specific optimization.
openakita/skills@wechat-article
Create and format WeChat Official Account (公众号) articles with proper Markdown-to-WeChat HTML conversion, rich formatting, cover image guidance, and both API and manual publishing workflows.
openakita/skills@webapp-testing
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
openakita/skills@web-artifacts-builder
Suite of tools for creating elaborate, multi-component interactive HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use for complex artifacts requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX artifacts.
openakita/skills@video-downloader
Download YouTube videos with customizable quality and format options. Use this skill when the user asks to download, save, or grab YouTube videos. Supports various quality settings (best, 1080p, 720p, 480p, 360p), multiple formats (mp4, webm, mkv), and audio-only downloads as MP3.
openakita/skills@translate-pdf
Translate PDF documents while preserving original layout, styling, tables, images, and formatting. Supports Simplified Chinese, Traditional Chinese, English, Japanese, Korean, and more. Page-by-page translation with structure preservation.
openakita/skills@theme-factory
Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.
update-scheduled-task
Modify scheduled task settings WITHOUT deleting. Can modify notify_on_start, notify_on_complete, enabled. Common uses - (1) 'Turn off notification' = notify=false, (2) 'Pause task' = enabled=false, (3) 'Resume task' = enabled=true.
trigger-scheduled-task
Immediately trigger scheduled task without waiting for scheduled time. When you need to test task execution or run task ahead of schedule.