[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FSTDE9TZ8JEQ0PPZP89MFF":3,"skill-same:01M6FSTDE9TZ8JEQ0PPZP89MFF":74},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":14,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":57,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M6FSTDE9TZ8JEQ0PPZP89MFF","todoist-automation",null,"Automate Todoist task management, projects, sections, filtering, and bulk operations via Rube MCP (Composio). Always search tools first for current schemas.","reikiplanet\u002Fdaoskills","reikiplanet","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F96377599?v=4","01M6CVWCMD740YHQDK7E9QYBW4","Reiki Planet","01M6CVWCS4KXVA2CWFVJ43EAXK",0,"MIT","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fautomation\u002Ftodoist-automation\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"automation","todoist automation","todoist","bulk","MCP","via","bulk operations","composio","task","community","operations","filtering","management","automate","task management","projects","first","Tools","search","2026-11-10 10:12:30",false,"---\nname: todoist-automation\ndescription: \"Automate Todoist task management, projects, sections, filtering, and bulk operations via Rube MCP (Composio). Always search tools first for current schemas.\"\nrequires:\n  mcp: [rube]\nrisk: unknown\nsource: community\n---\n\n# Todoist Automation via Rube MCP\n\nAutomate Todoist operations including task creation and management, project organization, section management, filtering, and bulk task workflows through Composio's Todoist toolkit.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Todoist connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `todoist`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `todoist`\n3. If connection is not ACTIVE, follow the returned auth link to complete Todoist OAuth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Create and Manage Tasks\n\n**When to use**: User wants to create, update, complete, reopen, or delete tasks\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - List projects to find the target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - List sections within a project for task placement [Optional]\n3. `TODOIST_CREATE_TASK` - Create a single task with content, due date, priority, labels [Required]\n4. `TODOIST_BULK_CREATE_TASKS` - Create multiple tasks in one request [Alternative]\n5. `TODOIST_UPDATE_TASK` - Modify task properties (content, due date, priority, labels) [Optional]\n6. `TODOIST_CLOSE_TASK` - Mark a task as completed [Optional]\n7. `TODOIST_REOPEN_TASK` - Restore a previously completed task [Optional]\n8. `TODOIST_DELETE_TASK` - Permanently remove a task [Optional]\n\n**Key parameters for CREATE_TASK**:\n- `content`: Task title (supports markdown and hyperlinks)\n- `description`: Additional notes (do NOT put due dates here)\n- `project_id`: Alphanumeric project ID; omit to add to Inbox\n- `section_id`: Alphanumeric section ID for placement within a project\n- `parent_id`: Task ID for creating subtasks\n- `priority`: 1 (normal) to 4 (urgent) -- note: Todoist UI shows p1=urgent, API p4=urgent\n- `due_string`: Natural language date like `\"tomorrow at 3pm\"`, `\"every Friday at 9am\"`\n- `due_date`: Specific date `YYYY-MM-DD` format\n- `due_datetime`: Specific date+time in RFC3339 `YYYY-MM-DDTHH:mm:ssZ`\n- `labels`: Array of label name strings\n- `duration` + `duration_unit`: Task duration (e.g., `30` + `\"minute\"`)\n\n**Pitfalls**:\n- Only one `due_*` field can be used at a time (except `due_lang` which can accompany any)\n- Do NOT embed due dates in `content` or `description` -- use `due_string` field\n- Do NOT embed duration phrases like \"for 30 minutes\" in `due_string` -- use `duration` + `duration_unit`\n- `priority` in API: 1=normal, 4=urgent (opposite of Todoist UI display where p1=urgent)\n- Task IDs can be numeric or alphanumeric; use the format returned by the API\n- `CLOSE_TASK` marks complete; `DELETE_TASK` permanently removes -- they are different operations\n\n### 2. Manage Projects\n\n**When to use**: User wants to list, create, update, or inspect projects\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - List all projects with metadata [Required]\n2. `TODOIST_GET_PROJECT` - Get details for a specific project by ID [Optional]\n3. `TODOIST_CREATE_PROJECT` - Create a new project with name, color, view style [Optional]\n4. `TODOIST_UPDATE_PROJECT` - Modify project properties [Optional]\n\n**Key parameters**:\n- `name`: Project name (required for creation)\n- `color`: Todoist palette color (e.g., `\"blue\"`, `\"red\"`, `\"green\"`, `\"charcoal\"`)\n- `view_style`: `\"list\"` or `\"board\"` layout\n- `parent_id`: Parent project ID for creating sub-projects\n- `is_favorite` \u002F `favorite`: Boolean to mark as favorite\n- `project_id`: Required for update and get operations\n\n**Pitfalls**:\n- Projects with similar names can lead to selecting the wrong project_id; always verify\n- `CREATE_PROJECT` uses `favorite` while `UPDATE_PROJECT` uses `is_favorite` -- different field names\n- Use the project `id` returned by API, not the `v2_id`, for downstream operations\n- Alphanumeric\u002FURL-style project IDs may cause HTTP 400 in some tools; use numeric ID if available\n\n### 3. Manage Sections\n\n**When to use**: User wants to organize tasks within projects using sections\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - Find the target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - List existing sections to avoid duplicates [Prerequisite]\n3. `TODOIST_CREATE_SECTION` - Create a new section in a project [Required]\n4. `TODOIST_UPDATE_SECTION` - Rename an existing section [Optional]\n5. `TODOIST_DELETE_SECTION` - Permanently remove a section [Optional]\n\n**Key parameters**:\n- `project_id`: Required -- the project to create the section in\n- `name`: Section name (required for creation)\n- `order`: Integer position within the project (lower values appear first)\n- `section_id`: Required for update and delete operations\n\n**Pitfalls**:\n- `CREATE_SECTION` requires `project_id` and `name` -- omitting project_id causes a 400 error\n- HTTP 400 \"project_id is invalid\" can occur if alphanumeric ID is used; prefer numeric ID\n- Deleting a section may move or regroup its tasks in non-obvious ways\n- Response may include both `id` and `v2_id`; store and reuse the correct identifier consistently\n- Always check existing sections first to avoid creating duplicates\n\n### 4. Search and Filter Tasks\n\n**When to use**: User wants to find tasks by criteria, view today's tasks, or get completed task history\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_TASKS` - Fetch incomplete tasks with optional filter query [Required]\n2. `TODOIST_GET_TASK` - Get full details of a specific task by ID [Optional]\n3. `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE` - Retrieve completed tasks within a date range [Optional]\n4. `TODOIST_LIST_FILTERS` - List user's custom saved filters [Optional]\n\n**Key parameters for GET_ALL_TASKS**:\n- `filter`: Todoist filter syntax string\n  - Keywords: `today`, `tomorrow`, `overdue`, `no date`, `recurring`, `subtask`\n  - Priority: `p1` (urgent), `p2`, `p3`, `p4` (normal)\n  - Projects: `#ProjectName` (must exist in account)\n  - Labels: `@LabelName` (must exist in account)\n  - Date ranges: `7 days`, `-7 days`, `due before: YYYY-MM-DD`, `due after: YYYY-MM-DD`\n  - Search: `search: keyword` for content text search\n  - Operators: `&` (AND), `|` (OR), `!` (NOT)\n- `ids`: List of specific task IDs to retrieve\n\n**Key parameters for GET_COMPLETED_TASKS_BY_COMPLETION_DATE**:\n- `since`: Start date in RFC3339 format (e.g., `2024-01-01T00:00:00Z`)\n- `until`: End date in RFC3339 format\n- `project_id`, `section_id`, `parent_id`: Optional filters\n- `cursor`: Pagination cursor from previous response\n- `limit`: Max results per page (default 50)\n\n**Pitfalls**:\n- `GET_ALL_TASKS` returns ONLY incomplete tasks; use `GET_COMPLETED_TASKS_BY_COMPLETION_DATE` for completed ones\n- Filter terms must reference ACTUAL EXISTING entities; arbitrary text causes HTTP 400 errors\n- Do NOT use `completed`, `!completed`, or `completed after` in GET_ALL_TASKS filter -- causes 400 error\n- `GET_COMPLETED_TASKS_BY_COMPLETION_DATE` limits date range to approximately 3 months between `since` and `until`\n- Search uses `search: keyword` syntax within the filter, not a separate parameter\n\n### 5. Bulk Task Creation\n\n**When to use**: User wants to scaffold a project with multiple tasks at once\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - Find target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - Find section IDs for task placement [Optional]\n3. `TODOIST_BULK_CREATE_TASKS` - Create multiple tasks in a single request [Required]\n\n**Key parameters**:\n- `tasks`: Array of task objects, each requiring at minimum `content`\n- Each task object supports: `content`, `description`, `project_id`, `section_id`, `parent_id`, `priority`, `labels`, `due` (object with `string`, `date`, or `datetime`), `duration`, `order`\n\n**Pitfalls**:\n- Each task in the array must have at least the `content` field\n- The `due` field in bulk create is an object with nested fields (`string`, `date`, `datetime`, `lang`) -- different structure from CREATE_TASK's flat fields\n- All tasks can target different projects\u002Fsections within the same batch\n\n## Common Patterns\n\n### ID Resolution\nAlways resolve human-readable names to IDs before operations:\n- **Project name -> Project ID**: `TODOIST_GET_ALL_PROJECTS`, match by `name` field\n- **Section name -> Section ID**: `TODOIST_GET_ALL_SECTIONS` with `project_id`\n- **Task content -> Task ID**: `TODOIST_GET_ALL_TASKS` with `filter` or `search: keyword`\n\n### Pagination\n- `TODOIST_GET_ALL_TASKS`: Returns all matching incomplete tasks (no pagination needed)\n- `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE`: Uses cursor-based pagination; follow `cursor` from response until no more results\n- `TODOIST_GET_ALL_PROJECTS` and `TODOIST_GET_ALL_SECTIONS`: Return all results (no pagination)\n\n### Due Date Handling\n- Natural language: Use `due_string` (e.g., `\"tomorrow at 3pm\"`, `\"every Monday\"`)\n- Specific date: Use `due_date` in `YYYY-MM-DD` format\n- Specific datetime: Use `due_datetime` in RFC3339 format (`YYYY-MM-DDTHH:mm:ssZ`)\n- Only use ONE due field at a time (except `due_lang` which can accompany any)\n- Recurring tasks: Use natural language in `due_string` (e.g., `\"every Friday at 9am\"`)\n\n## Known Pitfalls\n\n### ID Formats\n- Task IDs can be numeric (`\"2995104339\"`) or alphanumeric (`\"6X4Vw2Hfmg73Q2XR\"`)\n- Project IDs similarly vary; prefer the format returned by the API\n- Some tools accept only numeric IDs; if 400 error occurs, try fetching the numeric `id` via GET_PROJECT\n- Response objects may contain both `id` and `v2_id`; use `id` for API operations\n\n### Priority Inversion\n- API priority: 1 = normal, 4 = urgent\n- Todoist UI display: p1 = urgent, p4 = normal\n- This is inverted; always clarify with the user which convention they mean\n\n### Filter Syntax\n- Filter terms must reference real entities in the user's account\n- `#NonExistentProject` or `@NonExistentLabel` will cause HTTP 400\n- Use `search: keyword` for text search, not bare keywords\n- Combine with `&` (AND), `|` (OR), `!` (NOT)\n- `completed` filters do NOT work on GET_ALL_TASKS endpoint\n\n### Rate Limits\n- Todoist API has rate limits; batch operations should use `BULK_CREATE_TASKS` where possible\n- Space out rapid sequential requests to avoid throttling\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| List all projects | `TODOIST_GET_ALL_PROJECTS` | (none) |\n| Get project | `TODOIST_GET_PROJECT` | `project_id` |\n| Create project | `TODOIST_CREATE_PROJECT` | `name`, `color`, `view_style` |\n| Update project | `TODOIST_UPDATE_PROJECT` | `project_id`, `name`, `color` |\n| List sections | `TODOIST_GET_ALL_SECTIONS` | `project_id` |\n| Create section | `TODOIST_CREATE_SECTION` | `project_id`, `name`, `order` |\n| Update section | `TODOIST_UPDATE_SECTION` | `section_id`, `name` |\n| Delete section | `TODOIST_DELETE_SECTION` | `section_id` |\n| Get all tasks | `TODOIST_GET_ALL_TASKS` | `filter`, `ids` |\n| Get task | `TODOIST_GET_TASK` | `task_id` |\n| Create task | `TODOIST_CREATE_TASK` | `content`, `project_id`, `due_string`, `priority` |\n| Bulk create tasks | `TODOIST_BULK_CREATE_TASKS` | `tasks` (array) |\n| Update task | `TODOIST_UPDATE_TASK` | `task_id`, `content`, `due_string` |\n| Complete task | `TODOIST_CLOSE_TASK` | `task_id` |\n| Reopen task | `TODOIST_REOPEN_TASK` | `task_id` |\n| Delete task | `TODOIST_DELETE_TASK` | `task_id` |\n| Completed tasks | `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE` | `since`, `until` |\n| List filters | `TODOIST_LIST_FILTERS` | `sync_token` |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Todoist Automation via Rube MCP\n\nAutomate Todoist operations including task creation and management, project organization, section management, filtering, and bulk task workflows through Composio's Todoist toolkit.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Todoist connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `todoist`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `todoist`\n3. If connection is not ACTIVE, follow the returned auth link to complete Todoist OAuth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Create and Manage Tasks\n\n**When to use**: User wants to create, update, complete, reopen, or delete tasks\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - List projects to find the target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - List sections within a project for task placement [Optional]\n3. `TODOIST_CREATE_TASK` - Create a single task with content, due date, priority, labels [Required]\n4. `TODOIST_BULK_CREATE_TASKS` - Create multiple tasks in one request [Alternative]\n5. `TODOIST_UPDATE_TASK` - Modify task properties (content, due date, priority, labels) [Optional]\n6. `TODOIST_CLOSE_TASK` - Mark a task as completed [Optional]\n7. `TODOIST_REOPEN_TASK` - Restore a previously completed task [Optional]\n8. `TODOIST_DELETE_TASK` - Permanently remove a task [Optional]\n\n**Key parameters for CREATE_TASK**:\n- `content`: Task title (supports markdown and hyperlinks)\n- `description`: Additional notes (do NOT put due dates here)\n- `project_id`: Alphanumeric project ID; omit to add to Inbox\n- `section_id`: Alphanumeric section ID for placement within a project\n- `parent_id`: Task ID for creating subtasks\n- `priority`: 1 (normal) to 4 (urgent) -- note: Todoist UI shows p1=urgent, API p4=urgent\n- `due_string`: Natural language date like `\"tomorrow at 3pm\"`, `\"every Friday at 9am\"`\n- `due_date`: Specific date `YYYY-MM-DD` format\n- `due_datetime`: Specific date+time in RFC3339 `YYYY-MM-DDTHH:mm:ssZ`\n- `labels`: Array of label name strings\n- `duration` + `duration_unit`: Task duration (e.g., `30` + `\"minute\"`)\n\n**Pitfalls**:\n- Only one `due_*` field can be used at a time (except `due_lang` which can accompany any)\n- Do NOT embed due dates in `content` or `description` -- use `due_string` field\n- Do NOT embed duration phrases like \"for 30 minutes\" in `due_string` -- use `duration` + `duration_unit`\n- `priority` in API: 1=normal, 4=urgent (opposite of Todoist UI display where p1=urgent)\n- Task IDs can be numeric or alphanumeric; use the format returned by the API\n- `CLOSE_TASK` marks complete; `DELETE_TASK` permanently removes -- they are different operations\n\n### 2. Manage Projects\n\n**When to use**: User wants to list, create, update, or inspect projects\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - List all projects with metadata [Required]\n2. `TODOIST_GET_PROJECT` - Get details for a specific project by ID [Optional]\n3. `TODOIST_CREATE_PROJECT` - Create a new project with name, color, view style [Optional]\n4. `TODOIST_UPDATE_PROJECT` - Modify project properties [Optional]\n\n**Key parameters**:\n- `name`: Project name (required for creation)\n- `color`: Todoist palette color (e.g., `\"blue\"`, `\"red\"`, `\"green\"`, `\"charcoal\"`)\n- `view_style`: `\"list\"` or `\"board\"` layout\n- `parent_id`: Parent project ID for creating sub-projects\n- `is_favorite` \u002F `favorite`: Boolean to mark as favorite\n- `project_id`: Required for update and get operations\n\n**Pitfalls**:\n- Projects with similar names can lead to selecting the wrong project_id; always verify\n- `CREATE_PROJECT` uses `favorite` while `UPDATE_PROJECT` uses `is_favorite` -- different field names\n- Use the project `id` returned by API, not the `v2_id`, for downstream operations\n- Alphanumeric\u002FURL-style project IDs may cause HTTP 400 in some tools; use numeric ID if available\n\n### 3. Manage Sections\n\n**When to use**: User wants to organize tasks within projects using sections\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - Find the target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - List existing sections to avoid duplicates [Prerequisite]\n3. `TODOIST_CREATE_SECTION` - Create a new section in a project [Required]\n4. `TODOIST_UPDATE_SECTION` - Rename an existing section [Optional]\n5. `TODOIST_DELETE_SECTION` - Permanently remove a section [Optional]\n\n**Key parameters**:\n- `project_id`: Required -- the project to create the section in\n- `name`: Section name (required for creation)\n- `order`: Integer position within the project (lower values appear first)\n- `section_id`: Required for update and delete operations\n\n**Pitfalls**:\n- `CREATE_SECTION` requires `project_id` and `name` -- omitting project_id causes a 400 error\n- HTTP 400 \"project_id is invalid\" can occur if alphanumeric ID is used; prefer numeric ID\n- Deleting a section may move or regroup its tasks in non-obvious ways\n- Response may include both `id` and `v2_id`; store and reuse the correct identifier consistently\n- Always check existing sections first to avoid creating duplicates\n\n### 4. Search and Filter Tasks\n\n**When to use**: User wants to find tasks by criteria, view today's tasks, or get completed task history\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_TASKS` - Fetch incomplete tasks with optional filter query [Required]\n2. `TODOIST_GET_TASK` - Get full details of a specific task by ID [Optional]\n3. `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE` - Retrieve completed tasks within a date range [Optional]\n4. `TODOIST_LIST_FILTERS` - List user's custom saved filters [Optional]\n\n**Key parameters for GET_ALL_TASKS**:\n- `filter`: Todoist filter syntax string\n  - Keywords: `today`, `tomorrow`, `overdue`, `no date`, `recurring`, `subtask`\n  - Priority: `p1` (urgent), `p2`, `p3`, `p4` (normal)\n  - Projects: `#ProjectName` (must exist in account)\n  - Labels: `@LabelName` (must exist in account)\n  - Date ranges: `7 days`, `-7 days`, `due before: YYYY-MM-DD`, `due after: YYYY-MM-DD`\n  - Search: `search: keyword` for content text search\n  - Operators: `&` (AND), `|` (OR), `!` (NOT)\n- `ids`: List of specific task IDs to retrieve\n\n**Key parameters for GET_COMPLETED_TASKS_BY_COMPLETION_DATE**:\n- `since`: Start date in RFC3339 format (e.g., `2024-01-01T00:00:00Z`)\n- `until`: End date in RFC3339 format\n- `project_id`, `section_id`, `parent_id`: Optional filters\n- `cursor`: Pagination cursor from previous response\n- `limit`: Max results per page (default 50)\n\n**Pitfalls**:\n- `GET_ALL_TASKS` returns ONLY incomplete tasks; use `GET_COMPLETED_TASKS_BY_COMPLETION_DATE` for completed ones\n- Filter terms must reference ACTUAL EXISTING entities; arbitrary text causes HTTP 400 errors\n- Do NOT use `completed`, `!completed`, or `completed after` in GET_ALL_TASKS filter -- causes 400 error\n- `GET_COMPLETED_TASKS_BY_COMPLETION_DATE` limits date range to approximately 3 months between `since` and `until`\n- Search uses `search: keyword` syntax within the filter, not a separate parameter\n\n### 5. Bulk Task Creation\n\n**When to use**: User wants to scaffold a project with multiple tasks at once\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - Find target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - Find section IDs for task placement [Optional]\n3. `TODOIST_BULK_CREATE_TASKS` - Create multiple tasks in a single request [Required]\n\n**Key parameters**:\n- `tasks`: Array of task objects, each requiring at minimum `content`\n- Each task object supports: `content`, `description`, `project_id`, `section_id`, `parent_id`, `priority`, `labels`, `due` (object with `string`, `date`, or `datetime`), `duration`, `order`\n\n**Pitfalls**:\n- Each task in the array must have at least the `content` field\n- The `due` field in bulk create is an object with nested fields (`string`, `date`, `datetime`, `lang`) -- different structure from CREATE_TASK's flat fields\n- All tasks can target different projects\u002Fsections within the same batch\n\n## Common Patterns\n\n### ID Resolution\nAlways resolve human-readable names to IDs before operations:\n- **Project name -> Project ID**: `TODOIST_GET_ALL_PROJECTS`, match by `name` field\n- **Section name -> Section ID**: `TODOIST_GET_ALL_SECTIONS` with `project_id`\n- **Task content -> Task ID**: `TODOIST_GET_ALL_TASKS` with `filter` or `search: keyword`\n\n### Pagination\n- `TODOIST_GET_ALL_TASKS`: Returns all matching incomplete tasks (no pagination needed)\n- `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE`: Uses cursor-based pagination; follow `cursor` from response until no more results\n- `TODOIST_GET_ALL_PROJECTS` and `TODOIST_GET_ALL_SECTIONS`: Return all results (no pagination)\n\n### Due Date Handling\n- Natural language: Use `due_string` (e.g., `\"tomorrow at 3pm\"`, `\"every Monday\"`)\n- Specific date: Use `due_date` in `YYYY-MM-DD` format\n- Specific datetime: Use `due_datetime` in RFC3339 format (`YYYY-MM-DDTHH:mm:ssZ`)\n- Only use ONE due field at a time (except `due_lang` which can accompany any)\n- Recurring tasks: Use natural language in `due_string` (e.g., `\"every Friday at 9am\"`)\n\n## Known Pitfalls\n\n### ID Formats\n- Task IDs can be numeric (`\"2995104339\"`) or alphanumeric (`\"6X4Vw2Hfmg73Q2XR\"`)\n- Project IDs similarly vary; prefer the format returned by the API\n- Some tools accept only numeric IDs; if 400 error occurs, try fetching the numeric `id` via GET_PROJECT\n- Response objects may contain both `id` and `v2_id`; use `id` for API operations\n\n### Priority Inversion\n- API priority: 1 = normal, 4 = urgent\n- Todoist UI display: p1 = urgent, p4 = normal\n- This is inverted; always clarify with the user which convention they mean\n\n### Filter Syntax\n- Filter terms must reference real entities in the user's account\n- `#NonExistentProject` or `@NonExistentLabel` will cause HTTP 400\n- Use `search: keyword` for text search, not bare keywords\n- Combine with `&` (AND), `|` (OR), `!` (NOT)\n- `completed` filters do NOT work on GET_ALL_TASKS endpoint\n\n### Rate Limits\n- Todoist API has rate limits; batch operations should use `BULK_CREATE_TASKS` where possible\n- Space out rapid sequential requests to avoid throttling\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| List all projects | `TODOIST_GET_ALL_PROJECTS` | (none) |\n| Get project | `TODOIST_GET_PROJECT` | `project_id` |\n| Create project | `TODOIST_CREATE_PROJECT` | `name`, `color`, `view_style` |\n| Update project | `TODOIST_UPDATE_PROJECT` | `project_id`, `name`, `color` |\n| List sections | `TODOIST_GET_ALL_SECTIONS` | `project_id` |\n| Create section | `TODOIST_CREATE_SECTION` | `project_id`, `name`, `order` |\n| Update section | `TODOIST_UPDATE_SECTION` | `section_id`, `name` |\n| Delete section | `TODOIST_DELETE_SECTION` | `section_id` |\n| Get all tasks | `TODOIST_GET_ALL_TASKS` | `filter`, `ids` |\n| Get task | `TODOIST_GET_TASK` | `task_id` |\n| Create task | `TODOIST_CREATE_TASK` | `content`, `project_id`, `due_string`, `priority` |\n| Bulk create tasks | `TODOIST_BULK_CREATE_TASKS` | `tasks` (array) |\n| Update task | `TODOIST_UPDATE_TASK` | `task_id`, `content`, `due_string` |\n| Complete task | `TODOIST_CLOSE_TASK` | `task_id` |\n| Reopen task | `TODOIST_REOPEN_TASK` | `task_id` |\n| Delete task | `TODOIST_DELETE_TASK` | `task_id` |\n| Completed tasks | `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE` | `since`, `until` |\n| List filters | `TODOIST_LIST_FILTERS` | `sync_token` |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":48,"source":33,"requires":49,"description":7},"unknown",{"mcp":50},[51],"rube","master","dff58085da947e81e8418c922055644bf0082b1b","automation\u002Ftodoist-automation","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills","https:\u002F\u002Fgithub.com\u002Freikiplanet","https:\u002F\u002Fwww.reiki-planet.com","Reiki Planet Game","2026-03-29 06:02:29",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add reikiplanet\u002Fdaoskills --skill todoist-automation",{"tool":66,"command":67},"bunx","bunx skills add reikiplanet\u002Fdaoskills --skill todoist-automation",{"tool":69,"command":70},"pnpm","pnpm dlx skills add reikiplanet\u002Fdaoskills --skill todoist-automation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fautomation\u002Ftodoist-automation\u002FSKILL.md",true,[],[75,101,113,127,147,170],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":43},"01M6G614JTEQJHPT8AKK3YQ18S","web-games","Web browser game development principles. Framework selection, WebGPU, optimization, PWA.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fweb-games\u002FSKILL.md",[],[82,83,84,85,86,87,33,88,89,90,91,92,93,94,95,96,97,98,99,100],"games","web games","web","grep","principles","selection","framework selection","edit","write","read","pwa","game","web browser","game development","Optimization","framework","browser","development","webgpu",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":43},"01M6G611H2YGV0GZFP90D38ZMJ","vr-ar","VR\u002FAR development principles. Comfort, interaction, performance requirements.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fvr-ar\u002FSKILL.md",[],[108,109,99,110,111,33,89,90,91,85,112,86],"ar","vr ar","interaction","requirements","performance",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":43},"01M6G60XNMHAMV1SV0EJ1CX0AY","templates","Project scaffolding templates for new applications. Use when creating new projects from scratch. Contains 12 templates for various tech stacks.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Ftemplates\u002FSKILL.md",[],[115,120,121,122,123,124,33,125,91,39,126,85],"project scaffolding","From Scratch","tech","project","scaffolding","use","applications",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":43},"01M6G60T0GATMK3Q5H8GDC1Z8S","wcag-audit-patterns","Conduct WCAG 2.2 accessibility audits with automated testing, manual verification, and remediation guidance. Use when auditing websites for accessibility, fixing WCAG violations, or implementing ac...","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fwcag-audit-patterns\u002FSKILL.md",[],[134,135,136,137,138,33,139,140,141,142,125,143,144,145,146],"wcag audit patterns","wcag audit","patterns","WCAG","audit","manual","with","automated testing","guidance","remediation","verification","accessibility","testing",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":43},"01M6G60PMCHW1FRZ63F931QK3R","vulnerability-scanner","Advanced vulnerability analysis principles. OWASP 2025, Supply Chain Security, attack surface mapping, risk prioritization.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fvulnerability-scanner\u002FSKILL.md",[],[154,155,156,157,158,159,160,161,33,91,85,162,86,163,164,165,166,167,168,169],"scanner","vulnerability scanner","vulnerability","prioritization","2025","mapping","chain","supply chain","Bash","analysis","risk","owasp","supply chain security","security","supply","advanced",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":176,"publishedAt":43},"01M6G60JZBB8DK0W3DSG1WNMZK","threat-modeling-expert","Expert in threat modeling methodologies, security architecture review, and risk assessment. Masters STRIDE, PASTA, attack trees, and security requirement extraction. Use for security architecture r...","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fthreat-modeling-expert\u002FSKILL.md",[],[177,178,179,180,181,182,183,184,167,125,185,186,187,33,188,189,190,164,191,192],"modeling","threat modeling expert","threat modeling","expert","threat","risk assessment","architecture review","architecture","security architecture review","trees","security architecture","security requirement extraction","assessment","extraction","review","stride"]